xref: /plan9/sys/src/ape/lib/sec/port/libc.h (revision f591d9710fae2220cec09da2812fd6db952f1a27)
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  * Time-of-day
69  */
70 
71 typedef
72 struct Tm
73 {
74 	int	sec;
75 	int	min;
76 	int	hour;
77 	int	mday;
78 	int	mon;
79 	int	year;
80 	int	wday;
81 	int	yday;
82 	char	zone[4];
83 	int	tzoff;
84 } Tm;
85 
86 extern	Tm*	gmtime(long);
87 extern	Tm*	localtime(long);
88 extern	char*	asctime(Tm*);
89 extern	char*	ctime(long);
90 extern	double	cputime(void);
91 extern	long	times(long*);
92 extern	long	tm2sec(Tm*);
93 extern	vlong	nsec(void);
94 
95 extern	void	cycles(uvlong*);	/* 64-bit value of the cycle counter if there is one, 0 if there isn't */
96 
97 extern	long	time(long*);
98 
99 extern	int	_AWAIT(char*, int);
100 extern	int	_ALARM(unsigned long);
101 extern	int	_BIND(const char*, const char*, int);
102 extern	int	_CHDIR(const char*);
103 extern	int	_CLOSE(int);
104 extern	int	_CREATE(char*, int, unsigned long);
105 extern	int	_DUP(int, int);
106 extern	int	_ERRSTR(char*, unsigned int);
107 extern	int	_EXEC(char*, char*[]);
108 extern	void	_EXITS(char *);
109 extern	int	_FD2PATH(int, char*, int);
110 extern	int	_FAUTH(int, char*);
111 extern	int	_FSESSION(int, char*, int);
112 extern	int	_FSTAT(int, unsigned char*, int);
113 extern	int	_FWSTAT(int, unsigned char*, int);
114 extern	int	_MOUNT(int, int, const char*, int, const char*);
115 extern	int	_NOTED(int);
116 extern	int	_NOTIFY(int(*)(void*, char*));
117 extern	int	_OPEN(const char*, int);
118 extern	int	_PIPE(int*);
119 extern	long	_PREAD(int, void*, long, long long);
120 extern	long	_PWRITE(int, void*, long, long long);
121 extern	long	_READ(int, void*, long);
122 extern	int	_REMOVE(const char*);
123 extern	int	_RENDEZVOUS(unsigned long, unsigned long);
124 extern	int	_RFORK(int);
125 extern	int	_SEGATTACH(int, char*, void*, unsigned long);
126 extern	int	_SEGBRK(void*, void*);
127 extern	int	_SEGDETACH(void*);
128 extern	int	_SEGFLUSH(void*, unsigned long);
129 extern	int	_SEGFREE(void*, unsigned long);
130 extern	long long	_SEEK(int, long long, int);
131 extern	int	_SLEEP(long);
132 extern	int	_STAT(const char*, unsigned char*, int);
133 extern	Waitmsg*	_WAIT(void);
134 extern	long	_WRITE(int, const void*, long);
135 extern	int	_WSTAT(const char*, unsigned char*, int);
136 extern 	void *_MALLOCZ(int, int);
137 extern	int	_WERRSTR(char*, ...);
138 extern	long	_READN(int, void*, long);
139 extern	int	_IOUNIT(int);
140 
141 #define dirstat _dirstat
142 #define dirfstat _dirfstat
143 
144 #define OREAD 0
145 #define OWRITE 1
146 #define ORDWR 2
147 #define OCEXEC 32
148 
149 #define AREAD 4
150 #define AWRITE 2
151 #define AEXEC 1
152 #define AEXIST 0
153 
154 #define open _OPEN
155 #define close _CLOSE
156 #define read _READ
157 #define write _WRITE
158 #define _exits(s) _exit(s && *(char*)s ? 1 : 0)
159 #define exits(s) exit(s && *(char*)s ? 1 : 0)
160 #define create _CREATE
161 #define pread _PREAD
162 #define readn _READN
163 #define mallocz _MALLOCZ
164 #define iounit	_IOUNIT
165 
166 /* assume being called as in event.c */
167 #define postnote(x, pid, msg) kill(pid, SIGTERM)
168 #define atnotify(x, y) signal(SIGTERM, ekill)
169 
170 #define ERRMAX 128
171 
172 extern	void	setmalloctag(void*, ulong);
173 extern	ulong	getcallerpc(void*);
174 
175 /* Used in libsec.h and not picked up in earlier type definitions */
176 typedef unsigned int u32int;
177 typedef unsigned long long u64int;
178 
179 int  dec16(uchar *, int, char *, int);
180 int  enc16(char *, int, uchar *, int);
181 int  dec32(uchar *, int, char *, int);
182 int  enc32(char *, int, uchar *, int);
183 int  dec64(uchar *, int, char *, int);
184 int  enc64(char *, int, uchar *, int);
185 
186 extern	vlong	nsec(void);
187 
188 extern void sysfatal(char*, ...);
189 
190 extern	ulong	truerand(void);			/* uses /dev/random */
191 extern	int	getfields(char*, char**, int, int, char*);
192 
193 #pragma	varargck	type	"lld"	vlong
194 #pragma	varargck	type	"llo"	vlong
195 #pragma	varargck	type	"llx"	vlong
196 #pragma	varargck	type	"llb"	vlong
197 #pragma	varargck	type	"lld"	uvlong
198 #pragma	varargck	type	"llo"	uvlong
199 #pragma	varargck	type	"llx"	uvlong
200 #pragma	varargck	type	"llb"	uvlong
201 #pragma	varargck	type	"ld"	long
202 #pragma	varargck	type	"lo"	long
203 #pragma	varargck	type	"lx"	long
204 #pragma	varargck	type	"lb"	long
205 #pragma	varargck	type	"ld"	ulong
206 #pragma	varargck	type	"lo"	ulong
207 #pragma	varargck	type	"lx"	ulong
208 #pragma	varargck	type	"lb"	ulong
209 #pragma	varargck	type	"d"	int
210 #pragma	varargck	type	"o"	int
211 #pragma	varargck	type	"x"	int
212 #pragma	varargck	type	"c"	int
213 #pragma	varargck	type	"C"	int
214 #pragma	varargck	type	"b"	int
215 #pragma	varargck	type	"d"	uint
216 #pragma	varargck	type	"x"	uint
217 #pragma	varargck	type	"c"	uint
218 #pragma	varargck	type	"C"	uint
219 #pragma	varargck	type	"b"	uint
220 #pragma	varargck	type	"f"	double
221 #pragma	varargck	type	"e"	double
222 #pragma	varargck	type	"g"	double
223 #pragma	varargck	type	"s"	char*
224 #pragma	varargck	type	"q"	char*
225 #pragma	varargck	type	"S"	Rune*
226 #pragma	varargck	type	"Q"	Rune*
227 #pragma	varargck	type	"r"	void
228 #pragma	varargck	type	"%"	void
229 #pragma	varargck	type	"n"	int*
230 #pragma	varargck	type	"p"	ulong		/* uintptr */
231 #pragma	varargck	type	"p"	void*
232 #pragma	varargck	flag	','
233 #pragma	varargck	flag	' '
234 #pragma	varargck	flag	'h'
235 #pragma varargck	type	"<"	void*
236 #pragma varargck	type	"["	void*
237 #pragma varargck	type	"H"	void*
238 #pragma varargck	type	"lH"	void*
239