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