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