From 3026c25847a8b42ea16a4f102a03b248068b3674 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Thu, 27 Jan 2005 18:09:59 +0100
Subject: [PATCH] Fixed support for tar on AIX 5L/ia64.

Rev: bin/tarfilter.pike:1.12
---
 bin/tarfilter.pike | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/bin/tarfilter.pike b/bin/tarfilter.pike
index d45890fd31..b1393e622b 100755
--- a/bin/tarfilter.pike
+++ b/bin/tarfilter.pike
@@ -30,7 +30,7 @@ void doit(Stdio.File in, Stdio.File out)
     }
     if(s == "\0"*512) {
       written += out->write(s);
-      continue;
+      break;
     }
     array a =
       array_sscanf(s, "%100s%8s%8s%8s%12s%12s%8s%c%100s%8s%32s%32s%8s%8s");
@@ -38,9 +38,12 @@ void doit(Stdio.File in, Stdio.File out)
     sscanf(a[1], "%o", perm);
     sscanf(a[4], "%o", size);
     sscanf(a[6], "%o", csum);
+    //werror("%O (%d bytes, 0%03o) csum:%d\n", a[0], size, perm, csum);
     s=s[..147]+"        "+s[156..];
     if(`+(@values(s[..511])) != csum) {
-      werror("CHECKSUM ERROR on input!\n");
+      werror("CHECKSUM ERROR on input (got %d, expected %d(%s))!\n",
+	     `+(@values(s[..511])), csum, a[6]);
+      werror("%{  %{%02x %}\n%}", ({(((array)s)/16)[*]}));
       exit(1);
     }
     /* Normalize the permission flags. */
@@ -63,6 +66,17 @@ void doit(Stdio.File in, Stdio.File out)
     copydata(in, out, size);
     written += size;
   }
+  // tar on AIX 5L 5.1.0.0/ia64 pads with junk
+  for(;;) {
+    string s = in->read(512);
+    if(s == "")
+      break;
+    if(sizeof(s) != 512) {
+      werror("READ ERROR on input\n");
+      exit(1);
+    }
+    written += out->write("\0"*512);
+  }
   // GNU tar 1.14 complains if we don't pad to an even 20 of blocks.
   if (written % 10240) {
     out->write("\0" * (10240 - (written % 10240)));
-- 
GitLab