Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#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*);