X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmangle.c;h=985847f73274dc0f2c7ea1977c47abafbf1feabc;hb=6dccec3ba45c8c5052be0dacb7c4766662ed30fc;hp=03377dc66df0f96fe279a8ccffb64b8e1e805f3d;hpb=a4f7f5bcc6c027b22c409ffad0410a8d55d0a305;p=chaz%2Ftar diff --git a/src/mangle.c b/src/mangle.c index 03377dc..985847f 100644 --- a/src/mangle.c +++ b/src/mangle.c @@ -1,5 +1,5 @@ /* Encode long filenames for GNU tar. - Copyright (C) 1988, 1992, 1994, 1996, 1997 Free Software Foundation, Inc. + Copyright 1988, 1992, 1994, 1996, 1997, 1999 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -13,7 +13,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., - 59 Place - Suite 330, Boston, MA 02111-1307, USA. */ + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "system.h" @@ -44,17 +44,20 @@ int mangled_num = 0; void extract_mangle (void) { - int size = current_stat.st_size; + off_t size = current_stat.st_size; char *buffer = xmalloc ((size_t) (size + 1)); char *copy = buffer; char *cursor = buffer; + if (size != (size_t) size || size == (size_t) -1) + FATAL_ERROR ((0, 0, _("Memory exhausted"))); + buffer[size] = '\0'; while (size > 0) { union block *block = find_next_block (); - int available; + size_t available; if (!block) { @@ -64,7 +67,7 @@ extract_mangle (void) available = available_space_after (block); if (available > size) available = size; - memcpy (copy, block->buffer, (size_t) available); + memcpy (copy, block->buffer, available); copy += available; size -= available; set_next_block_after ((union block *) (block->buffer + available - 1)); @@ -98,7 +101,7 @@ extract_mangle (void) else if (verbose_option) WARN ((0, 0, _("Renamed %s to %s"), name, name_end + 4)); } -#ifdef S_ISLNK +#ifdef HAVE_SYMLINK else if (!strncmp (cursor, "Symlink ", 8)) { name = cursor + 8;