xref: /plan9/sys/src/cmd/cwfs/all.h (revision 01a344a29f2ff35133953eaef092a50fc8c3163b)
1*01a344a2SDavid du Colombier #include <u.h>
2*01a344a2SDavid du Colombier #include <libc.h>
3*01a344a2SDavid du Colombier #include <ctype.h>
4*01a344a2SDavid du Colombier #define Tfile Tfilescsi		/* avoid name conflict */
5*01a344a2SDavid du Colombier #include <disk.h>
6*01a344a2SDavid du Colombier #undef	Tfile
7*01a344a2SDavid du Colombier #include <bio.h>
8*01a344a2SDavid du Colombier #include <ip.h>
9*01a344a2SDavid du Colombier 
10*01a344a2SDavid du Colombier #include "dat.h"
11*01a344a2SDavid du Colombier #include "portfns.h"
12*01a344a2SDavid du Colombier 
13*01a344a2SDavid du Colombier #define malloc(n)	ialloc(n, 0)
14*01a344a2SDavid du Colombier 
15*01a344a2SDavid du Colombier #define	CHAT(cp) ((cons.flags&chatflag) || \
16*01a344a2SDavid du Colombier 			((cp) && (((Chan*)(cp))->flags&chatflag)))
17*01a344a2SDavid du Colombier #define	QID9P1(a,b)	(Qid9p1){a,b}
18*01a344a2SDavid du Colombier 
19*01a344a2SDavid du Colombier #define SECOND(n)	(n)
20*01a344a2SDavid du Colombier #define MINUTE(n)	((n)*SECOND(60))
21*01a344a2SDavid du Colombier #define HOUR(n)		((n)*MINUTE(60))
22*01a344a2SDavid du Colombier #define DAY(n)		((n)*HOUR(24))
23*01a344a2SDavid du Colombier 
24*01a344a2SDavid du Colombier enum {
25*01a344a2SDavid du Colombier 	QPDIR		= 0x80000000L,
26*01a344a2SDavid du Colombier 	QPNONE		= 0,
27*01a344a2SDavid du Colombier 	QPROOT		= 1,
28*01a344a2SDavid du Colombier 	QPSUPER		= 2,
29*01a344a2SDavid du Colombier 
30*01a344a2SDavid du Colombier 	/*
31*01a344a2SDavid du Colombier 	 * perm argument in 9P create
32*01a344a2SDavid du Colombier 	 */
33*01a344a2SDavid du Colombier 	PDIR		= 1L<<31,	/* is a directory */
34*01a344a2SDavid du Colombier 	PAPND		= 1L<<30,	/* is append only */
35*01a344a2SDavid du Colombier 	PLOCK		= 1L<<29,	/* is locked on open */
36*01a344a2SDavid du Colombier 
37*01a344a2SDavid du Colombier 	FID1		= 1,
38*01a344a2SDavid du Colombier 	FID2		= 2,
39*01a344a2SDavid du Colombier 
40*01a344a2SDavid du Colombier 	MAXBIAS		= SECOND(20),
41*01a344a2SDavid du Colombier 	TLOCK		= MINUTE(5),
42*01a344a2SDavid du Colombier };
43*01a344a2SDavid du Colombier 
44*01a344a2SDavid du Colombier Uid*	uid;
45*01a344a2SDavid du Colombier short*	gidspace;
46*01a344a2SDavid du Colombier Lock	printing;
47*01a344a2SDavid du Colombier Time	tim;
48*01a344a2SDavid du Colombier File*	files;
49*01a344a2SDavid du Colombier Wpath*	wpaths;
50*01a344a2SDavid du Colombier Lock	wpathlock;
51*01a344a2SDavid du Colombier char*	errstr9p[MAXERR];
52*01a344a2SDavid du Colombier Chan*	chans;
53*01a344a2SDavid du Colombier RWLock	mainlock;
54*01a344a2SDavid du Colombier Timet	fs_mktime;
55*01a344a2SDavid du Colombier Timet	boottime;
56*01a344a2SDavid du Colombier Queue*	serveq;
57*01a344a2SDavid du Colombier Queue*	raheadq;
58*01a344a2SDavid du Colombier Rabuf*	rabuffree;
59*01a344a2SDavid du Colombier QLock	reflock;
60*01a344a2SDavid du Colombier Lock	rabuflock;
61*01a344a2SDavid du Colombier Tlock	tlocks[NTLOCK];
62*01a344a2SDavid du Colombier Lock	tlocklock;
63*01a344a2SDavid du Colombier Device*	devnone;
64*01a344a2SDavid du Colombier Startsb	startsb[5];
65*01a344a2SDavid du Colombier int	mballocs[MAXCAT];
66*01a344a2SDavid du Colombier 
67*01a344a2SDavid du Colombier /* from config block */
68*01a344a2SDavid du Colombier char	service[50];		/* my name */
69*01a344a2SDavid du Colombier Filsys	filsys[30];		/* named file systems */
70*01a344a2SDavid du Colombier /*
71*01a344a2SDavid du Colombier  * these are only documentation, but putting them in the config block makes
72*01a344a2SDavid du Colombier  * them visible.  the real values are compiled into cwfs.
73*01a344a2SDavid du Colombier  */
74*01a344a2SDavid du Colombier typedef struct Fspar Fspar;
75*01a344a2SDavid du Colombier struct Fspar {
76*01a344a2SDavid du Colombier 	char*	name;
77*01a344a2SDavid du Colombier 	long	actual;		/* compiled-in value */
78*01a344a2SDavid du Colombier 	long	declared;
79*01a344a2SDavid du Colombier } fspar[];
80*01a344a2SDavid du Colombier 
81*01a344a2SDavid du Colombier ulong	roflag;
82*01a344a2SDavid du Colombier ulong	errorflag;
83*01a344a2SDavid du Colombier ulong	chatflag;
84*01a344a2SDavid du Colombier ulong	attachflag;
85*01a344a2SDavid du Colombier ulong	authdebugflag;
86*01a344a2SDavid du Colombier ulong	authdisableflag;
87*01a344a2SDavid du Colombier int	noattach;
88*01a344a2SDavid du Colombier int	wstatallow;		/* set to circumvent wstat permissions */
89*01a344a2SDavid du Colombier int	writeallow;		/* set to circumvent write permissions */
90*01a344a2SDavid du Colombier int	duallow;		/* single user to allow du */
91*01a344a2SDavid du Colombier int	readonly;		/* disable writes if true */
92*01a344a2SDavid du Colombier 
93*01a344a2SDavid du Colombier int	noauth;			/* Debug */
94*01a344a2SDavid du Colombier 
95*01a344a2SDavid du Colombier int	rawreadok;		/* allow reading raw data */
96*01a344a2SDavid du Colombier 
97*01a344a2SDavid du Colombier File*	flist[5003];		/* base of file structures */
98*01a344a2SDavid du Colombier Lock	flock;			/* manipulate flist */
99*01a344a2SDavid du Colombier 
100*01a344a2SDavid du Colombier long	growacct[1000];
101*01a344a2SDavid du Colombier 
102*01a344a2SDavid du Colombier struct
103*01a344a2SDavid du Colombier {
104*01a344a2SDavid du Colombier 	RWLock	uidlock;
105*01a344a2SDavid du Colombier 	Iobuf*	uidbuf;
106*01a344a2SDavid du Colombier 	int	flen;
107*01a344a2SDavid du Colombier 	int	find;
108*01a344a2SDavid du Colombier } uidgc;
109*01a344a2SDavid du Colombier 
110*01a344a2SDavid du Colombier extern	char	statecall[];
111*01a344a2SDavid du Colombier extern	char*	wormscode[];
112*01a344a2SDavid du Colombier extern	char*	tagnames[];
113