#include #include #include #include #include "tapefs.h" /* * File system for cpio tapes (read-only) */ #define TBLOCK 512 #define NBLOCK 40 /* maximum blocksize */ #define DBLOCK 20 /* default blocksize */ #define TNAMSIZ 100 union hblock { char dummy[TBLOCK]; char tbuf[Maxbuf]; struct header { char magic[6]; char dev[6]; char ino[6]; char mode[6]; char uid[6]; char gid[6]; char nlink[6]; char rdev[6]; char mtime[11]; char namesize[6]; char size[11]; } dbuf; struct hname { struct header x; char name[1]; } nbuf; } dblock; int tapefile; vlong getoct(char*, int); void populate(char *name) { vlong offset; long isabs, magic, namesize, mode; Fileinf f; tapefile = open(name, OREAD); if (tapefile<0) error("Can't open argument file"); replete = 1; for (offset = 0;;) { seek(tapefile, offset, 0); if (read(tapefile, (char *)&dblock.dbuf, TBLOCK)0; p++, l--){ r <<= 3; r += *p-'0'; } return r; } void dotrunc(Ram *r) { USED(r); } void docreate(Ram *r) { USED(r); } char * doread(Ram *r, vlong off, long cnt) { seek(tapefile, r->addr+off, 0); if (cnt>sizeof(dblock.tbuf)) error("read too big"); read(tapefile, dblock.tbuf, cnt); return dblock.tbuf; } void popdir(Ram *r) { USED(r); } void dowrite(Ram *r, char *buf, long off, long cnt) { USED(r); USED(buf); USED(off); USED(cnt); } int dopermw(Ram *r) { USED(r); return 0; }