Blob


1 #define getpass tapefs_getpass
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])
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))
11 enum
12 {
13 OPERM = 0x3, /* mask of all permission types in open mode */
14 Nram = 512,
15 Maxbuf = 8192 /* max buffer size */
16 };
18 typedef struct Fid Fid;
19 typedef struct Ram Ram;
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 };
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 };
52 enum
53 {
54 Pexec = 1,
55 Pwrite = 2,
56 Pread = 4,
57 Pother = 1,
58 Pgroup = 8,
59 Powner = 64
60 };
62 typedef struct idmap {
63 char *name;
64 int id;
65 } Idmap;
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;
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*);