jcs's openbsd hax
openbsd
1/* $OpenBSD: stdlib.h,v 1.78 2024/08/03 20:09:24 guenther Exp $ */
2/* $NetBSD: stdlib.h,v 1.25 1995/12/27 21:19:08 jtc Exp $ */
3
4/*-
5 * Copyright (c) 1990 The Regents of the University of California.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the name of the University nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 *
32 * @(#)stdlib.h 5.13 (Berkeley) 6/4/91
33 */
34
35#ifndef _STDLIB_H_
36#define _STDLIB_H_
37
38#include <sys/cdefs.h>
39#include <sys/_null.h>
40#include <machine/_types.h>
41#if __BSD_VISIBLE /* for quad_t, etc. (XXX - use protected types) */
42#include <sys/types.h>
43#endif
44
45#ifndef _SIZE_T_DEFINED_
46#define _SIZE_T_DEFINED_
47typedef __size_t size_t;
48#endif
49
50/* in C++, wchar_t is a built-in type */
51#if !defined(_WCHAR_T_DEFINED_) && !defined(__cplusplus)
52#define _WCHAR_T_DEFINED_
53typedef __wchar_t wchar_t;
54#endif
55
56typedef struct {
57 int quot; /* quotient */
58 int rem; /* remainder */
59} div_t;
60
61typedef struct {
62 long quot; /* quotient */
63 long rem; /* remainder */
64} ldiv_t;
65
66#if __ISO_C_VISIBLE >= 1999
67typedef struct {
68 long long quot; /* quotient */
69 long long rem; /* remainder */
70} lldiv_t;
71#endif
72
73#if __BSD_VISIBLE
74typedef struct {
75 quad_t quot; /* quotient */
76 quad_t rem; /* remainder */
77} qdiv_t;
78#endif
79
80#define EXIT_FAILURE 1
81#define EXIT_SUCCESS 0
82
83#define RAND_MAX 0x7fffffff
84
85#define MB_CUR_MAX __mb_cur_max()
86
87/*
88 * Some header files may define an abs macro.
89 * If defined, undef it to prevent a syntax error and issue a warning.
90 */
91#ifdef abs
92#undef abs
93#warning abs macro collides with abs() prototype, undefining
94#endif
95
96__BEGIN_DECLS
97__dead void abort(void);
98int abs(int);
99int atexit(void (*)(void));
100double atof(const char *);
101int atoi(const char *);
102long atol(const char *);
103void *bsearch(const void *, const void *, size_t, size_t,
104 int (*)(const void *, const void *));
105void *calloc(size_t, size_t);
106div_t div(int, int);
107__dead void exit(int);
108__dead void _Exit(int);
109void free(void *);
110char *getenv(const char *);
111long labs(long);
112ldiv_t ldiv(long, long);
113void *malloc(size_t);
114#if __BSD_VISIBLE
115void freezero(void *, size_t)
116 __attribute__ ((__bounded__(__buffer__,1,2)));
117void *calloc_conceal(size_t, size_t);
118void *malloc_conceal(size_t);
119void *recallocarray(void *, size_t, size_t, size_t);
120#endif /* __BSD_VISIBLE */
121void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
122int rand(void);
123void *realloc(void *, size_t);
124void srand(unsigned);
125void srand_deterministic(unsigned);
126double strtod(const char *__restrict, char **__restrict);
127float strtof(const char *__restrict, char **__restrict);
128long strtol(const char *__restrict, char **__restrict, int);
129long double
130 strtold(const char *__restrict, char **__restrict);
131unsigned long
132 strtoul(const char *__restrict, char **__restrict, int);
133int system(const char *);
134
135size_t __mb_cur_max(void);
136int mblen(const char *, size_t);
137size_t mbstowcs(wchar_t *, const char *, size_t);
138int wctomb(char *, wchar_t);
139int mbtowc(wchar_t *, const char *, size_t);
140size_t wcstombs(char *, const wchar_t *, size_t);
141
142/*
143 * IEEE Std 1003.1c-95, also adopted by X/Open CAE Spec Issue 5 Version 2
144 */
145#if __BSD_VISIBLE || __POSIX_VISIBLE >= 199506 || defined(_REENTRANT)
146int rand_r(unsigned int *);
147#endif
148
149#if __BSD_VISIBLE || __XPG_VISIBLE >= 400
150double drand48(void);
151double erand48(unsigned short[3]);
152long jrand48(unsigned short[3]);
153void lcong48(unsigned short[7]);
154void lcong48_deterministic(unsigned short[7]);
155long lrand48(void);
156long mrand48(void);
157long nrand48(unsigned short[3]);
158unsigned short *seed48(unsigned short[3]);
159unsigned short *seed48_deterministic(unsigned short[3]);
160void srand48(long);
161void srand48_deterministic(long);
162
163int putenv(char *);
164#endif
165
166/*
167 * XSI functions marked LEGACY in IEEE Std 1003.1-2001 (POSIX) and
168 * removed in IEEE Std 1003.1-2008
169 */
170#if __BSD_VISIBLE || __XPG_VISIBLE < 700
171char *ecvt(double, int, int *, int *);
172char *fcvt(double, int, int *, int *);
173char *gcvt(double, int, char *);
174#if __BSD_VISIBLE || __XPG_VISIBLE >= 420
175char *mktemp(char *);
176#endif
177#endif /* __BSD_VISIBLE || __XPG_VISIBLE < 700 */
178
179#if __BSD_VISIBLE || __XPG_VISIBLE >= 420
180long a64l(const char *);
181char *l64a(long);
182
183char *initstate(unsigned int, char *, size_t)
184 __attribute__((__bounded__ (__string__,2,3)));
185long random(void);
186char *setstate(char *);
187void srandom(unsigned int);
188void srandom_deterministic(unsigned int);
189
190char *realpath(const char *, char *)
191 __attribute__((__bounded__ (__minbytes__,2,1024)));
192
193/*
194 * XSI functions marked LEGACY in XPG5 and removed in IEEE Std 1003.1-2001
195 */
196#if __BSD_VISIBLE || __XPG_VISIBLE < 600
197int ttyslot(void);
198void *valloc(size_t); /* obsoleted by malloc() */
199#endif
200#endif /* __BSD_VISIBLE || __XPG_VISIBLE >= 420 */
201
202/*
203 * 4.4BSD, then XSI in XPG4.2, then added to POSIX base in IEEE Std 1003.1-2008
204 */
205#if __BSD_VISIBLE || __XPG_VISIBLE >= 420 || __POSIX_VISIBLE >= 200809
206int mkstemp(char *);
207#endif
208
209/*
210 * ISO C99
211 */
212#if __ISO_C_VISIBLE >= 1999
213long long
214 atoll(const char *);
215long long
216 llabs(long long);
217lldiv_t
218 lldiv(long long, long long);
219long long
220 strtoll(const char *__restrict, char **__restrict, int);
221unsigned long long
222 strtoull(const char *__restrict, char **__restrict, int);
223#endif
224
225#if __ISO_C_VISIBLE >= 2011
226void *
227 aligned_alloc(size_t, size_t);
228#endif
229
230/*
231 * The Open Group Base Specifications, Issue 6; IEEE Std 1003.1-2001 (POSIX)
232 */
233#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
234int posix_memalign(void **, size_t, size_t);
235int setenv(const char *, const char *, int);
236int unsetenv(const char *);
237#endif
238#if __XPG_VISIBLE >= 420 || __POSIX_VISIBLE >= 200112
239char *ptsname(int);
240int grantpt(int);
241int unlockpt(int);
242#endif
243#if __POSIX_VISIBLE >= 200112
244int posix_openpt(int);
245#endif
246
247/*
248 * The Open Group Base Specifications, Issue 7; IEEE Std 1003.1-2008 (POSIX)
249 */
250#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
251char *mkdtemp(char *);
252#endif
253
254#if __XPG_VISIBLE >= 420 || __POSIX_VISIBLE >= 200809
255int getsubopt(char **, char * const *, char **);
256#endif
257
258/*
259 * The Open Group Base Specifications, Issue 8
260 */
261#if __POSIX_VISIBLE >= 202405 || __BSD_VISIBLE
262int mkostemp(char *, int);
263void *reallocarray(void *, size_t, size_t);
264#endif
265
266#if __BSD_VISIBLE
267#define alloca(n) __builtin_alloca(n)
268
269char *getbsize(int *, long *);
270char *cgetcap(char *, const char *, int);
271int cgetclose(void);
272int cgetent(char **, char **, const char *);
273int cgetfirst(char **, char **);
274int cgetmatch(char *, const char *);
275int cgetnext(char **, char **);
276int cgetnum(char *, const char *, long *);
277int cgetset(const char *);
278int cgetusedb(int);
279int cgetstr(char *, const char *, char **);
280int cgetustr(char *, const char *, char **);
281
282int daemon(int, int);
283char *devname(dev_t, mode_t);
284int getloadavg(double [], int);
285
286const char *
287 getprogname(void);
288void setprogname(const char *);
289
290extern char *suboptarg; /* getsubopt(3) external variable */
291
292char * mkdtemps(char *, int);
293int mkstemps(char *, int);
294int mkostemps(char *, int, int);
295
296int heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
297int mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
298int radixsort(const unsigned char **, int, const unsigned char *,
299 unsigned);
300int sradixsort(const unsigned char **, int, const unsigned char *,
301 unsigned);
302
303void srandomdev(void);
304long long
305 strtonum(const char *, long long, long long, const char **);
306
307void setproctitle(const char *, ...)
308 __attribute__((__format__ (__printf__, 1, 2)));
309
310quad_t qabs(quad_t);
311qdiv_t qdiv(quad_t, quad_t);
312quad_t strtoq(const char *__restrict, char **__restrict, int);
313u_quad_t strtouq(const char *__restrict, char **__restrict, int);
314
315uint32_t arc4random(void);
316uint32_t arc4random_uniform(uint32_t);
317void arc4random_buf(void *, size_t)
318 __attribute__((__bounded__ (__buffer__,1,2)));
319
320#endif /* __BSD_VISIBLE */
321
322__END_DECLS
323
324#endif /* _STDLIB_H_ */