Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

typedef long    long    vlong;
typedef unsigned long long uvlong;
typedef         unsigned char uchar;
typedef unsigned short ushort;
typedef         unsigned int uint;
typedef unsigned long ulong;

#define GBIT8(p)        ((p)[0])
#define GBIT16(p)       ((p)[0]|((p)[1]<<8))
#define GBIT32(p)       ((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24))
#define GBIT64(p)       ((vlong)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) |\
                                ((vlong)((p)[4]|((p)[5]<<8)|((p)[6]<<16)|((p)[7]<<24)) << 32))

#define PBIT8(p,v)      (p)[0]=(v)
#define PBIT16(p,v)     (p)[0]=(v);(p)[1]=(v)>>8
#define PBIT32(p,v)     (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24
#define PBIT64(p,v)     (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24;\
                        (p)[4]=(v)>>32;(p)[5]=(v)>>40;(p)[6]=(v)>>48;(p)[7]=(v)>>56

#define BIT8SZ          1
#define BIT16SZ         2
#define BIT32SZ         4
#define BIT64SZ         8
#define QIDSZ   (BIT8SZ+BIT32SZ+BIT64SZ)

/* STATFIXLEN includes leading 16-bit count */
/* The count, however, excludes itself; total size is BIT16SZ+count */
#define STATFIXLEN      (BIT16SZ+QIDSZ+5*BIT16SZ+4*BIT32SZ+1*BIT64SZ)   /* amount of fixed length data in a stat buffer */

typedef union
{
        char    clength[8];
        vlong   vlength;
        struct
        {
                long    hlength;
                long    length;
        };
} Length;

typedef
struct Qid
{
        uvlong  path;
        ulong   vers;
        uchar   type;
} Qid;

typedef
struct Dir {
        /* system-modified data */
        ushort  type;   /* server type */
        uint    dev;    /* server subtype */
        /* file data */
        Qid     qid;    /* unique id from server */
        ulong   mode;   /* permissions */
        ulong   atime;  /* last read time */
        ulong   mtime;  /* last write time */
        vlong   length; /* file length: see <u.h> */
        char    *name;  /* last element of path */
        char    *uid;   /* owner name */
        char    *gid;   /* group name */
        char    *muid;  /* last modifier name */
} Dir;

void    _dirtostat(struct stat *, Dir*, Fdinfo*);
uint    _convM2D(uchar*, uint, Dir*, char*);
uint    _convD2M(Dir*, uchar*, uint);
Dir     *_dirstat(char*);
int     _dirwstat(char*, Dir*);
Dir     *_dirfstat(int);
int     _dirfwstat(int, Dir*);
long    _dirread(int, Dir**);
long _dirreadall(int, Dir**);
void _nulldir(Dir*);
uint _sizeD2M(Dir*);

#ifndef nil
#define nil ((void*)0)
#endif