make mkfs and mkext use 64-bit file sizes and seek offsets. Reference: /n/sources/patch/applied/64-bit-mkext-mkfs Date: Wed Feb 9 07:53:04 CET 2005 --- /sys/src/cmd/disk/mkext.c Wed Feb 9 07:52:02 2005 +++ /sys/src/cmd/disk/mkext.c Wed Feb 9 07:52:00 2005 @@ -10,8 +10,8 @@ int selected(char*, int, char*[]); void mkdirs(char*, char*); void mkdir(char*, ulong, ulong, char*, char*); -void extract(char*, ulong, ulong, char*, char*, ulong); -void seekpast(ulong); +void extract(char*, ulong, ulong, char*, char*, uvlong); +void seekpast(uvlong); void error(char*, ...); void warn(char*, ...); void usage(void); @@ -32,7 +32,8 @@ Biobuf bout; char *fields[NFLDS], name[2*LEN], *p, *namep; char *uid, *gid; - ulong mode, bytes, mtime; + ulong mode, mtime; + uvlong bytes; quotefmtinstall(); namep = name; @@ -83,7 +84,7 @@ uid = fields[2]; gid = fields[3]; mtime = strtoul(fields[4], 0, 10); - bytes = strtoul(fields[5], 0, 10); + bytes = strtoull(fields[5], 0, 10); if(argc){ if(!selected(namep, argc, argv)){ if(bytes) @@ -93,7 +94,7 @@ mkdirs(name, namep); } if(hflag){ - Bprint(&bout, "%q %luo %q %q %lud %lud\n", + Bprint(&bout, "%q %luo %q %q %lud %llud\n", name, mode, uid, gid, mtime, bytes); if(bytes) seekpast(bytes); @@ -200,16 +201,17 @@ } void -extract(char *name, ulong mode, ulong mtime, char *uid, char *gid, ulong bytes) +extract(char *name, ulong mode, ulong mtime, char *uid, char *gid, uvlong bytes) { Dir d, *nd; Biobuf *b; char buf[LEN]; char *p; - ulong n, tot; + ulong n; + uvlong tot; if(vflag) - print("x %q %lud bytes\n", name, bytes); + print("x %q %llud bytes\n", name, bytes); b = Bopen(name, OWRITE); if(!b){ @@ -250,11 +252,14 @@ warn("can't reread modes for %q: %r", name); else{ if(Tflag && nd->mtime != mtime) - warn("%q: time mismatch %lud %lud\n", name, mtime, nd->mtime); + warn("%q: time mismatch %lud %lud\n", + name, mtime, nd->mtime); if(uflag && strcmp(uid, nd->uid)) - warn("%q: uid mismatch %q %q", name, uid, nd->uid); + warn("%q: uid mismatch %q %q", + name, uid, nd->uid); if(uflag && strcmp(gid, nd->gid)) - warn("%q: gid mismatch %q %q", name, gid, nd->gid); + warn("%q: gid mismatch %q %q", + name, gid, nd->gid); free(nd); } } @@ -262,10 +267,11 @@ } void -seekpast(ulong bytes) +seekpast(uvlong bytes) { char buf[LEN]; - ulong tot, n; + ulong n; + uvlong tot; for(tot = 0; tot < bytes; tot += n){ n = sizeof buf; --- /sys/src/cmd/disk/mkfs.c Wed Feb 9 07:52:14 2005 +++ /sys/src/cmd/disk/mkfs.c Wed Feb 9 07:52:11 2005 @@ -345,7 +345,7 @@ copy(Dir *d) { char cptmp[LEN], *p; - long tot; + vlong tot; int f, t, n, needwrite; Dir nd; @@ -399,7 +399,7 @@ error("can't write zero at end of %q: %r", newfile); } if(tot != d->length){ - warn("wrong number bytes written to %q (was %d should be %d)\n", + warn("wrong number bytes written to %q (was %lld should be %lld)\n", newfile, tot, d->length); if(fskind == Archive){ warn("seeking to proper position\n");