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