#pragma lib "libc.a"
typedef
struct Fcall
{
char type;
short fid;
ushort tag;
union {
struct {
ushort oldtag; /* Tflush */
Qid qid; /* Rattach, Rwalk, Ropen, Rcreate */
char rauth[AUTHENTLEN]; /* Rattach */
};
struct {
char uname[NAMELEN]; /* Tattach */
char aname[NAMELEN]; /* Tattach */
char ticket[TICKETLEN]; /* Tattach */
char auth[AUTHENTLEN]; /* Tattach */
};
struct {
char ename[ERRLEN]; /* Rerror */
char authid[NAMELEN]; /* Rsession */
char authdom[DOMLEN]; /* Rsession */
char chal[CHALLEN]; /* Tsession/Rsession */
};
struct {
long perm; /* Tcreate */
short newfid; /* Tclone, Tclwalk */
char name[NAMELEN]; /* Twalk, Tclwalk, Tcreate */
char mode; /* Tcreate, Topen */
};
struct {
long offset; /* Tread, Twrite */
long count; /* Tread, Twrite, Rread */
char *data; /* Twrite, Rread */
};
struct {
char stat[DIRLEN]; /* Twstat, Rstat */
};
};
} Fcall;
#define MAXFDATA 8192
#define MAXMSG 160 /* max header sans data */
#define NOTAG 0xFFFF /* Dummy tag */
enum
{
Tnop = 50,
Rnop,
Tosession = 52, /* illegal */
Rosession, /* illegal */
Terror = 54, /* illegal */
Rerror,
Tflush = 56,
Rflush,
Toattach = 58, /* illegal */
Roattach, /* illegal */
Tclone = 60,
Rclone,
Twalk = 62,
Rwalk,
Topen = 64,
Ropen,
Tcreate = 66,
Rcreate,
Tread = 68,
Rread,
Twrite = 70,
Rwrite,
Tclunk = 72,
Rclunk,
Tremove = 74,
Rremove,
Tstat = 76,
Rstat,
Twstat = 78,
Rwstat,
Tclwalk = 80,
Rclwalk,
Tauth = 82, /* illegal */
Rauth, /* illegal */
Tsession = 84,
Rsession,
Tattach = 86,
Rattach,
};
int convM2S(char*, Fcall*, int);
int convS2M(Fcall*, char*);
int convM2D(char*, Dir*);
int convD2M(Dir*, char*);
int fcallconv(void *, Fconv*);
int dirconv(void *, Fconv*);
int dirmodeconv(void *, Fconv*);
char* getS(int, char*, Fcall*, long*);