[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-tar] Re: tar 1.15 released
From: |
Sergey Poznyakoff |
Subject: |
[Bug-tar] Re: tar 1.15 released |
Date: |
Tue, 21 Dec 2004 12:02:53 +0200 |
Ralf S. Engelschall <address@hidden> wrote:
> Here it comes:
[...]
Thank you. Please try the following patch. Does it work for you?
Regards,
Sergey
Index: src/buffer.c
===================================================================
RCS file: /cvsroot/tar/tar/src/buffer.c,v
retrieving revision 1.73
diff -p -u -r1.73 buffer.c
--- src/buffer.c 26 Nov 2004 19:08:58 -0000 1.73
+++ src/buffer.c 21 Dec 2004 09:55:29 -0000
@@ -180,29 +180,21 @@ static struct zip_magic magic[] = {
/* Check if the file FD is a compressed archive. FD is guaranteed to
represent a local file */
enum compress_type
-check_compressed_archive (int fd)
+check_compressed_archive ()
{
struct zip_magic *p;
size_t status;
union block buf;
-
- status = read (fd, &buf, sizeof buf);
- if (status != sizeof buf)
- {
- archive_read_error ();
- FATAL_ERROR ((0, 0, _("Quitting now.")));
- }
- lseek (fd, 0, SEEK_SET); /* This will fail if fd==0, but that does not
- matter, since we do not handle compressed
- stdin anyway */
-
- if (tar_checksum (&buf) == HEADER_SUCCESS)
+ record_end = record_start; /* set up for 1st record = # 0 */
+ find_next_block ();
+
+ if (tar_checksum (record_start) == HEADER_SUCCESS)
/* Probably a valid header */
return ct_none;
for (p = magic + 1; p < magic + NMAGIC; p++)
- if (memcmp (buf.buffer, p->magic, p->length) == 0)
+ if (memcmp (record_start->buffer, p->magic, p->length) == 0)
return p->type;
return ct_none;
@@ -215,24 +207,17 @@ int
open_compressed_archive ()
{
enum compress_type type;
+
int fd = rmtopen (archive_name_array[0], O_RDONLY | O_BINARY,
MODE_RW, rsh_command_option);
if (fd == -1 || _isrmt (fd))
return fd;
-
- type = check_compressed_archive (fd);
+
+ archive = fd;
+ type = check_compressed_archive ();
if (type == ct_none)
- {
- if (rmtlseek (fd, (off_t) 0, SEEK_CUR) != 0)
- {
- /* Archive may be not seekable. Reopen it. */
- rmtclose (fd);
- fd = rmtopen (archive_name_array[0], O_RDONLY | O_BINARY,
- MODE_RW, rsh_command_option);
- }
- return fd;
- }
+ return fd;
/* FD is not needed any more */
rmtclose (fd);
@@ -242,6 +227,9 @@ open_compressed_archive ()
child_pid = sys_child_open_for_uncompress ();
read_full_records = reading_from_pipe = true;
+ records_read = 0;
+ record_end = record_start; /* set up for 1st record = # 0 */
+
return archive;
}
@@ -408,6 +396,8 @@ open_archive (enum access_mode wanted_ac
read_full_records = read_full_records_option;
reading_from_pipe = false;
+ records_read = 0;
+
if (use_compress_program_option)
{
switch (wanted_access)
@@ -415,6 +405,7 @@ open_archive (enum access_mode wanted_ac
case ACCESS_READ:
child_pid = sys_child_open_for_uncompress ();
read_full_records = reading_from_pipe = true;
+ record_end = record_start; /* set up for 1st record = # 0 */
break;
case ACCESS_WRITE:
@@ -509,9 +500,9 @@ open_archive (enum access_mode wanted_ac
{
case ACCESS_UPDATE:
records_written = 0;
- case ACCESS_READ:
- records_read = 0;
record_end = record_start; /* set up for 1st record = # 0 */
+
+ case ACCESS_READ:
find_next_block (); /* read it in, check for EOF */
if (volume_label_option)
- [Bug-tar] tar 1.15 released, Sergey Poznyakoff, 2004/12/20
- [Bug-tar] Re: tar 1.15 released, Ralf S. Engelschall, 2004/12/21
- [Bug-tar] Re: tar 1.15 released, Sergey Poznyakoff, 2004/12/21
- [Bug-tar] Re: tar 1.15 released, Ralf S. Engelschall, 2004/12/21
- [Bug-tar] Re: tar 1.15 released,
Sergey Poznyakoff <=
- [Bug-tar] Re: tar 1.15 released, Ralf S. Engelschall, 2004/12/21
- [Bug-tar] .... illegal C code....., Joerg Schilling, 2004/12/23
- Re: [Bug-tar] .... illegal C code....., Paul Eggert, 2004/12/24
- Re: [Bug-tar] .... illegal C code....., Joerg Schilling, 2004/12/24
- Re: [Bug-tar] .... illegal C code....., Paul Eggert, 2004/12/25