13e12c5d1SDavid du Colombier typedef struct Iobuf Iobuf; 23e12c5d1SDavid du Colombier typedef struct Xdata Xdata; 33e12c5d1SDavid du Colombier typedef struct Xfile Xfile; 43e12c5d1SDavid du Colombier typedef struct Xfs Xfs; 53e12c5d1SDavid du Colombier typedef struct Xfsub Xfsub; 63e12c5d1SDavid du Colombier 7bd389b36SDavid du Colombier enum 8bd389b36SDavid du Colombier { 93e12c5d1SDavid du Colombier Sectorsize = 2048 103e12c5d1SDavid du Colombier }; 113e12c5d1SDavid du Colombier 123e12c5d1SDavid du Colombier struct Iobuf 133e12c5d1SDavid du Colombier { 143e12c5d1SDavid du Colombier Xdata* dev; 153e12c5d1SDavid du Colombier long addr; 163e12c5d1SDavid du Colombier Iobuf* next; 173e12c5d1SDavid du Colombier Iobuf* prev; 183e12c5d1SDavid du Colombier Iobuf* hash; 193e12c5d1SDavid du Colombier int busy; 203e12c5d1SDavid du Colombier uchar* iobuf; 213e12c5d1SDavid du Colombier }; 223e12c5d1SDavid du Colombier 233e12c5d1SDavid du Colombier struct Xdata 243e12c5d1SDavid du Colombier { 253e12c5d1SDavid du Colombier Xdata* next; 263e12c5d1SDavid du Colombier char* name; /* of underlying file */ 273e12c5d1SDavid du Colombier Qid qid; 283e12c5d1SDavid du Colombier short type; 293e12c5d1SDavid du Colombier short fdev; 303e12c5d1SDavid du Colombier int ref; /* attach count */ 313e12c5d1SDavid du Colombier int dev; /* for read/write */ 323e12c5d1SDavid du Colombier }; 333e12c5d1SDavid du Colombier 34bd389b36SDavid du Colombier struct Xfsub 35bd389b36SDavid du Colombier { 363e12c5d1SDavid du Colombier void (*reset)(void); 373e12c5d1SDavid du Colombier int (*attach)(Xfile*); 383e12c5d1SDavid du Colombier void (*clone)(Xfile*, Xfile*); 393e12c5d1SDavid du Colombier void (*walkup)(Xfile*); 403e12c5d1SDavid du Colombier void (*walk)(Xfile*, char*); 413e12c5d1SDavid du Colombier void (*open)(Xfile*, int); 423e12c5d1SDavid du Colombier void (*create)(Xfile*, char*, long, int); 437dd7cddfSDavid du Colombier long (*readdir)(Xfile*, char*, long, long); 447dd7cddfSDavid du Colombier long (*read)(Xfile*, char*, long, long); 457dd7cddfSDavid du Colombier long (*write)(Xfile*, char*, long, long); 463e12c5d1SDavid du Colombier void (*clunk)(Xfile*); 473e12c5d1SDavid du Colombier void (*remove)(Xfile*); 483e12c5d1SDavid du Colombier void (*stat)(Xfile*, Dir*); 493e12c5d1SDavid du Colombier void (*wstat)(Xfile*, Dir*); 503e12c5d1SDavid du Colombier }; 513e12c5d1SDavid du Colombier 52bd389b36SDavid du Colombier struct Xfs 53bd389b36SDavid du Colombier { 543e12c5d1SDavid du Colombier Xdata* d; /* how to get the bits */ 553e12c5d1SDavid du Colombier Xfsub* s; /* how to use them */ 563e12c5d1SDavid du Colombier int ref; 57*59cc4ca5SDavid du Colombier int issusp; /* follows system use sharing protocol */ 58*59cc4ca5SDavid du Colombier long suspoff; /* if so, offset at which SUSP area begins */ 59*59cc4ca5SDavid du Colombier int isrock; /* Rock Ridge format */ 603e12c5d1SDavid du Colombier int isplan9; /* has Plan 9-specific directory info */ 613e12c5d1SDavid du Colombier Qid rootqid; 623e12c5d1SDavid du Colombier void* ptr; /* private data */ 633e12c5d1SDavid du Colombier }; 643e12c5d1SDavid du Colombier 65bd389b36SDavid du Colombier struct Xfile 66bd389b36SDavid du Colombier { 673e12c5d1SDavid du Colombier Xfile* next; /* in fid hash bucket */ 683e12c5d1SDavid du Colombier Xfs* xf; 693e12c5d1SDavid du Colombier long fid; 703e12c5d1SDavid du Colombier ulong flags; 713e12c5d1SDavid du Colombier Qid qid; 723e12c5d1SDavid du Colombier int len; /* of private data */ 733e12c5d1SDavid du Colombier void* ptr; 743e12c5d1SDavid du Colombier }; 753e12c5d1SDavid du Colombier 76bd389b36SDavid du Colombier enum 77bd389b36SDavid du Colombier { 783e12c5d1SDavid du Colombier Asis, 793e12c5d1SDavid du Colombier Clean, 803e12c5d1SDavid du Colombier Clunk 813e12c5d1SDavid du Colombier }; 823e12c5d1SDavid du Colombier 83bd389b36SDavid du Colombier enum 84bd389b36SDavid du Colombier { 853e12c5d1SDavid du Colombier Oread = 1, 863e12c5d1SDavid du Colombier Owrite = 2, 873e12c5d1SDavid du Colombier Orclose = 4, 883e12c5d1SDavid du Colombier Omodes = 3, 893e12c5d1SDavid du Colombier }; 903e12c5d1SDavid du Colombier 913e12c5d1SDavid du Colombier extern char Enonexist[]; /* file does not exist */ 923e12c5d1SDavid du Colombier extern char Eperm[]; /* permission denied */ 933e12c5d1SDavid du Colombier extern char Enofile[]; /* no file system specified */ 943e12c5d1SDavid du Colombier extern char Eauth[]; /* authentication failed */ 953e12c5d1SDavid du Colombier 963e12c5d1SDavid du Colombier extern char *srvname; 973e12c5d1SDavid du Colombier extern char *deffile; 983e12c5d1SDavid du Colombier extern int chatty; 993e12c5d1SDavid du Colombier extern jmp_buf err_lab[]; 1003e12c5d1SDavid du Colombier extern int nerr_lab; 1013e12c5d1SDavid du Colombier extern char err_msg[]; 1027dd7cddfSDavid du Colombier 1037dd7cddfSDavid du Colombier extern int nojoliet; 1047dd7cddfSDavid du Colombier extern int noplan9; 105*59cc4ca5SDavid du Colombier extern int norock; 106