xref: /openbsd-src/include/stdlib.h (revision 33b792a3c1c87b47219fdf9a73548c4003214de3)
1 /*	$OpenBSD: stdlib.h,v 1.17 2002/02/17 19:42:21 millert 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. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *	This product includes software developed by the University of
19  *	California, Berkeley and its contributors.
20  * 4. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  *	@(#)stdlib.h	5.13 (Berkeley) 6/4/91
37  */
38 
39 #ifndef _STDLIB_H_
40 #define _STDLIB_H_
41 #include <machine/ansi.h>
42 
43 #if !defined(_ANSI_SOURCE)	/* for quad_t, etc. */
44 #include <sys/types.h>
45 #endif
46 
47 #ifdef	_BSD_SIZE_T_
48 typedef	_BSD_SIZE_T_	size_t;
49 #undef	_BSD_SIZE_T_
50 #endif
51 
52 #ifdef	_BSD_WCHAR_T_
53 /* in C++, wchar_t is a built-in type */
54 #ifndef __cplusplus
55 typedef	_BSD_WCHAR_T_	wchar_t;
56 #endif
57 #undef	_BSD_WCHAR_T_
58 #endif
59 
60 typedef struct {
61 	int quot;		/* quotient */
62 	int rem;		/* remainder */
63 } div_t;
64 
65 typedef struct {
66 	long quot;		/* quotient */
67 	long rem;		/* remainder */
68 } ldiv_t;
69 
70 #if !defined(_ANSI_SOURCE)
71 typedef struct {
72 	quad_t quot;		/* quotient */
73 	quad_t rem;		/* remainder */
74 } qdiv_t;
75 #endif
76 
77 
78 #ifndef	NULL
79 #ifdef 	__GNUG__
80 #define NULL	__null
81 #else
82 #define	NULL	0
83 #endif
84 #endif
85 
86 #define	EXIT_FAILURE	1
87 #define	EXIT_SUCCESS	0
88 
89 #define	RAND_MAX	0x7fffffff
90 
91 #define	MB_CUR_MAX	1	/* XXX */
92 
93 #include <sys/cdefs.h>
94 
95 __BEGIN_DECLS
96 __dead void	 abort(void);
97 int	 abs(int);
98 int	 atexit(void (*)(void));
99 double	 atof(const char *);
100 int	 atoi(const char *);
101 long	 atol(const char *);
102 void	*bsearch(const void *, const void *, size_t, size_t,
103 	    int (*)(const void *, const void *));
104 void	*calloc(size_t, size_t);
105 div_t	 div(int, int);
106 __dead void	 exit(int);
107 void	 free(void *);
108 char	*getenv(const char *);
109 long	 labs(long);
110 ldiv_t	 ldiv(long, long);
111 void	*malloc(size_t);
112 void	 qsort(void *, size_t, size_t, int (*)(const void *, const void *));
113 int	 rand(void);
114 int	 rand_r(unsigned int *);
115 void	*realloc(void *, size_t);
116 void	 srand(unsigned);
117 double	 strtod(const char *, char **);
118 long	 strtol(const char *, char **, int);
119 unsigned long
120 	 strtoul(const char *, char **, int);
121 int	 system(const char *);
122 
123 /* these are currently just stubs */
124 int	 mblen(const char *, size_t);
125 size_t	 mbstowcs(wchar_t *, const char *, size_t);
126 int	 wctomb(char *, wchar_t);
127 int	 mbtowc(wchar_t *, const char *, size_t);
128 size_t	 wcstombs(char *, const wchar_t *, size_t);
129 
130 #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
131 #if defined(alloca) && (alloca == __builtin_alloca) && (__GNUC__ < 2)
132 void  *alloca(int);     /* built-in for gcc */
133 #else
134 void  *alloca(size_t);
135 #endif /* __GNUC__ */
136 
137 char	*getbsize(int *, long *);
138 char	*cgetcap(char *, const char *, int);
139 int	 cgetclose(void);
140 int	 cgetent(char **, char **, const char *);
141 int	 cgetfirst(char **, char **);
142 int	 cgetmatch(char *, const char *);
143 int	 cgetnext(char **, char **);
144 int	 cgetnum(char *, const char *, long *);
145 int	 cgetset(const char *);
146 int	 cgetusedb(int);
147 int	 cgetstr(char *, const char *, char **);
148 int	 cgetustr(char *, const char *, char **);
149 
150 int	 daemon(int, int);
151 char	*devname(int, int);
152 int	 getloadavg(double [], int);
153 
154 long	 a64l(const char *);
155 char	*l64a(long);
156 
157 void	 cfree(void *);
158 
159 int	 getopt(int, char * const *, const char *);
160 extern	 char *optarg;			/* getopt(3) external variables */
161 extern	 int opterr;
162 extern	 int optind;
163 extern	 int optopt;
164 extern	 int optreset;
165 int	 getsubopt(char **, char * const *, char **);
166 extern	 char *suboptarg;		/* getsubopt(3) external variable */
167 
168 int	 heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
169 int	 mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
170 int	 radixsort(const unsigned char **, int, const unsigned char *,
171 	    unsigned);
172 int	 sradixsort(const unsigned char **, int, const unsigned char *,
173 	    unsigned);
174 
175 char	*initstate(unsigned int, char *, size_t);
176 long	 random(void);
177 char	*realpath(const char *, char *);
178 char	*setstate(const char *);
179 void	 srandom(unsigned int);
180 void	 srandomdev(void);
181 
182 int	 putenv(const char *);
183 int	 setenv(const char *, const char *, int);
184 void	 unsetenv(const char *);
185 void	 setproctitle(const char *, ...)
186 	__attribute__((__format__ (__printf__, 1, 2)));
187 
188 quad_t	 qabs(quad_t);
189 qdiv_t	 qdiv(quad_t, quad_t);
190 quad_t	 strtoq(const char *, char **, int);
191 u_quad_t strtouq(const char *, char **, int);
192 
193 double	 drand48(void);
194 double	 erand48(unsigned short[3]);
195 long	 jrand48(unsigned short[3]);
196 void	 lcong48(unsigned short[7]);
197 long	 lrand48(void);
198 long	 mrand48(void);
199 long	 nrand48(unsigned short[3]);
200 unsigned short *seed48(unsigned short[3]);
201 void	 srand48(long);
202 
203 u_int32_t arc4random(void);
204 void	arc4random_stir(void);
205 void	arc4random_addrandom(unsigned char *, int);
206 #endif /* !_ANSI_SOURCE && !_POSIX_SOURCE */
207 
208 __END_DECLS
209 
210 #endif /* _STDLIB_H_ */
211