[hackers] [sbase] tar: Skip over data before processing the next entry || sin

From: <git_AT_suckless.org>
Date: Thu, 23 Apr 2015 00:24:45 +0200 (CEST)

commit 7a0d9fb3eaa85f8dec5ba5e3bd6ecee681ab2816
Author: sin <sin_AT_2f30.org>
Date: Wed Apr 22 23:22:07 2015 +0100

    tar: Skip over data before processing the next entry
    
    When we selectively process entries from the archive, ensure that
    we jump over the data section of each uninteresting entry before going
    on to process the next entry. Not doing so, leaves the file stream
    pointer in the wrong place.

diff --git a/tar.c b/tar.c
index ccecff9..b2a4d9f 100644
--- a/tar.c
+++ b/tar.c
_AT_@ -323,17 +323,22 @@ xt(int argc, char *argv[], int (*fn)(char *, ssize_t, char[BLKSIZ]))
                 snprintf(fname + n, sizeof(fname) - n, "%.*s",
                          (int)sizeof(h->name), h->name);
 
+ if ((size = strtol(h->size, &p, 8)) < 0 || *p != '\0')
+ eprintf("strtol %s: invalid number\n", h->size);
+
                 if (argc) {
                         /* only extract the given files */
                         for (i = 0; i < argc; i++)
                                 if (!strcmp(argv[i], fname))
                                         break;
- if (i == argc)
+ if (i == argc) {
+ for (; size > 0; size -= BLKSIZ)
+ if (fread(b, BLKSIZ, 1, tarfile) != 1)
+ eprintf("fread %s:", tarfilename);
                                 continue;
+ }
                 }
 
- if ((size = strtol(h->size, &p, 8)) < 0 || *p != '\0')
- eprintf("strtol %s: invalid number\n", h->size);
                 fn(fname, size, b);
         }
         if (ferror(tarfile))
Received on Thu Apr 23 2015 - 00:24:45 CEST

This archive was generated by hypermail 2.3.0 : Thu Apr 23 2015 - 00:36:30 CEST