| typedef struct Ioclust Ioclust; |
| typedef struct Iobuf Iobuf; |
| typedef struct Isofile Isofile; |
| typedef struct Xdata Xdata; |
| typedef struct Xfile Xfile; |
| typedef struct Xfs Xfs; |
| typedef struct Xfsub Xfsub; |
| |
| #pragma incomplete Isofile |
| |
| enum |
| { |
| Sectorsize = 2048, |
| Maxname = 256, |
| }; |
| |
| struct Iobuf |
| { |
| Ioclust* clust; |
| long addr; |
| uchar* iobuf; |
| }; |
| |
| struct Ioclust |
| { |
| long addr; /* in sectors; good to 8TB */ |
| Xdata* dev; |
| Ioclust* next; |
| Ioclust* prev; |
| int busy; |
| int nbuf; |
| Iobuf* buf; |
| uchar* iobuf; |
| }; |
| |
| struct Xdata |
| { |
| Xdata* next; |
| char* name; /* of underlying file */ |
| Qid qid; |
| short type; |
| short fdev; |
| int ref; /* attach count */ |
| int dev; /* for read/write */ |
| }; |
| |
| struct Xfsub |
| { |
| void (*reset)(void); |
| int (*attach)(Xfile*); |
| void (*clone)(Xfile*, Xfile*); |
| void (*walkup)(Xfile*); |
| void (*walk)(Xfile*, char*); |
| void (*open)(Xfile*, int); |
| void (*create)(Xfile*, char*, long, int); |
| long (*readdir)(Xfile*, uchar*, long, long); |
| long (*read)(Xfile*, char*, vlong, long); |
| long (*write)(Xfile*, char*, vlong, long); |
| void (*clunk)(Xfile*); |
| void (*remove)(Xfile*); |
| void (*stat)(Xfile*, Dir*); |
| void (*wstat)(Xfile*, Dir*); |
| }; |
| |
| struct Xfs |
| { |
| Xdata* d; /* how to get the bits */ |
| Xfsub* s; /* how to use them */ |
| int ref; |
| int issusp; /* follows system use sharing protocol */ |
| long suspoff; /* if so, offset at which SUSP area begins */ |
| int isrock; /* Rock Ridge format */ |
| int isplan9; /* has Plan 9-specific directory info */ |
| Qid rootqid; |
| Isofile* ptr; /* private data */ |
| }; |
| |
| struct Xfile |
| { |
| Xfile* next; /* in fid hash bucket */ |
| Xfs* xf; |
| long fid; |
| ulong flags; |
| Qid qid; |
| int len; /* of private data */ |
| Isofile* ptr; |
| }; |
| |
| enum |
| { |
| Asis, |
| Clean, |
| Clunk |
| }; |
| |
| enum |
| { |
| Oread = 1, |
| Owrite = 2, |
| Orclose = 4, |
| Omodes = 3, |
| }; |
| |
| extern char Enonexist[]; /* file does not exist */ |
| extern char Eperm[]; /* permission denied */ |
| extern char Enofile[]; /* no file system specified */ |
| extern char Eauth[]; /* authentication failed */ |
| |
| extern char *srvname; |
| extern char *deffile; |
| extern int chatty; |
| extern jmp_buf err_lab[]; |
| extern int nerr_lab; |
| extern char err_msg[]; |
| |
| extern int nojoliet; |
| extern int noplan9; |
| extern int norock; |