llib-lposix revision 1.3 1 1.3 rillig /* $NetBSD: llib-lposix,v 1.3 2025/03/14 06:40:51 rillig Exp $ */
2 1.2 cgd
3 1.1 cgd /*
4 1.1 cgd * Copyright (c) 1994, 1995 Jochen Pohl
5 1.1 cgd * All Rights Reserved.
6 1.1 cgd *
7 1.1 cgd * Redistribution and use in source and binary forms, with or without
8 1.1 cgd * modification, are permitted provided that the following conditions
9 1.1 cgd * are met:
10 1.1 cgd * 1. Redistributions of source code must retain the above copyright
11 1.1 cgd * notice, this list of conditions and the following disclaimer.
12 1.1 cgd * 2. Redistributions in binary form must reproduce the above copyright
13 1.1 cgd * notice, this list of conditions and the following disclaimer in the
14 1.1 cgd * documentation and/or other materials provided with the distribution.
15 1.1 cgd * 3. All advertising materials mentioning features or use of this software
16 1.1 cgd * must display the following acknowledgement:
17 1.1 cgd * This product includes software developed by Jochen Pohl for
18 1.1 cgd * The NetBSD Project.
19 1.1 cgd * 4. The name of the author may not be used to endorse or promote products
20 1.1 cgd * derived from this software without specific prior written permission.
21 1.1 cgd *
22 1.1 cgd * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23 1.1 cgd * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 1.1 cgd * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 1.1 cgd * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26 1.1 cgd * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27 1.1 cgd * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 1.1 cgd * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 1.1 cgd * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 1.1 cgd * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31 1.1 cgd * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 1.1 cgd */
33 1.1 cgd
34 1.1 cgd /* LINTLIBRARY */
35 1.1 cgd
36 1.1 cgd #define _POSIX_SOURCE
37 1.1 cgd
38 1.1 cgd #include <sys/types.h>
39 1.1 cgd #include <sys/stat.h>
40 1.1 cgd #include <sys/utsname.h>
41 1.1 cgd #include <sys/times.h>
42 1.1 cgd #include <assert.h>
43 1.3 rillig #include <ctype.h>
44 1.1 cgd #include <dirent.h>
45 1.3 rillig #include <errno.h>
46 1.1 cgd #include <fcntl.h>
47 1.1 cgd #include <grp.h>
48 1.3 rillig #include <locale.h>
49 1.3 rillig #include <math.h>
50 1.1 cgd #include <pwd.h>
51 1.3 rillig #include <setjmp.h>
52 1.1 cgd #include <signal.h>
53 1.3 rillig #include <stdarg.h>
54 1.3 rillig #include <stdio.h>
55 1.3 rillig #include <stdlib.h>
56 1.1 cgd #include <string.h>
57 1.3 rillig #include <termios.h>
58 1.3 rillig #include <time.h>
59 1.3 rillig #include <unistd.h>
60 1.1 cgd #include <utime.h>
61 1.1 cgd
62 1.1 cgd
63 1.1 cgd /* PROTOLIB1 */
64 1.1 cgd
65 1.1 cgd
66 1.1 cgd void (abort)(void);
67 1.1 cgd int (abs)(int j);
68 1.1 cgd int (access)(const char *path, int amode);
69 1.1 cgd double (acos)(double x);
70 1.1 cgd unsigned (alarm)(unsigned seconds);
71 1.1 cgd char *(asctime)(const struct tm *timeptr);
72 1.1 cgd double (asin)(double x);
73 1.1 cgd void (__assert)(const char *expression, int line, const char *file);
74 1.1 cgd double (atan)(double x);
75 1.1 cgd double (atan2)(double y, double x);
76 1.1 cgd int (atexit)(void (*func)(void));
77 1.1 cgd double (atof)(const char *nptr);
78 1.1 cgd int (atoi)(const char *nptr);
79 1.1 cgd long (atol)(const char *nptr);
80 1.1 cgd void *(bsearch)(const void *key, const void *base, size_t nmemb,
81 1.1 cgd size_t size, int (*compar)(const void *, const void *));
82 1.1 cgd void *(calloc)(size_t nmemb, size_t size);
83 1.1 cgd double (ceil)(double x);
84 1.1 cgd speed_t (cfgetispeed)(const struct termios *p);
85 1.1 cgd speed_t (cfgetospeed)(const struct termios *p);
86 1.1 cgd int (cfsetispeed)(struct termios *p, speed_t speed);
87 1.1 cgd int (cfsetospeed)(struct termios *p, speed_t speed);
88 1.1 cgd int (chdir)(const char *path);
89 1.1 cgd int (chmod)(const char *path, mode_t mode);
90 1.1 cgd int (chown)(const char *path, uid_t owner, gid_t group);
91 1.1 cgd void (clearerr)(FILE *stream);
92 1.1 cgd clock_t (clock)(void);
93 1.1 cgd int (close)(int fildes);
94 1.1 cgd int (closedir)(DIR *dirp);
95 1.1 cgd double (cos)(double x);
96 1.1 cgd double (cosh)(double x);
97 1.1 cgd int (creat)(const char *path, mode_t mode);
98 1.1 cgd char *(ctermid)(char *s);
99 1.1 cgd char *(ctime)(const time_t *timer);
100 1.1 cgd char *(cuserid)(char *s);
101 1.1 cgd double (difftime)(time_t time1, time_t time0);
102 1.1 cgd div_t (div)(int numer, int denom);
103 1.1 cgd int (dup)(int fildes);
104 1.1 cgd int (dup2)(int fildes, int fildes2);
105 1.3 rillig #ifndef errno
106 1.1 cgd int (errno);
107 1.3 rillig #endif
108 1.1 cgd int (execl)(const char *path, const char *arg, ...);
109 1.1 cgd int (execle)(const char *path, const char *arg, ...);
110 1.1 cgd int (execlp)(const char *file, const char *arg, ...);
111 1.1 cgd int (execv)(const char *path, char *const argv[]);
112 1.1 cgd int (execve)(const char *path, char *const argv[], char *const *envp);
113 1.1 cgd int (execvp)(const char *file, char *const argv[]);
114 1.1 cgd void (exit)(int status);
115 1.1 cgd void (_exit)(int status);
116 1.1 cgd double (exp)(double x);
117 1.1 cgd double (fabs)(double x);
118 1.1 cgd int (fclose)(FILE *stream);
119 1.1 cgd int (fcntl)(int fildes, int cmd, ...);
120 1.1 cgd FILE *(fdopen)(int fildes, const char *type);
121 1.1 cgd int (feof)(FILE *stream);
122 1.1 cgd int (ferror)(FILE *stream);
123 1.1 cgd int (fflush)(FILE *stream);
124 1.1 cgd int (fgetc)(FILE *stream);
125 1.1 cgd int (fgetpos)(FILE *stream, fpos_t *pos);
126 1.1 cgd char *(fgets)(char *s, int n, FILE *stream);
127 1.1 cgd int (fileno)(FILE *stream);
128 1.1 cgd double (floor)(double x);
129 1.1 cgd double (fmod)(double x, double y);
130 1.1 cgd FILE *(fopen)(const char *filename, const char *mode);
131 1.1 cgd pid_t (fork)(void);
132 1.1 cgd long (fpathconf)(int fildes, int name);
133 1.1 cgd /* PRINTFLIKE2 */
134 1.1 cgd int (fprintf)(FILE *stream, const char *format, ...);
135 1.1 cgd int (fputc)(int c, FILE *stream);
136 1.1 cgd int (fputs)(const char *s, FILE *stream);
137 1.1 cgd size_t (fread)(void *ptr, size_t size, size_t nmemb, FILE *stream);
138 1.1 cgd void (free)(void *ptr);
139 1.1 cgd FILE *(freopen)(const char *filename, const char *mode, FILE *stream);
140 1.1 cgd double (frepx)(double value, int *exp);
141 1.1 cgd /* SCANFLIKE2 */
142 1.1 cgd int (fscanf)(FILE *stream, const char *format, ...);
143 1.1 cgd int (fseek)(FILE *stream, long int offset, int whence);
144 1.1 cgd int (fsetpos)(FILE *stream, const fpos_t *pos);
145 1.1 cgd int (fstat)(int fildes, struct stat *buf);
146 1.1 cgd long (ftell)(FILE *stream);
147 1.1 cgd size_t (fwrite)(const void *ptr, size_t size, size_t nmemb, FILE *stream);
148 1.1 cgd int (getc)(FILE *stream);
149 1.1 cgd int (getchar)(void);
150 1.1 cgd char *(getcwd)(char *buf, size_t size);
151 1.1 cgd gid_t (getegid)(void);
152 1.1 cgd char *(getenv)(const char *name);
153 1.1 cgd uid_t (geteuid)(void);
154 1.1 cgd gid_t (getgid)(void);
155 1.1 cgd struct group *(getgrgid)(gid_t gid);
156 1.1 cgd struct group *(getgrnam)(const char *name);
157 1.1 cgd int (getgroups)(int gidsetsize, gid_t grouplist[]);
158 1.1 cgd char *(getlogin)(void);
159 1.1 cgd pid_t (getpgrp)(void);
160 1.1 cgd pid_t (getpid)(void);
161 1.1 cgd pid_t (getppid)(void);
162 1.1 cgd struct passwd *(getpwnam)(const char *name);
163 1.1 cgd struct passwd *(getpwuid)(uid_t uid);
164 1.1 cgd char *(gets)(char *s);
165 1.1 cgd uid_t (getuid)(void);
166 1.1 cgd struct tm *(gmtime)(const time_t *timer);
167 1.1 cgd int (isalnum)(int c);
168 1.1 cgd int (isalpha)(int c);
169 1.1 cgd int (isatty)(int fildes);
170 1.1 cgd int (iscntrl)(int c);
171 1.1 cgd int (isdigit)(int c);
172 1.1 cgd int (isgraph)(int c);
173 1.1 cgd int (islower)(int c);
174 1.1 cgd int (isprint)(int c);
175 1.1 cgd int (ispunct)(int c);
176 1.1 cgd int (isspace)(int c);
177 1.1 cgd int (isupper)(int c);
178 1.1 cgd int (isxdigit)(int c);
179 1.1 cgd int (kill)(pid_t pid, int sig);
180 1.1 cgd long (labs)(long j);
181 1.1 cgd double (ldexp)(double x, int exp);
182 1.1 cgd ldiv_t (ldiv)(long numer, long denom);
183 1.1 cgd int (link)(const char *existing, const char *new);
184 1.1 cgd struct lconv *(localeconv)(void);
185 1.1 cgd struct tm *(localtime)(const time_t *timer);
186 1.1 cgd double (log)(double x);
187 1.1 cgd double (log10)(double x);
188 1.1 cgd void (longjmp)(jmp_buf env, int val);
189 1.1 cgd off_t (lseek)(int fildes, off_t offset, int whence);
190 1.1 cgd void *(malloc)(size_t size);
191 1.1 cgd int (mblen)(const char *s, size_t n);
192 1.1 cgd size_t (mbstowcs)(wchar_t *pwcs, const char *s, size_t n);
193 1.1 cgd int (mbtowc)(wchar_t *pwc, const char *s, size_t n);
194 1.1 cgd void *(memchr)(const void *s, int c, size_t n);
195 1.1 cgd int (memcmp)(const void *s1, const void *s2, size_t n);
196 1.1 cgd void *(memcpy)(void *s1, const void *s2, size_t n);
197 1.1 cgd void *(memmove)(void *s1, const void *s2, size_t n);
198 1.1 cgd void *(memset)(void *s, int c, size_t n);
199 1.1 cgd int (mkdir)(const char *path, mode_t mode);
200 1.1 cgd int (mkfifo)(const char *path, mode_t mode);
201 1.1 cgd time_t (mktime)(struct tm *timeptr);
202 1.1 cgd double (modf)(double value, double *iptr);
203 1.1 cgd int (open)(const char *path, int oflag, ...);
204 1.1 cgd DIR *(opendir)(const char *dirname);
205 1.1 cgd long (pathconf)(const char *path, int name);
206 1.1 cgd int (pause)(void);
207 1.1 cgd void (perror)(const char *s);
208 1.1 cgd int (pipe)(int fildes[2]);
209 1.1 cgd double (pow)(double x, double y);
210 1.1 cgd /* PRINTFLIKE1 */
211 1.1 cgd int (printf)(const char *format, ...);
212 1.1 cgd int (putc)(int c, FILE *stream);
213 1.1 cgd int (putchar)(int c);
214 1.1 cgd int (puts)(const char *s);
215 1.1 cgd void (qsort)(void *base, size_t nmemb, size_t size,
216 1.1 cgd int (*compar)(const void *, const void *));
217 1.1 cgd int (raise)(int sig);
218 1.1 cgd int (rand)(void);
219 1.1 cgd ssize_t (read)(int fildes, void *buf, size_t nbyte);
220 1.1 cgd struct dirent *(readdir)(DIR *dirp);
221 1.1 cgd void *(realloc)(void *ptr, size_t size);
222 1.1 cgd int (remove)(const char *filename);
223 1.1 cgd int (rename)(const char *old, const char *new);
224 1.1 cgd void (rewind)(FILE *stream);
225 1.1 cgd void (rewinddir)(DIR *dirp);
226 1.1 cgd int (rmdir)(const char *path);
227 1.1 cgd /* SCANFLIKE1 */
228 1.1 cgd int (scanf)(const char *format, ...);
229 1.1 cgd void (setbuf)(FILE *stream, char *buf);
230 1.1 cgd int (setgid)(gid_t gid);
231 1.1 cgd int (setjmp)(jmp_buf env);
232 1.1 cgd char *(setlocale)(int category, const char *locale);
233 1.1 cgd int (setpgid)(pid_t pid, pid_t pgid);
234 1.1 cgd pid_t (setsid)(void);
235 1.1 cgd int (setuid)(uid_t uid);
236 1.1 cgd int (setvbuf)(FILE *stream, char *buf, int mode, size_t size);
237 1.1 cgd int (sigaction)(int sig, const struct sigaction *act,
238 1.1 cgd struct sigaction *oact);
239 1.1 cgd int (sigaddset)(sigset_t *set, int signo);
240 1.1 cgd int (sigdelset)(sigset_t *set, int signo);
241 1.1 cgd int (sigemptyset)(sigset_t *set);
242 1.1 cgd int (sigfillset)(sigset_t *set);
243 1.1 cgd int (sigismember)(const sigset_t *set, int signo);
244 1.1 cgd void (siglongjmp)(sigjmp_buf env, int val);
245 1.1 cgd void (*(signal)(int sig, void (*func)(int)))(int);
246 1.1 cgd int (sigpending)(sigset_t *set);
247 1.1 cgd int (sigprocmask)(int how, const sigset_t *set, sigset_t *oset);
248 1.1 cgd int (sigsetjmp)(sigjmp_buf env, int savemask);
249 1.1 cgd int (sigsuspend)(const sigset_t *sigmask);
250 1.1 cgd double (sin)(double x);
251 1.1 cgd double (sinh)(double x);
252 1.1 cgd unsigned (sleep)(unsigned seconds);
253 1.1 cgd /* PRINTFLIKE2 */
254 1.1 cgd int (sprintf)(char *s, const char *format, ...);
255 1.1 cgd double (sqrt)(double x);
256 1.1 cgd void (srand)(unsigned seed);
257 1.1 cgd /* SCANFLIKE2 */
258 1.1 cgd int (sscanf)(const char *s, const char *format, ...);
259 1.1 cgd int (stat)(const char *path, struct stat *buf);
260 1.1 cgd char *(strcat)(char *s1, const char *s2);
261 1.1 cgd char *(strchr)(const char *s, int c);
262 1.1 cgd int (strcmp)(const char *s1, const char *s2);
263 1.1 cgd int (strcoll)(const char *s1, const char *s2);
264 1.1 cgd char *(strcpy)(char *s1, const char *s2);
265 1.1 cgd size_t (strcspn)(const char *s1, const char *s2);
266 1.1 cgd char *(strerror)(int errnum);
267 1.1 cgd size_t (strftime)(char *s, size_t maxsize, const char *format,
268 1.1 cgd const struct tm *timeptr);
269 1.1 cgd size_t (strlen)(const char *s);
270 1.1 cgd char *(strncat)(char *s1, const char *s2, size_t n);
271 1.1 cgd int (strncmp)(const char *s1, const char *s2, size_t n);
272 1.1 cgd char *(strncpy)(char *s1, const char *s2, size_t n);
273 1.1 cgd char *(strpbrk)(const char *s1, const char *s2);
274 1.1 cgd char *(strrchr)(const char *s, int c);
275 1.1 cgd size_t (strspn)(const char *s1, const char *s2);
276 1.1 cgd char *(strstr)(const char *s1, const char *s2);
277 1.1 cgd double (strtod)(const char *nptr, char **endptr);
278 1.1 cgd char *(strtok)(char *s1, const char *s2);
279 1.1 cgd long (strtol)(const char *nptr, char **endptr, int base);
280 1.1 cgd unsigned long (strtoul)(const char *nptr, char **endptr, int base);
281 1.1 cgd size_t (strxfrm)(char *s1, const char *s2, size_t n);
282 1.1 cgd long (sysconf)(int name);
283 1.1 cgd int (system)(const char *string);
284 1.1 cgd double (tan)(double x);
285 1.1 cgd double (tanh)(double x);
286 1.1 cgd int (tcdrain)(int fildes);
287 1.1 cgd int (tcflow)(int fildes, int action);
288 1.1 cgd int (tcflush)(int fildes, int queue_selector);
289 1.1 cgd int (tcgetattr)(int fildes, struct termios *tp);
290 1.1 cgd pid_t (tcgetpgrp)(int fildes);
291 1.1 cgd int (tcsendbreak)(int fildes, int duration);
292 1.1 cgd int (tcsetattr)(int fildes, int options, const struct termios *tp);
293 1.1 cgd int (tcsetpgrp)(int fildes, pid_t pgrpid);
294 1.1 cgd time_t (time)(time_t *timer);
295 1.1 cgd clock_t (times)(struct tms *buffer);
296 1.1 cgd FILE *(tmpfile)(void);
297 1.1 cgd char *(tmpnam)(char *s);
298 1.1 cgd int (tolower)(int c);
299 1.1 cgd int (toupper)(int c);
300 1.1 cgd char *(ttyname)(int filedes);
301 1.1 cgd void (tzset)(void);
302 1.1 cgd mode_t (umask)(mode_t cmask);
303 1.1 cgd int (uname)(struct utsname *name);
304 1.1 cgd int (ungetc)(int c, FILE *stream);
305 1.1 cgd int (unlink)(const char *path);
306 1.1 cgd int (utime)(const char *path, const struct utimbuf *times);
307 1.1 cgd int (vfprintf)(FILE *stream, const char *format, va_list arg);
308 1.1 cgd int (vprintf)(const char *format, va_list arg);
309 1.1 cgd int (vsprintf)(char *s, const char *format, va_list arg);
310 1.1 cgd pid_t (wait)(int *statloc);
311 1.1 cgd pid_t (waitpid)(pid_t pid, int *stat_loc, int options);
312 1.1 cgd size_t (wcstombs)(char *s, const wchar_t *pwcs, size_t n);
313 1.1 cgd int (wctomb)(char *s, wchar_t wchar);
314 1.1 cgd ssize_t (write)(int fildes, const void *buf, size_t nbyte);
315