]> git.lizzy.rs Git - plan9front.git/blob - sys/src/ape/lib/9/libc.h
de885a964da9f4d80998bdf804d6a9215eee96da
[plan9front.git] / sys / src / ape / lib / 9 / libc.h
1 #define _LOCK_EXTENSION
2 #define _QLOCK_EXTENSION
3 #define _BSD_EXTENSION
4
5 #ifdef _NET_EXTENSION
6 #include <libnet.h>
7 #endif
8
9 #include <stdint.h>
10 #include <sys/types.h>
11 #include <lock.h>
12 #include <qlock.h>
13 #include <lib9.h>
14 #include <stdlib.h>
15 #include <string.h>
16 #include <bsd.h>
17 #include <unistd.h>
18 #include <fcntl.h>
19 #include <assert.h>
20 #include <utf.h>
21 #include <fmt.h>
22 #include <signal.h>
23 #include <time.h>
24
25 #define nelem(x)        (sizeof(x)/sizeof((x)[0]))
26
27 typedef
28 struct Qid
29 {
30         uvlong  path;
31         ulong   vers;
32         uchar   type;
33 } Qid;
34
35 typedef
36 struct Dir {
37         /* system-modified data */
38         ushort  type;   /* server type */
39         uint    dev;    /* server subtype */
40         /* file data */
41         Qid     qid;    /* unique id from server */
42         ulong   mode;   /* permissions */
43         ulong   atime;  /* last read time */
44         ulong   mtime;  /* last write time */
45         vlong   length; /* file length: see <u.h> */
46         char    *name;  /* last element of path */
47         char    *uid;   /* owner name */
48         char    *gid;   /* group name */
49         char    *muid;  /* last modifier name */
50 } Dir;
51
52 uint    _convM2D(uchar*, uint, Dir*, char*);
53 uint    _convD2M(Dir*, uchar*, uint);
54 Dir     *_dirstat(char*);
55 int     _dirwstat(char*, Dir*);
56 Dir     *_dirfstat(int);
57 int     _dirfwstat(int, Dir*);
58 long    _dirread(int, Dir**);
59 long _dirreadall(int, Dir**);
60 void _nulldir(Dir*);
61 uint _sizeD2M(Dir*);
62
63 #define convM2D _convM2D
64 #define convD2M _convD2M
65 #define dirstat _dirstat
66 #define dirwstat _dirwstat
67 #define dirfstat _dirfstat
68 #define dirfwstat _dirfwstat
69 #define dirread _dirread
70 #define dirreadall _dirreadall
71 #define nulldir _nulldir
72 #define sizeD2M _sizeD2M
73
74 typedef
75 struct Waitmsg
76 {
77         int pid;        /* of loved one */
78         unsigned long time[3];  /* of loved one & descendants */
79         char    *msg;
80 } Waitmsg;
81
82 extern  int     _AWAIT(char*, int);
83 extern  int     _ALARM(unsigned long);
84 extern  int     _BIND(const char*, const char*, int);
85 extern  int     _CHDIR(const char*);
86 extern  int     _CLOSE(int);
87 extern  int     _CREATE(char*, int, unsigned long);
88 extern  int     _DUP(int, int);
89 extern  int     _ERRSTR(char*, unsigned int);
90 extern  int     _EXEC(char*, char*[]);
91 extern  void    _EXITS(char *);
92 extern  int     _FD2PATH(int, char*, int);
93 extern  int     _FAUTH(int, char*);
94 extern  int     _FSESSION(int, char*, int);
95 extern  int     _FSTAT(int, unsigned char*, int);
96 extern  int     _FWSTAT(int, unsigned char*, int);
97 extern  int     _MOUNT(int, int, const char*, int, const char*);
98 extern  int     _NOTED(int);
99 extern  int     _NOTIFY(int(*)(void*, char*));
100 extern  int     _OPEN(const char*, int);
101 extern  int     _PIPE(int*);
102 extern  long    _PREAD(int, void*, long, long long);
103 extern  long    _PWRITE(int, void*, long, long long);
104 extern  long    _READ(int, void*, long);
105 extern  int     _REMOVE(const char*);
106 extern  void*   _RENDEZVOUS(void*, void*);
107 extern  int     _RFORK(int);
108 extern  void*   _SEGATTACH(int, char*, void*, unsigned long);
109 extern  void*   _SEGBRK(void*, void*);
110 extern  int     _SEGDETACH(void*);
111 extern  int     _SEGFLUSH(void*, unsigned long);
112 extern  int     _SEGFREE(void*, unsigned long);
113 extern  long long       _SEEK(int, long long, int);
114 extern  int     _SLEEP(long);
115 extern  int     _STAT(const char*, unsigned char*, int);
116 extern  Waitmsg*        _WAIT(void);
117 extern  long    _WRITE(int, const void*, long);
118 extern  int     _WSTAT(const char*, unsigned char*, int);
119 extern  void*   _MALLOCZ(int, int);
120 extern  int     _WERRSTR(char*, ...);
121 extern  long    _READN(int, void*, long);
122 extern  int     _IOUNIT(int);
123 extern  vlong   _NSEC(void);
124
125 #define OREAD 0
126 #define OWRITE 1
127 #define ORDWR 2
128 #define OEXEC   3       /* execute, == read but check execute permission */
129 #define OTRUNC  16      /* or'ed in (except for exec), truncate file first */
130 #define OCEXEC  32      /* or'ed in, close on exec */
131 #define ORCLOSE 64      /* or'ed in, remove on close */
132 #define OEXCL   0x1000  /* or'ed in, exclusive use (create only) */
133
134 #define AREAD 4
135 #define AWRITE 2
136 #define AEXEC 1
137 #define AEXIST 0
138
139 #define _exits(s) _exit(s && *(char*)s ? 1 : 0)
140 #define exits(s) exit(s && *(char*)s ? 1 : 0)
141
142 #define create(file, omode, perm) open(file, (omode) |O_CREAT | O_TRUNC, perm)
143 #define seek(fd, off, dir) lseek(fd, off, dir)
144
145 #define fauth _FAUTH
146 #define wait _WAIT
147 #define readn _READN
148 #define pread _PREAD
149 #define pwrite _PWRITE
150 #define mallocz _MALLOCZ
151 #define nsec    _NSEC
152 #define iounit  _IOUNIT
153
154 #define getwd(buf,len)  getcwd(buf,len)
155 #define postnote(who,pid,note)  kill(pid,SIGTERM)
156 #define atnotify(func,in)
157
158 #define ERRMAX 128
159
160 int errstr(char*, unsigned int);
161 extern void sysfatal(char*, ...);
162
163 extern  void            setmalloctag(void*, uintptr_t);
164 extern  void            setrealloctag(void*, uintptr_t);
165 extern  uintptr_t       getcallerpc(void*);
166
167 extern int  dec16(uchar *, int, char *, int);
168 extern int  enc16(char *, int, uchar *, int);
169 extern int  dec32(uchar *, int, char *, int);
170 extern int  enc32(char *, int, uchar *, int);
171 extern int  dec64(uchar *, int, char *, int);
172 extern int  enc64(char *, int, uchar *, int);
173
174 extern int tokenize(char*, char**, int);
175 extern int getfields(char*, char**, int, int, char*);
176 extern int gettokens(char*, char**, int, char*);
177
178 extern ulong truerand(void); /* uses /dev/random */
179
180 extern int encrypt(void*, void*, int len);
181 extern int decrypt(void*, void*, int len);
182
183 typedef
184 struct Tm
185 {
186         int     sec;
187         int     min;
188         int     hour;
189         int     mday;
190         int     mon;
191         int     year;
192         int     wday;
193         int     yday;
194         char    zone[4];
195         int     tzoff;
196 } Tm;
197
198 Tm* _gmtime(time_t);
199 #define gmtime _gmtime