Line data Source code
1 : /* Copyright (C) 1991-2023 Free Software Foundation, Inc.
2 : Copyright The GNU Toolchain Authors.
3 : This file is part of the GNU C Library.
4 :
5 : The GNU C Library is free software; you can redistribute it and/or
6 : modify it under the terms of the GNU Lesser General Public
7 : License as published by the Free Software Foundation; either
8 : version 2.1 of the License, or (at your option) any later version.
9 :
10 : The GNU C Library is distributed in the hope that it will be useful,
11 : but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 : Lesser General Public License for more details.
14 :
15 : You should have received a copy of the GNU Lesser General Public
16 : License along with the GNU C Library; if not, see
17 : <https://www.gnu.org/licenses/>. */
18 :
19 : /*
20 : * ISO C99 Standard: 7.20 General utilities <stdlib.h>
21 : */
22 :
23 : #ifndef _STDLIB_H
24 :
25 : #define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
26 : #include <bits/libc-header-start.h>
27 :
28 : /* Get size_t, wchar_t and NULL from <stddef.h>. */
29 : #define __need_size_t
30 : #define __need_wchar_t
31 : #define __need_NULL
32 : #include <stddef.h>
33 :
34 : __BEGIN_DECLS
35 :
36 : #define _STDLIB_H 1
37 :
38 : #if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H
39 : /* XPG requires a few symbols from <sys/wait.h> being defined. */
40 : # include <bits/waitflags.h>
41 : # include <bits/waitstatus.h>
42 :
43 : /* Define the macros <sys/wait.h> also would define this way. */
44 : # define WEXITSTATUS(status) __WEXITSTATUS (status)
45 : # define WTERMSIG(status) __WTERMSIG (status)
46 : # define WSTOPSIG(status) __WSTOPSIG (status)
47 : # define WIFEXITED(status) __WIFEXITED (status)
48 : # define WIFSIGNALED(status) __WIFSIGNALED (status)
49 : # define WIFSTOPPED(status) __WIFSTOPPED (status)
50 : # ifdef __WIFCONTINUED
51 : # define WIFCONTINUED(status) __WIFCONTINUED (status)
52 : # endif
53 : #endif /* X/Open or XPG7 and <sys/wait.h> not included. */
54 :
55 : /* _FloatN API tests for enablement. */
56 : #include <bits/floatn.h>
57 :
58 : /* Returned by `div'. */
59 : typedef struct
60 : {
61 : int quot; /* Quotient. */
62 : int rem; /* Remainder. */
63 : } div_t;
64 :
65 : /* Returned by `ldiv'. */
66 : #ifndef __ldiv_t_defined
67 : typedef struct
68 : {
69 : long int quot; /* Quotient. */
70 : long int rem; /* Remainder. */
71 : } ldiv_t;
72 : # define __ldiv_t_defined 1
73 : #endif
74 :
75 : #if defined __USE_ISOC99 && !defined __lldiv_t_defined
76 : /* Returned by `lldiv'. */
77 : __extension__ typedef struct
78 : {
79 : long long int quot; /* Quotient. */
80 : long long int rem; /* Remainder. */
81 : } lldiv_t;
82 : # define __lldiv_t_defined 1
83 : #endif
84 :
85 :
86 : /* The largest number rand will return (same as INT_MAX). */
87 : #define RAND_MAX 2147483647
88 :
89 :
90 : /* We define these the same for all machines.
91 : Changes from this to the outside world should be done in `_exit'. */
92 : #define EXIT_FAILURE 1 /* Failing exit status. */
93 : #define EXIT_SUCCESS 0 /* Successful exit status. */
94 :
95 :
96 : /* Maximum length of a multibyte character in the current locale. */
97 : #define MB_CUR_MAX (__ctype_get_mb_cur_max ())
98 : extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
99 :
100 :
101 : /* Convert a string to a floating-point number. */
102 : extern double atof (const char *__nptr)
103 : __THROW __attribute_pure__ __nonnull ((1)) __wur;
104 : /* Convert a string to an integer. */
105 : extern int atoi (const char *__nptr)
106 : __THROW __attribute_pure__ __nonnull ((1)) __wur;
107 : /* Convert a string to a long integer. */
108 : extern long int atol (const char *__nptr)
109 : __THROW __attribute_pure__ __nonnull ((1)) __wur;
110 :
111 : #ifdef __USE_ISOC99
112 : /* Convert a string to a long long integer. */
113 : __extension__ extern long long int atoll (const char *__nptr)
114 : __THROW __attribute_pure__ __nonnull ((1)) __wur;
115 : #endif
116 :
117 : /* Convert a string to a floating-point number. */
118 : extern double strtod (const char *__restrict __nptr,
119 : char **__restrict __endptr)
120 : __THROW __nonnull ((1));
121 :
122 : #ifdef __USE_ISOC99
123 : /* Likewise for `float' and `long double' sizes of floating-point numbers. */
124 : extern float strtof (const char *__restrict __nptr,
125 : char **__restrict __endptr) __THROW __nonnull ((1));
126 :
127 : extern long double strtold (const char *__restrict __nptr,
128 : char **__restrict __endptr)
129 : __THROW __nonnull ((1));
130 : #endif
131 :
132 : /* Likewise for '_FloatN' and '_FloatNx'. */
133 :
134 : #if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT)
135 : extern _Float16 strtof16 (const char *__restrict __nptr,
136 : char **__restrict __endptr)
137 : __THROW __nonnull ((1));
138 : #endif
139 :
140 : #if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT)
141 : extern _Float32 strtof32 (const char *__restrict __nptr,
142 : char **__restrict __endptr)
143 : __THROW __nonnull ((1));
144 : #endif
145 :
146 : #if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT)
147 : extern _Float64 strtof64 (const char *__restrict __nptr,
148 : char **__restrict __endptr)
149 : __THROW __nonnull ((1));
150 : #endif
151 :
152 : #if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
153 : extern _Float128 strtof128 (const char *__restrict __nptr,
154 : char **__restrict __endptr)
155 : __THROW __nonnull ((1));
156 : #endif
157 :
158 : #if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT)
159 : extern _Float32x strtof32x (const char *__restrict __nptr,
160 : char **__restrict __endptr)
161 : __THROW __nonnull ((1));
162 : #endif
163 :
164 : #if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT)
165 : extern _Float64x strtof64x (const char *__restrict __nptr,
166 : char **__restrict __endptr)
167 : __THROW __nonnull ((1));
168 : #endif
169 :
170 : #if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT)
171 : extern _Float128x strtof128x (const char *__restrict __nptr,
172 : char **__restrict __endptr)
173 : __THROW __nonnull ((1));
174 : #endif
175 :
176 : /* Convert a string to a long integer. */
177 : extern long int strtol (const char *__restrict __nptr,
178 : char **__restrict __endptr, int __base)
179 : __THROW __nonnull ((1));
180 : /* Convert a string to an unsigned long integer. */
181 : extern unsigned long int strtoul (const char *__restrict __nptr,
182 : char **__restrict __endptr, int __base)
183 : __THROW __nonnull ((1));
184 :
185 : #ifdef __USE_MISC
186 : /* Convert a string to a quadword integer. */
187 : __extension__
188 : extern long long int strtoq (const char *__restrict __nptr,
189 : char **__restrict __endptr, int __base)
190 : __THROW __nonnull ((1));
191 : /* Convert a string to an unsigned quadword integer. */
192 : __extension__
193 : extern unsigned long long int strtouq (const char *__restrict __nptr,
194 : char **__restrict __endptr, int __base)
195 : __THROW __nonnull ((1));
196 : #endif /* Use misc. */
197 :
198 : #ifdef __USE_ISOC99
199 : /* Convert a string to a quadword integer. */
200 : __extension__
201 : extern long long int strtoll (const char *__restrict __nptr,
202 : char **__restrict __endptr, int __base)
203 : __THROW __nonnull ((1));
204 : /* Convert a string to an unsigned quadword integer. */
205 : __extension__
206 : extern unsigned long long int strtoull (const char *__restrict __nptr,
207 : char **__restrict __endptr, int __base)
208 : __THROW __nonnull ((1));
209 : #endif /* ISO C99 or use MISC. */
210 :
211 : /* Convert a floating-point number to a string. */
212 : #if __GLIBC_USE (IEC_60559_BFP_EXT_C2X)
213 : extern int strfromd (char *__dest, size_t __size, const char *__format,
214 : double __f)
215 : __THROW __nonnull ((3));
216 :
217 : extern int strfromf (char *__dest, size_t __size, const char *__format,
218 : float __f)
219 : __THROW __nonnull ((3));
220 :
221 : extern int strfroml (char *__dest, size_t __size, const char *__format,
222 : long double __f)
223 : __THROW __nonnull ((3));
224 : #endif
225 :
226 : #if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT)
227 : extern int strfromf16 (char *__dest, size_t __size, const char * __format,
228 : _Float16 __f)
229 : __THROW __nonnull ((3));
230 : #endif
231 :
232 : #if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT)
233 : extern int strfromf32 (char *__dest, size_t __size, const char * __format,
234 : _Float32 __f)
235 : __THROW __nonnull ((3));
236 : #endif
237 :
238 : #if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT)
239 : extern int strfromf64 (char *__dest, size_t __size, const char * __format,
240 : _Float64 __f)
241 : __THROW __nonnull ((3));
242 : #endif
243 :
244 : #if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
245 : extern int strfromf128 (char *__dest, size_t __size, const char * __format,
246 : _Float128 __f)
247 : __THROW __nonnull ((3));
248 : #endif
249 :
250 : #if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT)
251 : extern int strfromf32x (char *__dest, size_t __size, const char * __format,
252 : _Float32x __f)
253 : __THROW __nonnull ((3));
254 : #endif
255 :
256 : #if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT)
257 : extern int strfromf64x (char *__dest, size_t __size, const char * __format,
258 : _Float64x __f)
259 : __THROW __nonnull ((3));
260 : #endif
261 :
262 : #if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT)
263 : extern int strfromf128x (char *__dest, size_t __size, const char * __format,
264 : _Float128x __f)
265 : __THROW __nonnull ((3));
266 : #endif
267 :
268 :
269 : #ifdef __USE_GNU
270 : /* Parallel versions of the functions above which take the locale to
271 : use as an additional parameter. These are GNU extensions inspired
272 : by the POSIX.1-2008 extended locale API. */
273 : # include <bits/types/locale_t.h>
274 :
275 : extern long int strtol_l (const char *__restrict __nptr,
276 : char **__restrict __endptr, int __base,
277 : locale_t __loc) __THROW __nonnull ((1, 4));
278 :
279 : extern unsigned long int strtoul_l (const char *__restrict __nptr,
280 : char **__restrict __endptr,
281 : int __base, locale_t __loc)
282 : __THROW __nonnull ((1, 4));
283 :
284 : __extension__
285 : extern long long int strtoll_l (const char *__restrict __nptr,
286 : char **__restrict __endptr, int __base,
287 : locale_t __loc)
288 : __THROW __nonnull ((1, 4));
289 :
290 : __extension__
291 : extern unsigned long long int strtoull_l (const char *__restrict __nptr,
292 : char **__restrict __endptr,
293 : int __base, locale_t __loc)
294 : __THROW __nonnull ((1, 4));
295 :
296 : extern double strtod_l (const char *__restrict __nptr,
297 : char **__restrict __endptr, locale_t __loc)
298 : __THROW __nonnull ((1, 3));
299 :
300 : extern float strtof_l (const char *__restrict __nptr,
301 : char **__restrict __endptr, locale_t __loc)
302 : __THROW __nonnull ((1, 3));
303 :
304 : extern long double strtold_l (const char *__restrict __nptr,
305 : char **__restrict __endptr,
306 : locale_t __loc)
307 : __THROW __nonnull ((1, 3));
308 :
309 : # if __HAVE_FLOAT16
310 : extern _Float16 strtof16_l (const char *__restrict __nptr,
311 : char **__restrict __endptr,
312 : locale_t __loc)
313 : __THROW __nonnull ((1, 3));
314 : # endif
315 :
316 : # if __HAVE_FLOAT32
317 : extern _Float32 strtof32_l (const char *__restrict __nptr,
318 : char **__restrict __endptr,
319 : locale_t __loc)
320 : __THROW __nonnull ((1, 3));
321 : # endif
322 :
323 : # if __HAVE_FLOAT64
324 : extern _Float64 strtof64_l (const char *__restrict __nptr,
325 : char **__restrict __endptr,
326 : locale_t __loc)
327 : __THROW __nonnull ((1, 3));
328 : # endif
329 :
330 : # if __HAVE_FLOAT128
331 : extern _Float128 strtof128_l (const char *__restrict __nptr,
332 : char **__restrict __endptr,
333 : locale_t __loc)
334 : __THROW __nonnull ((1, 3));
335 : # endif
336 :
337 : # if __HAVE_FLOAT32X
338 : extern _Float32x strtof32x_l (const char *__restrict __nptr,
339 : char **__restrict __endptr,
340 : locale_t __loc)
341 : __THROW __nonnull ((1, 3));
342 : # endif
343 :
344 : # if __HAVE_FLOAT64X
345 : extern _Float64x strtof64x_l (const char *__restrict __nptr,
346 : char **__restrict __endptr,
347 : locale_t __loc)
348 : __THROW __nonnull ((1, 3));
349 : # endif
350 :
351 : # if __HAVE_FLOAT128X
352 : extern _Float128x strtof128x_l (const char *__restrict __nptr,
353 : char **__restrict __endptr,
354 : locale_t __loc)
355 : __THROW __nonnull ((1, 3));
356 : # endif
357 : #endif /* GNU */
358 :
359 :
360 : #ifdef __USE_EXTERN_INLINES
361 : __extern_inline int
362 85900 : __NTH (atoi (const char *__nptr))
363 : {
364 84827 : return (int) strtol (__nptr, (char **) NULL, 10);
365 : }
366 : __extern_inline long int
367 3451 : __NTH (atol (const char *__nptr))
368 : {
369 3451 : return strtol (__nptr, (char **) NULL, 10);
370 : }
371 :
372 : # ifdef __USE_ISOC99
373 : __extension__ __extern_inline long long int
374 : __NTH (atoll (const char *__nptr))
375 : {
376 : return strtoll (__nptr, (char **) NULL, 10);
377 : }
378 : # endif
379 : #endif /* Optimizing and Inlining. */
380 :
381 :
382 : #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
383 : /* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
384 : digit first. Returns a pointer to static storage overwritten by the
385 : next call. */
386 : extern char *l64a (long int __n) __THROW __wur;
387 :
388 : /* Read a number from a string S in base 64 as above. */
389 : extern long int a64l (const char *__s)
390 : __THROW __attribute_pure__ __nonnull ((1)) __wur;
391 :
392 : #endif /* Use misc || extended X/Open. */
393 :
394 : #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
395 : # include <sys/types.h> /* we need int32_t... */
396 :
397 : /* These are the functions that actually do things. The `random', `srandom',
398 : `initstate' and `setstate' functions are those from BSD Unices.
399 : The `rand' and `srand' functions are required by the ANSI standard.
400 : We provide both interfaces to the same random number generator. */
401 : /* Return a random long integer between 0 and 2^31-1 inclusive. */
402 : extern long int random (void) __THROW;
403 :
404 : /* Seed the random number generator with the given number. */
405 : extern void srandom (unsigned int __seed) __THROW;
406 :
407 : /* Initialize the random number generator to use state buffer STATEBUF,
408 : of length STATELEN, and seed it with SEED. Optimal lengths are 8, 16,
409 : 32, 64, 128 and 256, the bigger the better; values less than 8 will
410 : cause an error and values greater than 256 will be rounded down. */
411 : extern char *initstate (unsigned int __seed, char *__statebuf,
412 : size_t __statelen) __THROW __nonnull ((2));
413 :
414 : /* Switch the random number generator to state buffer STATEBUF,
415 : which should have been previously initialized by `initstate'. */
416 : extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
417 :
418 :
419 : # ifdef __USE_MISC
420 : /* Reentrant versions of the `random' family of functions.
421 : These functions all use the following data structure to contain
422 : state, rather than global state variables. */
423 :
424 : struct random_data
425 : {
426 : int32_t *fptr; /* Front pointer. */
427 : int32_t *rptr; /* Rear pointer. */
428 : int32_t *state; /* Array of state values. */
429 : int rand_type; /* Type of random number generator. */
430 : int rand_deg; /* Degree of random number generator. */
431 : int rand_sep; /* Distance between front and rear. */
432 : int32_t *end_ptr; /* Pointer behind state table. */
433 : };
434 :
435 : extern int random_r (struct random_data *__restrict __buf,
436 : int32_t *__restrict __result) __THROW __nonnull ((1, 2));
437 :
438 : extern int srandom_r (unsigned int __seed, struct random_data *__buf)
439 : __THROW __nonnull ((2));
440 :
441 : extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
442 : size_t __statelen,
443 : struct random_data *__restrict __buf)
444 : __THROW __nonnull ((2, 4));
445 :
446 : extern int setstate_r (char *__restrict __statebuf,
447 : struct random_data *__restrict __buf)
448 : __THROW __nonnull ((1, 2));
449 : # endif /* Use misc. */
450 : #endif /* Use extended X/Open || misc. */
451 :
452 :
453 : /* Return a random integer between 0 and RAND_MAX inclusive. */
454 : extern int rand (void) __THROW;
455 : /* Seed the random number generator with the given number. */
456 : extern void srand (unsigned int __seed) __THROW;
457 :
458 : #ifdef __USE_POSIX199506
459 : /* Reentrant interface according to POSIX.1. */
460 : extern int rand_r (unsigned int *__seed) __THROW;
461 : #endif
462 :
463 :
464 : #if defined __USE_MISC || defined __USE_XOPEN
465 : /* System V style 48-bit random number generator functions. */
466 :
467 : /* Return non-negative, double-precision floating-point value in [0.0,1.0). */
468 : extern double drand48 (void) __THROW;
469 : extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
470 :
471 : /* Return non-negative, long integer in [0,2^31). */
472 : extern long int lrand48 (void) __THROW;
473 : extern long int nrand48 (unsigned short int __xsubi[3])
474 : __THROW __nonnull ((1));
475 :
476 : /* Return signed, long integers in [-2^31,2^31). */
477 : extern long int mrand48 (void) __THROW;
478 : extern long int jrand48 (unsigned short int __xsubi[3])
479 : __THROW __nonnull ((1));
480 :
481 : /* Seed random number generator. */
482 : extern void srand48 (long int __seedval) __THROW;
483 : extern unsigned short int *seed48 (unsigned short int __seed16v[3])
484 : __THROW __nonnull ((1));
485 : extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
486 :
487 : # ifdef __USE_MISC
488 : /* Data structure for communication with thread safe versions. This
489 : type is to be regarded as opaque. It's only exported because users
490 : have to allocate objects of this type. */
491 : struct drand48_data
492 : {
493 : unsigned short int __x[3]; /* Current state. */
494 : unsigned short int __old_x[3]; /* Old state. */
495 : unsigned short int __c; /* Additive const. in congruential formula. */
496 : unsigned short int __init; /* Flag for initializing. */
497 : __extension__ unsigned long long int __a; /* Factor in congruential
498 : formula. */
499 : };
500 :
501 : /* Return non-negative, double-precision floating-point value in [0.0,1.0). */
502 : extern int drand48_r (struct drand48_data *__restrict __buffer,
503 : double *__restrict __result) __THROW __nonnull ((1, 2));
504 : extern int erand48_r (unsigned short int __xsubi[3],
505 : struct drand48_data *__restrict __buffer,
506 : double *__restrict __result) __THROW __nonnull ((1, 2));
507 :
508 : /* Return non-negative, long integer in [0,2^31). */
509 : extern int lrand48_r (struct drand48_data *__restrict __buffer,
510 : long int *__restrict __result)
511 : __THROW __nonnull ((1, 2));
512 : extern int nrand48_r (unsigned short int __xsubi[3],
513 : struct drand48_data *__restrict __buffer,
514 : long int *__restrict __result)
515 : __THROW __nonnull ((1, 2));
516 :
517 : /* Return signed, long integers in [-2^31,2^31). */
518 : extern int mrand48_r (struct drand48_data *__restrict __buffer,
519 : long int *__restrict __result)
520 : __THROW __nonnull ((1, 2));
521 : extern int jrand48_r (unsigned short int __xsubi[3],
522 : struct drand48_data *__restrict __buffer,
523 : long int *__restrict __result)
524 : __THROW __nonnull ((1, 2));
525 :
526 : /* Seed random number generator. */
527 : extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
528 : __THROW __nonnull ((2));
529 :
530 : extern int seed48_r (unsigned short int __seed16v[3],
531 : struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
532 :
533 : extern int lcong48_r (unsigned short int __param[7],
534 : struct drand48_data *__buffer)
535 : __THROW __nonnull ((1, 2));
536 :
537 : /* Return a random integer between zero and 2**32-1 (inclusive). */
538 : extern __uint32_t arc4random (void)
539 : __THROW __wur;
540 :
541 : /* Fill the buffer with random data. */
542 : extern void arc4random_buf (void *__buf, size_t __size)
543 : __THROW __nonnull ((1));
544 :
545 : /* Return a random number between zero (inclusive) and the specified
546 : limit (exclusive). */
547 : extern __uint32_t arc4random_uniform (__uint32_t __upper_bound)
548 : __THROW __wur;
549 : # endif /* Use misc. */
550 : #endif /* Use misc or X/Open. */
551 :
552 : /* Allocate SIZE bytes of memory. */
553 : extern void *malloc (size_t __size) __THROW __attribute_malloc__
554 : __attribute_alloc_size__ ((1)) __wur;
555 : /* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */
556 : extern void *calloc (size_t __nmemb, size_t __size)
557 : __THROW __attribute_malloc__ __attribute_alloc_size__ ((1, 2)) __wur;
558 :
559 : /* Re-allocate the previously allocated block
560 : in PTR, making the new block SIZE bytes long. */
561 : /* __attribute_malloc__ is not used, because if realloc returns
562 : the same pointer that was passed to it, aliasing needs to be allowed
563 : between objects pointed by the old and new pointers. */
564 : extern void *realloc (void *__ptr, size_t __size)
565 : __THROW __attribute_warn_unused_result__ __attribute_alloc_size__ ((2));
566 :
567 : /* Free a block allocated by `malloc', `realloc' or `calloc'. */
568 : extern void free (void *__ptr) __THROW;
569 :
570 : #ifdef __USE_MISC
571 : /* Re-allocate the previously allocated block in PTR, making the new
572 : block large enough for NMEMB elements of SIZE bytes each. */
573 : /* __attribute_malloc__ is not used, because if reallocarray returns
574 : the same pointer that was passed to it, aliasing needs to be allowed
575 : between objects pointed by the old and new pointers. */
576 : extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
577 : __THROW __attribute_warn_unused_result__
578 : __attribute_alloc_size__ ((2, 3))
579 : __attr_dealloc_free;
580 :
581 : /* Add reallocarray as its own deallocator. */
582 : extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
583 : __THROW __attr_dealloc (reallocarray, 1);
584 : #endif
585 :
586 : #ifdef __USE_MISC
587 : # include <alloca.h>
588 : #endif /* Use misc. */
589 :
590 : #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
591 : || defined __USE_MISC
592 : /* Allocate SIZE bytes on a page boundary. The storage cannot be freed. */
593 : extern void *valloc (size_t __size) __THROW __attribute_malloc__
594 : __attribute_alloc_size__ ((1)) __wur;
595 : #endif
596 :
597 : #ifdef __USE_XOPEN2K
598 : /* Allocate memory of SIZE bytes with an alignment of ALIGNMENT. */
599 : extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
600 : __THROW __nonnull ((1)) __wur;
601 : #endif
602 :
603 : #ifdef __USE_ISOC11
604 : /* ISO C variant of aligned allocation. */
605 : extern void *aligned_alloc (size_t __alignment, size_t __size)
606 : __THROW __attribute_malloc__ __attribute_alloc_align__ ((1))
607 : __attribute_alloc_size__ ((2)) __wur;
608 : #endif
609 :
610 : /* Abort execution and generate a core-dump. */
611 : extern void abort (void) __THROW __attribute__ ((__noreturn__));
612 :
613 :
614 : /* Register a function to be called when `exit' is called. */
615 : extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
616 :
617 : #if defined __USE_ISOC11 || defined __USE_ISOCXX11
618 : /* Register a function to be called when `quick_exit' is called. */
619 : # ifdef __cplusplus
620 : extern "C++" int at_quick_exit (void (*__func) (void))
621 : __THROW __asm ("at_quick_exit") __nonnull ((1));
622 : # else
623 : extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
624 : # endif
625 : #endif
626 :
627 : #ifdef __USE_MISC
628 : /* Register a function to be called with the status
629 : given to `exit' and the given argument. */
630 : extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
631 : __THROW __nonnull ((1));
632 : #endif
633 :
634 : /* Call all functions registered with `atexit' and `on_exit',
635 : in the reverse of the order in which they were registered,
636 : perform stdio cleanup, and terminate program execution with STATUS. */
637 : extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
638 :
639 : #if defined __USE_ISOC11 || defined __USE_ISOCXX11
640 : /* Call all functions registered with `at_quick_exit' in the reverse
641 : of the order in which they were registered and terminate program
642 : execution with STATUS. */
643 : extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
644 : #endif
645 :
646 : #ifdef __USE_ISOC99
647 : /* Terminate the program with STATUS without calling any of the
648 : functions registered with `atexit' or `on_exit'. */
649 : extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
650 : #endif
651 :
652 :
653 : /* Return the value of envariable NAME, or NULL if it doesn't exist. */
654 : extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
655 :
656 : #ifdef __USE_GNU
657 : /* This function is similar to the above but returns NULL if the
658 : programs is running with SUID or SGID enabled. */
659 : extern char *secure_getenv (const char *__name)
660 : __THROW __nonnull ((1)) __wur;
661 : #endif
662 :
663 : #if defined __USE_MISC || defined __USE_XOPEN
664 : /* The SVID says this is in <stdio.h>, but this seems a better place. */
665 : /* Put STRING, which is of the form "NAME=VALUE", in the environment.
666 : If there is no `=', remove NAME from the environment. */
667 : extern int putenv (char *__string) __THROW __nonnull ((1));
668 : #endif
669 :
670 : #ifdef __USE_XOPEN2K
671 : /* Set NAME to VALUE in the environment.
672 : If REPLACE is nonzero, overwrite an existing value. */
673 : extern int setenv (const char *__name, const char *__value, int __replace)
674 : __THROW __nonnull ((2));
675 :
676 : /* Remove the variable NAME from the environment. */
677 : extern int unsetenv (const char *__name) __THROW __nonnull ((1));
678 : #endif
679 :
680 : #ifdef __USE_MISC
681 : /* The `clearenv' was planned to be added to POSIX.1 but probably
682 : never made it. Nevertheless the POSIX.9 standard (POSIX bindings
683 : for Fortran 77) requires this function. */
684 : extern int clearenv (void) __THROW;
685 : #endif
686 :
687 :
688 : #if defined __USE_MISC \
689 : || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)
690 : /* Generate a unique temporary file name from TEMPLATE.
691 : The last six characters of TEMPLATE must be "XXXXXX";
692 : they are replaced with a string that makes the file name unique.
693 : Always returns TEMPLATE, it's either a temporary file name or a null
694 : string if it cannot get a unique file name. */
695 : extern char *mktemp (char *__template) __THROW __nonnull ((1));
696 : #endif
697 :
698 : #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
699 : /* Generate a unique temporary file name from TEMPLATE.
700 : The last six characters of TEMPLATE must be "XXXXXX";
701 : they are replaced with a string that makes the filename unique.
702 : Returns a file descriptor open on the file for reading and writing,
703 : or -1 if it cannot create a uniquely-named file.
704 :
705 : This function is a possible cancellation point and therefore not
706 : marked with __THROW. */
707 : # ifndef __USE_FILE_OFFSET64
708 : extern int mkstemp (char *__template) __nonnull ((1)) __wur;
709 : # else
710 : # ifdef __REDIRECT
711 : extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
712 : __nonnull ((1)) __wur;
713 : # else
714 : # define mkstemp mkstemp64
715 : # endif
716 : # endif
717 : # ifdef __USE_LARGEFILE64
718 : extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
719 : # endif
720 : #endif
721 :
722 : #ifdef __USE_MISC
723 : /* Similar to mkstemp, but the template can have a suffix after the
724 : XXXXXX. The length of the suffix is specified in the second
725 : parameter.
726 :
727 : This function is a possible cancellation point and therefore not
728 : marked with __THROW. */
729 : # ifndef __USE_FILE_OFFSET64
730 : extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur;
731 : # else
732 : # ifdef __REDIRECT
733 : extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen),
734 : mkstemps64) __nonnull ((1)) __wur;
735 : # else
736 : # define mkstemps mkstemps64
737 : # endif
738 : # endif
739 : # ifdef __USE_LARGEFILE64
740 : extern int mkstemps64 (char *__template, int __suffixlen)
741 : __nonnull ((1)) __wur;
742 : # endif
743 : #endif
744 :
745 : #ifdef __USE_XOPEN2K8
746 : /* Create a unique temporary directory from TEMPLATE.
747 : The last six characters of TEMPLATE must be "XXXXXX";
748 : they are replaced with a string that makes the directory name unique.
749 : Returns TEMPLATE, or a null pointer if it cannot get a unique name.
750 : The directory is created mode 700. */
751 : extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
752 : #endif
753 :
754 : #ifdef __USE_GNU
755 : /* Generate a unique temporary file name from TEMPLATE similar to
756 : mkstemp. But allow the caller to pass additional flags which are
757 : used in the open call to create the file..
758 :
759 : This function is a possible cancellation point and therefore not
760 : marked with __THROW. */
761 : # ifndef __USE_FILE_OFFSET64
762 : extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
763 : # else
764 : # ifdef __REDIRECT
765 : extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
766 : __nonnull ((1)) __wur;
767 : # else
768 : # define mkostemp mkostemp64
769 : # endif
770 : # endif
771 : # ifdef __USE_LARGEFILE64
772 : extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
773 : # endif
774 :
775 : /* Similar to mkostemp, but the template can have a suffix after the
776 : XXXXXX. The length of the suffix is specified in the second
777 : parameter.
778 :
779 : This function is a possible cancellation point and therefore not
780 : marked with __THROW. */
781 : # ifndef __USE_FILE_OFFSET64
782 : extern int mkostemps (char *__template, int __suffixlen, int __flags)
783 : __nonnull ((1)) __wur;
784 : # else
785 : # ifdef __REDIRECT
786 : extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen,
787 : int __flags), mkostemps64)
788 : __nonnull ((1)) __wur;
789 : # else
790 : # define mkostemps mkostemps64
791 : # endif
792 : # endif
793 : # ifdef __USE_LARGEFILE64
794 : extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
795 : __nonnull ((1)) __wur;
796 : # endif
797 : #endif
798 :
799 :
800 : /* Execute the given line as a shell command.
801 :
802 : This function is a cancellation point and therefore not marked with
803 : __THROW. */
804 : extern int system (const char *__command) __wur;
805 :
806 :
807 : #ifdef __USE_GNU
808 : /* Return a malloc'd string containing the canonical absolute name of the
809 : existing named file. */
810 : extern char *canonicalize_file_name (const char *__name)
811 : __THROW __nonnull ((1)) __attribute_malloc__
812 : __attr_dealloc_free __wur;
813 : #endif
814 :
815 : #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
816 : /* Return the canonical absolute name of file NAME. If RESOLVED is
817 : null, the result is malloc'd; otherwise, if the canonical name is
818 : PATH_MAX chars or more, returns null with `errno' set to
819 : ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
820 : returns the name in RESOLVED. */
821 : extern char *realpath (const char *__restrict __name,
822 : char *__restrict __resolved) __THROW __wur;
823 : #endif
824 :
825 :
826 : /* Shorthand for type of comparison functions. */
827 : #ifndef __COMPAR_FN_T
828 : # define __COMPAR_FN_T
829 : typedef int (*__compar_fn_t) (const void *, const void *);
830 :
831 : # ifdef __USE_GNU
832 : typedef __compar_fn_t comparison_fn_t;
833 : # endif
834 : #endif
835 : #ifdef __USE_GNU
836 : typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
837 : #endif
838 :
839 : /* Do a binary search for KEY in BASE, which consists of NMEMB elements
840 : of SIZE bytes each, using COMPAR to perform the comparisons. */
841 : extern void *bsearch (const void *__key, const void *__base,
842 : size_t __nmemb, size_t __size, __compar_fn_t __compar)
843 : __nonnull ((1, 2, 5)) __wur;
844 :
845 : #ifdef __USE_EXTERN_INLINES
846 : # include <bits/stdlib-bsearch.h>
847 : #endif
848 :
849 : /* Sort NMEMB elements of BASE, of SIZE bytes each,
850 : using COMPAR to perform the comparisons. */
851 : extern void qsort (void *__base, size_t __nmemb, size_t __size,
852 : __compar_fn_t __compar) __nonnull ((1, 4));
853 : #ifdef __USE_GNU
854 : extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
855 : __compar_d_fn_t __compar, void *__arg)
856 : __nonnull ((1, 4));
857 : #endif
858 :
859 :
860 : /* Return the absolute value of X. */
861 : extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
862 : extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
863 :
864 : #ifdef __USE_ISOC99
865 : __extension__ extern long long int llabs (long long int __x)
866 : __THROW __attribute__ ((__const__)) __wur;
867 : #endif
868 :
869 :
870 : /* Return the `div_t', `ldiv_t' or `lldiv_t' representation
871 : of the value of NUMER over DENOM. */
872 : /* GCC may have built-ins for these someday. */
873 : extern div_t div (int __numer, int __denom)
874 : __THROW __attribute__ ((__const__)) __wur;
875 : extern ldiv_t ldiv (long int __numer, long int __denom)
876 : __THROW __attribute__ ((__const__)) __wur;
877 :
878 : #ifdef __USE_ISOC99
879 : __extension__ extern lldiv_t lldiv (long long int __numer,
880 : long long int __denom)
881 : __THROW __attribute__ ((__const__)) __wur;
882 : #endif
883 :
884 :
885 : #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
886 : || defined __USE_MISC
887 : /* Convert floating point numbers to strings. The returned values are
888 : valid only until another call to the same function. */
889 :
890 : /* Convert VALUE to a string with NDIGIT digits and return a pointer to
891 : this. Set *DECPT with the position of the decimal character and *SIGN
892 : with the sign of the number. */
893 : extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
894 : int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
895 :
896 : /* Convert VALUE to a string rounded to NDIGIT decimal digits. Set *DECPT
897 : with the position of the decimal character and *SIGN with the sign of
898 : the number. */
899 : extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
900 : int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
901 :
902 : /* If possible convert VALUE to a string with NDIGIT significant digits.
903 : Otherwise use exponential representation. The resulting string will
904 : be written to BUF. */
905 : extern char *gcvt (double __value, int __ndigit, char *__buf)
906 : __THROW __nonnull ((3)) __wur;
907 : #endif
908 :
909 : #ifdef __USE_MISC
910 : /* Long double versions of above functions. */
911 : extern char *qecvt (long double __value, int __ndigit,
912 : int *__restrict __decpt, int *__restrict __sign)
913 : __THROW __nonnull ((3, 4)) __wur;
914 : extern char *qfcvt (long double __value, int __ndigit,
915 : int *__restrict __decpt, int *__restrict __sign)
916 : __THROW __nonnull ((3, 4)) __wur;
917 : extern char *qgcvt (long double __value, int __ndigit, char *__buf)
918 : __THROW __nonnull ((3)) __wur;
919 :
920 :
921 : /* Reentrant version of the functions above which provide their own
922 : buffers. */
923 : extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
924 : int *__restrict __sign, char *__restrict __buf,
925 : size_t __len) __THROW __nonnull ((3, 4, 5));
926 : extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
927 : int *__restrict __sign, char *__restrict __buf,
928 : size_t __len) __THROW __nonnull ((3, 4, 5));
929 :
930 : extern int qecvt_r (long double __value, int __ndigit,
931 : int *__restrict __decpt, int *__restrict __sign,
932 : char *__restrict __buf, size_t __len)
933 : __THROW __nonnull ((3, 4, 5));
934 : extern int qfcvt_r (long double __value, int __ndigit,
935 : int *__restrict __decpt, int *__restrict __sign,
936 : char *__restrict __buf, size_t __len)
937 : __THROW __nonnull ((3, 4, 5));
938 : #endif /* misc */
939 :
940 :
941 : /* Return the length of the multibyte character
942 : in S, which is no longer than N. */
943 : extern int mblen (const char *__s, size_t __n) __THROW;
944 : /* Return the length of the given multibyte character,
945 : putting its `wchar_t' representation in *PWC. */
946 : extern int mbtowc (wchar_t *__restrict __pwc,
947 : const char *__restrict __s, size_t __n) __THROW;
948 : /* Put the multibyte character represented
949 : by WCHAR in S, returning its length. */
950 : extern int wctomb (char *__s, wchar_t __wchar) __THROW;
951 :
952 :
953 : /* Convert a multibyte string to a wide char string. */
954 : extern size_t mbstowcs (wchar_t *__restrict __pwcs,
955 : const char *__restrict __s, size_t __n) __THROW
956 : __attr_access ((__read_only__, 2));
957 : /* Convert a wide char string to multibyte string. */
958 : extern size_t wcstombs (char *__restrict __s,
959 : const wchar_t *__restrict __pwcs, size_t __n)
960 : __THROW
961 : __fortified_attr_access (__write_only__, 1, 3)
962 : __attr_access ((__read_only__, 2));
963 :
964 : #ifdef __USE_MISC
965 : /* Determine whether the string value of RESPONSE matches the affirmation
966 : or negative response expression as specified by the LC_MESSAGES category
967 : in the program's current locale. Returns 1 if affirmative, 0 if
968 : negative, and -1 if not matching. */
969 : extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
970 : #endif
971 :
972 :
973 : #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
974 : /* Parse comma separated suboption from *OPTIONP and match against
975 : strings in TOKENS. If found return index and set *VALUEP to
976 : optional value introduced by an equal sign. If the suboption is
977 : not part of TOKENS return in *VALUEP beginning of unknown
978 : suboption. On exit *OPTIONP is set to the beginning of the next
979 : token or at the terminating NUL character. */
980 : extern int getsubopt (char **__restrict __optionp,
981 : char *const *__restrict __tokens,
982 : char **__restrict __valuep)
983 : __THROW __nonnull ((1, 2, 3)) __wur;
984 : #endif
985 :
986 :
987 : /* X/Open pseudo terminal handling. */
988 :
989 : #ifdef __USE_XOPEN2KXSI
990 : /* Return a master pseudo-terminal handle. */
991 : extern int posix_openpt (int __oflag) __wur;
992 : #endif
993 :
994 : #ifdef __USE_XOPEN_EXTENDED
995 : /* The next four functions all take a master pseudo-tty fd and
996 : perform an operation on the associated slave: */
997 :
998 : /* Chown the slave to the calling user. */
999 : extern int grantpt (int __fd) __THROW;
1000 :
1001 : /* Release an internal lock so the slave can be opened.
1002 : Call after grantpt(). */
1003 : extern int unlockpt (int __fd) __THROW;
1004 :
1005 : /* Return the pathname of the pseudo terminal slave associated with
1006 : the master FD is open on, or NULL on errors.
1007 : The returned storage is good until the next call to this function. */
1008 : extern char *ptsname (int __fd) __THROW __wur;
1009 : #endif
1010 :
1011 : #ifdef __USE_GNU
1012 : /* Store at most BUFLEN characters of the pathname of the slave pseudo
1013 : terminal associated with the master FD is open on in BUF.
1014 : Return 0 on success, otherwise an error number. */
1015 : extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
1016 : __THROW __nonnull ((2)) __fortified_attr_access (__write_only__, 2, 3);
1017 :
1018 : /* Open a master pseudo terminal and return its file descriptor. */
1019 : extern int getpt (void);
1020 : #endif
1021 :
1022 : #ifdef __USE_MISC
1023 : /* Put the 1 minute, 5 minute and 15 minute load averages into the first
1024 : NELEM elements of LOADAVG. Return the number written (never more than
1025 : three, but may be less than NELEM), or -1 if an error occurred. */
1026 : extern int getloadavg (double __loadavg[], int __nelem)
1027 : __THROW __nonnull ((1));
1028 : #endif
1029 :
1030 : #if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K
1031 : /* Return the index into the active-logins file (utmp) for
1032 : the controlling terminal. */
1033 : extern int ttyslot (void) __THROW;
1034 : #endif
1035 :
1036 : #include <bits/stdlib-float.h>
1037 :
1038 : /* Define some macros helping to catch buffer overflows. */
1039 : #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
1040 : # include <bits/stdlib.h>
1041 : #endif
1042 :
1043 : #include <bits/floatn.h>
1044 : #if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
1045 : # include <bits/stdlib-ldbl.h>
1046 : #endif
1047 :
1048 : __END_DECLS
1049 :
1050 : #endif /* stdlib.h */
|