#include #include #include #include "cram.h" void usage(void) { fprint(2, "usage: %s [-d] file offset\n", argv0); exits("usage"); } void main(int argc, char **argv) { int dironly; Biobuf *disk; Dentry dir, f; int i, n; dironly = 0; ARGBEGIN { case 'd': dironly++; break; default: usage(); } ARGEND; if(argc != 2) usage(); if((disk = Bopen(argv[0], OREAD)) == nil) sysfatal("open: %r"); if(readdentry(disk, &dir, atoll(argv[1])) < 0) sysfatal("read dentry: %r"); printdentry("", &dir); if(dironly) exits(nil); for(i=0; i < dir.length; i+=n) { if((n = readdentry(disk, &f, dir.data + i)) < 0) print("read f %#llx: %r\n", dir.data + i); else { print(" %d ", n); printdentry(" ", &f); } } exits(nil); }