xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/dir.h (revision fb7f0c934c48abaed6040d054ef636408c3c522d)
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