/* 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
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"
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)
{
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));
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;