13e12c5d1SDavid du Colombier #pragma lib "libc.a" 23e12c5d1SDavid du Colombier 3219b2ee8SDavid du Colombier typedef 43e12c5d1SDavid du Colombier struct Fcall 53e12c5d1SDavid du Colombier { 63e12c5d1SDavid du Colombier char type; 73e12c5d1SDavid du Colombier short fid; 83e12c5d1SDavid du Colombier ushort tag; 93e12c5d1SDavid du Colombier union { 103e12c5d1SDavid du Colombier struct { 113e12c5d1SDavid du Colombier ushort oldtag; /* Tflush */ 123e12c5d1SDavid du Colombier Qid qid; /* Rattach, Rwalk, Ropen, Rcreate */ 13219b2ee8SDavid du Colombier char rauth[AUTHENTLEN]; /* Rattach */ 143e12c5d1SDavid du Colombier }; 153e12c5d1SDavid du Colombier struct { 16219b2ee8SDavid du Colombier char uname[NAMELEN]; /* Tattach */ 173e12c5d1SDavid du Colombier char aname[NAMELEN]; /* Tattach */ 18219b2ee8SDavid du Colombier char ticket[TICKETLEN]; /* Tattach */ 19219b2ee8SDavid du Colombier char auth[AUTHENTLEN]; /* Tattach */ 203e12c5d1SDavid du Colombier }; 213e12c5d1SDavid du Colombier struct { 223e12c5d1SDavid du Colombier char ename[ERRLEN]; /* Rerror */ 23219b2ee8SDavid du Colombier char authid[NAMELEN]; /* Rsession */ 24219b2ee8SDavid du Colombier char authdom[DOMLEN]; /* Rsession */ 25219b2ee8SDavid du Colombier char chal[CHALLEN]; /* Tsession/Rsession */ 263e12c5d1SDavid du Colombier }; 273e12c5d1SDavid du Colombier struct { 283e12c5d1SDavid du Colombier long perm; /* Tcreate */ 293e12c5d1SDavid du Colombier short newfid; /* Tclone, Tclwalk */ 303e12c5d1SDavid du Colombier char name[NAMELEN]; /* Twalk, Tclwalk, Tcreate */ 313e12c5d1SDavid du Colombier char mode; /* Tcreate, Topen */ 323e12c5d1SDavid du Colombier }; 333e12c5d1SDavid du Colombier struct { 34*7dd7cddfSDavid du Colombier vlong offset; /* Tread, Twrite */ 353e12c5d1SDavid du Colombier long count; /* Tread, Twrite, Rread */ 363e12c5d1SDavid du Colombier char *data; /* Twrite, Rread */ 373e12c5d1SDavid du Colombier }; 383e12c5d1SDavid du Colombier struct { 393e12c5d1SDavid du Colombier char stat[DIRLEN]; /* Twstat, Rstat */ 403e12c5d1SDavid du Colombier }; 413e12c5d1SDavid du Colombier }; 42219b2ee8SDavid du Colombier } Fcall; 433e12c5d1SDavid du Colombier 44*7dd7cddfSDavid du Colombier #define MAXFDATA (8*1024) 45*7dd7cddfSDavid du Colombier #define MAXRPC (MAXFDATA+MAXMSG) 46219b2ee8SDavid du Colombier #define MAXMSG 160 /* max header sans data */ 473e12c5d1SDavid du Colombier #define NOTAG 0xFFFF /* Dummy tag */ 483e12c5d1SDavid du Colombier 493e12c5d1SDavid du Colombier enum 503e12c5d1SDavid du Colombier { 513e12c5d1SDavid du Colombier Tnop = 50, 523e12c5d1SDavid du Colombier Rnop, 53219b2ee8SDavid du Colombier Tosession = 52, /* illegal */ 54219b2ee8SDavid du Colombier Rosession, /* illegal */ 553e12c5d1SDavid du Colombier Terror = 54, /* illegal */ 563e12c5d1SDavid du Colombier Rerror, 573e12c5d1SDavid du Colombier Tflush = 56, 583e12c5d1SDavid du Colombier Rflush, 59219b2ee8SDavid du Colombier Toattach = 58, /* illegal */ 60219b2ee8SDavid du Colombier Roattach, /* illegal */ 613e12c5d1SDavid du Colombier Tclone = 60, 623e12c5d1SDavid du Colombier Rclone, 633e12c5d1SDavid du Colombier Twalk = 62, 643e12c5d1SDavid du Colombier Rwalk, 653e12c5d1SDavid du Colombier Topen = 64, 663e12c5d1SDavid du Colombier Ropen, 673e12c5d1SDavid du Colombier Tcreate = 66, 683e12c5d1SDavid du Colombier Rcreate, 693e12c5d1SDavid du Colombier Tread = 68, 703e12c5d1SDavid du Colombier Rread, 713e12c5d1SDavid du Colombier Twrite = 70, 723e12c5d1SDavid du Colombier Rwrite, 733e12c5d1SDavid du Colombier Tclunk = 72, 743e12c5d1SDavid du Colombier Rclunk, 753e12c5d1SDavid du Colombier Tremove = 74, 763e12c5d1SDavid du Colombier Rremove, 773e12c5d1SDavid du Colombier Tstat = 76, 783e12c5d1SDavid du Colombier Rstat, 793e12c5d1SDavid du Colombier Twstat = 78, 803e12c5d1SDavid du Colombier Rwstat, 813e12c5d1SDavid du Colombier Tclwalk = 80, 823e12c5d1SDavid du Colombier Rclwalk, 83219b2ee8SDavid du Colombier Tauth = 82, /* illegal */ 84219b2ee8SDavid du Colombier Rauth, /* illegal */ 85219b2ee8SDavid du Colombier Tsession = 84, 86219b2ee8SDavid du Colombier Rsession, 87219b2ee8SDavid du Colombier Tattach = 86, 88219b2ee8SDavid du Colombier Rattach, 89*7dd7cddfSDavid du Colombier Tmax, 903e12c5d1SDavid du Colombier }; 913e12c5d1SDavid du Colombier 923e12c5d1SDavid du Colombier int convM2S(char*, Fcall*, int); 933e12c5d1SDavid du Colombier int convS2M(Fcall*, char*); 943e12c5d1SDavid du Colombier 953e12c5d1SDavid du Colombier int convM2D(char*, Dir*); 963e12c5d1SDavid du Colombier int convD2M(Dir*, char*); 973e12c5d1SDavid du Colombier 98*7dd7cddfSDavid du Colombier int fcallconv(va_list*, Fconv*); 99*7dd7cddfSDavid du Colombier int dirconv(va_list*, Fconv*); 100*7dd7cddfSDavid du Colombier int dirmodeconv(va_list*, Fconv*); 1013e12c5d1SDavid du Colombier 1023e12c5d1SDavid du Colombier char* getS(int, char*, Fcall*, long*); 103219b2ee8SDavid du Colombier 104*7dd7cddfSDavid du Colombier #pragma varargck type "F" Fcall* 105*7dd7cddfSDavid du Colombier #pragma varargck type "M" ulong 106*7dd7cddfSDavid du Colombier #pragma varargck type "D" Dir* 107