xref: /plan9/sys/src/ape/lib/9/libc.h (revision 46d884bb2395ece4cb8d70e02a692b31d37806aa)
1*46d884bbSDavid du Colombier #define _LOCK_EXTENSION
2*46d884bbSDavid du Colombier #define _QLOCK_EXTENSION
3*46d884bbSDavid du Colombier #define _BSD_EXTENSION
4*46d884bbSDavid du Colombier #include <sys/types.h>
5*46d884bbSDavid du Colombier #include <lock.h>
6*46d884bbSDavid du Colombier #include <qlock.h>
7*46d884bbSDavid du Colombier #include <lib9.h>
8*46d884bbSDavid du Colombier #include <stdlib.h>
9*46d884bbSDavid du Colombier #include <string.h>
10*46d884bbSDavid du Colombier #include <bsd.h>
11*46d884bbSDavid du Colombier #include <unistd.h>
12*46d884bbSDavid du Colombier #include <fcntl.h>
13*46d884bbSDavid du Colombier #include <assert.h>
14*46d884bbSDavid du Colombier #include <utf.h>
15*46d884bbSDavid du Colombier #include <fmt.h>
16*46d884bbSDavid du Colombier #include <signal.h>
17*46d884bbSDavid du Colombier #include <time.h>
18*46d884bbSDavid du Colombier 
19*46d884bbSDavid du Colombier #define	nelem(x)	(sizeof(x)/sizeof((x)[0]))
20*46d884bbSDavid du Colombier 
21*46d884bbSDavid du Colombier extern	int	tokenize(char*, char**, int);
22*46d884bbSDavid du Colombier 
23*46d884bbSDavid du Colombier typedef
24*46d884bbSDavid du Colombier struct Qid
25*46d884bbSDavid du Colombier {
26*46d884bbSDavid du Colombier 	uvlong	path;
27*46d884bbSDavid du Colombier 	ulong	vers;
28*46d884bbSDavid du Colombier 	uchar	type;
29*46d884bbSDavid du Colombier } Qid;
30*46d884bbSDavid du Colombier 
31*46d884bbSDavid du Colombier typedef
32*46d884bbSDavid du Colombier struct Dir {
33*46d884bbSDavid du Colombier 	/* system-modified data */
34*46d884bbSDavid du Colombier 	ushort	type;	/* server type */
35*46d884bbSDavid du Colombier 	uint	dev;	/* server subtype */
36*46d884bbSDavid du Colombier 	/* file data */
37*46d884bbSDavid du Colombier 	Qid	qid;	/* unique id from server */
38*46d884bbSDavid du Colombier 	ulong	mode;	/* permissions */
39*46d884bbSDavid du Colombier 	ulong	atime;	/* last read time */
40*46d884bbSDavid du Colombier 	ulong	mtime;	/* last write time */
41*46d884bbSDavid du Colombier 	vlong	length;	/* file length: see <u.h> */
42*46d884bbSDavid du Colombier 	char	*name;	/* last element of path */
43*46d884bbSDavid du Colombier 	char	*uid;	/* owner name */
44*46d884bbSDavid du Colombier 	char	*gid;	/* group name */
45*46d884bbSDavid du Colombier 	char	*muid;	/* last modifier name */
46*46d884bbSDavid du Colombier } Dir;
47*46d884bbSDavid du Colombier 
48*46d884bbSDavid du Colombier uint	_convM2D(uchar*, uint, Dir*, char*);
49*46d884bbSDavid du Colombier uint	_convD2M(Dir*, uchar*, uint);
50*46d884bbSDavid du Colombier Dir	*_dirstat(char*);
51*46d884bbSDavid du Colombier int	_dirwstat(char*, Dir*);
52*46d884bbSDavid du Colombier Dir	*_dirfstat(int);
53*46d884bbSDavid du Colombier int	_dirfwstat(int, Dir*);
54*46d884bbSDavid du Colombier long	_dirread(int, Dir**);
55*46d884bbSDavid du Colombier long _dirreadall(int, Dir**);
56*46d884bbSDavid du Colombier void _nulldir(Dir*);
57*46d884bbSDavid du Colombier uint _sizeD2M(Dir*);
58*46d884bbSDavid du Colombier 
59*46d884bbSDavid du Colombier typedef
60*46d884bbSDavid du Colombier struct Waitmsg
61*46d884bbSDavid du Colombier {
62*46d884bbSDavid du Colombier 	int pid;	/* of loved one */
63*46d884bbSDavid du Colombier 	unsigned long time[3];	/* of loved one & descendants */
64*46d884bbSDavid du Colombier 	char	*msg;
65*46d884bbSDavid du Colombier } Waitmsg;
66*46d884bbSDavid du Colombier 
67*46d884bbSDavid du Colombier 
68*46d884bbSDavid du Colombier extern	int	_AWAIT(char*, int);
69*46d884bbSDavid du Colombier extern	int	_ALARM(unsigned long);
70*46d884bbSDavid du Colombier extern	int	_BIND(const char*, const char*, int);
71*46d884bbSDavid du Colombier extern	int	_CHDIR(const char*);
72*46d884bbSDavid du Colombier extern	int	_CLOSE(int);
73*46d884bbSDavid du Colombier extern	int	_CREATE(char*, int, unsigned long);
74*46d884bbSDavid du Colombier extern	int	_DUP(int, int);
75*46d884bbSDavid du Colombier extern	int	_ERRSTR(char*, unsigned int);
76*46d884bbSDavid du Colombier extern	int	_EXEC(char*, char*[]);
77*46d884bbSDavid du Colombier extern	void	_EXITS(char *);
78*46d884bbSDavid du Colombier extern	int	_FD2PATH(int, char*, int);
79*46d884bbSDavid du Colombier extern	int	_FAUTH(int, char*);
80*46d884bbSDavid du Colombier extern	int	_FSESSION(int, char*, int);
81*46d884bbSDavid du Colombier extern	int	_FSTAT(int, unsigned char*, int);
82*46d884bbSDavid du Colombier extern	int	_FWSTAT(int, unsigned char*, int);
83*46d884bbSDavid du Colombier extern	int	_MOUNT(int, int, const char*, int, const char*);
84*46d884bbSDavid du Colombier extern	int	_NOTED(int);
85*46d884bbSDavid du Colombier extern	int	_NOTIFY(int(*)(void*, char*));
86*46d884bbSDavid du Colombier extern	int	_OPEN(const char*, int);
87*46d884bbSDavid du Colombier extern	int	_PIPE(int*);
88*46d884bbSDavid du Colombier extern	long	_PREAD(int, void*, long, long long);
89*46d884bbSDavid du Colombier extern	long	_PWRITE(int, void*, long, long long);
90*46d884bbSDavid du Colombier extern	long	_READ(int, void*, long);
91*46d884bbSDavid du Colombier extern	int	_REMOVE(const char*);
92*46d884bbSDavid du Colombier extern	int	_RENDEZVOUS(unsigned long, unsigned long);
93*46d884bbSDavid du Colombier extern	int	_RFORK(int);
94*46d884bbSDavid du Colombier extern	int	_SEGATTACH(int, char*, void*, unsigned long);
95*46d884bbSDavid du Colombier extern	int	_SEGBRK(void*, void*);
96*46d884bbSDavid du Colombier extern	int	_SEGDETACH(void*);
97*46d884bbSDavid du Colombier extern	int	_SEGFLUSH(void*, unsigned long);
98*46d884bbSDavid du Colombier extern	int	_SEGFREE(void*, unsigned long);
99*46d884bbSDavid du Colombier extern	long long	_SEEK(int, long long, int);
100*46d884bbSDavid du Colombier extern	int	_SLEEP(long);
101*46d884bbSDavid du Colombier extern	int	_STAT(const char*, unsigned char*, int);
102*46d884bbSDavid du Colombier extern	Waitmsg*	_WAIT(void);
103*46d884bbSDavid du Colombier extern	long	_WRITE(int, const void*, long);
104*46d884bbSDavid du Colombier extern	int	_WSTAT(const char*, unsigned char*, int);
105*46d884bbSDavid du Colombier extern 	void *_MALLOCZ(int, int);
106*46d884bbSDavid du Colombier extern	int	_WERRSTR(char*, ...);
107*46d884bbSDavid du Colombier extern	long	_READN(int, void*, long);
108*46d884bbSDavid du Colombier extern	int	_IOUNIT(int);
109*46d884bbSDavid du Colombier 
110*46d884bbSDavid du Colombier #define dirstat _dirstat
111*46d884bbSDavid du Colombier #define dirfstat _dirfstat
112*46d884bbSDavid du Colombier 
113*46d884bbSDavid du Colombier #define OREAD 0
114*46d884bbSDavid du Colombier #define OWRITE 1
115*46d884bbSDavid du Colombier #define ORDWR 2
116*46d884bbSDavid du Colombier #define OCEXEC 32
117*46d884bbSDavid du Colombier 
118*46d884bbSDavid du Colombier #define AREAD 4
119*46d884bbSDavid du Colombier #define AWRITE 2
120*46d884bbSDavid du Colombier #define AEXEC 1
121*46d884bbSDavid du Colombier #define AEXIST 0
122*46d884bbSDavid du Colombier 
123*46d884bbSDavid du Colombier #define open _OPEN
124*46d884bbSDavid du Colombier #define close _CLOSE
125*46d884bbSDavid du Colombier #define read _READ
126*46d884bbSDavid du Colombier #define write _WRITE
127*46d884bbSDavid du Colombier #define _exits(s) _exit(s && *(char*)s ? 1 : 0)
128*46d884bbSDavid du Colombier #define exits(s) exit(s && *(char*)s ? 1 : 0)
129*46d884bbSDavid du Colombier #define create _CREATE
130*46d884bbSDavid du Colombier #define pread _PREAD
131*46d884bbSDavid du Colombier #define readn _READN
132*46d884bbSDavid du Colombier #define mallocz _MALLOCZ
133*46d884bbSDavid du Colombier #define iounit	_IOUNIT
134*46d884bbSDavid du Colombier 
135*46d884bbSDavid du Colombier /* assume being called as in event.c */
136*46d884bbSDavid du Colombier #define postnote(x, pid, msg) kill(pid, SIGTERM)
137*46d884bbSDavid du Colombier #define atnotify(x, y) signal(SIGTERM, ekill)
138*46d884bbSDavid du Colombier 
139*46d884bbSDavid du Colombier #define ERRMAX 128
140*46d884bbSDavid du Colombier 
141*46d884bbSDavid du Colombier extern	void	setmalloctag(void*, ulong);
142*46d884bbSDavid du Colombier extern	ulong	getcallerpc(void*);
143*46d884bbSDavid du Colombier 
144*46d884bbSDavid du Colombier /* Used in libsec.h and not picked up in earlier type definitions */
145*46d884bbSDavid du Colombier typedef unsigned int u32int;
146*46d884bbSDavid du Colombier typedef unsigned long long u64int;
147*46d884bbSDavid du Colombier 
148*46d884bbSDavid du Colombier int  dec16(uchar *, int, char *, int);
149*46d884bbSDavid du Colombier int  enc16(char *, int, uchar *, int);
150*46d884bbSDavid du Colombier int  dec32(uchar *, int, char *, int);
151*46d884bbSDavid du Colombier int  enc32(char *, int, uchar *, int);
152*46d884bbSDavid du Colombier int  dec64(uchar *, int, char *, int);
153*46d884bbSDavid du Colombier int  enc64(char *, int, uchar *, int);
154*46d884bbSDavid du Colombier 
155*46d884bbSDavid du Colombier extern	vlong	nsec(void);
156*46d884bbSDavid du Colombier 
157*46d884bbSDavid du Colombier extern void sysfatal(char*, ...);
158*46d884bbSDavid du Colombier 
159*46d884bbSDavid du Colombier extern	ulong	truerand(void);			/* uses /dev/random */
160*46d884bbSDavid du Colombier extern	int	getfields(char*, char**, int, int, char*);
161