xref: /illumos-gate/usr/src/head/iso/stdlib_iso.h (revision 7c478bd9)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate /*	Copyright (c) 1988 AT&T	*/
28*7c478bd9Sstevel@tonic-gate /*	  All Rights Reserved  	*/
29*7c478bd9Sstevel@tonic-gate 
30*7c478bd9Sstevel@tonic-gate 
31*7c478bd9Sstevel@tonic-gate /*
32*7c478bd9Sstevel@tonic-gate  * An application should not include this header directly.  Instead it
33*7c478bd9Sstevel@tonic-gate  * should be included only through the inclusion of other Sun headers.
34*7c478bd9Sstevel@tonic-gate  *
35*7c478bd9Sstevel@tonic-gate  * The contents of this header is limited to identifiers specified in the
36*7c478bd9Sstevel@tonic-gate  * C Standard.  Any new identifiers specified in future amendments to the
37*7c478bd9Sstevel@tonic-gate  * C Standard must be placed in this header.  If these new identifiers
38*7c478bd9Sstevel@tonic-gate  * are required to also be in the C++ Standard "std" namespace, then for
39*7c478bd9Sstevel@tonic-gate  * anything other than macro definitions, corresponding "using" directives
40*7c478bd9Sstevel@tonic-gate  * must also be added to <locale.h>.
41*7c478bd9Sstevel@tonic-gate  */
42*7c478bd9Sstevel@tonic-gate 
43*7c478bd9Sstevel@tonic-gate #ifndef _ISO_STDLIB_ISO_H
44*7c478bd9Sstevel@tonic-gate #define	_ISO_STDLIB_ISO_H
45*7c478bd9Sstevel@tonic-gate 
46*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
47*7c478bd9Sstevel@tonic-gate 
48*7c478bd9Sstevel@tonic-gate #include <sys/feature_tests.h>
49*7c478bd9Sstevel@tonic-gate 
50*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
51*7c478bd9Sstevel@tonic-gate extern "C" {
52*7c478bd9Sstevel@tonic-gate #endif
53*7c478bd9Sstevel@tonic-gate 
54*7c478bd9Sstevel@tonic-gate #if defined(__STDC__)
55*7c478bd9Sstevel@tonic-gate extern unsigned char	__ctype[];
56*7c478bd9Sstevel@tonic-gate #define	MB_CUR_MAX	__ctype[520]
57*7c478bd9Sstevel@tonic-gate #else
58*7c478bd9Sstevel@tonic-gate extern unsigned char	_ctype[];
59*7c478bd9Sstevel@tonic-gate #define	MB_CUR_MAX	_ctype[520]
60*7c478bd9Sstevel@tonic-gate #endif
61*7c478bd9Sstevel@tonic-gate 
62*7c478bd9Sstevel@tonic-gate #if __cplusplus >= 199711L
63*7c478bd9Sstevel@tonic-gate namespace std {
64*7c478bd9Sstevel@tonic-gate #endif
65*7c478bd9Sstevel@tonic-gate 
66*7c478bd9Sstevel@tonic-gate typedef	struct {
67*7c478bd9Sstevel@tonic-gate 	int	quot;
68*7c478bd9Sstevel@tonic-gate 	int	rem;
69*7c478bd9Sstevel@tonic-gate } div_t;
70*7c478bd9Sstevel@tonic-gate 
71*7c478bd9Sstevel@tonic-gate typedef struct {
72*7c478bd9Sstevel@tonic-gate 	long	quot;
73*7c478bd9Sstevel@tonic-gate 	long	rem;
74*7c478bd9Sstevel@tonic-gate } ldiv_t;
75*7c478bd9Sstevel@tonic-gate 
76*7c478bd9Sstevel@tonic-gate #if !defined(_SIZE_T) || __cplusplus >= 199711L
77*7c478bd9Sstevel@tonic-gate #define	_SIZE_T
78*7c478bd9Sstevel@tonic-gate #if defined(_LP64) || defined(_I32LPx)
79*7c478bd9Sstevel@tonic-gate typedef unsigned long	size_t;		/* size of something in bytes */
80*7c478bd9Sstevel@tonic-gate #else
81*7c478bd9Sstevel@tonic-gate typedef unsigned int    size_t;		/* (historical version) */
82*7c478bd9Sstevel@tonic-gate #endif
83*7c478bd9Sstevel@tonic-gate #endif	/* !_SIZE_T */
84*7c478bd9Sstevel@tonic-gate 
85*7c478bd9Sstevel@tonic-gate #ifndef	NULL
86*7c478bd9Sstevel@tonic-gate #if defined(_LP64)
87*7c478bd9Sstevel@tonic-gate #define	NULL	0L
88*7c478bd9Sstevel@tonic-gate #else
89*7c478bd9Sstevel@tonic-gate #define	NULL	0
90*7c478bd9Sstevel@tonic-gate #endif
91*7c478bd9Sstevel@tonic-gate #endif
92*7c478bd9Sstevel@tonic-gate 
93*7c478bd9Sstevel@tonic-gate #define	EXIT_FAILURE	1
94*7c478bd9Sstevel@tonic-gate #define	EXIT_SUCCESS    0
95*7c478bd9Sstevel@tonic-gate #define	RAND_MAX	32767
96*7c478bd9Sstevel@tonic-gate 
97*7c478bd9Sstevel@tonic-gate /*
98*7c478bd9Sstevel@tonic-gate  * wchar_t is a built-in type in standard C++ and as such is not
99*7c478bd9Sstevel@tonic-gate  * defined here when using standard C++. However, the GNU compiler
100*7c478bd9Sstevel@tonic-gate  * fixincludes utility nonetheless creates it's own version of this
101*7c478bd9Sstevel@tonic-gate  * header for use by gcc and g++. In that version it adds a redundant
102*7c478bd9Sstevel@tonic-gate  * guard for __cplusplus. To avoid the creation of a gcc/g++ specific
103*7c478bd9Sstevel@tonic-gate  * header we need to include the following magic comment:
104*7c478bd9Sstevel@tonic-gate  *
105*7c478bd9Sstevel@tonic-gate  * we must use the C++ compiler's type
106*7c478bd9Sstevel@tonic-gate  *
107*7c478bd9Sstevel@tonic-gate  * The above comment should not be removed or changed until GNU
108*7c478bd9Sstevel@tonic-gate  * gcc/fixinc/inclhack.def is updated to bypass this header.
109*7c478bd9Sstevel@tonic-gate  */
110*7c478bd9Sstevel@tonic-gate #if !defined(__cplusplus) || (__cplusplus < 199711L && !defined(__GNUG__))
111*7c478bd9Sstevel@tonic-gate #ifndef _WCHAR_T
112*7c478bd9Sstevel@tonic-gate #define	_WCHAR_T
113*7c478bd9Sstevel@tonic-gate #if defined(_LP64)
114*7c478bd9Sstevel@tonic-gate typedef	int	wchar_t;
115*7c478bd9Sstevel@tonic-gate #else
116*7c478bd9Sstevel@tonic-gate typedef long	wchar_t;
117*7c478bd9Sstevel@tonic-gate #endif
118*7c478bd9Sstevel@tonic-gate #endif	/* !_WCHAR_T */
119*7c478bd9Sstevel@tonic-gate #endif	/* !defined(__cplusplus) ... */
120*7c478bd9Sstevel@tonic-gate 
121*7c478bd9Sstevel@tonic-gate #if defined(__STDC__)
122*7c478bd9Sstevel@tonic-gate 
123*7c478bd9Sstevel@tonic-gate extern void abort(void) __NORETURN;
124*7c478bd9Sstevel@tonic-gate extern int abs(int);
125*7c478bd9Sstevel@tonic-gate extern int atexit(void (*)(void));
126*7c478bd9Sstevel@tonic-gate extern double atof(const char *);
127*7c478bd9Sstevel@tonic-gate extern int atoi(const char *);
128*7c478bd9Sstevel@tonic-gate extern long int atol(const char *);
129*7c478bd9Sstevel@tonic-gate extern void *bsearch(const void *, const void *, size_t, size_t,
130*7c478bd9Sstevel@tonic-gate 	int (*)(const void *, const void *));
131*7c478bd9Sstevel@tonic-gate #if __cplusplus >= 199711L
132*7c478bd9Sstevel@tonic-gate extern "C++" {
133*7c478bd9Sstevel@tonic-gate 	void *bsearch(const void *, const void *, size_t, size_t,
134*7c478bd9Sstevel@tonic-gate 		int (*)(const void *, const void *));
135*7c478bd9Sstevel@tonic-gate }
136*7c478bd9Sstevel@tonic-gate #endif /* __cplusplus >= 199711L */
137*7c478bd9Sstevel@tonic-gate extern void *calloc(size_t, size_t);
138*7c478bd9Sstevel@tonic-gate extern div_t div(int, int);
139*7c478bd9Sstevel@tonic-gate extern void exit(int)
140*7c478bd9Sstevel@tonic-gate 	__NORETURN;
141*7c478bd9Sstevel@tonic-gate extern void free(void *);
142*7c478bd9Sstevel@tonic-gate extern char *getenv(const char *);
143*7c478bd9Sstevel@tonic-gate extern long int labs(long);
144*7c478bd9Sstevel@tonic-gate extern ldiv_t ldiv(long, long);
145*7c478bd9Sstevel@tonic-gate extern void *malloc(size_t);
146*7c478bd9Sstevel@tonic-gate extern int mblen(const char *, size_t);
147*7c478bd9Sstevel@tonic-gate extern size_t mbstowcs(wchar_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD,
148*7c478bd9Sstevel@tonic-gate 	size_t);
149*7c478bd9Sstevel@tonic-gate extern int mbtowc(wchar_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD, size_t);
150*7c478bd9Sstevel@tonic-gate extern void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
151*7c478bd9Sstevel@tonic-gate #if __cplusplus >= 199711L
152*7c478bd9Sstevel@tonic-gate extern "C++" {
153*7c478bd9Sstevel@tonic-gate 	void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
154*7c478bd9Sstevel@tonic-gate }
155*7c478bd9Sstevel@tonic-gate #endif /* __cplusplus >= 199711L */
156*7c478bd9Sstevel@tonic-gate extern int rand(void);
157*7c478bd9Sstevel@tonic-gate extern void *realloc(void *, size_t);
158*7c478bd9Sstevel@tonic-gate extern void srand(unsigned int);
159*7c478bd9Sstevel@tonic-gate extern double strtod(const char *_RESTRICT_KYWD, char **_RESTRICT_KYWD);
160*7c478bd9Sstevel@tonic-gate extern long int strtol(const char *_RESTRICT_KYWD, char **_RESTRICT_KYWD, int);
161*7c478bd9Sstevel@tonic-gate extern unsigned long int strtoul(const char *_RESTRICT_KYWD,
162*7c478bd9Sstevel@tonic-gate 	char **_RESTRICT_KYWD, int);
163*7c478bd9Sstevel@tonic-gate extern int system(const char *);
164*7c478bd9Sstevel@tonic-gate extern int wctomb(char *, wchar_t);
165*7c478bd9Sstevel@tonic-gate extern size_t wcstombs(char *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
166*7c478bd9Sstevel@tonic-gate 	size_t);
167*7c478bd9Sstevel@tonic-gate 
168*7c478bd9Sstevel@tonic-gate #if __cplusplus >= 199711L
169*7c478bd9Sstevel@tonic-gate extern "C++" {
170*7c478bd9Sstevel@tonic-gate 	inline long   abs(long _l) { return labs(_l); }
171*7c478bd9Sstevel@tonic-gate 	inline ldiv_t div(long _l1, long _l2) { return ldiv(_l1, _l2); }
172*7c478bd9Sstevel@tonic-gate }
173*7c478bd9Sstevel@tonic-gate #endif /* __cplusplus */
174*7c478bd9Sstevel@tonic-gate 
175*7c478bd9Sstevel@tonic-gate #else /* not __STDC__ */
176*7c478bd9Sstevel@tonic-gate 
177*7c478bd9Sstevel@tonic-gate extern void abort();
178*7c478bd9Sstevel@tonic-gate extern int abs();
179*7c478bd9Sstevel@tonic-gate extern int atexit();
180*7c478bd9Sstevel@tonic-gate extern double atof();
181*7c478bd9Sstevel@tonic-gate extern int atoi();
182*7c478bd9Sstevel@tonic-gate extern long int atol();
183*7c478bd9Sstevel@tonic-gate extern void *bsearch();
184*7c478bd9Sstevel@tonic-gate extern void *calloc();
185*7c478bd9Sstevel@tonic-gate extern div_t div();
186*7c478bd9Sstevel@tonic-gate extern void exit();
187*7c478bd9Sstevel@tonic-gate extern void free();
188*7c478bd9Sstevel@tonic-gate extern char *getenv();
189*7c478bd9Sstevel@tonic-gate extern long int labs();
190*7c478bd9Sstevel@tonic-gate extern ldiv_t ldiv();
191*7c478bd9Sstevel@tonic-gate extern void *malloc();
192*7c478bd9Sstevel@tonic-gate extern int mblen();
193*7c478bd9Sstevel@tonic-gate extern size_t mbstowcs();
194*7c478bd9Sstevel@tonic-gate extern int mbtowc();
195*7c478bd9Sstevel@tonic-gate extern void qsort();
196*7c478bd9Sstevel@tonic-gate extern int rand();
197*7c478bd9Sstevel@tonic-gate extern void *realloc();
198*7c478bd9Sstevel@tonic-gate extern void srand();
199*7c478bd9Sstevel@tonic-gate extern double strtod();
200*7c478bd9Sstevel@tonic-gate extern long int strtol();
201*7c478bd9Sstevel@tonic-gate extern unsigned long strtoul();
202*7c478bd9Sstevel@tonic-gate extern int system();
203*7c478bd9Sstevel@tonic-gate extern int wctomb();
204*7c478bd9Sstevel@tonic-gate extern size_t wcstombs();
205*7c478bd9Sstevel@tonic-gate 
206*7c478bd9Sstevel@tonic-gate #endif	/* __STDC__ */
207*7c478bd9Sstevel@tonic-gate 
208*7c478bd9Sstevel@tonic-gate #if __cplusplus >= 199711L
209*7c478bd9Sstevel@tonic-gate }
210*7c478bd9Sstevel@tonic-gate #endif /* end of namespace std */
211*7c478bd9Sstevel@tonic-gate 
212*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
213*7c478bd9Sstevel@tonic-gate }
214*7c478bd9Sstevel@tonic-gate #endif
215*7c478bd9Sstevel@tonic-gate 
216*7c478bd9Sstevel@tonic-gate #endif	/* _ISO_STDLIB_ISO_H */
217