xref: /netbsd-src/include/stdlib.h (revision fc9238f143b09e6ee901553203bb62aea90a68ac)
1*fc9238f1Snia /*	$NetBSD: stdlib.h,v 1.128 2024/11/02 10:49:10 nia Exp $	*/
24d2cbfceScgd 
361f28255Scgd /*-
4b7b7322cSperry  * Copyright (c) 1990, 1993
5b7b7322cSperry  *	The Regents of the University of California.  All rights reserved.
661f28255Scgd  *
761f28255Scgd  * Redistribution and use in source and binary forms, with or without
861f28255Scgd  * modification, are permitted provided that the following conditions
961f28255Scgd  * are met:
1061f28255Scgd  * 1. Redistributions of source code must retain the above copyright
1161f28255Scgd  *    notice, this list of conditions and the following disclaimer.
1261f28255Scgd  * 2. Redistributions in binary form must reproduce the above copyright
1361f28255Scgd  *    notice, this list of conditions and the following disclaimer in the
1461f28255Scgd  *    documentation and/or other materials provided with the distribution.
15039cc956Sagc  * 3. Neither the name of the University nor the names of its contributors
1661f28255Scgd  *    may be used to endorse or promote products derived from this software
1761f28255Scgd  *    without specific prior written permission.
1861f28255Scgd  *
1961f28255Scgd  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2061f28255Scgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2161f28255Scgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2261f28255Scgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2361f28255Scgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2461f28255Scgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2561f28255Scgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2661f28255Scgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2761f28255Scgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2861f28255Scgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2961f28255Scgd  * SUCH DAMAGE.
3061f28255Scgd  *
31b7b7322cSperry  *	@(#)stdlib.h	8.5 (Berkeley) 5/19/95
3261f28255Scgd  */
3361f28255Scgd 
3461f28255Scgd #ifndef _STDLIB_H_
3561f28255Scgd #define _STDLIB_H_
3611b51f8dSjtc 
3729916a94Smycroft #include <sys/cdefs.h>
38ff08122eSkleink #include <sys/featuretest.h>
39ff08122eSkleink 
404be7a2dcSbjh21 #if defined(_NETBSD_SOURCE)
41ff08122eSkleink #include <sys/types.h>		/* for quad_t, etc. */
42f442fd56Sjtc #endif
43f442fd56Sjtc 
44b7b7322cSperry #include <machine/ansi.h>
45b7b7322cSperry 
462922de74Scgd #ifdef	_BSD_SIZE_T_
472922de74Scgd typedef	_BSD_SIZE_T_	size_t;
482922de74Scgd #undef	_BSD_SIZE_T_
4911b51f8dSjtc #endif
5061f28255Scgd 
51db576bf3Schristos #if defined(_BSD_WCHAR_T_) && !defined(__cplusplus)
522922de74Scgd typedef	_BSD_WCHAR_T_	wchar_t;
532922de74Scgd #undef	_BSD_WCHAR_T_
5461f28255Scgd #endif
5561f28255Scgd 
5661f28255Scgd typedef struct {
5761f28255Scgd 	int quot;		/* quotient */
5861f28255Scgd 	int rem;		/* remainder */
5961f28255Scgd } div_t;
60f442fd56Sjtc 
6161f28255Scgd typedef struct {
6261f28255Scgd 	long quot;		/* quotient */
6361f28255Scgd 	long rem;		/* remainder */
6461f28255Scgd } ldiv_t;
6561f28255Scgd 
66f46ca6faSriastradh #if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) >= 199901L || \
67f46ca6faSriastradh     defined(_NETBSD_SOURCE) || (__cplusplus - 0) >= 201103L
68e4d7c2e3Skleink typedef struct {
69e4d7c2e3Skleink 	/* LONGLONG */
70e4d7c2e3Skleink 	long long int quot;	/* quotient */
71e4d7c2e3Skleink 	/* LONGLONG */
72e4d7c2e3Skleink 	long long int rem;	/* remainder */
73e4d7c2e3Skleink } lldiv_t;
74e4d7c2e3Skleink #endif
75e4d7c2e3Skleink 
764be7a2dcSbjh21 #if defined(_NETBSD_SOURCE)
77f442fd56Sjtc typedef struct {
78f442fd56Sjtc 	quad_t quot;		/* quotient */
79f442fd56Sjtc 	quad_t rem;		/* remainder */
80f442fd56Sjtc } qdiv_t;
81f442fd56Sjtc #endif
82f442fd56Sjtc 
83f442fd56Sjtc 
841bba558eSkleink #include <sys/null.h>
8509a53cd2Sjtc 
8661f28255Scgd #define	EXIT_FAILURE	1
8761f28255Scgd #define	EXIT_SUCCESS	0
8861f28255Scgd 
8961f28255Scgd #define	RAND_MAX	0x7fffffff
9061f28255Scgd 
91bc3eaa0aSkleink extern size_t __mb_cur_max;
92b7b7322cSperry #define	MB_CUR_MAX	__mb_cur_max
9361f28255Scgd 
9461f28255Scgd __BEGIN_DECLS
95fc883a79Sperry __dead	 void _Exit(int);
96fc883a79Sperry __dead	 void abort(void);
97b3991c88Smaya __constfunc	int abs(int);
9819b7469aSperry int	 atexit(void (*)(void));
9919b7469aSperry double	 atof(const char *);
10019b7469aSperry int	 atoi(const char *);
10119b7469aSperry long	 atol(const char *);
1020b49c770Schristos #ifndef __BSEARCH_DECLARED
1030b49c770Schristos #define __BSEARCH_DECLARED
1040b49c770Schristos /* also in search.h */
10519b7469aSperry void	*bsearch(const void *, const void *, size_t, size_t,
10619b7469aSperry     int (*)(const void *, const void *));
1070b49c770Schristos #endif /* __BSEARCH_DECLARED */
10819b7469aSperry void	*calloc(size_t, size_t);
10919b7469aSperry div_t	 div(int, int);
110fc883a79Sperry __dead	 void exit(int);
11119b7469aSperry void	 free(void *);
11219b7469aSperry __aconst char *getenv(const char *);
113b3991c88Smaya __constfunc long
11419b7469aSperry 	 labs(long);
11519b7469aSperry ldiv_t	 ldiv(long, long);
11619b7469aSperry void	*malloc(size_t);
11719b7469aSperry void	 qsort(void *, size_t, size_t, int (*)(const void *, const void *));
11819b7469aSperry int	 rand(void);
11919b7469aSperry void	*realloc(void *, size_t);
12019b7469aSperry void	 srand(unsigned);
12119b7469aSperry double	 strtod(const char * __restrict, char ** __restrict);
12219b7469aSperry long	 strtol(const char * __restrict, char ** __restrict, int);
12361f28255Scgd unsigned long
12419b7469aSperry 	 strtoul(const char * __restrict, char ** __restrict, int);
1255bdc2761Schristos #ifdef _OPENBSD_SOURCE
126f1e6017cSchristos long long strtonum(const char *, long long, long long, const char **);
1275bdc2761Schristos #endif
12819b7469aSperry int	 system(const char *);
12961f28255Scgd 
130b7b7322cSperry /* These are currently just stubs. */
13119b7469aSperry int	 mblen(const char *, size_t);
13219b7469aSperry size_t	 mbstowcs(wchar_t * __restrict, const char * __restrict, size_t);
13319b7469aSperry int	 wctomb(char *, wchar_t);
13419b7469aSperry int	 mbtowc(wchar_t * __restrict, const char * __restrict, size_t);
13519b7469aSperry size_t	 wcstombs(char * __restrict, const wchar_t * __restrict, size_t);
13661f28255Scgd 
1374be7a2dcSbjh21 #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
1384be7a2dcSbjh21     defined(_NETBSD_SOURCE)
139ff08122eSkleink 
140ff08122eSkleink 
1419b9e2550Skleink /*
1429b9e2550Skleink  * IEEE Std 1003.1c-95, also adopted by X/Open CAE Spec Issue 5 Version 2
1439b9e2550Skleink  */
1444be7a2dcSbjh21 #if (_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \
1454be7a2dcSbjh21     defined(_REENTRANT) || defined(_NETBSD_SOURCE)
14619b7469aSperry int	 rand_r(unsigned int *);
1479b9e2550Skleink #endif
148ff08122eSkleink 
149ff08122eSkleink 
1509b9e2550Skleink /*
1519b9e2550Skleink  * X/Open Portability Guide >= Issue 4
1529b9e2550Skleink  */
1537cc98087Sdrochner #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
15419b7469aSperry double	 drand48(void);
15519b7469aSperry double	 erand48(unsigned short[3]);
15619b7469aSperry long	 jrand48(unsigned short[3]);
15719b7469aSperry void	 lcong48(unsigned short[7]);
15819b7469aSperry long	 lrand48(void);
15919b7469aSperry long	 mrand48(void);
16019b7469aSperry long	 nrand48(unsigned short[3]);
161ff08122eSkleink unsigned short *
16219b7469aSperry 	 seed48(unsigned short[3]);
16319b7469aSperry void	 srand48(long);
164ff08122eSkleink 
1650bcf0d6fSchristos #ifndef __LIBC12_SOURCE__
1660bcf0d6fSchristos int	 putenv(char *) __RENAME(__putenv50);
1670bcf0d6fSchristos #endif
1689b9e2550Skleink #endif
1699b9e2550Skleink 
1709b9e2550Skleink 
1719b9e2550Skleink /*
1729b9e2550Skleink  * X/Open Portability Guide >= Issue 4 Version 2
1739b9e2550Skleink  */
1744be7a2dcSbjh21 #if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
1754be7a2dcSbjh21     (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
17619b7469aSperry long	 a64l(const char *);
17719b7469aSperry char	*l64a(long);
1789b9e2550Skleink 
17919b7469aSperry long	 random(void);
18019b7469aSperry char	*setstate(char *);
1811eb0dcbbSchristos #ifndef __LIBC12_SOURCE__
182b27e1354Schristos char	*initstate(unsigned int, char *, size_t) __RENAME(__initstate60);
183b27e1354Schristos void	 srandom(unsigned int) __RENAME(__srandom60);
1841eb0dcbbSchristos #endif
185c75e135bSchristos #ifdef _NETBSD_SOURCE
186e3372d31Syamt #define	RANDOM_MAX	0x7fffffff	/* (((long)1 << 31) - 1) */
187e00a3615Schristos int	 mkostemps(char *, int, int);
188c75e135bSchristos #endif
1899b9e2550Skleink 
19008cd5f47Schristos char	*mktemp(char *)
19108cd5f47Schristos #ifdef __MKTEMP_OK__
19208cd5f47Schristos 	__RENAME(_mktemp)
193ab22ce8dSmycroft #endif
19408cd5f47Schristos 	;
1959b9e2550Skleink 
19619b7469aSperry int	 setkey(const char *);
1979b9e2550Skleink 
1986ddff5efSchristos char	*realpath(const char * __restrict, char * __restrict);
1999b9e2550Skleink 
20019b7469aSperry int	 ttyslot(void);
2019b9e2550Skleink 
20219b7469aSperry void	*valloc(size_t);		/* obsoleted by malloc() */
20358fadb2dSchristos 
20419b7469aSperry int	 grantpt(int);
20519b7469aSperry int	 unlockpt(int);
20619b7469aSperry char	*ptsname(int);
2079b9e2550Skleink #endif
2089b9e2550Skleink 
209e4d7c2e3Skleink /*
210e4d7c2e3Skleink  * ISO C99
211e4d7c2e3Skleink  */
2124be7a2dcSbjh21 #if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) >= 199901L || \
2132e24f900Sjoerg     defined(_NETBSD_SOURCE) || (__cplusplus - 0) >= 201103L
2142e24f900Sjoerg 
215e4d7c2e3Skleink /* LONGLONG */
21619b7469aSperry long long int	atoll(const char *);
217e4d7c2e3Skleink /* LONGLONG */
21819b7469aSperry long long int	llabs(long long int);
219e4d7c2e3Skleink /* LONGLONG */
22019b7469aSperry lldiv_t		lldiv(long long int, long long int);
221e4d7c2e3Skleink /* LONGLONG */
22219b7469aSperry long long int	strtoll(const char * __restrict, char ** __restrict, int);
223e4d7c2e3Skleink /* LONGLONG */
22477fbd9feSkleink unsigned long long int
22519b7469aSperry 		strtoull(const char * __restrict, char ** __restrict, int);
226bc89c06cSkleink float		strtof(const char * __restrict, char ** __restrict);
227bc89c06cSkleink long double	strtold(const char * __restrict, char ** __restrict);
228e4d7c2e3Skleink #endif
2299b9e2550Skleink 
230c4c409afSchristos #if defined(_ISOC11_SOURCE) || (__STDC_VERSION__ - 0) >= 201101L || \
231c4c409afSchristos     defined(_NETBSD_SOURCE) || (__cplusplus - 0) >= 201103L
232b16a5c9dSnros void	*aligned_alloc(size_t, size_t);
233c4c409afSchristos int	at_quick_exit(void (*)(void));
234c4c409afSchristos __dead void quick_exit(int);
235c4c409afSchristos #endif
236c4c409afSchristos 
2379b9e2550Skleink /*
2388c5e6bc1Skleink  * The Open Group Base Specifications, Issue 6; IEEE Std 1003.1-2001 (POSIX)
23913dee93fSkleink  */
2404be7a2dcSbjh21 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 600 || \
2414be7a2dcSbjh21     defined(_NETBSD_SOURCE)
24219b7469aSperry int	 setenv(const char *, const char *, int);
24366412e72Schristos #ifndef __LIBC12_SOURCE__
24419b7469aSperry int	 unsetenv(const char *) __RENAME(__unsetenv13);
24513dee93fSkleink #endif
24658fadb2dSchristos 
24719b7469aSperry int	 posix_openpt(int);
24895182011Sad int	 posix_memalign(void **, size_t, size_t);
24913dee93fSkleink #endif
25013dee93fSkleink 
25113dee93fSkleink /*
252d9a86489Schristos  * The Open Group Base Specifications, Issue 7; IEEE Std 1003.1-2008 (POSIX)
253d9a86489Schristos  *   or
254d9a86489Schristos  * X/Open Portability Guide >= Issue 4 Version 2
255d9a86489Schristos  */
256d9a86489Schristos #if (_POSIX_C_SOURCE - 0) >= 200809L || \
257d9a86489Schristos     (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
258d9a86489Schristos     (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
259d9a86489Schristos char	*mkdtemp(char *);
260d9a86489Schristos int	 mkstemp(char *);
261d9a86489Schristos 
262d9a86489Schristos int	 getsubopt(char **, char * const *, char **);
263d9a86489Schristos #endif
264d9a86489Schristos 
265d9a86489Schristos /*
2669b9e2550Skleink  * Implementation-defined extensions
2679b9e2550Skleink  */
2684be7a2dcSbjh21 #if defined(_NETBSD_SOURCE)
269c68ac3ceSnia #if defined(__PCC__) && !defined(__GNUC__)
27079ae39b7Sgmcgarry #define alloca(size) __builtin_alloca(size)
2713ed1b2cbScgd #else
27219b7469aSperry void	*alloca(size_t);
2733ed1b2cbScgd #endif /* __GNUC__ */
274e26feab1Sjtc 
2755f65228bSperry uint32_t arc4random(void);
27619b7469aSperry void	 arc4random_stir(void);
277a52c0478Schristos void	 arc4random_buf(void *, size_t);
278a52c0478Schristos uint32_t arc4random_uniform(uint32_t);
2795262cf8cSjoerg void	 arc4random_addrandom(unsigned char *, int);
28019b7469aSperry char	*getbsize(int *, long *);
28119b7469aSperry char	*cgetcap(char *, const char *, int);
28219b7469aSperry int	 cgetclose(void);
28319b7469aSperry int	 cgetent(char **, const char * const *, const char *);
28419b7469aSperry int	 cgetfirst(char **, const char * const *);
28519b7469aSperry int	 cgetmatch(const char *, const char *);
28619b7469aSperry int	 cgetnext(char **, const char * const *);
28719b7469aSperry int	 cgetnum(char *, const char *, long *);
28819b7469aSperry int	 cgetset(const char *);
28919b7469aSperry int	 cgetstr(char *, const char *, char **);
29019b7469aSperry int	 cgetustr(char *, const char *, char **);
2910d149bc5Schristos void	 csetexpandtc(int);
2922ca1b1a1Scgd 
29319b7469aSperry int	 daemon(int, int);
2941907ec3aSjoerg int	 devname_r(dev_t, mode_t, char *, size_t);
29550728e78Schristos #ifndef __LIBC12_SOURCE__
29650728e78Schristos __aconst char *devname(dev_t, mode_t) __RENAME(__devname50);
29750728e78Schristos #endif
29803dcf031Schristos 
29903dcf031Schristos #define	HN_DECIMAL		0x01
30003dcf031Schristos #define	HN_NOSPACE		0x02
30103dcf031Schristos #define	HN_B			0x04
30203dcf031Schristos #define	HN_DIVISOR_1000		0x08
30303dcf031Schristos 
30403dcf031Schristos #define	HN_GETSCALE		0x10
30503dcf031Schristos #define	HN_AUTOSCALE		0x20
30603dcf031Schristos 
30703dcf031Schristos int	 humanize_number(char *, size_t, int64_t, const char *, int, int);
30803dcf031Schristos int	 dehumanize_number(const char *, int64_t *);
309d32f1d2fSchristos ssize_t	 hmac(const char *, const void *, size_t, const void *, size_t, void *,
310d32f1d2fSchristos    size_t);
31103dcf031Schristos 
312ad965be0Sdrochner devmajor_t getdevmajor(const char *, mode_t);
31319b7469aSperry int	 getloadavg(double [], int);
314ac50c9edSderaadt 
315ffff20baSkleink int	 getenv_r(const char *, char *, size_t);
316ffff20baSkleink 
31719b7469aSperry void	 cfree(void *);
3187ec10e70Sjtc 
31919b7469aSperry int	 heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
32019b7469aSperry int	 mergesort(void *, size_t, size_t,
32119b7469aSperry 	    int (*)(const void *, const void *));
322eabc0dd1Schristos int	 ptsname_r(int, char *, size_t);
32319b7469aSperry int	 radixsort(const unsigned char **, int, const unsigned char *,
32419b7469aSperry 	    unsigned);
32519b7469aSperry int	 sradixsort(const unsigned char **, int, const unsigned char *,
32619b7469aSperry 	    unsigned);
3277ec10e70Sjtc 
328d6e21947Sjoerg void	 mi_vector_hash(const void * __restrict, size_t, uint32_t,
329d6e21947Sjoerg 	    uint32_t[3]);
330d6e21947Sjoerg 
33119b7469aSperry void	 setproctitle(const char *, ...)
3328a601553Sjoerg 	    __printflike(1, 2);
3335b557140Sjruoho const char *getprogname(void) __constfunc;
33419b7469aSperry void	setprogname(const char *);
33560e54bbbSsommerfeld 
33619b7469aSperry quad_t	 qabs(quad_t);
33719b7469aSperry quad_t	 strtoq(const char * __restrict, char ** __restrict, int);
33819b7469aSperry u_quad_t strtouq(const char * __restrict, char ** __restrict, int);
339e2b924d2Skleink 
3406ca5b5bbSlukem 	/* LONGLONG */
3416ca5b5bbSlukem long long strsuftoll(const char *, const char *, long long, long long);
3426ca5b5bbSlukem 	/* LONGLONG */
3436ca5b5bbSlukem long long strsuftollx(const char *, const char *, long long, long long,
3446ca5b5bbSlukem 	    		char *, size_t);
3456ca5b5bbSlukem 
34619b7469aSperry int	 l64a_r(long, char *, int);
347713e55ceScgd 
34819b7469aSperry size_t	shquote(const char *, char *, size_t);
34919b7469aSperry size_t	shquotev(int, char * const *, char *, size_t);
350c9baa596Sjoerg 
351c9baa596Sjoerg int	reallocarr(void *, size_t, size_t);
3524be7a2dcSbjh21 #endif /* _NETBSD_SOURCE */
3534be7a2dcSbjh21 #endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
354a1560723Skleink 
3554be7a2dcSbjh21 #if defined(_NETBSD_SOURCE)
35619b7469aSperry qdiv_t	 qdiv(quad_t, quad_t);
357a1560723Skleink #endif
358a67fde03Sjoerg 
359a67fde03Sjoerg #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
360a67fde03Sjoerg #  ifndef __LOCALE_T_DECLARED
361a67fde03Sjoerg typedef struct _locale		*locale_t;
362a67fde03Sjoerg #  define __LOCALE_T_DECLARED
363a67fde03Sjoerg #  endif
364c99aac45Sjoerg double		strtod_l(const char * __restrict, char ** __restrict, locale_t);
365c99aac45Sjoerg float		strtof_l(const char * __restrict, char ** __restrict, locale_t);
366c99aac45Sjoerg long double	strtold_l(const char * __restrict, char ** __restrict,
367c99aac45Sjoerg 			  locale_t);
368a67fde03Sjoerg long	 strtol_l(const char * __restrict, char ** __restrict, int, locale_t);
369a67fde03Sjoerg unsigned long
370a67fde03Sjoerg 	 strtoul_l(const char * __restrict, char ** __restrict, int, locale_t);
371a67fde03Sjoerg /* LONGLONG */
372a67fde03Sjoerg long long int
373a67fde03Sjoerg 	strtoll_l(const char * __restrict, char ** __restrict, int, locale_t);
374a67fde03Sjoerg /* LONGLONG */
375a67fde03Sjoerg unsigned long long int
376a67fde03Sjoerg 	strtoull_l(const char * __restrict, char ** __restrict, int, locale_t);
377a67fde03Sjoerg 
378a67fde03Sjoerg #  if defined(_NETBSD_SOURCE)
379a67fde03Sjoerg quad_t	 strtoq_l(const char * __restrict, char ** __restrict, int, locale_t);
380a67fde03Sjoerg u_quad_t strtouq_l(const char * __restrict, char ** __restrict, int, locale_t);
381ceb51ddcSjoerg 
3823c1c8515Sjoerg size_t	_mb_cur_max_l(locale_t);
3833c1c8515Sjoerg #define	MB_CUR_MAX_L(loc)	_mb_cur_max_l(loc)
384ceb51ddcSjoerg int	 mblen_l(const char *, size_t, locale_t);
385ceb51ddcSjoerg size_t	 mbstowcs_l(wchar_t * __restrict, const char * __restrict, size_t,
386ceb51ddcSjoerg 		    locale_t);
387ceb51ddcSjoerg int	 wctomb_l(char *, wchar_t, locale_t);
388ceb51ddcSjoerg int	 mbtowc_l(wchar_t * __restrict, const char * __restrict, size_t,
389ceb51ddcSjoerg 	          locale_t);
390ceb51ddcSjoerg size_t	 wcstombs_l(char * __restrict, const wchar_t * __restrict, size_t,
391ceb51ddcSjoerg 		    locale_t);
392ceb51ddcSjoerg 
393ceb51ddcSjoerg #  endif /* _NETBSD_SOURCE */
394a67fde03Sjoerg #endif /* _POSIX_C_SOURCE >= 200809 || _NETBSD_SOURCE */
395a67fde03Sjoerg 
39685ba5148Sriastradh #if (_POSIX_C_SOURCE - 0) >= 202405L || \
39785ba5148Sriastradh     defined(_NETBSD_SOURCE) || defined(_OPENBSD_SOURCE)
39885ba5148Sriastradh void	*reallocarray(void *, size_t, size_t);
399*fc9238f1Snia int	 mkostemp(char *, int);
40085ba5148Sriastradh #endif	/* _POSIX_C_SOURCE >= 202405L || _NETBSD_SOURCE || _OPENBSD_SOURCE */
40185ba5148Sriastradh 
40261f28255Scgd __END_DECLS
40361f28255Scgd 
404e95e818cSmikel #endif /* !_STDLIB_H_ */
405