1 #define getpass tapefs_getpass
2 
3 #define	g2byte(x)	(((x)[1]<<8) + (x)[0])		/* little-endian */
4 #define	g3byte(x)	(((x)[2]<<16) + ((x)[1]<<8) + (x)[0])
5 #define	g4byte(x)	(((x)[3]<<24) + ((x)[2]<<16) + ((x)[1]<<8) + (x)[0])
6 
7 /* big endian */
8 #define	b4byte(x)	(((x)[0]<<24) + ((x)[1]<<16) + ((x)[2]<<8) + (x)[3])
9 #define	b8byte(x)	(((vlong)b4byte(x)<<32) | (u32int)b4byte((x)+4))
10 
11 enum
12 {
13 	OPERM	= 0x3,		/* mask of all permission types in open mode */
14 	Nram	= 512,
15 	Maxbuf	= 8192		/* max buffer size */
16 };
17 
18 typedef struct Fid Fid;
19 typedef struct Ram Ram;
20 
21 struct Fid
22 {
23 	short	busy;
24 	short	open;
25 	short	rclose;
26 	int	fid;
27 	Fid	*next;
28 	char	*user;
29 	Ram	*ram;
30 };
31 
32 struct Ram
33 {
34 	char	busy;
35 	char	open;
36 	char	replete;
37 	Ram	*parent;	/* parent directory */
38 	Ram	*child;		/* first member of directory */
39 	Ram	*next;		/* next member of file's directory */
40 	Qid	qid;
41 	long	perm;
42 	char	*name;
43 	ulong	atime;
44 	ulong	mtime;
45 	char	*user;
46 	char	*group;
47 	vlong addr;
48 	void *data;
49 	vlong	ndata;
50 };
51 
52 enum
53 {
54 	Pexec =		1,
55 	Pwrite = 	2,
56 	Pread = 	4,
57 	Pother = 	1,
58 	Pgroup = 	8,
59 	Powner =	64
60 };
61 
62 typedef struct idmap {
63 	char	*name;
64 	int	id;
65 } Idmap;
66 
67 typedef struct fileinf {
68 	char	*name;
69 	vlong	addr;
70 	void	*data;
71 	vlong	size;
72 	int	mode;
73 	int	uid;
74 	int	gid;
75 	long	mdate;
76 } Fileinf;
77 
78 extern	ulong	path;		/* incremented for each new file */
79 extern	Ram	*ram;
80 extern	char	*user;
81 extern	Idmap	*uidmap;
82 extern	Idmap	*gidmap;
83 extern	int	replete;
84 extern	int	blocksize;
85 void	error(char*);
86 void	*erealloc(void*, ulong);
87 void	*emalloc(ulong);
88 char	*estrdup(char*);
89 void	populate(char *);
90 void	dotrunc(Ram*);
91 void	docreate(Ram*);
92 char	*doread(Ram*, vlong, long);
93 void	dowrite(Ram*, char*, long, long);
94 int	dopermw(Ram*);
95 Idmap	*getpass(char*);
96 char	*mapid(Idmap*,int);
97 Ram	*poppath(Fileinf fi, int new);
98 Ram	*popfile(Ram *dir, Fileinf fi);
99 void	popdir(Ram*);
100 Ram	*lookup(Ram*, char*);
101