#define getpass tapefs_getpass | |
#define g2byte(x) (((x)[1]<<8) + (x)[0]) /* little-endian */ | |
#define g3byte(x) (((x)[2]<<16) + ((x)[1]<<8) + (x)[0]) | |
#define g4byte(x) (((x)[3]<<24) + ((x)[2]<<16) + ((x)[1]<<8) + (x)[0]) | |
/* big endian */ | |
#define b4byte(x) (((x)[0]<<24) + ((x)[1]<<16) + ((x)[2]<<8) + (x)[3]) | |
#define b8byte(x) (((vlong)b4byte(x)<<32) | (u32int)b4byte((x)+4)) | |
enum | |
{ | |
OPERM = 0x3, /* mask of all permission types in open mode */ | |
Nram = 512, | |
Maxbuf = 8192 /* max buffer size */ | |
}; | |
typedef struct Fid Fid; | |
typedef struct Ram Ram; | |
struct Fid | |
{ | |
short busy; | |
short open; | |
short rclose; | |
int fid; | |
Fid *next; | |
char *user; | |
Ram *ram; | |
}; | |
struct Ram | |
{ | |
char busy; | |
char open; | |
char replete; | |
Ram *parent; /* parent directory */ | |
Ram *child; /* first member of directory */ | |
Ram *next; /* next member of file's directory */ | |
Qid qid; | |
long perm; | |
char *name; | |
ulong atime; | |
ulong mtime; | |
char *user; | |
char *group; | |
vlong addr; | |
void *data; | |
vlong ndata; | |
}; | |
enum | |
{ | |
Pexec = 1, | |
Pwrite = 2, | |
Pread = 4, | |
Pother = 1, | |
Pgroup = 8, | |
Powner = 64 | |
}; | |
typedef struct idmap { | |
char *name; | |
int id; | |
} Idmap; | |
typedef struct fileinf { | |
char *name; | |
vlong addr; | |
void *data; | |
vlong size; | |
int mode; | |
int uid; | |
int gid; | |
long mdate; | |
} Fileinf; | |
extern ulong path; /* incremented for each new file */ | |
extern Ram *ram; | |
extern char *user; | |
extern Idmap *uidmap; | |
extern Idmap *gidmap; | |
extern int replete; | |
extern int blocksize; | |
void error(char*); | |
void *erealloc(void*, ulong); | |
void *emalloc(ulong); | |
char *estrdup(char*); | |
void populate(char *); | |
void dotrunc(Ram*); | |
void docreate(Ram*); | |
char *doread(Ram*, vlong, long); | |
void dowrite(Ram*, char*, long, long); | |
int dopermw(Ram*); | |
Idmap *getpass(char*); | |
char *mapid(Idmap*,int); | |
Ram *poppath(Fileinf fi, int new); | |
Ram *popfile(Ram *dir, Fileinf fi); | |
void popdir(Ram*); | |
Ram *lookup(Ram*, char*); |