/* Delete entries from a tar archive.
- Copyright (C) 1988, 1992, 1994, 1996, 1997, 2000, 2001, 2003 Free
- Software Foundation, Inc.
+ Copyright (C) 1988, 1992, 1994, 1996, 1997, 2000, 2001, 2003, 2004,
+ 2005, 2006 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
- Free Software Foundation; either version 2, or (at your option) any later
+ Free Software Foundation; either version 3, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#include <system.h>
+#include <system-ioctl.h>
#include "common.h"
#include <rmt.h>
extern union block *current_block;
extern union block *recent_long_name;
extern union block *recent_long_link;
-extern off_t records_read;
+extern off_t records_read;
extern off_t records_written;
/* The number of records skipped at the start of the archive, when
passing over members that are not deleted. */
-static off_t records_skipped;
+off_t records_skipped;
/* Move archive descriptor by COUNT records worth. If COUNT is
positive we move forward, else we move negative. If it's a tape,
abort ();
case HEADER_SUCCESS:
- if ((name = name_scan (current_stat_info.file_name, false)) == NULL)
+ if ((name = name_scan (current_stat_info.file_name)) == NULL)
{
skip_member ();
break;
skip_member ();
break;
}
-
+
/* Fall through. */
case HEADER_SUCCESS_EXTENDED:
logical_status = status;
if (current_block == record_end)
flush_archive ();
status = read_header (false);
-
+
xheader_decode (¤t_stat_info);
-
+
if (status == HEADER_ZERO_BLOCK && ignore_zeros_option)
{
set_next_block_after (current_header);
/* Found another header. */
- if ((name = name_scan (current_stat_info.file_name, false)) != NULL)
+ if ((name = name_scan (current_stat_info.file_name)) != NULL)
{
name->found_count++;
if (ISFOUND(name))
set_next_block_after (current_header);
blocks_to_skip = (current_stat_info.stat.st_size
+ BLOCKSIZE - 1) / BLOCKSIZE;
-
+
while (record_end - current_block <= blocks_to_skip)
{
blocks_to_skip -= (record_end - current_block);
}
/* Copy header. */
- if (extended_header.size)
+ if (current_stat_info.xhdr.size)
{
- write_recent_bytes (extended_header.buffer,
- extended_header.size);
+ write_recent_bytes (current_stat_info.xhdr.buffer,
+ current_stat_info.xhdr.size);
}
else
{