19a747e4fSDavid du Colombier typedef long long vlong; 29a747e4fSDavid du Colombier typedef unsigned long long uvlong; 39a747e4fSDavid du Colombier typedef unsigned char uchar; 49a747e4fSDavid du Colombier typedef unsigned short ushort; 59a747e4fSDavid du Colombier typedef unsigned int uint; 69a747e4fSDavid du Colombier typedef unsigned long ulong; 73e12c5d1SDavid du Colombier 89a747e4fSDavid du Colombier #define GBIT8(p) ((p)[0]) 99a747e4fSDavid du Colombier #define GBIT16(p) ((p)[0]|((p)[1]<<8)) 109a747e4fSDavid du Colombier #define GBIT32(p) ((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) 119a747e4fSDavid du Colombier #define GBIT64(p) ((vlong)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) |\ 129a747e4fSDavid du Colombier ((vlong)((p)[4]|((p)[5]<<8)|((p)[6]<<16)|((p)[7]<<24)) << 32)) 139a747e4fSDavid du Colombier 149a747e4fSDavid du Colombier #define PBIT8(p,v) (p)[0]=(v) 159a747e4fSDavid du Colombier #define PBIT16(p,v) (p)[0]=(v);(p)[1]=(v)>>8 169a747e4fSDavid du Colombier #define PBIT32(p,v) (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24 179a747e4fSDavid du Colombier #define PBIT64(p,v) (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24;\ 189a747e4fSDavid du Colombier (p)[4]=(v)>>32;(p)[5]=(v)>>40;(p)[6]=(v)>>48;(p)[7]=(v)>>56 199a747e4fSDavid du Colombier 209a747e4fSDavid du Colombier #define BIT8SZ 1 219a747e4fSDavid du Colombier #define BIT16SZ 2 229a747e4fSDavid du Colombier #define BIT32SZ 4 239a747e4fSDavid du Colombier #define BIT64SZ 8 249a747e4fSDavid du Colombier #define QIDSZ (BIT8SZ+BIT32SZ+BIT64SZ) 259a747e4fSDavid du Colombier 269a747e4fSDavid du Colombier /* STATFIXLEN includes leading 16-bit count */ 279a747e4fSDavid du Colombier /* The count, however, excludes itself; total size is BIT16SZ+count */ 289a747e4fSDavid du Colombier #define STATFIXLEN (BIT16SZ+QIDSZ+5*BIT16SZ+4*BIT32SZ+1*BIT64SZ) /* amount of fixed length data in a stat buffer */ 299a747e4fSDavid du Colombier 303e12c5d1SDavid du Colombier typedef union 313e12c5d1SDavid du Colombier { 323e12c5d1SDavid du Colombier char clength[8]; 333e12c5d1SDavid du Colombier vlong vlength; 343e12c5d1SDavid du Colombier struct 353e12c5d1SDavid du Colombier { 363e12c5d1SDavid du Colombier long hlength; 373e12c5d1SDavid du Colombier long length; 383e12c5d1SDavid du Colombier }; 393e12c5d1SDavid du Colombier } Length; 403e12c5d1SDavid du Colombier 413e12c5d1SDavid du Colombier typedef 423e12c5d1SDavid du Colombier struct Qid 433e12c5d1SDavid du Colombier { 449a747e4fSDavid du Colombier uvlong path; 459a747e4fSDavid du Colombier ulong vers; 469a747e4fSDavid du Colombier uchar type; 473e12c5d1SDavid du Colombier } Qid; 483e12c5d1SDavid du Colombier 493e12c5d1SDavid du Colombier typedef 509a747e4fSDavid du Colombier struct Dir { 519a747e4fSDavid du Colombier /* system-modified data */ 529a747e4fSDavid du Colombier ushort type; /* server type */ 539a747e4fSDavid du Colombier uint dev; /* server subtype */ 549a747e4fSDavid du Colombier /* file data */ 559a747e4fSDavid du Colombier Qid qid; /* unique id from server */ 569a747e4fSDavid du Colombier ulong mode; /* permissions */ 579a747e4fSDavid du Colombier ulong atime; /* last read time */ 589a747e4fSDavid du Colombier ulong mtime; /* last write time */ 599a747e4fSDavid du Colombier vlong length; /* file length: see <u.h> */ 609a747e4fSDavid du Colombier char *name; /* last element of path */ 619a747e4fSDavid du Colombier char *uid; /* owner name */ 629a747e4fSDavid du Colombier char *gid; /* group name */ 639a747e4fSDavid du Colombier char *muid; /* last modifier name */ 643e12c5d1SDavid du Colombier } Dir; 653e12c5d1SDavid du Colombier 669a747e4fSDavid du Colombier void _dirtostat(struct stat *, Dir*, Fdinfo*); 679a747e4fSDavid du Colombier uint _convM2D(uchar*, uint, Dir*, char*); 689a747e4fSDavid du Colombier uint _convD2M(Dir*, uchar*, uint); 699a747e4fSDavid du Colombier Dir *_dirstat(char*); 709a747e4fSDavid du Colombier int _dirwstat(char*, Dir*); 719a747e4fSDavid du Colombier Dir *_dirfstat(int); 729a747e4fSDavid du Colombier int _dirfwstat(int, Dir*); 739a747e4fSDavid du Colombier long _dirread(int, Dir**); 74*fb7f0c93SDavid du Colombier long _dirreadall(int, Dir**); 759a747e4fSDavid du Colombier void _nulldir(Dir*); 769a747e4fSDavid du Colombier uint _sizeD2M(Dir*); 779a747e4fSDavid du Colombier 789a747e4fSDavid du Colombier #ifndef nil 799a747e4fSDavid du Colombier #define nil ((void*)0) 809a747e4fSDavid du Colombier #endif 81