tsbase: reformat tar patch - mkports - recipes for building multiple softwares with mk(1)
 (HTM) git clone git://z3bra.org/mkports
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) commit 86376d5ae0a235ecbab20fa55533993672c9c7b9
 (DIR) parent b77b5713dfea1112e46171c4187e1cd6138c1281
 (HTM) Author: z3bra <contactatz3bradotorg>
       Date:   Wed, 15 Feb 2017 22:33:37 +0000
       
       sbase: reformat tar patch
       
       Diffstat:
         D sbase/patches/sbase-tarformaterror… |      72 -------------------------------
         D sbase/patches/sbase-tarreadall-201… |      30 ------------------------------
         A sbase/patches/tar-various-fixes.di… |      99 +++++++++++++++++++++++++++++++
       
       3 files changed, 99 insertions(+), 102 deletions(-)
       ---
 (DIR) diff --git a/sbase/patches/sbase-tarformaterrors-20170203-3bc2ffc.diff b/sbase/patches/sbase-tarformaterrors-20170203-3bc2ffc.diff
       t@@ -1,72 +0,0 @@
       -diff --git a/tar.c b/tar.c
       -index 71719b0..4a81f8f 100644
       ---- a/tar.c
       -+++ b/tar.c
       -@@ -29,6 +29,12 @@ enum Type {
       -         RESERVED  = '7'
       - };
       - 
       -+enum Error {
       -+        BADCHKSUM,
       -+        BADMAGIC,
       -+        BADPATH
       -+};
       -+
       - struct header {
       -         char name[100];
       -         char mode[8];
       -@@ -71,6 +77,12 @@ static const char *filtertools[] = {
       -         ['z'] = "gzip",
       - };
       - 
       -+static const char *errors[] = {
       -+        [BADCHKSUM] = "bad checksum",
       -+        [BADMAGIC]  = "bad magic",
       -+        [BADPATH]   = "empty filename"
       -+};
       -+
       - static void
       - pushdirtime(char *name, time_t mtime)
       - {
       -@@ -407,27 +419,36 @@ chktar(struct header *h)
       -         char tmp[8], *err;
       -         char *p = (char *)h;
       -         long s1, s2, i;
       -+        int errnum;
       - 
       --        if (h->prefix[0] == '\0' && h->name[0] == '\0')
       -+        if (h->prefix[0] == '\0' && h->name[0] == '\0') {
       -+                errnum = BADPATH;
       -                 goto bad;
       --        if (h->magic[0] && strncmp("ustar", h->magic, 5))
       -+        }
       -+        if (h->magic[0] && strncmp("ustar", h->magic, 5)) {
       -+                errnum = BADMAGIC;
       -                 goto bad;
       -+        }
       -         memcpy(tmp, h->chksum, sizeof(tmp));
       -         for (i = 0; i < sizeof(tmp); i++)
       -                 if (tmp[i] == ' ')
       -                         tmp[i] = '\0';
       -         s1 = strtol(tmp, &err, 8);
       --        if (s1 < 0 || *err != '\0')
       -+        if (s1 < 0 || *err != '\0') {
       -+                errnum = BADCHKSUM;
       -                 goto bad;
       -+        }
       -         memset(h->chksum, ' ', sizeof(h->chksum));
       -         for (i = 0, s2 = 0; i < sizeof(*h); i++)
       -                 s2 += (unsigned char)p[i];
       --        if (s1 != s2)
       -+        if (s1 != s2) {
       -+                errnum = BADCHKSUM;
       -                 goto bad;
       -+        }
       -         memcpy(h->chksum, tmp, sizeof(h->chksum));
       -         return;
       - bad:
       --        eprintf("malformed tar archive\n");
       -+        eprintf("malformed tar archive: %s\n", errors[errnum]);
       - }
       - 
       - static void
 (DIR) diff --git a/sbase/patches/sbase-tarreadall-20170203-3bc2ffc.diff b/sbase/patches/sbase-tarreadall-20170203-3bc2ffc.diff
       t@@ -1,30 +0,0 @@
       -diff --git a/tar.c b/tar.c
       -index 4a81f8f..ca2c2af 100644
       ---- a/tar.c
       -+++ b/tar.c
       -@@ -155,16 +155,21 @@ decomp(int fd, const char *tool, const char *flags)
       - static ssize_t
       - eread(int fd, void *buf, size_t n)
       - {
       --        ssize_t r;
       -+        char *tmp = buf;
       -+        ssize_t r, s = 0;
       - 
       - again:
       --        r = read(fd, buf, n);
       -+        r = read(fd, tmp + s, n - s);
       -+        s += r;
       -         if (r < 0) {
       --                if (errno == EINTR)
       -+                if (errno == EINTR || errno == EAGAIN)
       -                         goto again;
       -                 eprintf("read:");
       -         }
       --        return r;
       -+        if (r && s < n)
       -+                goto again;
       -+
       -+        return s;
       - }
       - 
       - static ssize_t
 (DIR) diff --git a/sbase/patches/tar-various-fixes.diff b/sbase/patches/tar-various-fixes.diff
       t@@ -0,0 +1,99 @@
       +diff --git a/tar.c b/tar.c
       +index 71719b0..5954047 100644
       +--- a/tar.c
       ++++ b/tar.c
       +@@ -29,6 +30,12 @@ enum Type {
       +         RESERVED  = '7'
       + };
       + 
       ++enum Error {
       ++        BADCHKSUM,
       ++        BADMAGIC,
       ++        BADPATH
       ++};
       ++
       + struct header {
       +         char name[100];
       +         char mode[8];
       +@@ -71,6 +78,12 @@ static const char *filtertools[] = {
       +         ['z'] = "gzip",
       + };
       + 
       ++static const char *errors[] = {
       ++        [BADCHKSUM] = "bad checksum",
       ++        [BADMAGIC]  = "bad magic",
       ++        [BADPATH]   = "empty filename"
       ++};
       ++
       + static void
       + pushdirtime(char *name, time_t mtime)
       + {
       +@@ -143,16 +156,22 @@ decomp(int fd, const char *tool, const char *flags)
       + static ssize_t
       + eread(int fd, void *buf, size_t n)
       + {
       +-        ssize_t r;
       ++        char *tmp = buf;
       ++        ssize_t r, s = 0;
       + 
       + again:
       +-        r = read(fd, buf, n);
       ++        r = read(fd, tmp + s, n - s);
       +         if (r < 0) {
       +-                if (errno == EINTR)
       ++                if (errno == EINTR || errno == EAGAIN)
       +                         goto again;
       +                 eprintf("read:");
       +         }
       +-        return r;
       ++
       ++        s += r;
       ++        if (r && s < n)
       ++                goto again;
       ++
       ++        return s;
       + }
       + 
       + static ssize_t
       +@@ -407,27 +427,36 @@ chktar(struct header *h)
       +         char tmp[8], *err;
       +         char *p = (char *)h;
       +         long s1, s2, i;
       ++        int errnum;
       + 
       +-        if (h->prefix[0] == '\0' && h->name[0] == '\0')
       ++        if (h->prefix[0] == '\0' && h->name[0] == '\0') {
       ++                errnum = BADPATH;
       +                 goto bad;
       +-        if (h->magic[0] && strncmp("ustar", h->magic, 5))
       ++        }
       ++        if (h->magic[0] && strncmp("ustar", h->magic, 5)) {
       ++                errnum = BADMAGIC;
       +                 goto bad;
       ++        }
       +         memcpy(tmp, h->chksum, sizeof(tmp));
       +         for (i = 0; i < sizeof(tmp); i++)
       +                 if (tmp[i] == ' ')
       +                         tmp[i] = '\0';
       +         s1 = strtol(tmp, &err, 8);
       +-        if (s1 < 0 || *err != '\0')
       ++        if (s1 < 0 || *err != '\0') {
       ++                errnum = BADCHKSUM;
       +                 goto bad;
       ++        }
       +         memset(h->chksum, ' ', sizeof(h->chksum));
       +         for (i = 0, s2 = 0; i < sizeof(*h); i++)
       +                 s2 += (unsigned char)p[i];
       +-        if (s1 != s2)
       ++        if (s1 != s2) {
       ++                errnum = BADCHKSUM;
       +                 goto bad;
       ++        }
       +         memcpy(h->chksum, tmp, sizeof(h->chksum));
       +         return;
       + bad:
       +-        eprintf("malformed tar archive\n");
       ++        eprintf("malformed tar archive: %s\n", errors[errnum]);
       + }
       + 
       + static void