summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--appl/cmd/tarfs.b18
-rw-r--r--dis/tarfs.disbin6128 -> 6160 bytes
-rw-r--r--include/version.h2
4 files changed, 12 insertions, 10 deletions
diff --git a/CHANGES b/CHANGES
index 1baca205..bc82dd75 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+20090524
+ appl/cmd/tarfs.b dis/tarfs.dis - remove accidentally small limit on file size in tar file (issue 172)
20090521
module/vac.m appl/cmd/vacfs.b appl/lib/vac.b [issue 152] (Mecchiel)
20090505
diff --git a/appl/cmd/tarfs.b b/appl/cmd/tarfs.b
index 2e0b6473..b0ec5add 100644
--- a/appl/cmd/tarfs.b
+++ b/appl/cmd/tarfs.b
@@ -329,7 +329,7 @@ readtar(fd: ref Sys->FD): int
if(buf[0] == byte 0)
break;
offset += big Blocksize;
- mode := octal(buf[Omode:Ouid]);
+ mode := int octal(buf[Omode:Ouid]);
linkflag := int buf[Olinkflag];
# don't use linkname
if((mode & 8r170000) == 8r40000)
@@ -352,15 +352,15 @@ readtar(fd: ref Sys->FD): int
f.name = f.name[:len f.name-1];
}
f.mode = mode;
- f.uid = octal(buf[Ouid:Ogid]);
- f.gid = octal(buf[Ogid:Osize]);
- f.length = big octal(buf[Osize:Omtime]);
+ f.uid = int octal(buf[Ouid:Ogid]);
+ f.gid = int octal(buf[Ogid:Osize]);
+ f.length = octal(buf[Osize:Omtime]);
if(f.length < big 0)
error(sys->sprint("tar file size is negative: %s", f.name));
if(mode & Sys->DMDIR)
f.length = big 0;
- f.mtime = octal(buf[Omtime:Ochksum]);
- sum := octal(buf[Ochksum:Olinkflag]);
+ f.mtime = int octal(buf[Omtime:Ochksum]);
+ sum := int octal(buf[Ochksum:Olinkflag]);
if(sum != checksum(buf))
error(sys->sprint("checksum error on %s", f.name));
f.offset = offset;
@@ -384,16 +384,16 @@ ascii(b: array of byte): string
return string b[0:i];
}
-octal(b: array of byte): int
+octal(b: array of byte): big
{
- v := 0;
+ v := big 0;
for(i := 0; i < len b && b[i] == byte ' '; i++)
;
for(; i < len b && b[i] != byte 0 && b[i] != byte ' '; i++){
c := int b[i];
if(!(c >= '0' && c <= '7'))
error(sys->sprint("bad octal value in tar header: %s (%c)", string b, c));
- v = (v<<3) | (c-'0');
+ v = (v<<3) | big (c-'0');
}
return v;
}
diff --git a/dis/tarfs.dis b/dis/tarfs.dis
index d1aea076..ea65044a 100644
--- a/dis/tarfs.dis
+++ b/dis/tarfs.dis
Binary files differ
diff --git a/include/version.h b/include/version.h
index 53af6fe0..43143948 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1 +1 @@
-#define VERSION "Fourth Edition (20090521)"
+#define VERSION "Fourth Edition (20090524)"