OLD | NEW |
(Empty) | |
| 1 /* A GNU-like <stdlib.h>. |
| 2 |
| 3 Copyright (C) 1995, 2001-2004, 2006-2008 Free Software Foundation, Inc. |
| 4 |
| 5 This program is free software: you can redistribute it and/or modify |
| 6 it under the terms of the GNU General Public License as published by |
| 7 the Free Software Foundation; either version 3 of the License, or |
| 8 (at your option) any later version. |
| 9 |
| 10 This program 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 |
| 13 GNU General Public License for more details. |
| 14 |
| 15 You should have received a copy of the GNU General Public License |
| 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| 17 |
| 18 #if __GNUC__ >= 3 |
| 19 @PRAGMA_SYSTEM_HEADER@ |
| 20 #endif |
| 21 |
| 22 #if defined __need_malloc_and_calloc |
| 23 /* Special invocation convention inside glibc header files. */ |
| 24 |
| 25 #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ |
| 26 |
| 27 #else |
| 28 /* Normal invocation convention. */ |
| 29 |
| 30 #ifndef _GL_STDLIB_H |
| 31 |
| 32 /* The include_next requires a split double-inclusion guard. */ |
| 33 #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ |
| 34 |
| 35 #ifndef _GL_STDLIB_H |
| 36 #define _GL_STDLIB_H |
| 37 |
| 38 |
| 39 /* Solaris declares getloadavg() in <sys/loadavg.h>. */ |
| 40 #if @GNULIB_GETLOADAVG@ && @HAVE_SYS_LOADAVG_H@ |
| 41 # include <sys/loadavg.h> |
| 42 #endif |
| 43 |
| 44 #if @GNULIB_RANDOM_R@ || !@HAVE_STRUCT_RANDOM_DATA@ |
| 45 # include <stdint.h> |
| 46 #endif |
| 47 |
| 48 #if !@HAVE_STRUCT_RANDOM_DATA@ |
| 49 struct random_data |
| 50 { |
| 51 int32_t *fptr; /* Front pointer. */ |
| 52 int32_t *rptr; /* Rear pointer. */ |
| 53 int32_t *state; /* Array of state values. */ |
| 54 int rand_type; /* Type of random number generator. */ |
| 55 int rand_deg; /* Degree of random number generator. */ |
| 56 int rand_sep; /* Distance between front and rear. */ |
| 57 int32_t *end_ptr; /* Pointer behind state table. */ |
| 58 }; |
| 59 #endif |
| 60 |
| 61 /* The definition of GL_LINK_WARNING is copied here. */ |
| 62 |
| 63 |
| 64 /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ |
| 65 #ifndef EXIT_SUCCESS |
| 66 # define EXIT_SUCCESS 0 |
| 67 #endif |
| 68 /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere |
| 69 with proper operation of xargs. */ |
| 70 #ifndef EXIT_FAILURE |
| 71 # define EXIT_FAILURE 1 |
| 72 #elif EXIT_FAILURE != 1 |
| 73 # undef EXIT_FAILURE |
| 74 # define EXIT_FAILURE 1 |
| 75 #endif |
| 76 |
| 77 |
| 78 #ifdef __cplusplus |
| 79 extern "C" { |
| 80 #endif |
| 81 |
| 82 |
| 83 #if @GNULIB_MALLOC_POSIX@ |
| 84 # if !@HAVE_MALLOC_POSIX@ |
| 85 # undef malloc |
| 86 # define malloc rpl_malloc |
| 87 extern void * malloc (size_t size); |
| 88 # endif |
| 89 #elif defined GNULIB_POSIXCHECK |
| 90 # undef malloc |
| 91 # define malloc(s) \ |
| 92 (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \ |
| 93 "use gnulib module malloc-posix for portability"), \ |
| 94 malloc (s)) |
| 95 #endif |
| 96 |
| 97 |
| 98 #if @GNULIB_REALLOC_POSIX@ |
| 99 # if !@HAVE_REALLOC_POSIX@ |
| 100 # undef realloc |
| 101 # define realloc rpl_realloc |
| 102 extern void * realloc (void *ptr, size_t size); |
| 103 # endif |
| 104 #elif defined GNULIB_POSIXCHECK |
| 105 # undef realloc |
| 106 # define realloc(p,s) \ |
| 107 (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \ |
| 108 "use gnulib module realloc-posix for portability"), \ |
| 109 realloc (p, s)) |
| 110 #endif |
| 111 |
| 112 |
| 113 #if @GNULIB_CALLOC_POSIX@ |
| 114 # if !@HAVE_CALLOC_POSIX@ |
| 115 # undef calloc |
| 116 # define calloc rpl_calloc |
| 117 extern void * calloc (size_t nmemb, size_t size); |
| 118 # endif |
| 119 #elif defined GNULIB_POSIXCHECK |
| 120 # undef calloc |
| 121 # define calloc(n,s) \ |
| 122 (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \ |
| 123 "use gnulib module calloc-posix for portability"), \ |
| 124 calloc (n, s)) |
| 125 #endif |
| 126 |
| 127 |
| 128 #if @GNULIB_ATOLL@ |
| 129 # if !@HAVE_ATOLL@ |
| 130 /* Parse a signed decimal integer. |
| 131 Returns the value of the integer. Errors are not detected. */ |
| 132 extern long long atoll (const char *string); |
| 133 # endif |
| 134 #elif defined GNULIB_POSIXCHECK |
| 135 # undef atoll |
| 136 # define atoll(s) \ |
| 137 (GL_LINK_WARNING ("atoll is unportable - " \ |
| 138 "use gnulib module atoll for portability"), \ |
| 139 atoll (s)) |
| 140 #endif |
| 141 |
| 142 |
| 143 #if @GNULIB_GETLOADAVG@ |
| 144 # if !@HAVE_DECL_GETLOADAVG@ |
| 145 /* Store max(NELEM,3) load average numbers in LOADAVG[]. |
| 146 The three numbers are the load average of the last 1 minute, the last 5 |
| 147 minutes, and the last 15 minutes, respectively. |
| 148 LOADAVG is an array of NELEM numbers. */ |
| 149 extern int getloadavg (double loadavg[], int nelem); |
| 150 # endif |
| 151 #elif defined GNULIB_POSIXCHECK |
| 152 # undef getloadavg |
| 153 # define getloadavg(l,n) \ |
| 154 (GL_LINK_WARNING ("getloadavg is not portable - " \ |
| 155 "use gnulib module getloadavg for portability"), \ |
| 156 getloadavg (l, n)) |
| 157 #endif |
| 158 |
| 159 |
| 160 #if @GNULIB_GETSUBOPT@ |
| 161 /* Assuming *OPTIONP is a comma separated list of elements of the form |
| 162 "token" or "token=value", getsubopt parses the first of these elements. |
| 163 If the first element refers to a "token" that is member of the given |
| 164 NULL-terminated array of tokens: |
| 165 - It replaces the comma with a NUL byte, updates *OPTIONP to point past |
| 166 the first option and the comma, sets *VALUEP to the value of the |
| 167 element (or NULL if it doesn't contain an "=" sign), |
| 168 - It returns the index of the "token" in the given array of tokens. |
| 169 Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. |
| 170 For more details see the POSIX:2001 specification. |
| 171 http://www.opengroup.org/susv3xsh/getsubopt.html */ |
| 172 # if !@HAVE_GETSUBOPT@ |
| 173 extern int getsubopt (char **optionp, char *const *tokens, char **valuep); |
| 174 # endif |
| 175 #elif defined GNULIB_POSIXCHECK |
| 176 # undef getsubopt |
| 177 # define getsubopt(o,t,v) \ |
| 178 (GL_LINK_WARNING ("getsubopt is unportable - " \ |
| 179 "use gnulib module getsubopt for portability"), \ |
| 180 getsubopt (o, t, v)) |
| 181 #endif |
| 182 |
| 183 |
| 184 #if @GNULIB_MKDTEMP@ |
| 185 # if !@HAVE_MKDTEMP@ |
| 186 /* Create a unique temporary directory from TEMPLATE. |
| 187 The last six characters of TEMPLATE must be "XXXXXX"; |
| 188 they are replaced with a string that makes the directory name unique. |
| 189 Returns TEMPLATE, or a null pointer if it cannot get a unique name. |
| 190 The directory is created mode 700. */ |
| 191 extern char * mkdtemp (char * /*template*/); |
| 192 # endif |
| 193 #elif defined GNULIB_POSIXCHECK |
| 194 # undef mkdtemp |
| 195 # define mkdtemp(t) \ |
| 196 (GL_LINK_WARNING ("mkdtemp is unportable - " \ |
| 197 "use gnulib module mkdtemp for portability"), \ |
| 198 mkdtemp (t)) |
| 199 #endif |
| 200 |
| 201 |
| 202 #if @GNULIB_MKSTEMP@ |
| 203 # if @REPLACE_MKSTEMP@ |
| 204 /* Create a unique temporary file from TEMPLATE. |
| 205 The last six characters of TEMPLATE must be "XXXXXX"; |
| 206 they are replaced with a string that makes the file name unique. |
| 207 The file is then created, ensuring it didn't exist before. |
| 208 The file is created read-write (mask at least 0600 & ~umask), but it may be |
| 209 world-readable and world-writable (mask 0666 & ~umask), depending on the |
| 210 implementation. |
| 211 Returns the open file descriptor if successful, otherwise -1 and errno |
| 212 set. */ |
| 213 # define mkstemp rpl_mkstemp |
| 214 extern int mkstemp (char * /*template*/); |
| 215 # else |
| 216 /* On MacOS X 10.3, only <unistd.h> declares mkstemp. */ |
| 217 # include <unistd.h> |
| 218 # endif |
| 219 #elif defined GNULIB_POSIXCHECK |
| 220 # undef mkstemp |
| 221 # define mkstemp(t) \ |
| 222 (GL_LINK_WARNING ("mkstemp is unportable - " \ |
| 223 "use gnulib module mkstemp for portability"), \ |
| 224 mkstemp (t)) |
| 225 #endif |
| 226 |
| 227 |
| 228 #if @GNULIB_PUTENV@ |
| 229 # if @REPLACE_PUTENV@ |
| 230 # undef putenv |
| 231 # define putenv rpl_putenv |
| 232 extern int putenv (char *string); |
| 233 # endif |
| 234 #endif |
| 235 |
| 236 |
| 237 #if @GNULIB_RANDOM_R@ |
| 238 # if !@HAVE_RANDOM_R@ |
| 239 |
| 240 # ifndef RAND_MAX |
| 241 # define RAND_MAX 2147483647 |
| 242 # endif |
| 243 |
| 244 int srandom_r (unsigned int seed, struct random_data *rand_state); |
| 245 int initstate_r (unsigned int seed, char *buf, size_t buf_size, |
| 246 struct random_data *rand_state); |
| 247 int setstate_r (char *arg_state, struct random_data *rand_state); |
| 248 int random_r (struct random_data *buf, int32_t *result); |
| 249 # endif |
| 250 #elif defined GNULIB_POSIXCHECK |
| 251 # undef random_r |
| 252 # define random_r(b,r) \ |
| 253 (GL_LINK_WARNING ("random_r is unportable - " \ |
| 254 "use gnulib module random_r for portability"), \ |
| 255 random_r (b,r)) |
| 256 # undef initstate_r |
| 257 # define initstate_r(s,b,sz,r) \ |
| 258 (GL_LINK_WARNING ("initstate_r is unportable - " \ |
| 259 "use gnulib module random_r for portability"), \ |
| 260 initstate_r (s,b,sz,r)) |
| 261 # undef srandom_r |
| 262 # define srandom_r(s,r) \ |
| 263 (GL_LINK_WARNING ("srandom_r is unportable - " \ |
| 264 "use gnulib module random_r for portability"), \ |
| 265 srandom_r (s,r)) |
| 266 # undef setstate_r |
| 267 # define setstate_r(a,r) \ |
| 268 (GL_LINK_WARNING ("setstate_r is unportable - " \ |
| 269 "use gnulib module random_r for portability"), \ |
| 270 setstate_r (a,r)) |
| 271 #endif |
| 272 |
| 273 |
| 274 #if @GNULIB_RPMATCH@ |
| 275 # if !@HAVE_RPMATCH@ |
| 276 /* Test a user response to a question. |
| 277 Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ |
| 278 extern int rpmatch (const char *response); |
| 279 # endif |
| 280 #elif defined GNULIB_POSIXCHECK |
| 281 # undef rpmatch |
| 282 # define rpmatch(r) \ |
| 283 (GL_LINK_WARNING ("rpmatch is unportable - " \ |
| 284 "use gnulib module rpmatch for portability"), \ |
| 285 rpmatch (r)) |
| 286 #endif |
| 287 |
| 288 |
| 289 #if @GNULIB_SETENV@ |
| 290 # if !@HAVE_SETENV@ |
| 291 /* Set NAME to VALUE in the environment. |
| 292 If REPLACE is nonzero, overwrite an existing value. */ |
| 293 extern int setenv (const char *name, const char *value, int replace); |
| 294 # endif |
| 295 #endif |
| 296 |
| 297 |
| 298 #if @GNULIB_UNSETENV@ |
| 299 # if @HAVE_UNSETENV@ |
| 300 # if @VOID_UNSETENV@ |
| 301 /* On some systems, unsetenv() returns void. |
| 302 This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */ |
| 303 # define unsetenv(name) ((unsetenv)(name), 0) |
| 304 # endif |
| 305 # else |
| 306 /* Remove the variable NAME from the environment. */ |
| 307 extern int unsetenv (const char *name); |
| 308 # endif |
| 309 #endif |
| 310 |
| 311 |
| 312 #if @GNULIB_STRTOD@ |
| 313 # if @REPLACE_STRTOD@ |
| 314 # define strtod rpl_strtod |
| 315 # endif |
| 316 # if !@HAVE_STRTOD@ || @REPLACE_STRTOD@ |
| 317 /* Parse a double from STRING, updating ENDP if appropriate. */ |
| 318 extern double strtod (const char *str, char **endp); |
| 319 # endif |
| 320 #elif defined GNULIB_POSIXCHECK |
| 321 # undef strtod |
| 322 # define strtod(s, e) \ |
| 323 (GL_LINK_WARNING ("strtod is unportable - " \ |
| 324 "use gnulib module strtod for portability"), \ |
| 325 strtod (s, e)) |
| 326 #endif |
| 327 |
| 328 |
| 329 #if @GNULIB_STRTOLL@ |
| 330 # if !@HAVE_STRTOLL@ |
| 331 /* Parse a signed integer whose textual representation starts at STRING. |
| 332 The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, |
| 333 it may be decimal or octal (with prefix "0") or hexadecimal (with prefix |
| 334 "0x"). |
| 335 If ENDPTR is not NULL, the address of the first byte after the integer is |
| 336 stored in *ENDPTR. |
| 337 Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set |
| 338 to ERANGE. */ |
| 339 extern long long strtoll (const char *string, char **endptr, int base); |
| 340 # endif |
| 341 #elif defined GNULIB_POSIXCHECK |
| 342 # undef strtoll |
| 343 # define strtoll(s,e,b) \ |
| 344 (GL_LINK_WARNING ("strtoll is unportable - " \ |
| 345 "use gnulib module strtoll for portability"), \ |
| 346 strtoll (s, e, b)) |
| 347 #endif |
| 348 |
| 349 |
| 350 #if @GNULIB_STRTOULL@ |
| 351 # if !@HAVE_STRTOULL@ |
| 352 /* Parse an unsigned integer whose textual representation starts at STRING. |
| 353 The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, |
| 354 it may be decimal or octal (with prefix "0") or hexadecimal (with prefix |
| 355 "0x"). |
| 356 If ENDPTR is not NULL, the address of the first byte after the integer is |
| 357 stored in *ENDPTR. |
| 358 Upon overflow, the return value is ULLONG_MAX, and errno is set to |
| 359 ERANGE. */ |
| 360 extern unsigned long long strtoull (const char *string, char **endptr, int base)
; |
| 361 # endif |
| 362 #elif defined GNULIB_POSIXCHECK |
| 363 # undef strtoull |
| 364 # define strtoull(s,e,b) \ |
| 365 (GL_LINK_WARNING ("strtoull is unportable - " \ |
| 366 "use gnulib module strtoull for portability"), \ |
| 367 strtoull (s, e, b)) |
| 368 #endif |
| 369 |
| 370 |
| 371 #ifdef __cplusplus |
| 372 } |
| 373 #endif |
| 374 |
| 375 #endif /* _GL_STDLIB_H */ |
| 376 #endif /* _GL_STDLIB_H */ |
| 377 #endif |
OLD | NEW |