Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#pragma	src	"/sys/src/libc/9sys"
2
#pragma	lib	"libc.a"
3
 
4
#define	VERSION9P	"9P2000"
5
 
6
#define	MAXWELEM	16
7
 
8
typedef
9
struct	Fcall
10
{
11
	uchar	type;
12
	u32int	fid;
13
	ushort	tag;
14
	union {
15
		struct {
16
			u32int	msize;		/* Tversion, Rversion */
17
			char	*version;	/* Tversion, Rversion */
18
		};
19
		struct {
20
			ushort	oldtag;		/* Tflush */
21
		};
22
		struct {
23
			char	*ename;		/* Rerror */
24
		};
25
		struct {
26
			Qid	qid;		/* Rattach, Ropen, Rcreate */
27
			u32int	iounit;		/* Ropen, Rcreate */
28
		};
29
		struct {
30
			Qid	aqid;		/* Rauth */
31
		};
32
		struct {
33
			u32int	afid;		/* Tauth, Tattach */
34
			char	*uname;		/* Tauth, Tattach */
35
			char	*aname;		/* Tauth, Tattach */
36
		};
37
		struct {
38
			u32int	perm;		/* Tcreate */ 
39
			char	*name;		/* Tcreate */
40
			uchar	mode;		/* Tcreate, Topen */
41
		};
42
		struct {
43
			u32int	newfid;		/* Twalk */
44
			ushort	nwname;		/* Twalk */
45
			char	*wname[MAXWELEM];	/* Twalk */
46
		};
47
		struct {
48
			ushort	nwqid;		/* Rwalk */
49
			Qid	wqid[MAXWELEM];		/* Rwalk */
50
		};
51
		struct {
52
			vlong	offset;		/* Tread, Twrite */
53
			u32int	count;		/* Tread, Twrite, Rread */
54
			char	*data;		/* Twrite, Rread */
55
		};
56
		struct {
57
			ushort	nstat;		/* Twstat, Rstat */
58
			uchar	*stat;		/* Twstat, Rstat */
59
		};
60
	};
61
} Fcall;
62
 
63
 
64
#define	GBIT8(p)	((p)[0])
65
#define	GBIT16(p)	((p)[0]|((p)[1]<<8))
66
#define	GBIT32(p)	((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24))
67
#define	GBIT64(p)	((u32int)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) |\
68
				((vlong)((p)[4]|((p)[5]<<8)|((p)[6]<<16)|((p)[7]<<24)) << 32))
69
 
70
#define	PBIT8(p,v)	(p)[0]=(v)
71
#define	PBIT16(p,v)	(p)[0]=(v);(p)[1]=(v)>>8
72
#define	PBIT32(p,v)	(p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24
73
#define	PBIT64(p,v)	(p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24;\
74
			(p)[4]=(v)>>32;(p)[5]=(v)>>40;(p)[6]=(v)>>48;(p)[7]=(v)>>56
75
 
76
#define	BIT8SZ		1
77
#define	BIT16SZ		2
78
#define	BIT32SZ		4
79
#define	BIT64SZ		8
80
#define	QIDSZ	(BIT8SZ+BIT32SZ+BIT64SZ)
81
 
82
/* STATFIXLEN includes leading 16-bit count */
83
/* The count, however, excludes itself; total size is BIT16SZ+count */
84
#define STATFIXLEN	(BIT16SZ+QIDSZ+5*BIT16SZ+4*BIT32SZ+1*BIT64SZ)	/* amount of fixed length data in a stat buffer */
85
 
86
#define	NOTAG		(ushort)~0U	/* Dummy tag */
87
#define	NOFID		(u32int)~0U	/* Dummy fid */
88
#define	IOHDRSZ		24	/* ample room for Twrite/Rread header (iounit) */
89
 
90
enum
91
{
92
	Tversion =	100,
93
	Rversion,
94
	Tauth =		102,
95
	Rauth,
96
	Tattach =	104,
97
	Rattach,
98
	Terror =	106,	/* illegal */
99
	Rerror,
100
	Tflush =	108,
101
	Rflush,
102
	Twalk =		110,
103
	Rwalk,
104
	Topen =		112,
105
	Ropen,
106
	Tcreate =	114,
107
	Rcreate,
108
	Tread =		116,
109
	Rread,
110
	Twrite =	118,
111
	Rwrite,
112
	Tclunk =	120,
113
	Rclunk,
114
	Tremove =	122,
115
	Rremove,
116
	Tstat =		124,
117
	Rstat,
118
	Twstat =	126,
119
	Rwstat,
120
	Tmax,
121
};
122
 
123
uint	convM2S(uchar*, uint, Fcall*);
124
uint	convS2M(Fcall*, uchar*, uint);
125
uint	sizeS2M(Fcall*);
126
 
127
int	statcheck(uchar *abuf, uint nbuf);
128
uint	convM2D(uchar*, uint, Dir*, char*);
129
uint	convD2M(Dir*, uchar*, uint);
130
uint	sizeD2M(Dir*);
131
 
132
int	fcallfmt(Fmt*);
133
int	dirfmt(Fmt*);
134
int	dirmodefmt(Fmt*);
135
 
136
int	read9pmsg(int, void*, uint);
137
 
138
#pragma	varargck	type	"F"	Fcall*
139
#pragma	varargck	type	"M"	ulong
140
#pragma	varargck	type	"D"	Dir*