Blame


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