GNU Gnulib 1 Brief Overview 1.1 Gnulib Basics 1.2 Git Checkout 1.3 Keeping Up-to-date 1.4 Contributing to Gnulib 1.4.1 Gnulib licensing 1.4.2 Indent with spaces not TABs 1.4.3 How to add a new module 1.5 Portability guidelines 1.5.1 C language versions 1.5.2 C99 features assumed by Gnulib 1.5.3 C99 features avoided by Gnulib 1.5.4 Other portability assumptions made by Gnulib 1.6 High Quality 1.6.1 Stable Branches 1.6.2 Writing reliable code 1.7 Join the GNU Project 2 Philosophy 2.1 Benefits of using Gnulib 2.2 Library vs. Reusable Code 2.3 Portability and Application Code 2.4 Target Platforms 2.4.1 Supported Platforms 2.4.2 Formerly Supported Platforms 2.4.3 Unsupported Platforms 2.5 Modules 2.6 Various Kinds of Modules 2.6.1 Support for ISO C or POSIX functions. 2.6.2 Enhancements of ISO C or POSIX functions 2.6.3 Portable general use facilities 2.6.4 Reusable application code 2.6.5 Object oriented classes 2.6.6 Interfaces to external libraries 2.6.7 Build / maintenance infrastructure 2.7 Collaborative Development 2.8 Copyright 2.9 Steady Development 2.10 Openness 3 Invoking gnulib-tool 3.1 Finding modules 3.2 Initial import 3.3 Modified imports 3.4 Simple update 3.5 Changing your sources for use with Gnulib 3.5.1 -I options 3.5.2 Include 3.5.3 Style of #include statements 3.6 Changing your link commands for use with Gnulib 3.7 Finding recommended ISO C and POSIX function substitutes 3.8 Modifying the build rules of a Gnulib import directory 3.9 Building directly from the top-level directory 3.10 Using Gnulib for both a library and a program 3.11 Caveat: ‘gettextize’ and ‘autopoint’ users 3.12 Handling Gnulib’s own message translations 3.13 Integration with Version Control Systems 3.14 Bundling the unit tests of the Gnulib modules 3.15 Avoiding unnecessary checks and compilations 4 Writing modules 4.1 Source code files 4.2 Header files 4.3 Implementation files 4.4 Specification 4.5 Module description 4.6 Autoconf macros 4.7 Making proper use of ‘AC_LIBOBJ’ 4.8 Unit test modules 4.9 Incompatible changes 5 Extending Gnulib 6 Miscellaneous Notes 6.1 Out of memory handling 6.2 Obsolete modules 6.3 Extra tests modules 6.4 Modules that modify the way other modules work 6.5 A C++ namespace for gnulib 6.6 License Texinfo sources 6.7 Building gnulib 7 Building the ISO C and POSIX Substitutes 8 ISO C Keyword Substitutes 8.1 ‘alignof’ and ‘alignas’ 8.2 ‘bool’ 8.3 ‘nullptr’ 8.4 ‘static_assert’ 9 ISO C and POSIX Header File Substitutes 9.1 ‘aio.h’ 9.2 ‘arpa/inet.h’ 9.3 ‘assert.h’ 9.4 ‘complex.h’ 9.5 ‘cpio.h’ 9.6 ‘ctype.h’ 9.7 ‘dirent.h’ 9.8 ‘dlfcn.h’ 9.9 ‘errno.h’ 9.10 ‘fcntl.h’ 9.11 ‘fenv.h’ 9.12 ‘float.h’ 9.13 ‘fmtmsg.h’ 9.14 ‘fnmatch.h’ 9.15 ‘ftw.h’ 9.16 ‘glob.h’ 9.17 ‘grp.h’ 9.18 ‘iconv.h’ 9.19 ‘inttypes.h’ 9.20 ‘iso646.h’ 9.21 ‘langinfo.h’ 9.22 ‘libgen.h’ 9.23 ‘limits.h’ 9.24 ‘locale.h’ 9.25 ‘math.h’ 9.26 ‘monetary.h’ 9.27 ‘mqueue.h’ 9.28 ‘ndbm.h’ 9.29 ‘net/if.h’ 9.30 ‘netdb.h’ 9.31 ‘netinet/in.h’ 9.32 ‘netinet/tcp.h’ 9.33 ‘nl_types.h’ 9.34 ‘poll.h’ 9.35 ‘pthread.h’ 9.36 ‘pwd.h’ 9.37 ‘regex.h’ 9.38 ‘sched.h’ 9.39 ‘search.h’ 9.40 ‘semaphore.h’ 9.41 ‘setjmp.h’ 9.42 ‘signal.h’ 9.43 ‘spawn.h’ 9.44 ‘stdalign.h’ 9.45 ‘stdarg.h’ 9.46 ‘stdatomic.h’ 9.47 ‘stdbit.h’ 9.48 ‘stdbool.h’ 9.49 ‘stdckdint.h’ 9.50 ‘stddef.h’ 9.51 ‘stdint.h’ 9.52 ‘stdio.h’ 9.53 ‘stdlib.h’ 9.54 ‘stdnoreturn.h’ 9.55 ‘string.h’ 9.56 ‘strings.h’ 9.57 ‘stropts.h’ 9.58 ‘sys/ipc.h’ 9.59 ‘sys/mman.h’ 9.60 ‘sys/msg.h’ 9.61 ‘sys/resource.h’ 9.62 ‘sys/select.h’ 9.63 ‘sys/sem.h’ 9.64 ‘sys/shm.h’ 9.65 ‘sys/socket.h’ 9.66 ‘sys/stat.h’ 9.67 ‘sys/statvfs.h’ 9.68 ‘sys/time.h’ 9.69 ‘sys/timeb.h’ 9.70 ‘sys/times.h’ 9.71 ‘sys/types.h’ 9.72 ‘sys/uio.h’ 9.73 ‘sys/un.h’ 9.74 ‘sys/utsname.h’ 9.75 ‘sys/wait.h’ 9.76 ‘syslog.h’ 9.77 ‘tar.h’ 9.78 ‘termios.h’ 9.79 ‘tgmath.h’ 9.80 ‘threads.h’ 9.81 ‘time.h’ 9.82 ‘trace.h’ 9.83 ‘uchar.h’ 9.84 ‘ucontext.h’ 9.85 ‘ulimit.h’ 9.86 ‘unistd.h’ 9.87 ‘utime.h’ 9.88 ‘utmpx.h’ 9.89 ‘wchar.h’ 9.90 ‘wctype.h’ 9.91 ‘wordexp.h’ 10 ISO C and POSIX Function Substitutes 10.1 ‘FD_CLR’ 10.2 ‘FD_ISSET’ 10.3 ‘FD_SET’ 10.4 ‘FD_ZERO’ 10.5 ‘_Exit’ 10.6 ‘_exit’ 10.7 ‘_longjmp’ 10.8 ‘_setjmp’ 10.9 ‘_tolower’ 10.10 ‘_toupper’ 10.11 ‘a64l’ 10.12 ‘abort’ 10.13 ‘abs’ 10.14 ‘accept’ 10.15 ‘access’ 10.16 ‘acos’ 10.17 ‘acosf’ 10.18 ‘acosh’ 10.19 ‘acoshf’ 10.20 ‘acoshl’ 10.21 ‘acosl’ 10.22 ‘aio_cancel’ 10.23 ‘aio_error’ 10.24 ‘aio_fsync’ 10.25 ‘aio_read’ 10.26 ‘aio_return’ 10.27 ‘aio_suspend’ 10.28 ‘aio_write’ 10.29 ‘alarm’ 10.30 ‘aligned_alloc’ 10.31 ‘alphasort’ 10.32 ‘asctime’ 10.33 ‘asctime_r’ 10.34 ‘asin’ 10.35 ‘asinf’ 10.36 ‘asinh’ 10.37 ‘asinhf’ 10.38 ‘asinhl’ 10.39 ‘asinl’ 10.40 ‘assert’ 10.41 ‘atan’ 10.42 ‘atan2’ 10.43 ‘atan2f’ 10.44 ‘atan2l’ 10.45 ‘atanf’ 10.46 ‘atanh’ 10.47 ‘atanhf’ 10.48 ‘atanhl’ 10.49 ‘atanl’ 10.50 ‘atexit’ 10.51 ‘atof’ 10.52 ‘atoi’ 10.53 ‘atol’ 10.54 ‘atoll’ 10.55 ‘basename’ 10.56 ‘bind’ 10.57 ‘bsearch’ 10.58 ‘btowc’ 10.59 ‘c8rtomb’ 10.60 ‘c16rtomb’ 10.61 ‘c32rtomb’ 10.62 ‘cabs’ 10.63 ‘cabsf’ 10.64 ‘cabsl’ 10.65 ‘cacos’ 10.66 ‘cacosf’ 10.67 ‘cacosh’ 10.68 ‘cacoshf’ 10.69 ‘cacoshl’ 10.70 ‘cacosl’ 10.71 ‘calloc’ 10.72 ‘call_once’ 10.73 ‘canonicalize’ 10.74 ‘canonicalizef’ 10.75 ‘canonicalizel’ 10.76 ‘carg’ 10.77 ‘cargf’ 10.78 ‘cargl’ 10.79 ‘casin’ 10.80 ‘casinf’ 10.81 ‘casinh’ 10.82 ‘casinhf’ 10.83 ‘casinhl’ 10.84 ‘casinl’ 10.85 ‘catan’ 10.86 ‘catanf’ 10.87 ‘catanh’ 10.88 ‘catanhf’ 10.89 ‘catanhl’ 10.90 ‘catanl’ 10.91 ‘catclose’ 10.92 ‘catgets’ 10.93 ‘catopen’ 10.94 ‘cbrt’ 10.95 ‘cbrtf’ 10.96 ‘cbrtl’ 10.97 ‘ccos’ 10.98 ‘ccosf’ 10.99 ‘ccosh’ 10.100 ‘ccoshf’ 10.101 ‘ccoshl’ 10.102 ‘ccosl’ 10.103 ‘ceil’ 10.104 ‘ceilf’ 10.105 ‘ceill’ 10.106 ‘cexp’ 10.107 ‘cexpf’ 10.108 ‘cexpl’ 10.109 ‘cfgetispeed’ 10.110 ‘cfgetospeed’ 10.111 ‘cfsetispeed’ 10.112 ‘cfsetospeed’ 10.113 ‘chdir’ 10.114 ‘chmod’ 10.115 ‘chown’ 10.116 ‘cimag’ 10.117 ‘cimagf’ 10.118 ‘cimagl’ 10.119 ‘clearerr’ 10.120 ‘clock’ 10.121 ‘clock_getcpuclockid’ 10.122 ‘clock_getres’ 10.123 ‘clock_gettime’ 10.124 ‘clock_nanosleep’ 10.125 ‘clock_settime’ 10.126 ‘clog’ 10.127 ‘clogf’ 10.128 ‘clogl’ 10.129 ‘close’ 10.130 ‘closedir’ 10.131 ‘closelog’ 10.132 ‘cnd_broadcast’ 10.133 ‘cnd_destroy’ 10.134 ‘cnd_init’ 10.135 ‘cnd_signal’ 10.136 ‘cnd_timedwait’ 10.137 ‘cnd_wait’ 10.138 ‘confstr’ 10.139 ‘conj’ 10.140 ‘conjf’ 10.141 ‘conjl’ 10.142 ‘connect’ 10.143 ‘copysign’ 10.144 ‘copysignf’ 10.145 ‘copysignl’ 10.146 ‘cos’ 10.147 ‘cosf’ 10.148 ‘cosh’ 10.149 ‘coshf’ 10.150 ‘coshl’ 10.151 ‘cosl’ 10.152 ‘cpow’ 10.153 ‘cpowf’ 10.154 ‘cpowl’ 10.155 ‘cproj’ 10.156 ‘cprojf’ 10.157 ‘cprojl’ 10.158 ‘creal’ 10.159 ‘crealf’ 10.160 ‘creall’ 10.161 ‘creat’ 10.162 ‘crypt’ 10.163 ‘csin’ 10.164 ‘csinf’ 10.165 ‘csinh’ 10.166 ‘csinhf’ 10.167 ‘csinhl’ 10.168 ‘csinl’ 10.169 ‘csqrt’ 10.170 ‘csqrtf’ 10.171 ‘csqrtl’ 10.172 ‘ctan’ 10.173 ‘ctanf’ 10.174 ‘ctanh’ 10.175 ‘ctanhf’ 10.176 ‘ctanhl’ 10.177 ‘ctanl’ 10.178 ‘ctermid’ 10.179 ‘ctime’ 10.180 ‘ctime_r’ 10.181 ‘daddl’ 10.182 ‘daylight’ 10.183 ‘dbm_clearerr’ 10.184 ‘dbm_close’ 10.185 ‘dbm_delete’ 10.186 ‘dbm_error’ 10.187 ‘dbm_fetch’ 10.188 ‘dbm_firstkey’ 10.189 ‘dbm_nextkey’ 10.190 ‘dbm_open’ 10.191 ‘dbm_store’ 10.192 ‘ddivl’ 10.193 ‘difftime’ 10.194 ‘dirfd’ 10.195 ‘dirname’ 10.196 ‘div’ 10.197 ‘dlclose’ 10.198 ‘dlerror’ 10.199 ‘dlopen’ 10.200 ‘dlsym’ 10.201 ‘dmull’ 10.202 ‘dprintf’ 10.203 ‘drand48’ 10.204 ‘dsubl’ 10.205 ‘dup’ 10.206 ‘dup2’ 10.207 ‘duplocale’ 10.208 ‘encrypt’ 10.209 ‘endgrent’ 10.210 ‘endhostent’ 10.211 ‘endnetent’ 10.212 ‘endprotoent’ 10.213 ‘endpwent’ 10.214 ‘endservent’ 10.215 ‘endutxent’ 10.216 ‘environ’ 10.217 ‘erand48’ 10.218 ‘erf’ 10.219 ‘erfc’ 10.220 ‘erfcf’ 10.221 ‘erfcl’ 10.222 ‘erff’ 10.223 ‘erfl’ 10.224 ‘errno’ 10.225 ‘execl’ 10.226 ‘execle’ 10.227 ‘execlp’ 10.228 ‘execv’ 10.229 ‘execve’ 10.230 ‘execvp’ 10.231 ‘exit’ 10.232 ‘exp’ 10.233 ‘exp2’ 10.234 ‘exp2f’ 10.235 ‘exp2l’ 10.236 ‘expf’ 10.237 ‘expl’ 10.238 ‘expm1’ 10.239 ‘expm1f’ 10.240 ‘expm1l’ 10.241 ‘fabs’ 10.242 ‘fabsf’ 10.243 ‘fabsl’ 10.244 ‘faccessat’ 10.245 ‘fadd’ 10.246 ‘faddl’ 10.247 ‘fattach’ 10.248 ‘fchdir’ 10.249 ‘fchmod’ 10.250 ‘fchmodat’ 10.251 ‘fchown’ 10.252 ‘fchownat’ 10.253 ‘fclose’ 10.254 ‘fcntl’ 10.255 ‘fdatasync’ 10.256 ‘fdetach’ 10.257 ‘fdim’ 10.258 ‘fdimf’ 10.259 ‘fdiml’ 10.260 ‘fdiv’ 10.261 ‘fdivl’ 10.262 ‘fdopen’ 10.263 ‘fdopendir’ 10.264 ‘feclearexcept’ 10.265 ‘fegetenv’ 10.266 ‘fegetexceptflag’ 10.267 ‘fegetmode’ 10.268 ‘fegetround’ 10.269 ‘feholdexcept’ 10.270 ‘feof’ 10.271 ‘feraiseexcept’ 10.272 ‘ferror’ 10.273 ‘fesetenv’ 10.274 ‘fesetexcept’ 10.275 ‘fesetexceptflag’ 10.276 ‘fesetmode’ 10.277 ‘fesetround’ 10.278 ‘fetestexcept’ 10.279 ‘fetestexceptflag’ 10.280 ‘feupdateenv’ 10.281 ‘fexecve’ 10.282 ‘fflush’ 10.283 ‘ffs’ 10.284 ‘fgetc’ 10.285 ‘fgetpos’ 10.286 ‘fgets’ 10.287 ‘fgetwc’ 10.288 ‘fgetws’ 10.289 ‘fileno’ 10.290 ‘flockfile’ 10.291 ‘floor’ 10.292 ‘floorf’ 10.293 ‘floorl’ 10.294 ‘fma’ 10.295 ‘fmaf’ 10.296 ‘fmal’ 10.297 ‘fmax’ 10.298 ‘fmaxf’ 10.299 ‘fmaxl’ 10.300 ‘fmaxmag’ 10.301 ‘fmaxmagf’ 10.302 ‘fmaxmagl’ 10.303 ‘fmemopen’ 10.304 ‘fmin’ 10.305 ‘fminf’ 10.306 ‘fminl’ 10.307 ‘fminmag’ 10.308 ‘fminmagf’ 10.309 ‘fminmagl’ 10.310 ‘fmod’ 10.311 ‘fmodf’ 10.312 ‘fmodl’ 10.313 ‘fmtmsg’ 10.314 ‘fmul’ 10.315 ‘fmull’ 10.316 ‘fnmatch’ 10.317 ‘fopen’ 10.318 ‘fork’ 10.319 ‘fpathconf’ 10.320 ‘fpclassify’ 10.321 ‘fprintf’ 10.322 ‘fputc’ 10.323 ‘fputs’ 10.324 ‘fputwc’ 10.325 ‘fputws’ 10.326 ‘fread’ 10.327 ‘free’ 10.328 ‘freeaddrinfo’ 10.329 ‘freelocale’ 10.330 ‘freopen’ 10.331 ‘frexp’ 10.332 ‘frexpf’ 10.333 ‘frexpl’ 10.334 ‘fromfp’ 10.335 ‘fromfpf’ 10.336 ‘fromfpl’ 10.337 ‘fromfpx’ 10.338 ‘fromfpxf’ 10.339 ‘fromfpxl’ 10.340 ‘fscanf’ 10.341 ‘fseek’ 10.342 ‘fseeko’ 10.343 ‘fsetpos’ 10.344 ‘fstat’ 10.345 ‘fstatat’ 10.346 ‘fstatvfs’ 10.347 ‘fsub’ 10.348 ‘fsubl’ 10.349 ‘fsync’ 10.350 ‘ftell’ 10.351 ‘ftello’ 10.352 ‘ftok’ 10.353 ‘ftruncate’ 10.354 ‘ftrylockfile’ 10.355 ‘ftw’ 10.356 ‘funlockfile’ 10.357 ‘futimens’ 10.358 ‘fwide’ 10.359 ‘fwprintf’ 10.360 ‘fwrite’ 10.361 ‘fwscanf’ 10.362 ‘gai_strerror’ 10.363 ‘getaddrinfo’ 10.364 ‘getc’ 10.365 ‘getc_unlocked’ 10.366 ‘getchar’ 10.367 ‘getchar_unlocked’ 10.368 ‘getcwd’ 10.369 ‘getdate’ 10.370 ‘getdate_err’ 10.371 ‘getdelim’ 10.372 ‘getegid’ 10.373 ‘getenv’ 10.374 ‘geteuid’ 10.375 ‘getgid’ 10.376 ‘getgrent’ 10.377 ‘getgrgid’ 10.378 ‘getgrgid_r’ 10.379 ‘getgrnam’ 10.380 ‘getgrnam_r’ 10.381 ‘getgroups’ 10.382 ‘gethostent’ 10.383 ‘gethostid’ 10.384 ‘gethostname’ 10.385 ‘getitimer’ 10.386 ‘getline’ 10.387 ‘getlogin’ 10.388 ‘getlogin_r’ 10.389 ‘getmsg’ 10.390 ‘getnameinfo’ 10.391 ‘getnetbyaddr’ 10.392 ‘getnetbyname’ 10.393 ‘getnetent’ 10.394 ‘getopt’ 10.395 ‘getpayload’ 10.396 ‘getpayloadf’ 10.397 ‘getpayloadl’ 10.398 ‘getpeername’ 10.399 ‘getpgid’ 10.400 ‘getpgrp’ 10.401 ‘getpid’ 10.402 ‘getpmsg’ 10.403 ‘getppid’ 10.404 ‘getpriority’ 10.405 ‘getprotobyname’ 10.406 ‘getprotobynumber’ 10.407 ‘getprotoent’ 10.408 ‘getpwent’ 10.409 ‘getpwnam’ 10.410 ‘getpwnam_r’ 10.411 ‘getpwuid’ 10.412 ‘getpwuid_r’ 10.413 ‘getrlimit’ 10.414 ‘getrusage’ 10.415 ‘gets’ 10.416 ‘getservbyname’ 10.417 ‘getservbyport’ 10.418 ‘getservent’ 10.419 ‘getsid’ 10.420 ‘getsockname’ 10.421 ‘getsockopt’ 10.422 ‘getsubopt’ 10.423 ‘gettimeofday’ 10.424 ‘getuid’ 10.425 ‘getutxent’ 10.426 ‘getutxid’ 10.427 ‘getutxline’ 10.428 ‘getwc’ 10.429 ‘getwchar’ 10.430 ‘glob’ 10.431 ‘globfree’ 10.432 ‘gmtime’ 10.433 ‘gmtime_r’ 10.434 ‘grantpt’ 10.435 ‘hcreate’ 10.436 ‘hdestroy’ 10.437 ‘hsearch’ 10.438 ‘htonl’ 10.439 ‘htons’ 10.440 ‘hypot’ 10.441 ‘hypotf’ 10.442 ‘hypotl’ 10.443 ‘iconv’ 10.444 ‘iconv_close’ 10.445 ‘iconv_open’ 10.446 ‘if_freenameindex’ 10.447 ‘if_indextoname’ 10.448 ‘if_nameindex’ 10.449 ‘if_nametoindex’ 10.450 ‘ilogb’ 10.451 ‘ilogbf’ 10.452 ‘ilogbl’ 10.453 ‘imaxabs’ 10.454 ‘imaxdiv’ 10.455 ‘inet_addr’ 10.456 ‘inet_ntoa’ 10.457 ‘inet_ntop’ 10.458 ‘inet_pton’ 10.459 ‘initstate’ 10.460 ‘insque’ 10.461 ‘ioctl’ 10.462 ‘isalnum’ 10.463 ‘isalnum_l’ 10.464 ‘isalpha’ 10.465 ‘isalpha_l’ 10.466 ‘isascii’ 10.467 ‘isastream’ 10.468 ‘isatty’ 10.469 ‘isblank’ 10.470 ‘isblank_l’ 10.471 ‘iscntrl’ 10.472 ‘iscntrl_l’ 10.473 ‘isdigit’ 10.474 ‘isdigit_l’ 10.475 ‘isfinite’ 10.476 ‘isgraph’ 10.477 ‘isgraph_l’ 10.478 ‘isgreater’ 10.479 ‘isgreaterequal’ 10.480 ‘isinf’ 10.481 ‘isless’ 10.482 ‘islessequal’ 10.483 ‘islessgreater’ 10.484 ‘islower’ 10.485 ‘islower_l’ 10.486 ‘isnan’ 10.487 ‘isnormal’ 10.488 ‘isprint’ 10.489 ‘isprint_l’ 10.490 ‘ispunct’ 10.491 ‘ispunct_l’ 10.492 ‘isspace’ 10.493 ‘isspace_l’ 10.494 ‘isunordered’ 10.495 ‘isupper’ 10.496 ‘isupper_l’ 10.497 ‘iswalnum’ 10.498 ‘iswalnum_l’ 10.499 ‘iswalpha’ 10.500 ‘iswalpha_l’ 10.501 ‘iswblank’ 10.502 ‘iswblank_l’ 10.503 ‘iswcntrl’ 10.504 ‘iswcntrl_l’ 10.505 ‘iswctype’ 10.506 ‘iswctype_l’ 10.507 ‘iswdigit’ 10.508 ‘iswdigit_l’ 10.509 ‘iswgraph’ 10.510 ‘iswgraph_l’ 10.511 ‘iswlower’ 10.512 ‘iswlower_l’ 10.513 ‘iswprint’ 10.514 ‘iswprint_l’ 10.515 ‘iswpunct’ 10.516 ‘iswpunct_l’ 10.517 ‘iswspace’ 10.518 ‘iswspace_l’ 10.519 ‘iswupper’ 10.520 ‘iswupper_l’ 10.521 ‘iswxdigit’ 10.522 ‘iswxdigit_l’ 10.523 ‘isxdigit’ 10.524 ‘isxdigit_l’ 10.525 ‘j0’ 10.526 ‘j1’ 10.527 ‘jn’ 10.528 ‘jrand48’ 10.529 ‘kill’ 10.530 ‘killpg’ 10.531 ‘l64a’ 10.532 ‘labs’ 10.533 ‘lchown’ 10.534 ‘lcong48’ 10.535 ‘ldexp’ 10.536 ‘ldexpf’ 10.537 ‘ldexpl’ 10.538 ‘ldiv’ 10.539 ‘lfind’ 10.540 ‘lgamma’ 10.541 ‘lgammaf’ 10.542 ‘lgammal’ 10.543 ‘link’ 10.544 ‘linkat’ 10.545 ‘lio_listio’ 10.546 ‘listen’ 10.547 ‘llabs’ 10.548 ‘lldiv’ 10.549 ‘llogb’ 10.550 ‘llogbf’ 10.551 ‘llogbl’ 10.552 ‘llrint’ 10.553 ‘llrintf’ 10.554 ‘llrintl’ 10.555 ‘llround’ 10.556 ‘llroundf’ 10.557 ‘llroundl’ 10.558 ‘localeconv’ 10.559 ‘localtime’ 10.560 ‘localtime_r’ 10.561 ‘lockf’ 10.562 ‘log’ 10.563 ‘log10’ 10.564 ‘log10f’ 10.565 ‘log10l’ 10.566 ‘log1p’ 10.567 ‘log1pf’ 10.568 ‘log1pl’ 10.569 ‘log2’ 10.570 ‘log2f’ 10.571 ‘log2l’ 10.572 ‘logb’ 10.573 ‘logbf’ 10.574 ‘logbl’ 10.575 ‘logf’ 10.576 ‘logl’ 10.577 ‘longjmp’ 10.578 ‘lrand48’ 10.579 ‘lrint’ 10.580 ‘lrintf’ 10.581 ‘lrintl’ 10.582 ‘lround’ 10.583 ‘lroundf’ 10.584 ‘lroundl’ 10.585 ‘lsearch’ 10.586 ‘lseek’ 10.587 ‘lstat’ 10.588 ‘malloc’ 10.589 ‘mblen’ 10.590 ‘mbrlen’ 10.591 ‘mbrtoc8’ 10.592 ‘mbrtoc16’ 10.593 ‘mbrtoc32’ 10.594 ‘mbrtowc’ 10.595 ‘mbsinit’ 10.596 ‘mbsnrtowcs’ 10.597 ‘mbsrtowcs’ 10.598 ‘mbstowcs’ 10.599 ‘mbtowc’ 10.600 ‘memccpy’ 10.601 ‘memchr’ 10.602 ‘memcmp’ 10.603 ‘memcpy’ 10.604 ‘memmove’ 10.605 ‘memset’ 10.606 ‘memset_explicit’ 10.607 ‘mkdir’ 10.608 ‘mkdirat’ 10.609 ‘mkdtemp’ 10.610 ‘mkfifo’ 10.611 ‘mkfifoat’ 10.612 ‘mknod’ 10.613 ‘mknodat’ 10.614 ‘mkstemp’ 10.615 ‘mktime’ 10.616 ‘mlock’ 10.617 ‘mlockall’ 10.618 ‘mmap’ 10.619 ‘modf’ 10.620 ‘modff’ 10.621 ‘modfl’ 10.622 ‘mprotect’ 10.623 ‘mq_close’ 10.624 ‘mq_getattr’ 10.625 ‘mq_notify’ 10.626 ‘mq_open’ 10.627 ‘mq_receive’ 10.628 ‘mq_send’ 10.629 ‘mq_setattr’ 10.630 ‘mq_timedreceive’ 10.631 ‘mq_timedsend’ 10.632 ‘mq_unlink’ 10.633 ‘mrand48’ 10.634 ‘msgctl’ 10.635 ‘msgget’ 10.636 ‘msgrcv’ 10.637 ‘msgsnd’ 10.638 ‘msync’ 10.639 ‘mtx_destroy’ 10.640 ‘mtx_init’ 10.641 ‘mtx_lock’ 10.642 ‘mtx_timedlock’ 10.643 ‘mtx_trylock’ 10.644 ‘mtx_unlock’ 10.645 ‘munlock’ 10.646 ‘munlockall’ 10.647 ‘munmap’ 10.648 ‘nan’ 10.649 ‘nanf’ 10.650 ‘nanl’ 10.651 ‘nanosleep’ 10.652 ‘nearbyint’ 10.653 ‘nearbyintf’ 10.654 ‘nearbyintl’ 10.655 ‘newlocale’ 10.656 ‘nextafter’ 10.657 ‘nextafterf’ 10.658 ‘nextafterl’ 10.659 ‘nextdown’ 10.660 ‘nextdownf’ 10.661 ‘nextdownl’ 10.662 ‘nexttoward’ 10.663 ‘nexttowardf’ 10.664 ‘nexttowardl’ 10.665 ‘nextup’ 10.666 ‘nextupf’ 10.667 ‘nextupl’ 10.668 ‘nftw’ 10.669 ‘nice’ 10.670 ‘nl_langinfo’ 10.671 ‘nl_langinfo_l’ 10.672 ‘nrand48’ 10.673 ‘ntohl’ 10.674 ‘ntohs’ 10.675 ‘open’ 10.676 ‘openat’ 10.677 ‘opendir’ 10.678 ‘openlog’ 10.679 ‘open_memstream’ 10.680 ‘open_wmemstream’ 10.681 ‘optarg’ 10.682 ‘opterr’ 10.683 ‘optind’ 10.684 ‘optopt’ 10.685 ‘pathconf’ 10.686 ‘pause’ 10.687 ‘pclose’ 10.688 ‘perror’ 10.689 ‘pipe’ 10.690 ‘poll’ 10.691 ‘popen’ 10.692 ‘posix_fadvise’ 10.693 ‘posix_fallocate’ 10.694 ‘posix_madvise’ 10.695 ‘posix_mem_offset’ 10.696 ‘posix_memalign’ 10.697 ‘posix_openpt’ 10.698 ‘posix_spawn’ 10.699 ‘posix_spawn_file_actions_addclose’ 10.700 ‘posix_spawn_file_actions_adddup2’ 10.701 ‘posix_spawn_file_actions_addopen’ 10.702 ‘posix_spawn_file_actions_destroy’ 10.703 ‘posix_spawn_file_actions_init’ 10.704 ‘posix_spawnattr_destroy’ 10.705 ‘posix_spawnattr_getflags’ 10.706 ‘posix_spawnattr_getpgroup’ 10.707 ‘posix_spawnattr_getschedparam’ 10.708 ‘posix_spawnattr_getschedpolicy’ 10.709 ‘posix_spawnattr_getsigdefault’ 10.710 ‘posix_spawnattr_getsigmask’ 10.711 ‘posix_spawnattr_init’ 10.712 ‘posix_spawnattr_setflags’ 10.713 ‘posix_spawnattr_setpgroup’ 10.714 ‘posix_spawnattr_setschedparam’ 10.715 ‘posix_spawnattr_setschedpolicy’ 10.716 ‘posix_spawnattr_setsigdefault’ 10.717 ‘posix_spawnattr_setsigmask’ 10.718 ‘posix_spawnp’ 10.719 ‘posix_trace_attr_destroy’ 10.720 ‘posix_trace_attr_getclockres’ 10.721 ‘posix_trace_attr_getcreatetime’ 10.722 ‘posix_trace_attr_getgenversion’ 10.723 ‘posix_trace_attr_getinherited’ 10.724 ‘posix_trace_attr_getlogfullpolicy’ 10.725 ‘posix_trace_attr_getlogsize’ 10.726 ‘posix_trace_attr_getmaxdatasize’ 10.727 ‘posix_trace_attr_getmaxsystemeventsize’ 10.728 ‘posix_trace_attr_getmaxusereventsize’ 10.729 ‘posix_trace_attr_getname’ 10.730 ‘posix_trace_attr_getstreamfullpolicy’ 10.731 ‘posix_trace_attr_getstreamsize’ 10.732 ‘posix_trace_attr_init’ 10.733 ‘posix_trace_attr_setinherited’ 10.734 ‘posix_trace_attr_setlogfullpolicy’ 10.735 ‘posix_trace_attr_setlogsize’ 10.736 ‘posix_trace_attr_setmaxdatasize’ 10.737 ‘posix_trace_attr_setname’ 10.738 ‘posix_trace_attr_setstreamfullpolicy’ 10.739 ‘posix_trace_attr_setstreamsize’ 10.740 ‘posix_trace_clear’ 10.741 ‘posix_trace_close’ 10.742 ‘posix_trace_create’ 10.743 ‘posix_trace_create_withlog’ 10.744 ‘posix_trace_event’ 10.745 ‘posix_trace_eventid_equal’ 10.746 ‘posix_trace_eventid_get_name’ 10.747 ‘posix_trace_eventid_open’ 10.748 ‘posix_trace_eventset_add’ 10.749 ‘posix_trace_eventset_del’ 10.750 ‘posix_trace_eventset_empty’ 10.751 ‘posix_trace_eventset_fill’ 10.752 ‘posix_trace_eventset_ismember’ 10.753 ‘posix_trace_eventtypelist_getnext_id’ 10.754 ‘posix_trace_eventtypelist_rewind’ 10.755 ‘posix_trace_flush’ 10.756 ‘posix_trace_get_attr’ 10.757 ‘posix_trace_get_filter’ 10.758 ‘posix_trace_get_status’ 10.759 ‘posix_trace_getnext_event’ 10.760 ‘posix_trace_open’ 10.761 ‘posix_trace_rewind’ 10.762 ‘posix_trace_set_filter’ 10.763 ‘posix_trace_shutdown’ 10.764 ‘posix_trace_start’ 10.765 ‘posix_trace_stop’ 10.766 ‘posix_trace_timedgetnext_event’ 10.767 ‘posix_trace_trid_eventid_open’ 10.768 ‘posix_trace_trygetnext_event’ 10.769 ‘posix_typed_mem_get_info’ 10.770 ‘posix_typed_mem_open’ 10.771 ‘pow’ 10.772 ‘powf’ 10.773 ‘powl’ 10.774 ‘pread’ 10.775 ‘printf’ 10.776 ‘pselect’ 10.777 ‘psiginfo’ 10.778 ‘psignal’ 10.779 ‘pthread_atfork’ 10.780 ‘pthread_attr_destroy’ 10.781 ‘pthread_attr_getdetachstate’ 10.782 ‘pthread_attr_getguardsize’ 10.783 ‘pthread_attr_getinheritsched’ 10.784 ‘pthread_attr_getschedparam’ 10.785 ‘pthread_attr_getschedpolicy’ 10.786 ‘pthread_attr_getscope’ 10.787 ‘pthread_attr_getstack’ 10.788 ‘pthread_attr_getstacksize’ 10.789 ‘pthread_attr_init’ 10.790 ‘pthread_attr_setdetachstate’ 10.791 ‘pthread_attr_setguardsize’ 10.792 ‘pthread_attr_setinheritsched’ 10.793 ‘pthread_attr_setschedparam’ 10.794 ‘pthread_attr_setschedpolicy’ 10.795 ‘pthread_attr_setscope’ 10.796 ‘pthread_attr_setstack’ 10.797 ‘pthread_attr_setstacksize’ 10.798 ‘pthread_barrier_destroy’ 10.799 ‘pthread_barrier_init’ 10.800 ‘pthread_barrier_wait’ 10.801 ‘pthread_barrierattr_destroy’ 10.802 ‘pthread_barrierattr_getpshared’ 10.803 ‘pthread_barrierattr_init’ 10.804 ‘pthread_barrierattr_setpshared’ 10.805 ‘pthread_cancel’ 10.806 ‘pthread_cleanup_pop’ 10.807 ‘pthread_cleanup_push’ 10.808 ‘pthread_cond_broadcast’ 10.809 ‘pthread_cond_destroy’ 10.810 ‘pthread_cond_init’ 10.811 ‘pthread_cond_signal’ 10.812 ‘pthread_cond_timedwait’ 10.813 ‘pthread_cond_wait’ 10.814 ‘pthread_condattr_destroy’ 10.815 ‘pthread_condattr_getclock’ 10.816 ‘pthread_condattr_getpshared’ 10.817 ‘pthread_condattr_init’ 10.818 ‘pthread_condattr_setclock’ 10.819 ‘pthread_condattr_setpshared’ 10.820 ‘pthread_create’ 10.821 ‘pthread_detach’ 10.822 ‘pthread_equal’ 10.823 ‘pthread_exit’ 10.824 ‘pthread_getconcurrency’ 10.825 ‘pthread_getcpuclockid’ 10.826 ‘pthread_getschedparam’ 10.827 ‘pthread_getspecific’ 10.828 ‘pthread_join’ 10.829 ‘pthread_key_create’ 10.830 ‘pthread_key_delete’ 10.831 ‘pthread_kill’ 10.832 ‘pthread_mutex_consistent’ 10.833 ‘pthread_mutex_destroy’ 10.834 ‘pthread_mutex_getprioceiling’ 10.835 ‘pthread_mutex_init’ 10.836 ‘pthread_mutex_lock’ 10.837 ‘pthread_mutex_setprioceiling’ 10.838 ‘pthread_mutex_timedlock’ 10.839 ‘pthread_mutex_trylock’ 10.840 ‘pthread_mutex_unlock’ 10.841 ‘pthread_mutexattr_destroy’ 10.842 ‘pthread_mutexattr_getprioceiling’ 10.843 ‘pthread_mutexattr_getprotocol’ 10.844 ‘pthread_mutexattr_getpshared’ 10.845 ‘pthread_mutexattr_getrobust’ 10.846 ‘pthread_mutexattr_gettype’ 10.847 ‘pthread_mutexattr_init’ 10.848 ‘pthread_mutexattr_setprioceiling’ 10.849 ‘pthread_mutexattr_setprotocol’ 10.850 ‘pthread_mutexattr_setpshared’ 10.851 ‘pthread_mutexattr_setrobust’ 10.852 ‘pthread_mutexattr_settype’ 10.853 ‘pthread_once’ 10.854 ‘pthread_rwlock_destroy’ 10.855 ‘pthread_rwlock_init’ 10.856 ‘pthread_rwlock_rdlock’ 10.857 ‘pthread_rwlock_timedrdlock’ 10.858 ‘pthread_rwlock_timedwrlock’ 10.859 ‘pthread_rwlock_tryrdlock’ 10.860 ‘pthread_rwlock_trywrlock’ 10.861 ‘pthread_rwlock_unlock’ 10.862 ‘pthread_rwlock_wrlock’ 10.863 ‘pthread_rwlockattr_destroy’ 10.864 ‘pthread_rwlockattr_getpshared’ 10.865 ‘pthread_rwlockattr_init’ 10.866 ‘pthread_rwlockattr_setpshared’ 10.867 ‘pthread_self’ 10.868 ‘pthread_setcancelstate’ 10.869 ‘pthread_setcanceltype’ 10.870 ‘pthread_setconcurrency’ 10.871 ‘pthread_setschedparam’ 10.872 ‘pthread_setschedprio’ 10.873 ‘pthread_setspecific’ 10.874 ‘pthread_sigmask’ 10.875 ‘pthread_spin_destroy’ 10.876 ‘pthread_spin_init’ 10.877 ‘pthread_spin_lock’ 10.878 ‘pthread_spin_trylock’ 10.879 ‘pthread_spin_unlock’ 10.880 ‘pthread_testcancel’ 10.881 ‘ptsname’ 10.882 ‘putc’ 10.883 ‘putc_unlocked’ 10.884 ‘putchar’ 10.885 ‘putchar_unlocked’ 10.886 ‘putenv’ 10.887 ‘putmsg’ 10.888 ‘putpmsg’ 10.889 ‘puts’ 10.890 ‘pututxline’ 10.891 ‘putwc’ 10.892 ‘putwchar’ 10.893 ‘pwrite’ 10.894 ‘qsort’ 10.895 ‘quick_exit’ 10.896 ‘raise’ 10.897 ‘rand’ 10.898 ‘rand_r’ 10.899 ‘random’ 10.900 ‘read’ 10.901 ‘readdir’ 10.902 ‘readdir_r’ 10.903 ‘readlink’ 10.904 ‘readlinkat’ 10.905 ‘readv’ 10.906 ‘realloc’ 10.907 ‘realpath’ 10.908 ‘recv’ 10.909 ‘recvfrom’ 10.910 ‘recvmsg’ 10.911 ‘regcomp’ 10.912 ‘regerror’ 10.913 ‘regexec’ 10.914 ‘regfree’ 10.915 ‘remainder’ 10.916 ‘remainderf’ 10.917 ‘remainderl’ 10.918 ‘remove’ 10.919 ‘remque’ 10.920 ‘remquo’ 10.921 ‘remquof’ 10.922 ‘remquol’ 10.923 ‘rename’ 10.924 ‘renameat’ 10.925 ‘rewind’ 10.926 ‘rewinddir’ 10.927 ‘rint’ 10.928 ‘rintf’ 10.929 ‘rintl’ 10.930 ‘rmdir’ 10.931 ‘round’ 10.932 ‘roundeven’ 10.933 ‘roundevenf’ 10.934 ‘roundevenl’ 10.935 ‘roundf’ 10.936 ‘roundl’ 10.937 ‘scalbln’ 10.938 ‘scalblnf’ 10.939 ‘scalblnl’ 10.940 ‘scalbn’ 10.941 ‘scalbnf’ 10.942 ‘scalbnl’ 10.943 ‘scandir’ 10.944 ‘scanf’ 10.945 ‘sched_get_priority_max’ 10.946 ‘sched_get_priority_min’ 10.947 ‘sched_getparam’ 10.948 ‘sched_getscheduler’ 10.949 ‘sched_rr_get_interval’ 10.950 ‘sched_setparam’ 10.951 ‘sched_setscheduler’ 10.952 ‘sched_yield’ 10.953 ‘seed48’ 10.954 ‘seekdir’ 10.955 ‘select’ 10.956 ‘sem_close’ 10.957 ‘sem_destroy’ 10.958 ‘sem_getvalue’ 10.959 ‘sem_init’ 10.960 ‘sem_open’ 10.961 ‘sem_post’ 10.962 ‘sem_timedwait’ 10.963 ‘sem_trywait’ 10.964 ‘sem_unlink’ 10.965 ‘sem_wait’ 10.966 ‘semctl’ 10.967 ‘semget’ 10.968 ‘semop’ 10.969 ‘send’ 10.970 ‘sendmsg’ 10.971 ‘sendto’ 10.972 ‘setbuf’ 10.973 ‘setegid’ 10.974 ‘setenv’ 10.975 ‘seteuid’ 10.976 ‘setgid’ 10.977 ‘setgrent’ 10.978 ‘sethostent’ 10.979 ‘setitimer’ 10.980 ‘setjmp’ 10.981 ‘setkey’ 10.982 ‘setlocale’ 10.983 ‘setlogmask’ 10.984 ‘setnetent’ 10.985 ‘setpayload’ 10.986 ‘setpayloadf’ 10.987 ‘setpayloadl’ 10.988 ‘setpayloadsig’ 10.989 ‘setpayloadsigf’ 10.990 ‘setpayloadsigl’ 10.991 ‘setpgid’ 10.992 ‘setpgrp’ 10.993 ‘setpriority’ 10.994 ‘setprotoent’ 10.995 ‘setpwent’ 10.996 ‘setregid’ 10.997 ‘setreuid’ 10.998 ‘setrlimit’ 10.999 ‘setservent’ 10.1000 ‘setsid’ 10.1001 ‘setsockopt’ 10.1002 ‘setstate’ 10.1003 ‘setuid’ 10.1004 ‘setutxent’ 10.1005 ‘setvbuf’ 10.1006 ‘shm_open’ 10.1007 ‘shm_unlink’ 10.1008 ‘shmat’ 10.1009 ‘shmctl’ 10.1010 ‘shmdt’ 10.1011 ‘shmget’ 10.1012 ‘shutdown’ 10.1013 ‘sigaction’ 10.1014 ‘sigaddset’ 10.1015 ‘sigaltstack’ 10.1016 ‘sigdelset’ 10.1017 ‘sigemptyset’ 10.1018 ‘sigfillset’ 10.1019 ‘sighold’ 10.1020 ‘sigignore’ 10.1021 ‘siginterrupt’ 10.1022 ‘sigismember’ 10.1023 ‘siglongjmp’ 10.1024 ‘signal’ 10.1025 ‘signbit’ 10.1026 ‘signgam’ 10.1027 ‘sigpause’ 10.1028 ‘sigpending’ 10.1029 ‘sigprocmask’ 10.1030 ‘sigqueue’ 10.1031 ‘sigrelse’ 10.1032 ‘sigset’ 10.1033 ‘sigsetjmp’ 10.1034 ‘sigsuspend’ 10.1035 ‘sigtimedwait’ 10.1036 ‘sigwait’ 10.1037 ‘sigwaitinfo’ 10.1038 ‘sin’ 10.1039 ‘sinf’ 10.1040 ‘sinh’ 10.1041 ‘sinhf’ 10.1042 ‘sinhl’ 10.1043 ‘sinl’ 10.1044 ‘sleep’ 10.1045 ‘snprintf’ 10.1046 ‘sockatmark’ 10.1047 ‘socket’ 10.1048 ‘socketpair’ 10.1049 ‘sprintf’ 10.1050 ‘sqrt’ 10.1051 ‘sqrtf’ 10.1052 ‘sqrtl’ 10.1053 ‘srand’ 10.1054 ‘srand48’ 10.1055 ‘srandom’ 10.1056 ‘sscanf’ 10.1057 ‘stat’ 10.1058 ‘statvfs’ 10.1059 ‘stdc_bit_ceil’ 10.1060 ‘stdc_bit_floor’ 10.1061 ‘stdc_bit_width’ 10.1062 ‘stdc_count_ones’ 10.1063 ‘stdc_count_zeros’ 10.1064 ‘stdc_first_leading_one’ 10.1065 ‘stdc_first_leading_zero’ 10.1066 ‘stdc_first_trailing_one’ 10.1067 ‘stdc_first_trailing_zero’ 10.1068 ‘stdc_has_single_bit’ 10.1069 ‘stdc_leading_ones’ 10.1070 ‘stdc_leading_zeros’ 10.1071 ‘stdc_trailing_ones’ 10.1072 ‘stdc_trailing_zeros’ 10.1073 ‘stderr’ 10.1074 ‘stdin’ 10.1075 ‘stdout’ 10.1076 ‘stpcpy’ 10.1077 ‘stpncpy’ 10.1078 ‘strcasecmp’ 10.1079 ‘strcasecmp_l’ 10.1080 ‘strcat’ 10.1081 ‘strchr’ 10.1082 ‘strcmp’ 10.1083 ‘strcoll’ 10.1084 ‘strcoll_l’ 10.1085 ‘strcpy’ 10.1086 ‘strcspn’ 10.1087 ‘strdup’ 10.1088 ‘strerror’ 10.1089 ‘strerror_l’ 10.1090 ‘strerror_r’ 10.1091 ‘strfmon’ 10.1092 ‘strfmon_l’ 10.1093 ‘strfromd’ 10.1094 ‘strfromf’ 10.1095 ‘strfroml’ 10.1096 ‘strftime’ 10.1097 ‘strftime_l’ 10.1098 ‘strlen’ 10.1099 ‘strncasecmp’ 10.1100 ‘strncasecmp_l’ 10.1101 ‘strncat’ 10.1102 ‘strncmp’ 10.1103 ‘strncpy’ 10.1104 ‘strndup’ 10.1105 ‘strnlen’ 10.1106 ‘strpbrk’ 10.1107 ‘strptime’ 10.1108 ‘strrchr’ 10.1109 ‘strsignal’ 10.1110 ‘strspn’ 10.1111 ‘strstr’ 10.1112 ‘strtod’ 10.1113 ‘strtof’ 10.1114 ‘strtoimax’ 10.1115 ‘strtok’ 10.1116 ‘strtok_r’ 10.1117 ‘strtol’ 10.1118 ‘strtold’ 10.1119 ‘strtoll’ 10.1120 ‘strtoul’ 10.1121 ‘strtoull’ 10.1122 ‘strtoumax’ 10.1123 ‘strxfrm’ 10.1124 ‘strxfrm_l’ 10.1125 ‘swab’ 10.1126 ‘swprintf’ 10.1127 ‘swscanf’ 10.1128 ‘symlink’ 10.1129 ‘symlinkat’ 10.1130 ‘sync’ 10.1131 ‘sysconf’ 10.1132 ‘syslog’ 10.1133 ‘system’ 10.1134 ‘tan’ 10.1135 ‘tanf’ 10.1136 ‘tanh’ 10.1137 ‘tanhf’ 10.1138 ‘tanhl’ 10.1139 ‘tanl’ 10.1140 ‘tcdrain’ 10.1141 ‘tcflow’ 10.1142 ‘tcflush’ 10.1143 ‘tcgetattr’ 10.1144 ‘tcgetpgrp’ 10.1145 ‘tcgetsid’ 10.1146 ‘tcsendbreak’ 10.1147 ‘tcsetattr’ 10.1148 ‘tcsetpgrp’ 10.1149 ‘tdelete’ 10.1150 ‘telldir’ 10.1151 ‘tempnam’ 10.1152 ‘tfind’ 10.1153 ‘tgamma’ 10.1154 ‘tgammaf’ 10.1155 ‘tgammal’ 10.1156 ‘thrd_create’ 10.1157 ‘thrd_current’ 10.1158 ‘thrd_detach’ 10.1159 ‘thrd_equal’ 10.1160 ‘thrd_exit’ 10.1161 ‘thrd_join’ 10.1162 ‘thrd_sleep’ 10.1163 ‘thrd_yield’ 10.1164 ‘time’ 10.1165 ‘timegm’ 10.1166 ‘timer_create’ 10.1167 ‘timer_delete’ 10.1168 ‘timer_getoverrun’ 10.1169 ‘timer_gettime’ 10.1170 ‘timer_settime’ 10.1171 ‘times’ 10.1172 ‘timespec_getres’ 10.1173 ‘timezone’ 10.1174 ‘tmpfile’ 10.1175 ‘tmpnam’ 10.1176 ‘toascii’ 10.1177 ‘tolower’ 10.1178 ‘tolower_l’ 10.1179 ‘totalorder’ 10.1180 ‘totalorderf’ 10.1181 ‘totalorderl’ 10.1182 ‘totalordermag’ 10.1183 ‘totalordermagf’ 10.1184 ‘totalordermagl’ 10.1185 ‘toupper’ 10.1186 ‘toupper_l’ 10.1187 ‘towctrans’ 10.1188 ‘towctrans_l’ 10.1189 ‘towlower’ 10.1190 ‘towlower_l’ 10.1191 ‘towupper’ 10.1192 ‘towupper_l’ 10.1193 ‘trunc’ 10.1194 ‘truncate’ 10.1195 ‘truncf’ 10.1196 ‘truncl’ 10.1197 ‘tsearch’ 10.1198 ‘tss_create’ 10.1199 ‘tss_delete’ 10.1200 ‘tss_get’ 10.1201 ‘tss_set’ 10.1202 ‘ttyname’ 10.1203 ‘ttyname_r’ 10.1204 ‘twalk’ 10.1205 ‘tzname’ 10.1206 ‘tzset’ 10.1207 ‘ufromfp’ 10.1208 ‘ufromfpf’ 10.1209 ‘ufromfpl’ 10.1210 ‘ufromfpx’ 10.1211 ‘ufromfpxf’ 10.1212 ‘ufromfpxl’ 10.1213 ‘ulimit’ 10.1214 ‘umask’ 10.1215 ‘uname’ 10.1216 ‘ungetc’ 10.1217 ‘ungetwc’ 10.1218 ‘unlink’ 10.1219 ‘unlinkat’ 10.1220 ‘unlockpt’ 10.1221 ‘unsetenv’ 10.1222 ‘uselocale’ 10.1223 ‘utime’ 10.1224 ‘utimensat’ 10.1225 ‘utimes’ 10.1226 ‘va_arg’ 10.1227 ‘va_copy’ 10.1228 ‘va_end’ 10.1229 ‘va_start’ 10.1230 ‘vdprintf’ 10.1231 ‘vfprintf’ 10.1232 ‘vfscanf’ 10.1233 ‘vfwprintf’ 10.1234 ‘vfwscanf’ 10.1235 ‘vprintf’ 10.1236 ‘vscanf’ 10.1237 ‘vsnprintf’ 10.1238 ‘vsprintf’ 10.1239 ‘vsscanf’ 10.1240 ‘vswprintf’ 10.1241 ‘vswscanf’ 10.1242 ‘vwprintf’ 10.1243 ‘vwscanf’ 10.1244 ‘wait’ 10.1245 ‘waitid’ 10.1246 ‘waitpid’ 10.1247 ‘wcpcpy’ 10.1248 ‘wcpncpy’ 10.1249 ‘wcrtomb’ 10.1250 ‘wcscasecmp’ 10.1251 ‘wcscasecmp_l’ 10.1252 ‘wcscat’ 10.1253 ‘wcschr’ 10.1254 ‘wcscmp’ 10.1255 ‘wcscoll’ 10.1256 ‘wcscoll_l’ 10.1257 ‘wcscpy’ 10.1258 ‘wcscspn’ 10.1259 ‘wcsdup’ 10.1260 ‘wcsftime’ 10.1261 ‘wcslen’ 10.1262 ‘wcsncasecmp’ 10.1263 ‘wcsncasecmp_l’ 10.1264 ‘wcsncat’ 10.1265 ‘wcsncmp’ 10.1266 ‘wcsncpy’ 10.1267 ‘wcsnlen’ 10.1268 ‘wcsnrtombs’ 10.1269 ‘wcspbrk’ 10.1270 ‘wcsrchr’ 10.1271 ‘wcsrtombs’ 10.1272 ‘wcsspn’ 10.1273 ‘wcsstr’ 10.1274 ‘wcstod’ 10.1275 ‘wcstof’ 10.1276 ‘wcstoimax’ 10.1277 ‘wcstok’ 10.1278 ‘wcstol’ 10.1279 ‘wcstold’ 10.1280 ‘wcstoll’ 10.1281 ‘wcstombs’ 10.1282 ‘wcstoul’ 10.1283 ‘wcstoull’ 10.1284 ‘wcstoumax’ 10.1285 ‘wcswidth’ 10.1286 ‘wcsxfrm’ 10.1287 ‘wcsxfrm_l’ 10.1288 ‘wctob’ 10.1289 ‘wctomb’ 10.1290 ‘wctrans’ 10.1291 ‘wctrans_l’ 10.1292 ‘wctype’ 10.1293 ‘wctype_l’ 10.1294 ‘wcwidth’ 10.1295 ‘wmemchr’ 10.1296 ‘wmemcmp’ 10.1297 ‘wmemcpy’ 10.1298 ‘wmemmove’ 10.1299 ‘wmemset’ 10.1300 ‘wordexp’ 10.1301 ‘wordfree’ 10.1302 ‘wprintf’ 10.1303 ‘write’ 10.1304 ‘writev’ 10.1305 ‘wscanf’ 10.1306 ‘y0’ 10.1307 ‘y1’ 10.1308 ‘yn’ 11 Past POSIX Function Substitutes 11.1 ‘bcmp’ 11.2 ‘bcopy’ 11.3 ‘bsd_signal’ 11.4 ‘bzero’ 11.5 ‘ecvt’ 11.6 ‘fcvt’ 11.7 ‘ftime’ 11.8 ‘gcvt’ 11.9 ‘getcontext’ 11.10 ‘gethostbyaddr’ 11.11 ‘gethostbyname’ 11.12 ‘getwd’ 11.13 ‘h_errno’ 11.14 ‘index’ 11.15 ‘makecontext’ 11.16 ‘mktemp’ 11.17 ‘pthread_attr_getstackaddr’ 11.18 ‘pthread_attr_setstackaddr’ 11.19 ‘rindex’ 11.20 ‘scalb’ 11.21 ‘setcontext’ 11.22 ‘swapcontext’ 11.23 ‘ualarm’ 11.24 ‘usleep’ 11.25 ‘vfork’ 11.26 ‘wcswcs’ 12 Glibc Header File Substitutes 12.1 ‘a.out.h’ 12.2 ‘aliases.h’ 12.3 ‘alloca.h’ 12.4 ‘ar.h’ 12.5 ‘argp.h’ 12.6 ‘argz.h’ 12.7 ‘byteswap.h’ 12.8 ‘crypt.h’ 12.9 ‘endian.h’ 12.10 ‘envz.h’ 12.11 ‘err.h’ 12.12 ‘error.h’ 12.13 ‘execinfo.h’ 12.14 ‘fpu_control.h’ 12.15 ‘fstab.h’ 12.16 ‘fts.h’ 12.17 ‘getopt.h’ 12.18 ‘gshadow.h’ 12.19 ‘ieee754.h’ 12.20 ‘ifaddrs.h’ 12.21 ‘libintl.h’ 12.22 ‘link.h’ 12.23 ‘malloc.h’ 12.24 ‘mcheck.h’ 12.25 ‘mntent.h’ 12.26 ‘obstack.h’ 12.27 ‘paths.h’ 12.28 ‘printf.h’ 12.29 ‘pty.h’ 12.30 ‘resolv.h’ 12.31 ‘shadow.h’ 12.32 ‘sys/file.h’ 12.33 ‘sys/ioctl.h’ 12.34 ‘sys/random.h’ 12.35 ‘sysexits.h’ 12.36 ‘ttyent.h’ 12.37 ‘utmp.h’ 13 Glibc Function Substitutes 13.1 Glibc Extensions to ‘’ 13.1.1 ‘aio_init’ 13.2 Glibc ‘’ 13.2.1 ‘endaliasent’ 13.2.2 ‘getaliasbyname’ 13.2.3 ‘getaliasbyname_r’ 13.2.4 ‘getaliasent’ 13.2.5 ‘getaliasent_r’ 13.2.6 ‘setaliasent’ 13.3 Glibc ‘’ 13.3.1 ‘argp_err_exit_status’ 13.3.2 ‘argp_error’ 13.3.3 ‘argp_failure’ 13.3.4 ‘argp_help’ 13.3.5 ‘argp_parse’ 13.3.6 ‘argp_program_bug_address’ 13.3.7 ‘argp_program_version’ 13.3.8 ‘argp_program_version_hook’ 13.3.9 ‘argp_state_help’ 13.3.10 ‘argp_usage’ 13.4 Glibc ‘’ 13.4.1 ‘argz_add’ 13.4.2 ‘argz_add_sep’ 13.4.3 ‘argz_append’ 13.4.4 ‘argz_count’ 13.4.5 ‘argz_create’ 13.4.6 ‘argz_create_sep’ 13.4.7 ‘argz_delete’ 13.4.8 ‘argz_extract’ 13.4.9 ‘argz_insert’ 13.4.10 ‘argz_next’ 13.4.11 ‘argz_replace’ 13.4.12 ‘argz_stringify’ 13.5 Glibc Extensions to ‘’ 13.5.1 ‘inet_aton’ 13.5.2 ‘inet_lnaof’ 13.5.3 ‘inet_makeaddr’ 13.5.4 ‘inet_net_ntop’ 13.5.5 ‘inet_net_pton’ 13.5.6 ‘inet_netof’ 13.5.7 ‘inet_network’ 13.5.8 ‘inet_nsap_addr’ 13.5.9 ‘inet_nsap_ntoa’ 13.6 Glibc ‘’ 13.6.1 ‘bswap_16’ 13.6.2 ‘bswap_32’ 13.6.3 ‘bswap_64’ 13.7 Glibc Extensions to ‘’ 13.7.1 ‘clog10’ 13.7.2 ‘clog10f’ 13.7.3 ‘clog10l’ 13.8 Glibc Extensions to ‘’ 13.8.1 ‘isctype’ 13.9 Glibc Extensions to ‘’ 13.9.1 ‘getdirentries’ 13.9.2 ‘scandirat’ 13.9.3 ‘versionsort’ 13.10 Glibc Extensions to ‘’ 13.10.1 ‘dladdr’ 13.10.2 ‘dladdr1’ 13.10.3 ‘dlinfo’ 13.10.4 ‘dlmopen’ 13.10.5 ‘dlvsym’ 13.11 Glibc ‘’ 13.11.1 ‘envz_add’ 13.11.2 ‘envz_entry’ 13.11.3 ‘envz_get’ 13.11.4 ‘envz_merge’ 13.11.5 ‘envz_remove’ 13.11.6 ‘envz_strip’ 13.12 Glibc ‘’ 13.12.1 ‘err’ 13.12.2 ‘errx’ 13.12.3 ‘verr’ 13.12.4 ‘verrx’ 13.12.5 ‘vwarn’ 13.12.6 ‘vwarnx’ 13.12.7 ‘warn’ 13.12.8 ‘warnx’ 13.13 Glibc Extensions to ‘’ 13.13.1 ‘program_invocation_name’ 13.13.2 ‘program_invocation_short_name’ 13.14 Glibc ‘’ 13.14.1 ‘error’ 13.14.2 ‘error_at_line’ 13.14.3 ‘error_message_count’ 13.14.4 ‘error_one_per_line’ 13.14.5 ‘error_print_progname’ 13.15 Glibc ‘’ 13.15.1 ‘backtrace’ 13.15.2 ‘backtrace_symbols’ 13.15.3 ‘backtrace_symbols_fd’ 13.16 Glibc Extensions to ‘’ 13.16.1 ‘fallocate’ 13.16.2 ‘name_to_handle_at’ 13.16.3 ‘readahead’ 13.16.4 ‘open_by_handle_at’ 13.16.5 ‘sync_file_range’ 13.17 Glibc Extensions to ‘’ 13.17.1 ‘fedisableexcept’ 13.17.2 ‘feenableexcept’ 13.17.3 ‘fegetexcept’ 13.18 Glibc Extensions to ‘’ 13.18.1 ‘addseverity’ 13.19 Glibc ‘’ 13.19.1 ‘endfsent’ 13.19.2 ‘getfsent’ 13.19.3 ‘getfsfile’ 13.19.4 ‘getfsspec’ 13.19.5 ‘setfsent’ 13.20 Glibc ‘’ 13.20.1 ‘fts_children’ 13.20.2 ‘fts_close’ 13.20.3 ‘fts_open’ 13.20.4 ‘fts_read’ 13.20.5 ‘fts_set’ 13.21 Glibc ‘’ 13.21.1 ‘getopt_long’ 13.21.2 ‘getopt_long_only’ 13.22 Glibc Extensions to ‘’ 13.22.1 ‘glob_pattern_p’ 13.23 Glibc Extensions to ‘’ 13.23.1 ‘gnu_get_libc_release’ 13.23.2 ‘gnu_get_libc_version’ 13.24 Glibc Extensions to ‘’ 13.24.1 ‘fgetgrent’ 13.24.2 ‘fgetgrent_r’ 13.24.3 ‘getgrent_r’ 13.24.4 ‘getgrouplist’ 13.24.5 ‘initgroups’ 13.24.6 ‘putgrent’ 13.24.7 ‘setgroups’ 13.25 Glibc ‘’ 13.25.1 ‘endsgent’ 13.25.2 ‘fgetsgent’ 13.25.3 ‘fgetsgent_r’ 13.25.4 ‘getsgent’ 13.25.5 ‘getsgent_r’ 13.25.6 ‘getsgnam’ 13.25.7 ‘getsgnam_r’ 13.25.8 ‘putsgent’ 13.25.9 ‘setsgent’ 13.25.10 ‘sgetsgent’ 13.25.11 ‘sgetsgent_r’ 13.26 Glibc ‘’ 13.26.1 ‘getifaddrs’ 13.26.2 ‘freeifaddrs’ 13.27 Glibc ‘’ 13.27.1 ‘bind_textdomain_codeset’ 13.27.2 ‘bindtextdomain’ 13.27.3 ‘dcgettext’ 13.27.4 ‘dcngettext’ 13.27.5 ‘dgettext’ 13.27.6 ‘dngettext’ 13.27.7 ‘gettext’ 13.27.8 ‘ngettext’ 13.27.9 ‘textdomain’ 13.28 Glibc ‘’ 13.28.1 ‘dl_iterate_phdr’ 13.29 Glibc ‘’ 13.29.1 ‘mallinfo’ 13.29.2 ‘mallinfo2’ 13.29.3 ‘malloc_info’ 13.29.4 ‘malloc_stats’ 13.29.5 ‘malloc_trim’ 13.29.6 ‘malloc_usable_size’ 13.29.7 ‘mallopt’ 13.29.8 ‘memalign’ 13.29.9 ‘pvalloc’ 13.30 Glibc Extensions to ‘’ 13.30.1 ‘drem’ 13.30.2 ‘dremf’ 13.30.3 ‘dreml’ 13.30.4 ‘exp10’ 13.30.5 ‘exp10f’ 13.30.6 ‘exp10l’ 13.30.7 ‘finite’ 13.30.8 ‘finitef’ 13.30.9 ‘finitel’ 13.30.10 ‘gamma’ 13.30.11 ‘gammaf’ 13.30.12 ‘gammal’ 13.30.13 ‘isinff’ 13.30.14 ‘isinfl’ 13.30.15 ‘isnanf’ 13.30.16 ‘isnanl’ 13.30.17 ‘j0f’ 13.30.18 ‘j0l’ 13.30.19 ‘j1f’ 13.30.20 ‘j1l’ 13.30.21 ‘jnf’ 13.30.22 ‘jnl’ 13.30.23 ‘lgamma_r’ 13.30.24 ‘lgammaf_r’ 13.30.25 ‘lgammal_r’ 13.30.26 ‘matherr’ 13.30.27 ‘pow10’ 13.30.28 ‘pow10f’ 13.30.29 ‘pow10l’ 13.30.30 ‘scalbf’ 13.30.31 ‘scalbl’ 13.30.32 ‘significand’ 13.30.33 ‘significandf’ 13.30.34 ‘significandl’ 13.30.35 ‘sincos’ 13.30.36 ‘sincosf’ 13.30.37 ‘sincosl’ 13.30.38 ‘y0f’ 13.30.39 ‘y0l’ 13.30.40 ‘y1f’ 13.30.41 ‘y1l’ 13.30.42 ‘ynf’ 13.30.43 ‘ynl’ 13.31 Glibc ‘’ 13.31.1 ‘mcheck’ 13.31.2 ‘mcheck_check_all’ 13.31.3 ‘mcheck_pedantic’ 13.31.4 ‘mprobe’ 13.31.5 ‘mtrace’ 13.31.6 ‘muntrace’ 13.32 Glibc ‘’ 13.32.1 ‘addmntent’ 13.32.2 ‘endmntent’ 13.32.3 ‘getmntent’ 13.32.4 ‘getmntent_r’ 13.32.5 ‘hasmntopt’ 13.32.6 ‘setmntent’ 13.33 Glibc Extensions to ‘’ 13.33.1 ‘endnetgrent’ 13.33.2 ‘gethostbyaddr_r’ 13.33.3 ‘gethostbyname2’ 13.33.4 ‘gethostbyname2_r’ 13.33.5 ‘gethostbyname_r’ 13.33.6 ‘gethostent_r’ 13.33.7 ‘getnetbyaddr_r’ 13.33.8 ‘getnetbyname_r’ 13.33.9 ‘getnetent_r’ 13.33.10 ‘getnetgrent’ 13.33.11 ‘getnetgrent_r’ 13.33.12 ‘getprotobyname_r’ 13.33.13 ‘getprotobynumber_r’ 13.33.14 ‘getprotoent_r’ 13.33.15 ‘getservbyname_r’ 13.33.16 ‘getservbyport_r’ 13.33.17 ‘getservent_r’ 13.33.18 ‘herror’ 13.33.19 ‘hstrerror’ 13.33.20 ‘innetgr’ 13.33.21 ‘rcmd’ 13.33.22 ‘rcmd_af’ 13.33.23 ‘rexec’ 13.33.24 ‘rexec_af’ 13.33.25 ‘rresvport’ 13.33.26 ‘rresvport_af’ 13.33.27 ‘ruserok’ 13.33.28 ‘ruserok_af’ 13.33.29 ‘setnetgrent’ 13.34 Glibc ‘’ 13.34.1 ‘ether_aton’ 13.34.2 ‘ether_aton_r’ 13.34.3 ‘ether_hostton’ 13.34.4 ‘ether_line’ 13.34.5 ‘ether_ntoa’ 13.34.6 ‘ether_ntoa_r’ 13.34.7 ‘ether_ntohost’ 13.35 Glibc Extensions to ‘’ 13.35.1 ‘bindresvport’ 13.35.2 ‘getipv4sourcefilter’ 13.35.3 ‘getsourcefilter’ 13.35.4 ‘in6addr_any’ 13.35.5 ‘in6addr_loopback’ 13.35.6 ‘inet6_option_alloc’ 13.35.7 ‘inet6_option_append’ 13.35.8 ‘inet6_option_find’ 13.35.9 ‘inet6_option_init’ 13.35.10 ‘inet6_option_next’ 13.35.11 ‘inet6_option_space’ 13.35.12 ‘inet6_opt_append’ 13.35.13 ‘inet6_opt_find’ 13.35.14 ‘inet6_opt_finish’ 13.35.15 ‘inet6_opt_get_val’ 13.35.16 ‘inet6_opt_init’ 13.35.17 ‘inet6_opt_next’ 13.35.18 ‘inet6_opt_set_val’ 13.35.19 ‘inet6_rth_add’ 13.35.20 ‘inet6_rth_getaddr’ 13.35.21 ‘inet6_rth_init’ 13.35.22 ‘inet6_rth_reverse’ 13.35.23 ‘inet6_rth_segments’ 13.35.24 ‘inet6_rth_space’ 13.35.25 ‘setipv4sourcefilter’ 13.35.26 ‘setsourcefilter’ 13.36 Glibc ‘’ 13.36.1 ‘obstack_alloc_failed_handler’ 13.36.2 ‘obstack_exit_failure’ 13.36.3 ‘obstack_free’ 13.36.4 ‘obstack_printf’ 13.36.5 ‘obstack_vprintf’ 13.37 Glibc Extensions to ‘’ 13.37.1 ‘ppoll’ 13.38 Glibc ‘’ 13.38.1 ‘parse_printf_format’ 13.38.2 ‘printf_size’ 13.38.3 ‘printf_size_info’ 13.38.4 ‘register_printf_function’ 13.38.5 ‘register_printf_modifier’ 13.38.6 ‘register_printf_specifier’ 13.38.7 ‘register_printf_type’ 13.39 Glibc Extensions to ‘’ 13.39.1 ‘pthread_attr_getaffinity_np’ 13.39.2 ‘pthread_attr_setaffinity_np’ 13.39.3 ‘pthread_attr_getsigmask_np’ 13.39.4 ‘pthread_attr_setsigmask_np’ 13.39.5 ‘pthread_clockjoin_np’ 13.39.6 ‘pthread_cond_clockwait’ 13.39.7 ‘pthread_getaffinity_np’ 13.39.8 ‘pthread_getattr_default_np’ 13.39.9 ‘pthread_getattr_np’ 13.39.10 ‘pthread_getname_np’ 13.39.11 ‘pthread_kill_other_threads_np’ 13.39.12 ‘pthread_mutex_clocklock’ 13.39.13 ‘pthread_rwlock_clockrdlock’ 13.39.14 ‘pthread_rwlock_clockwrlock’ 13.39.15 ‘pthread_rwlockattr_getkind_np’ 13.39.16 ‘pthread_rwlockattr_setkind_np’ 13.39.17 ‘pthread_setaffinity_np’ 13.39.18 ‘pthread_setattr_default_np’ 13.39.19 ‘pthread_setname_np’ 13.39.20 ‘pthread_sigqueue’ 13.39.21 ‘pthread_timedjoin_np’ 13.39.22 ‘pthread_tryjoin_np’ 13.40 Glibc ‘’ 13.40.1 ‘forkpty’ 13.40.2 ‘openpty’ 13.41 Glibc Extensions to ‘’ 13.41.1 ‘fgetpwent’ 13.41.2 ‘fgetpwent_r’ 13.41.3 ‘getpw’ 13.41.4 ‘getpwent_r’ 13.41.5 ‘putpwent’ 13.42 Glibc Extensions to ‘’ 13.42.1 ‘re_comp’ 13.42.2 ‘re_compile_fastmap’ 13.42.3 ‘re_compile_pattern’ 13.42.4 ‘re_exec’ 13.42.5 ‘re_match’ 13.42.6 ‘re_match_2’ 13.42.7 ‘re_search’ 13.42.8 ‘re_search_2’ 13.42.9 ‘re_set_registers’ 13.42.10 ‘re_set_syntax’ 13.42.11 ‘re_syntax_options’ 13.43 Glibc ‘’ 13.43.1 ‘advance’ 13.43.2 ‘loc1’ 13.43.3 ‘loc2’ 13.43.4 ‘locs’ 13.43.5 ‘step’ 13.44 Glibc ‘’ 13.44.1 ‘dn_comp’ 13.44.2 ‘dn_expand’ 13.44.3 ‘dn_skipname’ 13.44.4 ‘res_dnok’ 13.44.5 ‘res_hnok’ 13.44.6 ‘res_init’ 13.44.7 ‘res_mailok’ 13.44.8 ‘res_mkquery’ 13.44.9 ‘res_nmkquery’ 13.44.10 ‘res_nquery’ 13.44.11 ‘res_nquerydomain’ 13.44.12 ‘res_nsearch’ 13.44.13 ‘res_nsend’ 13.44.14 ‘res_ownok’ 13.44.15 ‘res_query’ 13.44.16 ‘res_querydomain’ 13.44.17 ‘res_search’ 13.44.18 ‘res_send’ 13.45 Glibc ‘’ 13.45.1 ‘authdes_create’ 13.45.2 ‘authdes_pk_create’ 13.45.3 ‘authnone_create’ 13.45.4 ‘authunix_create’ 13.45.5 ‘authunix_create_default’ 13.45.6 ‘getnetname’ 13.45.7 ‘host2netname’ 13.45.8 ‘key_decryptsession’ 13.45.9 ‘key_decryptsession_pk’ 13.45.10 ‘key_encryptsession’ 13.45.11 ‘key_encryptsession_pk’ 13.45.12 ‘key_gendes’ 13.45.13 ‘key_get_conv’ 13.45.14 ‘key_secretkey_is_set’ 13.45.15 ‘key_setsecret’ 13.45.16 ‘netname2host’ 13.45.17 ‘netname2user’ 13.45.18 ‘user2netname’ 13.45.19 ‘xdr_des_block’ 13.45.20 ‘xdr_opaque_auth’ 13.46 Glibc ‘’ 13.46.1 ‘authdes_getucred’ 13.46.2 ‘getpublickey’ 13.46.3 ‘getsecretkey’ 13.46.4 ‘rtime’ 13.47 Glibc ‘’ 13.47.1 ‘xdr_authunix_parms’ 13.48 Glibc ‘’ 13.48.1 ‘callrpc’ 13.48.2 ‘clnt_create’ 13.48.3 ‘clnt_pcreateerror’ 13.48.4 ‘clnt_perrno’ 13.48.5 ‘clnt_perror’ 13.48.6 ‘clnt_spcreateerror’ 13.48.7 ‘clnt_sperrno’ 13.48.8 ‘clnt_sperror’ 13.48.9 ‘clntraw_create’ 13.48.10 ‘clnttcp_create’ 13.48.11 ‘clntudp_bufcreate’ 13.48.12 ‘clntudp_create’ 13.48.13 ‘clntunix_create’ 13.48.14 ‘get_myaddress’ 13.48.15 ‘getrpcport’ 13.48.16 ‘rpc_createerr’ 13.49 Glibc ‘’ 13.49.1 ‘xdr_cryptkeyarg’ 13.49.2 ‘xdr_cryptkeyarg2’ 13.49.3 ‘xdr_cryptkeyres’ 13.49.4 ‘xdr_getcredres’ 13.49.5 ‘xdr_key_netstarg’ 13.49.6 ‘xdr_key_netstres’ 13.49.7 ‘xdr_keybuf’ 13.49.8 ‘xdr_keystatus’ 13.49.9 ‘xdr_netnamestr’ 13.49.10 ‘xdr_unixcred’ 13.50 Glibc ‘’ 13.50.1 ‘endrpcent’ 13.50.2 ‘getrpcbyname’ 13.50.3 ‘getrpcbyname_r’ 13.50.4 ‘getrpcbynumber’ 13.50.5 ‘getrpcbynumber_r’ 13.50.6 ‘getrpcent’ 13.50.7 ‘getrpcent_r’ 13.50.8 ‘setrpcent’ 13.51 Glibc ‘’ 13.51.1 ‘clnt_broadcast’ 13.51.2 ‘pmap_getmaps’ 13.51.3 ‘pmap_getport’ 13.51.4 ‘pmap_rmtcall’ 13.51.5 ‘pmap_set’ 13.51.6 ‘pmap_unset’ 13.52 Glibc ‘’ 13.52.1 ‘xdr_pmap’ 13.52.2 ‘xdr_pmaplist’ 13.53 Glibc ‘’ 13.53.1 ‘xdr_rmtcall_args’ 13.53.2 ‘xdr_rmtcallres’ 13.54 Glibc ‘’ 13.54.1 ‘xdr_callhdr’ 13.54.2 ‘xdr_callmsg’ 13.54.3 ‘xdr_replymsg’ 13.55 Glibc ‘’ 13.55.1 ‘svc_exit’ 13.55.2 ‘svc_fdset’ 13.55.3 ‘svc_getreq’ 13.55.4 ‘svc_getreq_common’ 13.55.5 ‘svc_getreq_poll’ 13.55.6 ‘svc_getreqset’ 13.55.7 ‘svc_max_pollfd’ 13.55.8 ‘svc_pollfd’ 13.55.9 ‘svc_register’ 13.55.10 ‘svc_run’ 13.55.11 ‘svc_sendreply’ 13.55.12 ‘svc_unregister’ 13.55.13 ‘svcerr_auth’ 13.55.14 ‘svcerr_decode’ 13.55.15 ‘svcerr_noproc’ 13.55.16 ‘svcerr_noprog’ 13.55.17 ‘svcerr_progvers’ 13.55.18 ‘svcerr_systemerr’ 13.55.19 ‘svcerr_weakauth’ 13.55.20 ‘svcraw_create’ 13.55.21 ‘svctcp_create’ 13.55.22 ‘svcudp_bufcreate’ 13.55.23 ‘svcudp_create’ 13.55.24 ‘svcunix_create’ 13.55.25 ‘xprt_register’ 13.55.26 ‘xprt_unregister’ 13.56 Glibc ‘’ 13.56.1 ‘xdr_array’ 13.56.2 ‘xdr_bool’ 13.56.3 ‘xdr_bytes’ 13.56.4 ‘xdr_char’ 13.56.5 ‘xdr_double’ 13.56.6 ‘xdr_enum’ 13.56.7 ‘xdr_float’ 13.56.8 ‘xdr_free’ 13.56.9 ‘xdr_hyper’ 13.56.10 ‘xdr_int’ 13.56.11 ‘xdr_int16_t’ 13.56.12 ‘xdr_int32_t’ 13.56.13 ‘xdr_int64_t’ 13.56.14 ‘xdr_int8_t’ 13.56.15 ‘xdr_long’ 13.56.16 ‘xdr_longlong_t’ 13.56.17 ‘xdr_netobj’ 13.56.18 ‘xdr_opaque’ 13.56.19 ‘xdr_pointer’ 13.56.20 ‘xdr_quad_t’ 13.56.21 ‘xdr_reference’ 13.56.22 ‘xdr_short’ 13.56.23 ‘xdr_sizeof’ 13.56.24 ‘xdr_string’ 13.56.25 ‘xdr_u_char’ 13.56.26 ‘xdr_u_hyper’ 13.56.27 ‘xdr_u_int’ 13.56.28 ‘xdr_u_long’ 13.56.29 ‘xdr_u_longlong_t’ 13.56.30 ‘xdr_u_quad_t’ 13.56.31 ‘xdr_u_short’ 13.56.32 ‘xdr_uint16_t’ 13.56.33 ‘xdr_uint32_t’ 13.56.34 ‘xdr_uint64_t’ 13.56.35 ‘xdr_uint8_t’ 13.56.36 ‘xdr_union’ 13.56.37 ‘xdr_vector’ 13.56.38 ‘xdr_void’ 13.56.39 ‘xdr_wrapstring’ 13.56.40 ‘xdrmem_create’ 13.56.41 ‘xdrrec_create’ 13.56.42 ‘xdrrec_endofrecord’ 13.56.43 ‘xdrrec_eof’ 13.56.44 ‘xdrrec_skiprecord’ 13.56.45 ‘xdrstdio_create’ 13.57 Glibc ‘’ 13.57.1 ‘nis_add’ 13.57.2 ‘nis_add_entry’ 13.57.3 ‘nis_addmember’ 13.57.4 ‘nis_checkpoint’ 13.57.5 ‘nis_clone_object’ 13.57.6 ‘nis_creategroup’ 13.57.7 ‘nis_destroy_object’ 13.57.8 ‘nis_destroygroup’ 13.57.9 ‘nis_dir_cmp’ 13.57.10 ‘nis_domain_of’ 13.57.11 ‘nis_domain_of_r’ 13.57.12 ‘nis_first_entry’ 13.57.13 ‘nis_freenames’ 13.57.14 ‘nis_freeresult’ 13.57.15 ‘nis_freeservlist’ 13.57.16 ‘nis_freetags’ 13.57.17 ‘nis_getnames’ 13.57.18 ‘nis_getservlist’ 13.57.19 ‘nis_ismember’ 13.57.20 ‘nis_leaf_of’ 13.57.21 ‘nis_leaf_of_r’ 13.57.22 ‘nis_lerror’ 13.57.23 ‘nis_list’ 13.57.24 ‘nis_local_directory’ 13.57.25 ‘nis_local_group’ 13.57.26 ‘nis_local_host’ 13.57.27 ‘nis_local_principal’ 13.57.28 ‘nis_lookup’ 13.57.29 ‘nis_mkdir’ 13.57.30 ‘nis_modify’ 13.57.31 ‘nis_modify_entry’ 13.57.32 ‘nis_name_of’ 13.57.33 ‘nis_name_of_r’ 13.57.34 ‘nis_next_entry’ 13.57.35 ‘nis_perror’ 13.57.36 ‘nis_ping’ 13.57.37 ‘nis_print_directory’ 13.57.38 ‘nis_print_entry’ 13.57.39 ‘nis_print_group’ 13.57.40 ‘nis_print_group_entry’ 13.57.41 ‘nis_print_link’ 13.57.42 ‘nis_print_object’ 13.57.43 ‘nis_print_result’ 13.57.44 ‘nis_print_rights’ 13.57.45 ‘nis_print_table’ 13.57.46 ‘nis_remove’ 13.57.47 ‘nis_remove_entry’ 13.57.48 ‘nis_removemember’ 13.57.49 ‘nis_rmdir’ 13.57.50 ‘nis_servstate’ 13.57.51 ‘nis_sperrno’ 13.57.52 ‘nis_sperror’ 13.57.53 ‘nis_sperror_r’ 13.57.54 ‘nis_stats’ 13.57.55 ‘nis_verifygroup’ 13.58 Glibc ‘’ 13.58.1 ‘xdr_cback_data’ 13.58.2 ‘xdr_obj_p’ 13.59 Glibc ‘’ 13.59.1 ‘xdr_domainname’ 13.59.2 ‘xdr_keydat’ 13.59.3 ‘xdr_valdat’ 13.59.4 ‘xdr_ypbind_resptype’ 13.59.5 ‘xdr_ypmap_parms’ 13.59.6 ‘xdr_ypmaplist’ 13.59.7 ‘xdr_yppushresp_xfr’ 13.59.8 ‘xdr_ypreq_key’ 13.59.9 ‘xdr_ypreq_nokey’ 13.59.10 ‘xdr_ypreq_xfr’ 13.59.11 ‘xdr_ypresp_all’ 13.59.12 ‘xdr_ypresp_key_val’ 13.59.13 ‘xdr_ypresp_maplist’ 13.59.14 ‘xdr_ypresp_master’ 13.59.15 ‘xdr_ypresp_order’ 13.59.16 ‘xdr_ypresp_val’ 13.59.17 ‘xdr_ypresp_xfr’ 13.59.18 ‘xdr_ypstat’ 13.59.19 ‘xdr_ypxfrstat’ 13.60 Glibc ‘’ 13.60.1 ‘yp_all’ 13.60.2 ‘yp_bind’ 13.60.3 ‘yp_first’ 13.60.4 ‘yp_get_default_domain’ 13.60.5 ‘yp_master’ 13.60.6 ‘yp_match’ 13.60.7 ‘yp_next’ 13.60.8 ‘yp_order’ 13.60.9 ‘yp_unbind’ 13.60.10 ‘ypbinderr_string’ 13.60.11 ‘yperr_string’ 13.60.12 ‘ypprot_err’ 13.61 Glibc Extensions to ‘’ 13.61.1 ‘clone’ 13.61.2 ‘getcpu’ 13.61.3 ‘sched_getaffinity’ 13.61.4 ‘sched_getcpu’ 13.61.5 ‘sched_setaffinity’ 13.61.6 ‘setns’ 13.62 Glibc Extensions to ‘’ 13.62.1 ‘hcreate_r’ 13.62.2 ‘hdestroy_r’ 13.62.3 ‘hsearch_r’ 13.62.4 ‘tdestroy’ 13.62.5 ‘twalk_r’ 13.63 Glibc Extensions to ‘’ 13.63.1 ‘fgetfilecon’ 13.63.2 ‘getfilecon’ 13.63.3 ‘lgetfilecon’ 13.64 Glibc Extensions to ‘’ 13.64.1 ‘sem_clockwait’ 13.65 Glibc ‘’ 13.65.1 ‘endspent’ 13.65.2 ‘fgetspent’ 13.65.3 ‘fgetspent_r’ 13.65.4 ‘getspent’ 13.65.5 ‘getspent_r’ 13.65.6 ‘getspnam’ 13.65.7 ‘getspnam_r’ 13.65.8 ‘lckpwdf’ 13.65.9 ‘putspent’ 13.65.10 ‘setspent’ 13.65.11 ‘sgetspent’ 13.65.12 ‘sgetspent_r’ 13.65.13 ‘ulckpwdf’ 13.66 Glibc Extensions to ‘’ 13.66.1 ‘gsignal’ 13.66.2 ‘sigandset’ 13.66.3 ‘sigblock’ 13.66.4 ‘siggetmask’ 13.66.5 ‘sigisemptyset’ 13.66.6 ‘sigorset’ 13.66.7 ‘sigreturn’ 13.66.8 ‘sigsetmask’ 13.66.9 ‘sigstack’ 13.66.10 ‘sigvec’ 13.66.11 ‘ssignal’ 13.66.12 ‘sys_siglist’ 13.66.13 ‘sysv_signal’ 13.66.14 ‘tgkill’ 13.67 Glibc Extensions to ‘’ 13.67.1 ‘posix_spawn_file_actions_addchdir_np’ 13.67.2 ‘posix_spawn_file_actions_addclosefrom_np’ 13.67.3 ‘posix_spawn_file_actions_addfchdir_np’ 13.68 Glibc Extensions to ‘’ 13.68.1 ‘asprintf’ 13.68.2 ‘cuserid’ 13.68.3 ‘clearerr_unlocked’ 13.68.4 ‘fcloseall’ 13.68.5 ‘feof_unlocked’ 13.68.6 ‘ferror_unlocked’ 13.68.7 ‘fflush_unlocked’ 13.68.8 ‘fgetc_unlocked’ 13.68.9 ‘fgets_unlocked’ 13.68.10 ‘fileno_unlocked’ 13.68.11 ‘fopencookie’ 13.68.12 ‘fputc_unlocked’ 13.68.13 ‘fputs_unlocked’ 13.68.14 ‘fread_unlocked’ 13.68.15 ‘fwrite_unlocked’ 13.68.16 ‘getw’ 13.68.17 ‘putw’ 13.68.18 ‘renameat2’ 13.68.19 ‘setbuffer’ 13.68.20 ‘setlinebuf’ 13.68.21 ‘sys_errlist’ 13.68.22 ‘sys_nerr’ 13.68.23 ‘tmpnam_r’ 13.68.24 ‘vasprintf’ 13.69 Glibc Extensions to ‘’ 13.69.1 ‘canonicalize_file_name’ 13.69.2 ‘cfree’ 13.69.3 ‘clearenv’ 13.69.4 ‘drand48_r’ 13.69.5 ‘ecvt_r’ 13.69.6 ‘erand48_r’ 13.69.7 ‘fcvt_r’ 13.69.8 ‘getloadavg’ 13.69.9 ‘getpt’ 13.69.10 ‘initstate_r’ 13.69.11 ‘jrand48_r’ 13.69.12 ‘lcong48_r’ 13.69.13 ‘lrand48_r’ 13.69.14 ‘mkostemp’ 13.69.15 ‘mkostemps’ 13.69.16 ‘mkstemps’ 13.69.17 ‘mrand48_r’ 13.69.18 ‘nrand48_r’ 13.69.19 ‘on_exit’ 13.69.20 ‘ptsname_r’ 13.69.21 ‘qecvt’ 13.69.22 ‘qecvt_r’ 13.69.23 ‘qfcvt’ 13.69.24 ‘qfcvt_r’ 13.69.25 ‘qgcvt’ 13.69.26 ‘qsort_r’ 13.69.27 ‘random_r’ 13.69.28 ‘rpmatch’ 13.69.29 ‘secure_getenv’ 13.69.30 ‘seed48_r’ 13.69.31 ‘setstate_r’ 13.69.32 ‘srand48_r’ 13.69.33 ‘srandom_r’ 13.69.34 ‘strtod_l’ 13.69.35 ‘strtof_l’ 13.69.36 ‘strtol_l’ 13.69.37 ‘strtold_l’ 13.69.38 ‘strtoll_l’ 13.69.39 ‘strtoq’ 13.69.40 ‘strtoul_l’ 13.69.41 ‘strtoull_l’ 13.69.42 ‘strtouq’ 13.69.43 ‘valloc’ 13.70 Glibc Extensions to ‘’ 13.70.1 ‘explicit_bzero’ 13.70.2 ‘ffsl’ 13.70.3 ‘ffsll’ 13.70.4 ‘memfrob’ 13.70.5 ‘memmem’ 13.70.6 ‘mempcpy’ 13.70.7 ‘memrchr’ 13.70.8 ‘rawmemchr’ 13.70.9 ‘sigabbrev_np’ 13.70.10 ‘sigdescr_np’ 13.70.11 ‘strcasestr’ 13.70.12 ‘strchrnul’ 13.70.13 ‘strerrordesc_np’ 13.70.14 ‘strerrorname_np’ 13.70.15 ‘strfry’ 13.70.16 ‘strsep’ 13.70.17 ‘strverscmp’ 13.71 Glibc ‘’ 13.71.1 ‘getauxval’ 13.72 Glibc ‘’ 13.72.1 ‘capget’ 13.72.2 ‘capset’ 13.73 Glibc ‘’ 13.73.1 ‘epoll_create’ 13.73.2 ‘epoll_create1’ 13.73.3 ‘epoll_ctl’ 13.73.4 ‘epoll_pwait’ 13.73.5 ‘epoll_wait’ 13.74 Glibc ‘’ 13.74.1 ‘eventfd’ 13.74.2 ‘eventfd_read’ 13.74.3 ‘eventfd_write’ 13.75 Glibc ‘’ 13.75.1 ‘fanotify_init’ 13.75.2 ‘fanotify_mark’ 13.76 Glibc ‘’ 13.76.1 ‘flock’ 13.77 Glibc ‘’ 13.77.1 ‘setfsgid’ 13.77.2 ‘setfsuid’ 13.78 Glibc ‘’ 13.78.1 ‘monstartup’ 13.79 Glibc ‘’ 13.79.1 ‘inotify_add_watch’ 13.79.2 ‘inotify_init’ 13.79.3 ‘inotify_init1’ 13.79.4 ‘inotify_rm_watch’ 13.80 Glibc ‘’, ‘’ 13.80.1 ‘ioperm’ 13.80.2 ‘iopl’ 13.81 Glibc ‘’ 13.81.1 ‘bdflush’ 13.82 Glibc ‘’ 13.82.1 ‘klogctl’ 13.83 Glibc Extensions to ‘’ 13.83.1 ‘madvise’ 13.83.2 ‘memfd_create’ 13.83.3 ‘mincore’ 13.83.4 ‘mlock2’ 13.83.5 ‘mremap’ 13.83.6 ‘pkey_alloc’ 13.83.7 ‘pkey_free’ 13.83.8 ‘pkey_get’ 13.83.9 ‘pkey_mprotect’ 13.83.10 ‘pkey_set’ 13.83.11 ‘remap_file_pages’ 13.84 Glibc ‘’ 13.84.1 ‘mount’ 13.84.2 ‘umount’ 13.84.3 ‘umount2’ 13.85 Glibc ‘’ 13.85.1 ‘personality’ 13.86 Glibc ‘’ 13.86.1 ‘prctl’ 13.87 Glibc ‘’ 13.87.1 ‘sprofil’ 13.88 Glibc ‘’ 13.88.1 ‘ptrace’ 13.89 Glibc ‘’ 13.89.1 ‘quotactl’ 13.90 Glibc ‘’ 13.90.1 ‘getentropy’ 13.90.2 ‘getrandom’ 13.91 Glibc ‘’ 13.91.1 ‘reboot’ 13.92 Glibc Extensions to ‘’ 13.92.1 ‘prlimit’ 13.93 Glibc Extensions to ‘’ 13.93.1 ‘semtimedop’ 13.94 Glibc ‘’ 13.94.1 ‘sendfile’ 13.95 Glibc ‘’ 13.95.1 ‘signalfd’ 13.96 Glibc ‘’ 13.96.1 ‘__libc_single_threaded’ 13.97 Glibc Extensions to ‘’ 13.97.1 ‘accept4’ 13.97.2 ‘isfdtype’ 13.97.3 ‘recvmmsg’ 13.97.4 ‘sendmmsg’ 13.98 Glibc Extensions to ‘’ 13.98.1 ‘getumask’ 13.98.2 ‘lchmod’ 13.98.3 ‘statx’ 13.99 Glibc ‘’ 13.99.1 ‘fstatfs’ 13.99.2 ‘statfs’ 13.100 Glibc ‘’ 13.100.1 ‘swapoff’ 13.100.2 ‘swapon’ 13.101 Glibc ‘’ 13.101.1 ‘sysctl’ 13.102 Glibc ‘’ 13.102.1 ‘get_avphys_pages’ 13.102.2 ‘get_nprocs’ 13.102.3 ‘get_nprocs_conf’ 13.102.4 ‘get_phys_pages’ 13.102.5 ‘sysinfo’ 13.103 Glibc ‘’ 13.103.1 ‘vsyslog’ 13.104 Glibc ‘’ 13.104.1 ‘gnu_dev_major’ 13.104.2 ‘gnu_dev_makedev’ 13.104.3 ‘gnu_dev_minor’ 13.105 Glibc Extensions to ‘’ 13.105.1 ‘adjtime’ 13.105.2 ‘futimes’ 13.105.3 ‘futimesat’ 13.105.4 ‘lutimes’ 13.105.5 ‘settimeofday’ 13.106 Glibc ‘’ 13.106.1 ‘timerfd_create’ 13.106.2 ‘timerfd_gettime’ 13.106.3 ‘timerfd_settime’ 13.107 Glibc ‘’ 13.107.1 ‘adjtimex’ 13.107.2 ‘ntp_adjtime’ 13.107.3 ‘ntp_gettime’ 13.107.4 ‘ntp_gettimex’ 13.108 Glibc Extensions to ‘’ 13.108.1 ‘preadv’ 13.108.2 ‘preadv2’ 13.108.3 ‘process_vm_readv’ 13.108.4 ‘process_vm_writev’ 13.108.5 ‘pwritev’ 13.108.6 ‘pwritev2’ 13.109 Glibc ‘’ 13.109.1 ‘ustat’ 13.110 Glibc ‘’ 13.110.1 ‘vlimit’ 13.111 Glibc Extensions to ‘’ 13.111.1 ‘wait3’ 13.111.2 ‘wait4’ 13.112 Glibc ‘’ 13.112.1 ‘fgetxattr’ 13.112.2 ‘flistxattr’ 13.112.3 ‘fremovexattr’ 13.112.4 ‘fsetxattr’ 13.112.5 ‘getxattr’ 13.112.6 ‘lgetxattr’ 13.112.7 ‘listxattr’ 13.112.8 ‘llistxattr’ 13.112.9 ‘lremovexattr’ 13.112.10 ‘lsetxattr’ 13.112.11 ‘removexattr’ 13.112.12 ‘setxattr’ 13.113 Glibc Extensions to ‘’ 13.113.1 ‘cfmakeraw’ 13.113.2 ‘cfsetspeed’ 13.114 Glibc Extensions to ‘’ 13.114.1 ‘clock_adjtime’ 13.114.2 ‘dysize’ 13.114.3 ‘getdate_r’ 13.114.4 ‘stime’ 13.114.5 ‘strptime_l’ 13.114.6 ‘timelocal’ 13.114.7 ‘timespec_get’ 13.115 Glibc ‘’ 13.115.1 ‘endttyent’ 13.115.2 ‘getttyent’ 13.115.3 ‘getttynam’ 13.115.4 ‘setttyent’ 13.116 Glibc Extensions to ‘’ 13.116.1 ‘_Fork’ 13.116.2 ‘acct’ 13.116.3 ‘brk’ 13.116.4 ‘chroot’ 13.116.5 ‘closefrom’ 13.116.6 ‘copy_file_range’ 13.116.7 ‘daemon’ 13.116.8 ‘dup3’ 13.116.9 ‘eaccess’ 13.116.10 ‘endusershell’ 13.116.11 ‘euidaccess’ 13.116.12 ‘execveat’ 13.116.13 ‘execvpe’ 13.116.14 ‘get_current_dir_name’ 13.116.15 ‘getdomainname’ 13.116.16 ‘getdtablesize’ 13.116.17 ‘getpagesize’ 13.116.18 ‘getpass’ 13.116.19 ‘getresgid’ 13.116.20 ‘getresuid’ 13.116.21 ‘gettid’ 13.116.22 ‘getusershell’ 13.116.23 ‘group_member’ 13.116.24 ‘pipe2’ 13.116.25 ‘profil’ 13.116.26 ‘revoke’ 13.116.27 ‘sbrk’ 13.116.28 ‘setlogin’ 13.116.29 ‘setdomainname’ 13.116.30 ‘sethostid’ 13.116.31 ‘sethostname’ 13.116.32 ‘setresgid’ 13.116.33 ‘setresuid’ 13.116.34 ‘setusershell’ 13.116.35 ‘syncfs’ 13.116.36 ‘syscall’ 13.116.37 ‘ttyslot’ 13.116.38 ‘vhangup’ 13.117 Glibc ‘’ 13.117.1 ‘endutent’ 13.117.2 ‘getutent’ 13.117.3 ‘getutent_r’ 13.117.4 ‘getutid’ 13.117.5 ‘getutid_r’ 13.117.6 ‘getutline’ 13.117.7 ‘getutline_r’ 13.117.8 ‘pututline’ 13.117.9 ‘setutent’ 13.117.10 ‘updwtmp’ 13.117.11 ‘utmpname’ 13.117.12 ‘login’ 13.117.13 ‘login_tty’ 13.118 Glibc Extensions to ‘’ 13.118.1 ‘getutmp’ 13.118.2 ‘getutmpx’ 13.118.3 ‘updwtmpx’ 13.118.4 ‘utmpxname’ 13.119 Glibc Extensions to ‘’ 13.119.1 ‘fgetwc_unlocked’ 13.119.2 ‘fgetws_unlocked’ 13.119.3 ‘fputwc_unlocked’ 13.119.4 ‘fputws_unlocked’ 13.119.5 ‘getwc_unlocked’ 13.119.6 ‘getwchar_unlocked’ 13.119.7 ‘putwc_unlocked’ 13.119.8 ‘putwchar_unlocked’ 13.119.9 ‘wcschrnul’ 13.119.10 ‘wcsftime_l’ 13.119.11 ‘wcstod_l’ 13.119.12 ‘wcstof_l’ 13.119.13 ‘wcstol_l’ 13.119.14 ‘wcstold_l’ 13.119.15 ‘wcstoll_l’ 13.119.16 ‘wcstoq’ 13.119.17 ‘wcstoul_l’ 13.119.18 ‘wcstoull_l’ 13.119.19 ‘wcstouq’ 13.119.20 ‘wmempcpy’ 14 Native Windows Support 14.1 Libtool and Windows 14.2 Large File Support 14.3 Inode numbers on Windows 14.4 Precise file timestamps on Windows 14.5 Avoiding the year 2038 problem 14.6 Windows sockets 14.6.1 Getaddrinfo and WINVER 14.7 Native Windows Support without MSVC Support 14.8 Visual Studio Compatibility 15 Multithreading 15.1 The three multithreading APIs 15.2 Choosing the right multithreading API 15.3 The POSIX multithreading API 15.4 The ISO C multithreading API 15.5 The Gnulib multithreading API 15.6 Optimizations of multithreaded code 16 Strings and Characters 16.1 Strings 16.1.1 The C string representation 16.1.2 Iterating through strings 16.1.3 Strings with NUL characters 16.1.4 Character and String Functions in C Locale 16.1.4.1 c-ctype 16.1.4.2 c-strcase 16.1.4.3 c-strcaseeq 16.1.4.4 c-strcasestr 16.1.4.5 c-strstr 16.1.4.6 c-strtod 16.1.4.7 c-strtold 16.1.5 Comparison of string APIs 16.2 Characters 16.2.1 The ‘char’ type 16.2.2 The ‘wchar_t’ type 16.2.3 The ‘char32_t’ type 16.2.4 The ‘mbchar_t’ type 16.2.4.1 Reading multibyte strings 16.2.5 Comparison of character APIs 17 Particular Modules 17.1 alloca 17.2 alloca-opt 17.3 Safe Allocation Macros 17.4 Attributes 17.5 Compile-time Assertions 17.6 Non-returning Functions 17.7 Integer Properties 17.7.1 Arithmetic Type Properties 17.7.2 Integer Bounds 17.7.3 Checking Integer Overflow 17.7.4 Wraparound Arithmetic with Integers 17.7.5 Integer Type Overflow 17.7.6 Integer Range Overflow 17.8 Static inline functions 17.9 Extern inline functions 17.10 Handling closed standard file descriptors 17.11 Handling strings with NUL characters 17.12 Container data types 17.12.1 Ordinary container data types 17.12.2 Specialized container data types 17.13 Recognizing Option Arguments 17.14 Quoting 17.15 progname and getprogname 17.16 gcd: greatest common divisor 17.17 Profiling of program phases 17.18 Library version handling 17.19 Supporting Relocation 17.20 func 17.21 stat-size 18 Regular expressions 18.1 Overview 18.2 Regular Expression Syntax 18.2.1 Syntax Bits 18.2.2 Predefined Syntaxes 18.2.3 Collating Elements vs. Characters 18.2.4 The Backslash Character 18.3 Common Operators 18.3.1 The Match-self Operator (ORDINARY CHARACTER) 18.3.2 The Match-any-character Operator (‘.’) 18.3.3 The Concatenation Operator 18.3.4 Repetition Operators 18.3.4.1 The Match-zero-or-more Operator (‘*’) 18.3.4.2 The Match-one-or-more Operator (‘+’ or ‘\+’) 18.3.4.3 The Match-zero-or-one Operator (‘?’ or ‘\?’) 18.3.4.4 Interval Operators (‘{’ ... ‘}’ or ‘\{’ ... ‘\}’) 18.3.5 The Alternation Operator (‘|’ or ‘\|’) 18.3.6 List Operators (‘[’ ... ‘]’ and ‘[^’ ... ‘]’) 18.3.6.1 Collating Symbol Operators (‘[.’ ... ‘.]’) 18.3.6.2 Equivalence Class Operators (‘[=’ ... ‘=]’) 18.3.6.3 Character Class Operators (‘[:’ ... ‘:]’) 18.3.6.4 The Range Operator (‘-’) 18.3.7 Grouping Operators (‘(’ ... ‘)’ or ‘\(’ ... ‘\)’) 18.3.8 The Back-reference Operator (“\”DIGIT) 18.3.9 Anchoring Operators 18.3.9.1 The Match-beginning-of-line Operator (‘^’) 18.3.9.2 The Match-end-of-line Operator (‘$’) 18.4 GNU Operators 18.4.1 Word Operators 18.4.1.1 The Match-word-boundary Operator (‘\b’) 18.4.1.2 The Match-within-word Operator (‘\B’) 18.4.1.3 The Match-beginning-of-word Operator (‘\<’) 18.4.1.4 The Match-end-of-word Operator (‘\>’) 18.4.1.5 The Match-word-constituent Operator (‘\w’) 18.4.1.6 The Match-non-word-constituent Operator (‘\W’) 18.4.2 Space Operators 18.4.2.1 The Match-space Operator (‘\s’) 18.4.2.2 The Match-non-space Operator (‘\S’) 18.4.3 Whole-string Operators 18.4.3.1 The Match-beginning-of-string Operator (‘\`’) 18.4.3.2 The Match-end-of-string Operator (‘\'’) 18.5 What Gets Matched? 18.6 Programming with Regex 18.6.1 GNU Regex Functions 18.6.1.1 GNU Pattern Buffers 18.6.1.2 GNU Regular Expression Compiling 18.6.1.3 GNU Matching 18.6.1.4 GNU Searching 18.6.1.5 Matching and Searching with Split Data 18.6.1.6 Searching with Fastmaps 18.6.1.7 GNU Translate Tables 18.6.1.8 Using Registers 18.6.1.9 Freeing GNU Pattern Buffers 18.6.2 BSD Regex Functions 18.6.2.1 BSD Regular Expression Compiling 18.6.2.2 BSD Searching 18.7 Regular expression syntaxes 18.7.1 ‘awk’ regular expression syntax 18.7.2 ‘egrep’ regular expression syntax 18.7.3 ‘ed’ regular expression syntax 18.7.4 ‘emacs’ regular expression syntax 18.7.5 ‘gnu-awk’ regular expression syntax 18.7.6 ‘grep’ regular expression syntax 18.7.7 ‘posix-awk’ regular expression syntax 18.7.8 ‘posix-basic’ regular expression syntax 18.7.9 ‘posix-egrep’ regular expression syntax 18.7.10 ‘posix-extended’ regular expression syntax 18.7.11 ‘posix-minimal-basic’ regular expression syntax 18.7.12 ‘sed’ regular expression syntax 19 Build Infrastructure Modules 19.1 Searching for Libraries Simple Library Tests Locating Libraries Example of using ‘AC_LIB_LINKFLAGS’ Dependencies Static vs. shared ‘CPPFLAGS’ vs. ‘LDFLAGS’ Bi-arch systems 19.2 Controlling the Exported Symbols of Shared Libraries 19.3 LD Version Scripts 19.4 configmake 19.5 warnings 19.6 manywarnings 19.7 Running self-tests under valgrind 19.7.1 Using valgrind without developer intervention 19.7.2 Valgrind options 19.7.3 Using valgrind at the developer’s discretion 19.7.4 How to use Valgrind with shell scripts 19.8 VCS To ChangeLog 19.9 gitlog-to-changelog 20 Build Infrastructure Files 20.1 Recognizing platforms 20.2 Utilities for Makefiles 20.3 Programs for developing in Git checkouts 20.4 Utilities for building documentation 20.5 Utilities for building libraries 20.6 Utilities for running test suites 21 Release Management Files 21.1 Tools for releasing packages with shared libraries 21.2 Tools for uploading release tarballs Appendix A GNU Free Documentation License Appendix B Gnulib history Index GNU Gnulib ********** This manual is for GNU Gnulib (updated 2024-05-30 15:26:47), which is a library of common routines intended to be shared at the source level. Copyright © 2004–2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. 1 Brief Overview **************** Gnulib is a source code library that provides basic functionality to programs and libraries. Many software packages make use of Gnulib to avoid reinventing the portability wheel. Resources: • Gnulib is hosted at Savannah: . Get the sources through Git from there. • The Gnulib home page: . 1.1 Gnulib Basics ================= While portability across operating systems is not one of GNU’s primary goals, it has helped introduce many people to the GNU system, and is worthwhile when it can be achieved at a low cost. This collection helps lower that cost. Gnulib is intended to be the canonical source for most of the important “portability” and/or common files for GNU projects. These are files intended to be shared at the source level; Gnulib is not a typical library meant to be installed and linked against. Thus, unlike most projects, Gnulib does not normally generate a source tarball distribution; instead, developers grab modules directly from the source repository. The easiest, and recommended, way to do this is to use the ‘gnulib-tool’ script. Since there is no installation procedure for Gnulib, ‘gnulib-tool’ needs to be run directly in the directory that contains the Gnulib source code. You can do this either by specifying the absolute filename of ‘gnulib-tool’, or by using a symbolic link from a place inside your ‘PATH’ to the ‘gnulib-tool’ file of your preferred Gnulib checkout. For example: $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool 1.2 Git Checkout ================ Gnulib is available for anonymous checkout. In any Bourne-shell the following should work: $ git clone https://git.savannah.gnu.org/git/gnulib.git For a read-write checkout you need to have a login on ‘savannah.gnu.org’ and be a member of the Gnulib project at . Then, instead of the URL , use the URL ‘ssh://USER@git.savannah.gnu.org/srv/git/gnulib’ where USER is your login name on savannah.gnu.org. git resources: Overview: Homepage: When you use ‘git annotate’ or ‘git blame’ with Gnulib, it’s recommended that you use the ‘-w’ option, in order to ignore massive whitespace changes that happened in 2009. 1.3 Keeping Up-to-date ====================== The best way to work with Gnulib is to check it out of git. To synchronize, you can use ‘git pull’. Subscribing to the mailing list will help you to plan when to update your local copy of Gnulib (which you use to maintain your software) from git. You can review the archives, subscribe, etc., via . Sometimes, using an updated version of Gnulib will require you to use newer versions of GNU Automake or Autoconf. You may find it helpful to join the autotools-announce mailing list to be advised of such changes. 1.4 Contributing to Gnulib ========================== All software here is copyrighted by the Free Software Foundation—you need to have filled out an assignment form for a project that uses the module for that contribution to be accepted here. If you have a piece of code that you would like to contribute, please email . Generally we are looking for files that fulfill at least one of the following requirements: • If your ‘.c’ and ‘.h’ files define functions that are broken or missing on some other system, we should be able to include it. • If your functions remove arbitrary limits from existing functions (either under the same name, or as a slightly different name), we should be able to include it. If your functions define completely new but rarely used functionality, you should probably consider packaging it as a separate library. 1.4.1 Gnulib licensing ---------------------- Gnulib contains code both under GPL and LGPL. Because several packages that use Gnulib are GPL, the files state they are licensed under GPL. However, to support LGPL projects as well, you may use some of the files under LGPL. The “License:” information in the files under modules/ clarifies the real license that applies to the module source. Keep in mind that if you submit patches to files in Gnulib, you should license them under a compatible license, which means that sometimes the contribution will have to be LGPL, if the original file is available under LGPL via a “License: LGPL” information in the projects’ modules/ file. 1.4.2 Indent with spaces not TABs --------------------------------- We use space-only indentation in nearly all files. This includes all ‘*.h’, ‘*.c’, ‘*.y’ files, except for the ‘regex’ module. Makefile and ChangeLog files are excluded, since TAB characters are part of their format. In order to tell your editor to produce space-only indentation, you can use these instructions. • For Emacs: Add these lines to your Emacs initialization file (‘$HOME/.emacs’ or similar): ;; In Gnulib, indent with spaces everywhere (not TABs). ;; Exceptions: Makefile and ChangeLog modes. (add-hook 'find-file-hook '(lambda () (if (and buffer-file-name (string-match "/gnulib\\>" (buffer-file-name)) (not (string-equal mode-name "Change Log")) (not (string-equal mode-name "Makefile"))) (setq indent-tabs-mode nil)))) • For vi (vim): Add these lines to your ‘$HOME/.vimrc’ file: " Don't use tabs for indentation. Spaces are nicer to work with. set expandtab For Makefile and ChangeLog files, compensate for this by adding this to your ‘$HOME/.vim/after/indent/make.vim’ file, and similarly for your ‘$HOME/.vim/after/indent/changelog.vim’ file: " Use tabs for indentation, regardless of the global setting. set noexpandtab • For Eclipse: In the “Window|Preferences” dialog (or “Eclipse|Preferences” dialog on Mac OS), 1. Under “General|Editors|Text Editors”, select the “Insert spaces for tabs” checkbox. 2. Under “C/C++|Code Style”, select a code style profile that has the “Indentation|Tab policy” combobox set to “Spaces only”, such as the “GNU [built-in]” policy. If you use the GNU indent program, pass it the option ‘--no-tabs’. 1.4.3 How to add a new module ----------------------------- • Add the header files and source files to ‘lib/’. • If the module needs configure-time checks, write an Autoconf macro for it in ‘m4/MODULE.m4’. See ‘m4/README’ for details. • Write a module description ‘modules/MODULE’, based on ‘modules/TEMPLATE’. • If the module contributes a section to the end-user documentation, put this documentation in ‘doc/MODULE.texi’ and add it to the “Files” section of ‘modules/MODULE’. Most modules don’t do this; they have only documentation for the programmer (= Gnulib user). Such documentation usually goes into the ‘lib/’ source files. It may also go into ‘doc/’; but don’t add it to the module description in this case. • Add the module to the list in ‘MODULES.html.sh’. You can test that a module builds correctly with: $ ./gnulib-tool --create-testdir --dir=/tmp/testdir module1 ... moduleN $ cd /tmp/testdir $ ./configure && make Other things: • Check the license and copyright year of headers. • Check that the source code follows the GNU coding standards; see . • Add source files to ‘config/srclist*’ if they are identical to upstream and should be upgraded in Gnulib whenever the upstream source changes. • Include header files in source files to verify the function prototypes. • Make sure a replacement function doesn’t cause warnings or clashes on systems that have the function. • Autoconf functions can use ‘gl_*’ prefix. The ‘AC_*’ prefix is for autoconf internal functions. • Build files only if they are needed on a platform. Look at the ‘alloca’ and ‘fnmatch’ modules for how to achieve this. If for some reason you cannot do this, and you have a ‘.c’ file that leads to an empty ‘.o’ file on some platforms (through some big ‘#if’ around all the code), then ensure that the compilation unit is not empty after preprocessing. One way to do this is to ‘#include ’ or ‘’ before the big ‘#if’. 1.5 Portability guidelines ========================== Gnulib code is intended to be portable to a wide variety of platforms, not just GNU platforms. Gnulib typically attempts to support a platform as long as it is still supported by its provider, even if the platform is not the latest version. *Note Target Platforms::. Many Gnulib modules exist so that applications need not worry about undesirable variability in implementations. For example, an application that uses the ‘malloc’ module need not worry about ‘malloc (0)’ returning a null pointer on some Standard C platforms; and ‘glob’ users need not worry about ‘glob’ silently omitting symbolic links to nonexistent files on some platforms that do not conform to POSIX. Gnulib code is intended to port without problem to new hosts, e.g., hosts conforming to recent C and POSIX standards. Hence Gnulib code should avoid using constructs that these newer standards no longer require, without first testing for the presence of these constructs. For example, because C11 made variable length arrays optional, Gnulib code should avoid them unless it first uses the ‘vararrays’ module to check whether they are supported. The following subsections discuss some exceptions and caveats to the general Gnulib portability guidelines. 1.5.1 C language versions ------------------------- Currently Gnulib assumes at least a freestanding C99 compiler, possibly operating with a C library that predates C99; with time this assumption will likely be strengthened to later versions of the C standard. Old platforms currently supported include AIX 6.1, HP-UX 11i v1 and Solaris 10, though these platforms are rarely tested. Gnulib itself is so old that it contains many fixes for obsolete platforms, fixes that may be removed in the future. Because of the freestanding C99 assumption, Gnulib code can include ‘’, ‘’, ‘’, ‘’, and ‘’ unconditionally; ‘’ is also in the C99 freestanding list but is obsolescent as of C23. Gnulib code can also assume the existence of ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, and ‘’. Similarly, many modules include ‘’ even though it’s not even in C11; that’s OK since ‘’ has been around nearly forever. Even if the include files exist, they may not conform to the C standard. However, GCC has a ‘fixincludes’ script that attempts to fix most conformance problems. Gnulib currently assumes include files largely conform to C99 or better. People still using ancient hosts should use fixincludes or fix their include files manually. Even if the include files conform, the library itself may not. For example, ‘strtod’ and ‘mktime’ have some bugs on some platforms. You can work around some of these problems by requiring the relevant modules, e.g., the Gnulib ‘mktime’ module supplies a working and conforming ‘mktime’. 1.5.2 C99 features assumed by Gnulib ------------------------------------ Although the C99 standard specifies many features, Gnulib code is conservative about using them, partly because Gnulib predates the widespread adoption of C99, and partly because many C99 features are not well-supported in practice. C99 features that are reasonably portable nowadays include: • A declaration after a statement, or as the first clause in a ‘for’ statement. • ‘long long int’. • ‘’, although Gnulib code no longer uses it directly, preferring plain ‘bool’ via the ‘stdbool’ module instead. *Note stdbool.h::. • ‘’, assuming the ‘stdint’ module is used. *Note stdint.h::. • Compound literals and designated initializers. • Variadic macros. Note: The handling of ‘__VA_ARGS__’ in MSVC differs from the one in ISO C 99, see . But usually this matters only for macros that decompose ‘__VA_ARGS__’. • ‘static inline’ functions. • ‘__func__’, assuming the ‘func’ module is used. *Note func::. • The ‘restrict’ qualifier, assuming ‘AC_REQUIRE([AC_C_RESTRICT])’ is used. This qualifier is sometimes implemented via a macro, so C++ code that uses Gnulib should avoid using ‘restrict’ as an identifier. • Flexible array members (however, see the ‘flexmember’ module). 1.5.3 C99 features avoided by Gnulib ------------------------------------ Gnulib avoids some features even though they are standardized by C99, as they have portability problems in practice. Here is a partial list of avoided C99 features. Many other C99 features are portable only if their corresponding modules are used; Gnulib code that uses such a feature should require the corresponding module. • Variable length arrays (VLAs) or variably modified types, without checking whether ‘__STDC_NO_VLA__’ is defined. See the ‘vararrays’ and ‘vla’ modules. • Block-scope variable length arrays, without checking whether either ‘GNULIB_NO_VLA’ or ‘__STDC_NO_VLA__’ is defined. This lets you define ‘GNULIB_NO_VLA’ to pacify GCC when using its ‘-Wvla-larger-than warnings’ option, and to avoid large stack usage that may have security implications. ‘GNULIB_NO_VLA’ does not affect Gnulib’s other uses of VLAs and variably modified types, such as array declarations in function prototype scope. • Converting to pointers via integer types other than ‘intptr_t’ or ‘uintptr_t’. Although the C standard says that values of these integer types, if they exist, should be convertible to and from ‘intmax_t’ and ‘uintmax_t’ without loss of information, on CHERI platforms such conversions result in integers that, if converted back to a pointer, cannot be dereferenced. • ‘extern inline’ functions, without checking whether they are supported. *Note extern inline::. • Type-generic math functions. • Universal character names in source code. • ‘’, since GNU programs need not worry about deficient source-code encodings. • Comments beginning with ‘//’. This is mostly for style reasons. 1.5.4 Other portability assumptions made by Gnulib -------------------------------------------------- Gnulib code makes the following assumptions that go beyond what C and POSIX require: • Standard internal types like ‘ptrdiff_t’ and ‘size_t’ are no wider than ‘long’. The GNU coding standards allow code to make this assumption, POSIX requires implementations to support at least one programming environment where this is true, and such environments are recommended for Gnulib-using applications. When it is easy to port to non-POSIX platforms like MinGW where these types are wider than ‘long’, new Gnulib code should do so, e.g., by using ‘ptrdiff_t’ instead of ‘long’. However, it is not always that easy, and no effort has been made to check that all Gnulib modules work on MinGW-like environments. • ‘int’ and ‘unsigned int’ are at least 32 bits wide. POSIX and the GNU coding standards both require this. • Signed integer arithmetic is two’s complement. Previously, Gnulib code sometimes also assumed that signed integer arithmetic wraps around, but modern compiler optimizations sometimes do not guarantee this, and Gnulib code with this assumption is now considered to be questionable. *Note Integer Properties::. Although some Gnulib modules contain explicit support for ones’ complement and signed magnitude integer representations, which are allowed by C17 and earlier, these modules are the exception rather than the rule. All practical Gnulib targets use two’s complement, which is required by C23. • There are no “holes” in integer values: all the bits of an integer contribute to its value in the usual way. In particular, an unsigned type and its signed counterpart have the same number of bits when you count the latter’s sign bit. (As an exception, Gnulib code is portable to CHERI platforms even though this assumption is false for CHERI.) • Objects with all bits zero are treated as zero or as null pointers. For example, ‘memset (A, 0, sizeof A)’ initializes an array ‘A’ of pointers to null pointers. • The types ‘intptr_t’ and ‘uintptr_t’ exist, and pointers can be converted to and from these types without loss of information. • Addresses and sizes behave as if objects reside in a flat address space. In particular: • If two nonoverlapping objects have sizes S and T represented as ‘ptrdiff_t’ or ‘size_t’ values, then ‘S + T’ cannot overflow. • A pointer P points within an object O if and only if ‘(char *) &O <= (char *) P && (char *) P < (char *) (&O + 1)’. • Arithmetic on a valid pointer is equivalent to the same arithmetic on the pointer converted to ‘uintptr_t’, except that offsets are multiplied by the size of the pointed-to objects. For example, if ‘P + I’ is a valid expression involving a pointer P and an integer I, then ‘(uintptr_t) (P + I) == (uintptr_t) ((uintptr_t) P + I * sizeof *P)’. Similar arithmetic can be done with ‘intptr_t’, although more care must be taken in case of integer overflow or negative integers. • A pointer ‘P’ has alignment ‘A’ if and only if ‘(uintptr_t) P % A’ is zero, and similarly for ‘intptr_t’. • If an existing object has size S, and if T is sufficiently small (e.g., 8 KiB), then ‘S + T’ cannot overflow. Overflow in this case would mean that the rest of your program fits into T bytes, which can’t happen in realistic flat-address-space hosts. • Adding zero to a null pointer does not change the pointer. For example, ‘0 + (char *) NULL == (char *) NULL’. Some system platforms violate these assumptions and are therefore not Gnulib porting targets. *Note Unsupported Platforms::. 1.6 High Quality ================ We develop and maintain a testsuite for Gnulib. The goal is to have a 100% firm interface so that maintainers can feel free to update to the code in git at _any_ time and know that their application will not break. This means that before any change can be committed to the repository, a test suite program must be produced that exposes the bug for regression testing. 1.6.1 Stable Branches --------------------- In Gnulib, we don’t use topic branches for experimental work. Therefore, occasionally a broken commit may be pushed in Gnulib. It does not happen often, but it does happen. To compensate for this, Gnulib offers “stable branches”. These are branches of the Gnulib code that are maintained over some longer period (a year, for example) and include • bug fixes, • portability enhancements (to existing as well as to new platforms), • updates to ‘config.guess’ and ‘config.sub’. Not included in the stable branches are: • new features, such as new modules, • optimizations, • refactorings, • complex or risky changes in general, • updates to ‘texinfo.tex’, • documentation updates. So far, we have five stable branches: ‘stable-202401’ A stable branch that starts at the beginning of January 2024. ‘stable-202307’ A stable branch that starts at the beginning of July 2023. ‘stable-202301’ A stable branch that starts at the beginning of January 2023. It is no longer updated. ‘stable-202207’ A stable branch that starts at the beginning of July 2022. It is no longer updated. ‘stable-202201’ A stable branch that starts at the beginning of January 2022. It is no longer updated. The two use-cases of stable branches are thus: • You want to protect yourself from occasional breakage in Gnulib. • When making a bug-fix release of your code, you can incorporate bug fixes in Gnulib, by pulling in the newest commits from the same stable branch that you were already using for the previous release. 1.6.2 Writing reliable code --------------------------- When compiling and testing Gnulib and Gnulib-using programs, certain compiler options can help improve reliability. First of all, make it a habit to use ‘-Wall’ in all compilation commands. Beyond that, the ‘manywarnings’ module enables several forms of static checking in GCC and related compilers (*note manywarnings::). For dynamic checking, you can run ‘configure’ with ‘CFLAGS’ options appropriate for your compiler. For example: ./configure \ CPPFLAGS='-Wall'\ CFLAGS='-g3 -O2'\ ' -D_FORTIFY_SOURCE=2'\ ' -fsanitize=undefined'\ ' -fsanitize-undefined-trap-on-error' Here: • ‘-D_FORTIFY_SOURCE=2’ enables extra security hardening checks in the GNU C library. • ‘-fsanitize=undefined’ enables GCC’s undefined behavior sanitizer (‘ubsan’), and • ‘-fsanitize-undefined-trap-on-error’ causes ‘ubsan’ to abort the program (through an “illegal instruction” signal). This measure stops exploit attempts and also allows you to debug the issue. Without the ‘-fsanitize-undefined-trap-on-error’ option, ‘-fsanitize=undefined’ causes messages to be printed, and execution continues after an undefined behavior situation. The message printing causes GCC-like compilers to arrange for the program to dynamically link to libraries it might not otherwise need. With GCC, instead of ‘-fsanitize-undefined-trap-on-error’ you can use the ‘-static-libubsan’ option to arrange for two of the extra libraries (‘libstdc++’ and ‘libubsan’) to be linked statically rather than dynamically, though this typically bloats the executable and the remaining extra libraries are still linked dynamically. It is also good to occasionally run the programs under ‘valgrind’ (*note Running self-tests under valgrind::). 1.7 Join the GNU Project ======================== GNU Gnulib is part of the GNU Operating System, developed by the GNU Project. If you are the author of an awesome program and want to join us in writing Free (libre) Software, please consider making it an official GNU program and become a GNU Maintainer. Instructions on how to do this are here (https://www.gnu.org/help/evaluation). We are looking forward to hacking with you! Don’t have a program to contribute? Look at all the other ways to help (https://www.gnu.org/help/help.html). And to learn more about Free (libre) Software in general, please read and share this page (https://gnu.org/philosophy/free-sw.html). 2 Philosophy ************ Gnulib’s design and development philosophy is organized around steady, collaborative, and open development of reusable modules that are suitable for a reasonably wide variety of platforms. 2.1 Benefits of using Gnulib ============================ Gnulib is useful to enhance various aspects of a package: • Portability: With Gnulib, a package maintainer can program against the POSIX and GNU libc APIs and nevertheless expect good portability to platforms that don’t implement POSIX. • Maintainability: When a package uses modules from Gnulib instead of code written specifically for that package, the maintainer has less code to maintain. • Security: Gnulib provides functions that are immune against vulnerabilities that plague the uses of the corresponding commonplace functions. For example, ‘asprintf’, ‘canonicalize_file_name’ are not affected by buffer sizing problems that affect ‘sprintf’, ‘realpath’. ‘openat’ does not have the race conditions that ‘open’ has. Etc. • Reliability: Gnulib provides functions that combine a call to a system function with a check of the result. Examples are ‘xalloc’, ‘xprintf’, ‘xstrtod’, ‘xgetcwd’. • Structure: Gnulib offers a way to structure code into modules, typically one include file, one source code file, and one autoconf macro for each functionality. Modularity helps maintainability. 2.2 Library vs. Reusable Code ============================= Classical libraries are installed as binary object code. Gnulib is different: It is used as a source code library. Each package that uses Gnulib thus ships with part of the Gnulib source code. The used portion of Gnulib is tailored to the package: A build tool, called ‘gnulib-tool’, is provided that copies a tailored subset of Gnulib into the package. 2.3 Portability and Application Code ==================================== One of the goals of Gnulib is to make portable programming easy, on the basis of the standards relevant for GNU (and Unix). The objective behind that is to avoid a fragmentation of the user community into disjoint user communities according to the operating system, and instead allow synergies between users on different operating systems. Another goal of Gnulib is to provide application code that can be shared between several applications. Some people wonder: "What? glibc doesn’t have a function to copy a file?" Indeed, the scope of a system’s libc is to implement the relevant standards (ISO C, POSIX) and to provide access functions to the kernel’s system calls, and little more. There is no clear borderline between both areas. For example, Gnulib has a facility for generating the name of backup files. While this task is entirely at the application level—no standard specifies an API for it—the naïve code has some portability problems because on some platforms the length of file name components is limited to 30 characters or so. Gnulib handles that. Similarly, Gnulib has a facility for executing a command in a subprocess. It is at the same time a portability enhancement (it works on GNU, Unix, and Windows, compared to the classical ‘fork’/‘exec’ idiom which is not portable to Windows), as well as an application aid: it takes care of redirecting stdin and/or stdout if desired, and emits an error message if the subprocess failed. 2.4 Target Platforms ==================== Gnulib supports a number of platforms that we call the “reasonable portability targets”. This class consists of widespread operating systems, for three years after their last availability, or—for proprietary operating systems—as long as the vendor provides commercial support for it. Already existing Gnulib code for older operating systems is usually left in place for longer than these three years. So it comes that programs that use Gnulib run pretty well also on these older operating systems. Some operating systems are not very widespread, but are Free Software and are actively developed. Such platforms are also supported by Gnulib, if that OS’s developers community keeps in touch with the Gnulib developers, by providing bug reports, analyses, or patches. For such platforms, Gnulib supports only the versions of the last year or the last few months, depending on the maturity of said OS project, the number of its users, and how often these users upgrade. Niche operating systems are generally unsupported by Gnulib, unless some of their developers or users contribute support to Gnulib. The degree of support Gnulib guarantees for a platform depends on the amount of testing it gets from volunteers. Platforms on which Gnulib is frequently tested are the best supported. Then come platforms with occasional testing, then platforms which are rarely tested. Usually, we fix bugs when they are reported. Except that some rarely tested platforms are also low priority; bug fixes for these platforms can take longer. 2.4.1 Supported Platforms ------------------------- As of 2024, the list of supported platforms is the following: • glibc systems. With glibc 2.19 or newer, they are frequently tested. About the kernels: • glibc on Linux is frequently tested. • glibc on kFreeBSD is rarely tested. • musl libc on Linux is occasionally tested. • macOS. In versions 12.5, it’s occasionally tested. In version 10.5, it’s rarely tested. • FreeBSD 14.0 or newer is occasionally tested. • OpenBSD 7.0 or newer is occasionally tested. • NetBSD 10.0 or newer is occasionally tested. • AIX 7.1 and 7.3 are occasionally tested. • Solaris 10 and 11.4 are occasionally tested. Solaris 9 is rarely tested and low priority. • Android is occasionally tested, through the Termux app on Android 11. • Cygwin 2.9 and 3.4 are occasionally tested. Cygwin 1.7.x no longer tested. • Native Windows: • mingw is occasionally tested. Only the latest version of mingw is tested; older versions are not supported. • MSVC 14 (Microsoft Visual Studio 2015 14.0) is occasionally tested. Only “release” builds (compiler option ‘-MD’) are supported, not “debug” builds (compiler option ‘-MDd’). Note that some modules are currently unsupported on native Windows: ‘mgetgroups’, ‘getugroups’, ‘idcache’, ‘userspec’, ‘openpty’, ‘login_tty’, ‘forkpty’, ‘pt_chown’, ‘grantpt’, ‘pty’, ‘savewd’, ‘mkancesdirs’, ‘mkdir-p’, ‘euidaccess’, ‘faccessat’. The versions of Windows that are supported are Windows 10 and newer. • GNU Hurd 0.9 is rarely tested. • Minix 3.3.0 is no longer tested. • Haiku is no longer tested. • uClibc on Linux is no longer tested. • QNX is no longer tested. 2.4.2 Formerly Supported Platforms ---------------------------------- The following platforms were supported in the past, but are no longer supported: • glibc versions 2.1.x and older. • Mac OS X 10.4 and older. • AIX 6 and older. • HP-UX 11.31. • IRIX 6.5 and older. • OSF/1 5.1. • Solaris 8 and older. • Interix. • BeOS. Gnulib supports these operating systems only in an unvirtualized environment. When you run an OS inside a virtual machine, you have to be aware that the virtual machine can bring in bugs of its own. For example, floating-point operations on Solaris can behave slightly differently in QEMU than on real hardware. And Haiku’s ‘bash’ program misbehaves in VirtualBox 3, whereas it behaves fine in VirtualBox 4. Similarly, running native Windows binaries on GNU/Linux under WINE is rarely tested and low priority: WINE has a set of behaviours and bugs that is slightly different from native Windows. 2.4.3 Unsupported Platforms --------------------------- Some platforms with C compilers are not supported by Gnulib because the platforms violate Gnulib’s C portability assumptions. *Note Other portability assumptions::. These assumptions are not required by the C or POSIX standards but hold on almost all practical porting targets. If you need to port Gnulib code to a platform where these assumptions are not true, we would appreciate hearing of any fixes. We need fixes that do not increase runtime overhead on standard hosts and that are relatively easy to maintain. These platforms are listed below to illustrate problems that Gnulib and Gnulib-using code would have if it were intended to be portable to all practical POSIX or C platforms. • Clang’s ‘-fsanitize=undefined’ option causes the program to crash if it adds zero to a null pointer – behavior that is undefined in strict C, but which yields a null pointer on all practical porting targets and which the Gnulib portability guidelines allow. If you use Clang with ‘-fsanitize=undefined’, you can work around the problem by also using ‘-fno-sanitize=pointer-overflow’, although this may also disable some unrelated and useful pointer checks. Perhaps someday the Clang developers will fix the infelicity. • The IBM i’s pointers are 128 bits wide and it lacks the two types ‘intptr_t’ and ‘uintptr_t’, which are optional in the C and POSIX standards. However, these two types are required for the XSI extension to POSIX, and many Gnulib modules use them. To work around this compatibility problem, Gnulib-using applications can be run on the IBM i’s PASE emulation environment. The IBM i’s architecture descends from the System/38 (1978). • The Unisys ClearPath Dorado’s machine word is 36 bits. Its signed integers use a ones’-complement representation. On these machines, ‘CHAR_BIT == 9’ and ‘INT_MIN == -INT_MAX’. By default ‘UINT_MAX’ is 2^{36} - 2, which does not conform to the C requirement that it be one less than a power of two. Although compiler options can raise ‘UINT_MAX’ to be 2^{36} - 1, this can break system code that uses -0 as a flag value. This platform’s architecture descends from the UNIVAC 1103 (1953). • The Unisys ClearPath Libra’s machine word is 48 bits with a 4-bit tag and a 4-bit data extension. Its ‘unsigned int’ uses the low-order 40 bits of the word, and ‘int’ uses the low-order 41 bits of the word with a signed-magnitude representation. On these machines, ‘INT_MAX == UINT_MAX’, ‘INT_MIN == -INT_MAX’, and ‘sizeof (int) == 6’. This platform’s architecture descends from the Burroughs B5000 (1961). The following platforms are not supported by Gnulib. The cost of supporting them would exceed the benefit because they are rarely used, or poorly documented, or have been supplanted by other platforms, or diverge too much from POSIX, or some combination of these and other factors. Please don’t bother sending us patches for them. • Windows 95/98/ME. • DJGPP and EMX (the 32-bit operating systems running in DOS). • MSDOS (the 16-bit operating system). • Windows Mobile, Symbian OS, iOS. 2.5 Modules =========== Gnulib is divided into modules. Every module implements a single facility. Modules can depend on other modules. A module consists of a number of files and a module description. The files are copied by ‘gnulib-tool’ into the package that will use it, usually verbatim, without changes. Source code files (.h, .c files) reside in the ‘lib/’ subdirectory. Autoconf macro files reside in the ‘m4/’ subdirectory. Build scripts reside in the ‘build-aux/’ subdirectory. The module description contains the list of files; ‘gnulib-tool’ copies these files. It contains the module’s dependencies; ‘gnulib-tool’ installs them as well. It also contains the autoconf macro invocation (usually a single line or nothing at all); ‘gnulib-tool’ ensures this is invoked from the package’s ‘configure.ac’ file. And also a ‘Makefile.am’ snippet; ‘gnulib-tool’ collects these into a ‘Makefile.am’ for the tailored Gnulib part. The module description and include file specification are for documentation purposes; they are combined into ‘MODULES.html’. The module system serves two purposes: 1. It ensures consistency of the used autoconf macros and ‘Makefile.am’ rules with the source code. For example, source code which uses the ‘getopt_long’ function—this is a common way to implement parsing of command line options in a way that complies with the GNU standards—needs the source code (‘lib/getopt.c’ and others), the autoconf macro which detects whether the system’s libc already has this function (in ‘m4/getopt.m4’), and a few ‘Makefile.am’ lines that create the substitute ‘getopt.h’ if not. These three pieces belong together. They cannot be used without each other. The module description and ‘gnulib-tool’ ensure that they are copied altogether into the destination package. 2. It allows for scalability. It is well-known since the inception of the MODULA-2 language around 1978 that dissection into modules with dependencies allows for building large sets of code in a maintainable way. The maintainability comes from the facts that: • Every module has a single purpose; you don’t worry about other parts of the program while creating, reading or modifying the code of a module. • The code you have to read in order to understand a module is limited to the source of the module and the .h files of the modules listed as dependencies. It is for this reason also that we recommend to put the comments describing the functions exported by a module into its .h file. In other words, the module is the elementary unit of code in Gnulib, comparable to a class in object-oriented languages like Java or C#. The module system is the basis of ‘gnulib-tool’. When ‘gnulib-tool’ copies a part of Gnulib into a package, it first compiles a module list, starting with the requested modules and adding all the dependencies, and then collects the files, ‘configure.ac’ snippets and ‘Makefile.am’ snippets. 2.6 Various Kinds of Modules ============================ There are modules of various kinds in Gnulib. For a complete list of the modules, see in ‘MODULES.html’. 2.6.1 Support for ISO C or POSIX functions. ------------------------------------------- When a function is not implemented by a system, the Gnulib module provides an implementation under the same name. Examples are the ‘snprintf’ and ‘readlink’ modules. Similarly, when a function is not correctly implemented by a system, Gnulib provides a replacement. For functions, we use the pattern #if !HAVE_WORKING_FOO # define foo rpl_foo #endif and implement the ‘foo’ function under the name ‘rpl_foo’. This renaming is needed to avoid conflicts at compile time (in case the system header files declare ‘foo’) and at link/run time (because the code making use of ‘foo’ could end up residing in a shared library, and the executable program using this library could be defining ‘foo’ itself). For header files, such as ‘stdint.h’, we provide the substitute only if the system doesn’t provide a correct one. The template of this replacement is distributed in a slightly different name, with ‘.in’ inserted before the ‘.h’ extension, so that on systems which do provide a correct header file the system’s one is used. The modules in this category are supported in C++ mode as well. This means, while the autoconfiguration uses the C compiler, the resulting header files and function substitutes can be used with a matching C++ compiler as well. 2.6.2 Enhancements of ISO C or POSIX functions ---------------------------------------------- These are sometimes POSIX functions with GNU extensions also found in glibc—examples: ‘getopt’, ‘fnmatch’—and often new APIs—for example, for all functions that allocate memory in one way or the other, we have variants which also include the error checking against the out-of-memory condition. 2.6.3 Portable general use facilities ------------------------------------- Examples are a module for copying a file—the portability problems relate to the copying of the file’s modification time, access rights, and extended attributes—or a module for extracting the tail component of a file name—here the portability to native Windows requires a different API than the classical POSIX ‘basename’ function. 2.6.4 Reusable application code ------------------------------- Examples are an error reporting function, a module that allows output of numbers with K/M/G suffixes, or cryptographic facilities. 2.6.5 Object oriented classes ----------------------------- Examples are data structures like ‘list’, or abstract output stream classes that work around the fact that an application cannot implement an stdio ‘FILE’ with its logic. Here, while staying in C, we use implementation techniques like tables of function pointers, known from the C++ language or from the Linux kernel. 2.6.6 Interfaces to external libraries -------------------------------------- Examples are the ‘iconv’ module, which interfaces to the ‘iconv’ facility, regardless whether it is contained in libc or in an external ‘libiconv’. Or the ‘readline’ module, which interfaces to the GNU readline library. 2.6.7 Build / maintenance infrastructure ---------------------------------------- An example is the ‘maintainer-makefile’ module, which provides extra Makefile tags for maintaining a package. 2.7 Collaborative Development ============================= Gnulib is maintained collaboratively. The mailing list is ‘’. Be warned that some people on the list may be very active at some times and unresponsive at other times. Every module has one or more maintainers. While issues are discussed collaboratively on the list, the maintainer of a module nevertheless has a veto right regarding changes in his module. All patches should be posted to the list, regardless whether they are proposed patches or whether they are committed immediately by the maintainer of the particular module. The purpose is not only to inform the other users of the module, but mainly to allow peer review. It is not uncommon that several people contribute comments or spot bugs after a patch was proposed. Conversely, if you are using Gnulib, and a patch is posted that affects one of the modules that your package uses, you have an interest in proofreading the patch. 2.8 Copyright ============= Most modules are under the GPL. Some, mostly modules which can reasonably be used in libraries, are under LGPL. Few modules are under other licenses, such as LGPLv2+, unlimited, or public domain. If the module description file says "GPL", it means "GPLv3+" (GPLv3 or newer, at the licensee’s choice); if it says "LGPL", it means "LGPLv3+" (LGPLv3 or newer, at the licensee’s choice). The source files, more precisely the files in ‘lib/’ and ‘build-aux/’, are under a license compatible with the module’s license. Most often, they are under the same license. But files can be shared among several modules, and in these cases it can happen that a source file is under a weaker license than noted in the module description – namely under the weakest license among the licenses of the modules that contain the file. Different licenses apply to files in special directories: ‘modules/’ Module description files are under this copyright: Copyright © 20XX–20YY Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, in any medium, are permitted without royalty provided the copyright notice and this notice are preserved. ‘m4/’ Autoconf macro files are under this copyright: Copyright © 20XX–20YY Free Software Foundation, Inc. This file is free software; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. ‘tests/’ If a license statement is not present in a test module, the test files are under GPL. Even if the corresponding source module is under LGPL, this is not a problem, since compiled tests are not installed by “make install”. ‘doc/’ Documentation files are under this copyright: Copyright © 2004–20YY Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is at . If you want to use some Gnulib modules under LGPL, you can do so by passing the option ‘--lgpl’ to ‘gnulib-tool’. This will ensure that all imported modules can be used under the LGPL license. Similarly, if you want some Gnulib modules under LGPLv2+ (Lesser GPL version 2.1 or newer), you can do so by passing the option ‘--lgpl=2’ to ‘gnulib-tool’. Keep in mind that when you submit patches to files in Gnulib, you should license them under a compatible license. This means that sometimes the contribution will have to be LGPL, if the original file is available under LGPL. You can find out about it by looking at the license header of the file. 2.9 Steady Development ====================== Gnulib modules are continually adapted, to match new practices, to be consistent with newly added modules, or simply as a response to build failure reports. If you are willing to report an occasional regression, we recommend to use the newest version from git always, except in periods of major changes. Most Gnulib users do this. 2.10 Openness ============= Gnulib is open in the sense that we gladly accept contributions if they are generally useful, well engineered, and if the contributors have signed the obligatory papers with the FSF. The module system is open in the sense that a package using Gnulib can 1. locally patch or override files in Gnulib, 2. locally add modules that are treated like Gnulib modules by ‘gnulib-tool’. This is achieved by the ‘--local-dir’ option of ‘gnulib-tool’ (*note Extending Gnulib::). 3 Invoking gnulib-tool ********************** The ‘gnulib-tool’ command is the recommended way to import Gnulib modules. It is possible to borrow Gnulib modules in a package without using ‘gnulib-tool’, relying only on the meta-information stored in the ‘modules/*’ files, but with a growing number of modules this becomes tedious. ‘gnulib-tool’ simplifies the management of source files, ‘Makefile.am’s and ‘configure.ac’ in packages incorporating Gnulib modules. ‘gnulib-tool’ is not installed in a standard directory that is contained in the ‘PATH’ variable. It needs to be run directly in the directory that contains the Gnulib source code. You can do this either by specifying the absolute filename of ‘gnulib-tool’, or you can also use a symbolic link from a place inside your ‘PATH’ to the ‘gnulib-tool’ file of your preferred and most up-to-date Gnulib checkout, like this: $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool Run ‘gnulib-tool --help’ for information. To get familiar with ‘gnulib-tool’ without affecting your sources, you can also try some commands with the option ‘--dry-run’; then ‘gnulib-tool’ will only report which actions it would perform in a real run without changing anything. 3.1 Finding modules =================== There are four ways of finding the names of Gnulib modules that you can use in your package: • You have the complete module list, sorted according to categories, in . • If you are looking for POSIX function replacements that you don’t know about yet, follow the procedure described in section *note Finding POSIX substitutes::. • If you are looking for a particular POSIX header or function replacement, look in the chapters *note Header File Substitutes:: and *note Function Substitutes::. For headers and functions that are provided by Glibc but not standardized by POSIX, look in the chapters *note Glibc Header File Substitutes:: and *note Glibc Function Substitutes::. • If you have already found the source file in Gnulib and are looking for the module that contains this source file, you can use the command ‘gnulib-tool --find FILENAME’. 3.2 Initial import ================== Gnulib assumes that your project uses Autoconf. When using Gnulib, you will need to have Autoconf among your build tools. Gnulib also assumes that your project’s ‘configure.ac’ contains the line AC_CONFIG_HEADERS([config.h]) The ‘config.h’ file gets generated with platform dependent C macro definitions, and the source files include it (see *note Source changes::). Unless you use ‘gnulib-tool’’s ‘--gnu-make’ option, Gnulib also assumes that your project uses Automake at least in a subdirectory of your project. While the use of Automake in your project’s top level directory is an easy way to fulfil the Makefile conventions of the GNU coding standards, Gnulib does not require it. Invoking ‘gnulib-tool --import’ will copy source files, create a ‘Makefile.am’ to build them, generate a file ‘gnulib-comp.m4’ with Autoconf M4 macro declarations used by ‘configure.ac’, and generate a file ‘gnulib-cache.m4’ containing the cached specification of how Gnulib is used. Our example will be a library that uses Autoconf, Automake and Libtool. It calls ‘strdup’, and you wish to use gnulib to make the package portable to C99 and C11 (which don’t have ‘strdup’). ~/src/libfoo$ gnulib-tool --import strdup Module list with included dependencies: absolute-header extensions strdup string File list: lib/dummy.c lib/strdup.c lib/string.in.h m4/absolute-header.m4 m4/extensions.m4 m4/gnulib-common.m4 m4/strdup.m4 m4/string_h.m4 Creating directory ./lib Creating directory ./m4 Copying file lib/dummy.c Copying file lib/strdup.c Copying file lib/string.in.h Copying file m4/absolute-header.m4 Copying file m4/extensions.m4 Copying file m4/gnulib-common.m4 Copying file m4/gnulib-tool.m4 Copying file m4/strdup.m4 Copying file m4/string_h.m4 Creating lib/Makefile.am Creating m4/gnulib-cache.m4 Creating m4/gnulib-comp.m4 Finished. You may need to add #include directives for the following .h files. #include Don't forget to - add "lib/Makefile" to AC_CONFIG_FILES in ./configure.ac, - mention "lib" in SUBDIRS in Makefile.am, - mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am, or add an AC_CONFIG_MACRO_DIRS([m4]) invocation in ./configure.ac, - invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC, - invoke gl_INIT in ./configure.ac. ~/src/libfoo$ By default, the source code is copied into ‘lib/’ and the M4 macros in ‘m4/’. You can override these paths by using ‘--source-base=DIRECTORY’ and ‘--m4-base=DIRECTORY’. Some modules also provide other files necessary for building. These files are copied into the directory specified by ‘AC_CONFIG_AUX_DIR’ in ‘configure.ac’ or by the ‘--aux-dir=DIRECTORY’ option. If neither is specified, the current directory is assumed. ‘gnulib-tool’ can make symbolic links instead of copying the source files. The option to specify for this is ‘--symlink’, or ‘-s’ for short. This can be useful to save a few kilobytes of disk space. But it is likely to introduce bugs when ‘gnulib’ is updated; it is more reliable to use ‘gnulib-tool --update’ (see below) to update to newer versions of ‘gnulib’. Furthermore it requires extra effort to create self-contained tarballs, and it may disturb some mechanism the maintainer applies to the sources. For these reasons, this option is generally discouraged. ‘gnulib-tool’ will overwrite any preexisting files, in particular ‘Makefile.am’. It is also possible to separate the generated ‘Makefile.am’ content (for building the gnulib library) into a separate file, say ‘gnulib.mk’, that can be included by your handwritten ‘Makefile.am’, but this is a more advanced use of ‘gnulib-tool’. Consequently, it is a good idea to choose directories that are not already used by your projects, to separate gnulib imported files from your own files. This approach is also useful if you want to avoid conflicts between other tools (e.g., ‘gettextize’ that also copy M4 files into your package. Simon Josefsson successfully uses a source base of ‘gl/’, and a M4 base of ‘gl/m4/’, in several packages. After the ‘--import’ option on the command line comes the list of Gnulib modules that you want to incorporate in your package. The names of the modules coincide with the filenames in Gnulib’s ‘modules/’ directory. Some Gnulib modules depend on other Gnulib modules. ‘gnulib-tool’ will automatically add the needed modules as well; you need not list them explicitly. ‘gnulib-tool’ will also memorize which dependent modules it has added, so that when someday a dependency is dropped, the implicitly added module is dropped as well (unless you have explicitly requested that module). If you want to cut a dependency, i.e., not add a module although one of your requested modules depends on it, you may use the option ‘--avoid=MODULE’ to do so. Multiple uses of this option are possible. Of course, you will then need to implement the same interface as the removed module. A few manual steps are required to finish the initial import. ‘gnulib-tool’ printed a summary of these steps. First, you must ensure Autoconf can find the macro definitions in ‘gnulib-comp.m4’. Use the ‘ACLOCAL_AMFLAGS’ specifier in your top-level ‘Makefile.am’ file, as in: ACLOCAL_AMFLAGS = -I m4 Alternatively, add an ‘AC_CONFIG_MACRO_DIRS’ invocation in your ‘configure.ac’ file, as in: AC_CONFIG_MACRO_DIRS([m4]) You are now ready to call the M4 macros in ‘gnulib-comp.m4’ from ‘configure.ac’. The macro ‘gl_EARLY’ must be called as soon as possible after verifying that the C compiler is working. Typically, this is immediately after ‘AC_PROG_CC’, as in: ... AC_PROG_CC gl_EARLY ... The core part of the gnulib checks are done by the macro ‘gl_INIT’. Place it further down in the file, typically where you normally check for header files or functions. It must come after other checks which may affect the compiler invocation, such as ‘AC_MINIX’. For example: ... # For gnulib. gl_INIT ... ‘gl_INIT’ will in turn call the macros related with the gnulib functions, be it specific gnulib macros, like ‘gl_FUNC_ALLOCA’ or Autoconf or Automake macros like ‘AC_FUNC_ALLOCA’ or ‘AM_FUNC_GETLINE’. So there is no need to call those macros yourself when you use the corresponding gnulib modules. You must also make sure that the gnulib library is built. Add the ‘Makefile’ in the gnulib source base directory to ‘AC_CONFIG_FILES’, as in: AC_CONFIG_FILES(... lib/Makefile ...) You must also make sure that ‘make’ will recurse into the gnulib directory. To achieve this, add the gnulib source base directory to a ‘SUBDIRS’ Makefile.am statement, as in: SUBDIRS = lib or if you, more likely, already have a few entries in ‘SUBDIRS’, you can add something like: SUBDIRS += lib Finally, you have to add compiler and linker flags in the appropriate source directories, so that you can make use of the gnulib library. Since some modules (‘getopt’, for example) may copy files into the build directory, ‘top_builddir/lib’ is needed as well as ‘top_srcdir/lib’. For example: ... AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib ... LDADD = lib/libgnu.a ... Don’t forget to ‘#include’ the various header files. In this example, you would need to make sure that ‘#include ’ is evaluated when compiling all source code files, that want to make use of ‘strdup’. In the usual case where Autoconf is creating a ‘config.h’ file, you should include ‘config.h’ first, before any other include file. That way, for example, if ‘config.h’ defines ‘restrict’ to be the empty string on a non-C99 host, or a macro like ‘_FILE_OFFSET_BITS’ that affects the layout of data structures, the definition is consistent for all include files. Also, on some platforms macros like ‘_FILE_OFFSET_BITS’ and ‘_GNU_SOURCE’ may be ineffective, or may have only a limited effect, if defined after the first system header file is included. Finally, note that you cannot use ‘AC_LIBOBJ’ or ‘AC_REPLACE_FUNCS’ in your ‘configure.ac’ and expect the resulting object files to be automatically added to ‘lib/libgnu.a’. This is because your ‘AC_LIBOBJ’ and ‘AC_REPLACE_FUNCS’ invocations from ‘configure.ac’ augment a variable ‘@LIBOBJS@’ (and/or ‘@LTLIBOBJS@’ if using Libtool), whereas ‘lib/libgnu.a’ is built from the contents of a different variable, usually ‘@gl_LIBOBJS@’ (or ‘@gl_LTLIBOBJS@’ if using Libtool). 3.3 Modified imports ==================== You can at any moment decide to use Gnulib differently than the last time. There are two ways to change how Gnulib is used. Which one you’ll use, depends on where you keep track of options and module names that you pass to ‘gnulib-tool’. • If you store the options and module names in a file under your own control, such as ‘autogen.sh’, ‘bootstrap’, ‘bootstrap.conf’, or similar, simply invoke ‘gnulib-tool’ again, with modified options and more or fewer module names. • ‘gnulib-tool’ remembers which modules were used last time. If you want to rely on ‘gnulib-tool’’s own memory of the last used options and module names, you can use the commands ‘gnulib-tool --add-import’ and ‘gnulib-tool --remove-import’. So, if you only want to use more Gnulib modules, simply invoke ‘gnulib-tool --add-import NEW-MODULES’. The list of modules that you pass after ‘--add-import’ is _added_ to the previous list of modules. Similarly, if you want to use fewer Gnulib modules, simply invoke ‘gnulib-tool --remove-import UNNEEDED-MODULES’. The list of modules that you pass after ‘--remove-import’ is _removed_ from the previous list of modules. Note that if a module is then still needed as dependency of other modules, it will be used nevertheless. If you want to _really_ not use a module any more, regardless of whether other modules may need it, you need to use the ‘--avoid’ option. For other changes, such as different choices of ‘--lib’, ‘--source-base’ or ‘--aux-dir’, the normal way is to modify manually the file ‘gnulib-cache.m4’ in the M4 macros directory, then launch ‘gnulib-tool --add-import’. The only change for which this doesn’t work is a change of the ‘--m4-base’ directory. Because, when you pass a different value of ‘--m4-base’, ‘gnulib-tool’ will not find the previous ‘gnulib-cache.m4’ file any more. A possible solution is to manually copy the ‘gnulib-cache.m4’ into the new M4 macro directory. In the ‘gnulib-cache.m4’ file, the macros have the following meaning: ‘gl_LOCAL_DIR’ The argument is a colon separated list of local directories where ‘gnulib-tool’ will search before looking at gnulib’s directory. Corresponds to the ‘--local-dir’ command line argument. ‘gl_MODULES’ The argument is a space separated list of the requested modules, not including dependencies. ‘gl_WITH_OBSOLETE’ The presence of this macro corresponds to the ‘--with-obsolete’ command line argument. It takes no arguments. ‘gl_WITH_CXX_TESTS’ The presence of this macro corresponds to the ‘--with-c++-tests’ command line argument and to the absence of the ‘--without-c++-tests’ command line argument. It takes no arguments. ‘gl_WITH_LONGRUNNING_TESTS’ The presence of this macro corresponds to the ‘--with-longrunning-tests’ command line argument and to the absence of the ‘--without-longrunning-tests’ command line argument. It takes no arguments. ‘gl_WITH_PRIVILEGED_TESTS’ The presence of this macro corresponds to the ‘--with-longrunning-tests’ command line argument and to the absence of the ‘--without-longrunning-tests’ command line argument. It takes no arguments. ‘gl_WITH_UNPORTABLE_TESTS’ The presence of this macro corresponds to the ‘--with-unportable-tests’ command line argument and to the absence of the ‘--without-unportable-tests’ command line argument. It takes no arguments. ‘gl_WITH_ALL_TESTS’ The presence of this macro corresponds to the ‘--with-all-tests’ command line argument. It takes no arguments. ‘gl_AVOID’ The argument is a space separated list of modules that should not be used, even if they occur as dependencies. Corresponds to the ‘--avoid’ command line argument. ‘gl_SOURCE_BASE’ The argument is the relative file name of the directory containing the gnulib source files (mostly *.c and *.h files). Corresponds to the ‘--source-base’ command line argument. ‘gl_M4_BASE’ The argument is the relative file name of the directory containing the gnulib M4 macros (*.m4 files). Corresponds to the ‘--m4-base’ command line argument. ‘gl_PO_BASE’ The argument is the relative file name of the directory containing *.po files. Corresponds to the ‘--po-base’ command line argument. ‘gl_DOC_BASE’ The argument is the relative file name of the directory containing documentation files. Corresponds to the ‘--doc-base’ command line argument. ‘gl_TESTS_BASE’ The argument is the relative file name of the directory containing the gnulib unit test files. Corresponds to the ‘--tests-base’ command line argument. ‘gl_WITH_TESTS’ The presence of this macro corresponds to the ‘--with-tests’ command line argument. It takes no arguments. ‘gl_LIB’ The argument is the name of the library to be created. Corresponds to the ‘--lib’ command line argument. ‘gl_LGPL’ The presence of this macro without arguments corresponds to the ‘--lgpl’ command line argument. The presence of this macro with an argument (whose value must be 2 or 3) corresponds to the ‘--lgpl=ARG’ command line argument. ‘gl_MAKEFILE_NAME’ The argument is the name of the makefile in the source-base and tests-base directories. Corresponds to the ‘--makefile-name’ command line argument. ‘gl_TESTS_MAKEFILE_NAME’ The argument is the name of the makefile in the tests-base directory. Corresponds to the ‘--tests-makefile-name’ command line argument. ‘gl_AUTOMAKE_SUBDIR’ The presence of this macro corresponds to the ‘--automake-subdir’ command line argument. It takes no arguments. ‘gl_CONDITIONAL_DEPENDENCIES’ The presence of this macro corresponds to the ‘--conditional-dependencies’ command line argument and to the absence of the ‘--no-conditional-dependencies’ command line argument. It takes no arguments. ‘gl_LIBTOOL’ The presence of this macro corresponds to the ‘--libtool’ command line argument and to the absence of the ‘--no-libtool’ command line argument. It takes no arguments. ‘gl_MACRO_PREFIX’ The argument is the prefix to use for macros in the ‘gnulib-comp.m4’ file. Corresponds to the ‘--macro-prefix’ command line argument. ‘gl_PO_DOMAIN’ The argument is the prefix of the i18n domain, typically matching the package name. Corresponds to the ‘--po-domain’ command line argument. ‘gl_WITNESS_C_MACRO’ The argument is the C macro that is defined when the sources in this directory are compiled or used. Corresponds to the ‘--witness-c-macro’ command line argument. ‘gl_VC_FILES’ The argument to this macro is ‘true’ or ‘false’. The former corresponds to the ‘--vc-files’ command line argument and the latter corresponds to the ‘--no-vc-files’ command line argument. 3.4 Simple update ================= When you want to update to a more recent version of Gnulib, without changing the list of modules or other parameters, a simple call does it: $ gnulib-tool --add-import This will create, update or remove files, as needed. Note: From time to time, changes are made in Gnulib that are not backward compatible. When updating to a more recent Gnulib, you should consult Gnulib’s ‘NEWS’ file to check whether the incompatible changes affect your project. 3.5 Changing your sources for use with Gnulib ============================================= When you use Gnulib, you need to make some small changes to your source code base. 3.5.1 -I options ---------------- Gnulib contains some header file overrides. This means that when building on systems with deficient header files in ‘/usr/include/’, it may create files named ‘string.h’, ‘stdlib.h’, ‘stdint.h’ or similar in the build directory. In the other source directories of your package you will usually pass ‘-I’ options to the compiler, so that these Gnulib substitutes are visible and take precedence over the files in ‘/usr/include/’. 3.5.2 Include ------------------------ These Gnulib substitute header files rely on ‘’ being already included. Furthermore ‘’ must be the first include in every compilation unit. This means that to _all your source files_ and likely also to _all your tests source files_ you need to add an ‘#include ’ at the top. Which source files are affected? Exactly those whose compilation includes a ‘-I’ option that refers to the Gnulib library directory. This is annoying, but inevitable: On many systems, ‘’ is used to set system dependent flags (such as ‘_GNU_SOURCE’ on GNU systems), and these flags have no effect after any system header file has been included. 3.5.3 Style of #include statements ---------------------------------- When including including specific header files, you need to use the ‘#include <...>’ syntax, not the ‘#include "..."’ syntax. This is true for the following POSIX or ISO C standardized header files: ‘arpa/inet.h’ ‘assert.h’ ‘ctype.h’ ‘dirent.h’ ‘endian.h’ ‘errno.h’ ‘fcntl.h’ ‘fenv.h’ ‘float.h’ ‘fnmatch.h’ ‘glob.h’ ‘iconv.h’ ‘inttypes.h’ ‘langinfo.h’ ‘limits.h’ ‘locale.h’ ‘math.h’ ‘monetary.h’ ‘netdb.h’ ‘net/if.h’ ‘netinet/in.h’ ‘poll.h’ ‘pthread.h’ ‘sched.h’ ‘search.h’ ‘signal.h’ ‘spawn.h’ ‘stdalign.h’ ‘stdarg.h’ ‘stdbit.h’ ‘stddef.h’ ‘stdint.h’ ‘stdio.h’ ‘stdlib.h’ ‘string.h’ ‘strings.h’ ‘sys/msg.h’ ‘sys/resource.h’ ‘sys/select.h’ ‘sys/sem.h’ ‘sys/shm.h’ ‘sys/socket.h’ ‘sys/stat.h’ ‘sys/time.h’ ‘sys/times.h’ ‘sys/types.h’ ‘sys/uio.h’ ‘sys/utsname.h’ ‘sys/wait.h’ ‘termios.h’ ‘threads.h’ ‘time.h’ ‘uchar.h’ ‘unistd.h’ ‘utime.h’ ‘wchar.h’ ‘wctype.h’ as well as for the following header files that exist in the GNU C library but are not standardized: ‘alloca.h’ ‘byteswap.h’ ‘error.h’ ‘getopt.h’ ‘malloc.h’ ‘omp.h’ ‘pty.h’ ‘selinux/selinux.h’ ‘sys/file.h’ ‘sys/ioctl.h’ ‘sys/random.h’ ‘sysexits.h’ ‘utmp.h’ The reason for this requirement is that for these header files, the Gnulib override uses ‘#include_next’ to include the system-provided header of the same name, and ‘#include_next’ may not work right with the ‘#include "..."’ syntax. 3.6 Changing your link commands for use with Gnulib =================================================== When you use Gnulib, you need to augment the set of libraries against which your programs and libraries are linked. This is done by augmenting the Automake variable ‘LDADD’ (for all programs) or ‘PROG_LDADD’ (for a single program ‘PROG’) or ‘LIBRARY_la_LIBADD’ (for a single library ‘LIBRARY.la’). What do you need to add to this Automake variable? 1. The reference to the Gnulib library. In the example of section *note Initial import::, this would be ‘lib/libgnu.a’ for source in the top-level directory, or ‘../lib/libgnu.a’ for source in a sibling directory of ‘lib/’. 2. References to additional libraries, brought in by some of the Gnulib modules that you use (directly or indirectly). The complete list of such libraries is printed when you invoke ‘gnulib-tool’. Alternatively, you can retrieve the set of additional libraries required by a specific Gnulib module by running ./gnulib-tool --extract-recursive-link-directive MODULE Beware: By looking into the module description file ‘modules/MODULE’ or by running ./gnulib-tool --extract-link-directive MODULE you would miss the link dependencies of indirectly used modules. 3.7 Finding recommended ISO C and POSIX function substitutes ============================================================ Gnulib contains a wealth of portability workarounds for ISO C and POSIX functions. They are listed in detail in the chapter *note Function Substitutes::. If you want to know which function substitutes are recommended for your package, you can search your source code for ISO C and POSIX functions that it uses and read the corresponding sections of said documentation chapter. But this is a tedious task. Here is an alternative approach that makes this task easier. 1. Add the Gnulib module ‘posixcheck’ to the Gnulib imports of your package, as described earlier in this chapter. 2. Do a ‘make distclean’ if you previously built in the top-level directory. Then regenerate the Autotools-generated parts of the package. 3. On a glibc system, build your package. Pay attention to the compiler warnings. Warnings are generated for uses of ISO C and POSIX functions that have portability problems or other important pitfalls and for which you have not yet imported the corresponding Gnulib module. If you get, say, a warning “warning: call to ’close’ declared with attribute warning: close does not portably work on sockets - use gnulib module close for portability”, put ‘close’ on your list of modules to import. 4. Add the modules you noted to the Gnulib imports of your package. 5. Optionally, you can do the same steps again, and make sure that there are no warnings left except those that you want to intentionally ignore. 6. Finally, remove the Gnulib module ‘posixcheck’ from the Gnulib imports, and run ‘make distclean’. 3.8 Modifying the build rules of a Gnulib import directory ========================================================== In some cases, you may want to set additional compiler options for use within the Gnulib import directory. For example, the ‘relocatable’ module operates better if you define the C macros ‘ENABLE_COSTLY_RELOCATABLE’ and ‘INSTALLDIR’ during its compilation. There are two ways to do so: Use of the ‘gnulib-tool’ option ‘--makefile-name’, and a kitchen-sink module. With the ‘gnulib-tool’ option ‘--makefile-name’, you are telling ‘gnulib-tool’ to generate an includable ‘Makefile.am’ portion, rather than a self-contained ‘Makefile.am’. For example, when you use ‘--makefile-name=Makefile.gnulib’, ‘gnulib-tool’ will generate ‘Makefile.gnulib’, and you will provide a hand-written ‘Makefile.am’ that includes ‘Makefile.gnulib’ through a line such as include Makefile.gnulib Before this include, you need to initialize this set of ‘Makefile.am’ variables: • ‘AUTOMAKE_OPTIONS’ • ‘SUBDIRS’ • ‘noinst_HEADERS’ • ‘noinst_LIBRARIES’ • ‘noinst_LTLIBRARIES’ • ‘pkgdata_DATA’ (only with Automake ≥ 1.11.4) • ‘EXTRA_DIST’ • ‘BUILT_SOURCES’ • ‘SUFFIXES’ • ‘MOSTLYCLEANFILES’ • ‘MOSTLYCLEANDIRS’ • ‘CLEANFILES’ • ‘DISTCLEANFILES’ • ‘MAINTAINERCLEANFILES’ • ‘AM_CPPFLAGS’ • ‘AM_CFLAGS’ ‘AUTOMAKE_OPTIONS’ should be initialized as described in *note Changing Automake’s Behavior: (automake)Options. The other variables can be initialized to empty. However, you will most likely want to initialize some of them with non-empty values, in order to achieve the desired customization. The other approach, the kitchen-sink module, is more advanced. See chapter *note Extending Gnulib::. 3.9 Building directly from the top-level directory ================================================== By default, the Gnulib import directory will contain a generated ‘Makefile.am’ file. After configuring, this produces a generated ‘Makefile’ in this directory. As a consequence, the build from the top-level directory will use a recursive ‘make’ invocation for this directory. Some people prefer a build system where the ‘Makefile’ in the top-level directory directly builds the artifacts in the subdirectories, without an intermediate ‘make’ invocation. This is called “non-recursive make” and is supported by Automake. For more details, see . Gnulib supports this flavour of build system too. To use it, pass two options to ‘gnulib-tool’: ‘--makefile-name’ and ‘--automake-subdir’. With the ‘gnulib-tool’ option ‘--makefile-name’, you are telling ‘gnulib-tool’ to generate an includable ‘Makefile.am’ portion in the Gnulib import directory, rather than a self-contained ‘Makefile.am’. For example, when you use ‘--makefile-name=Makefile.gnulib’, ‘gnulib-tool’ will generate ‘Makefile.gnulib’. With the option ‘--automake-subdir’, you are telling ‘gnulib-tool’ that you will include the generated file from the ‘Makefile.am’ in the top-level directory, rather than from a ‘Makefile.am’ in the same directory. For example, the top-level ‘Makefile.am’ might contain this directive: include lib/Makefile.gnulib The option ‘--automake-subdir’ is also supported in combination with ‘--with-tests’ (*note Unit tests::). Note that in this case, however, the generated unit tests directory will contains a ‘Makefile.am’ and thus use a recursive ‘make’ invocation. This is not a problem, since the built artifacts of your package have no dependencies towards the Gnulib unit tests, nor vice versa. 3.10 Using Gnulib for both a library and a program ================================================== Your project might build both a library and some accompanying programs in the same source tree. In that case you might want to use different modules for the library than for the programs. Typically the programs might want to make use of ‘getopt-posix’ or ‘version-etc’, while the library wants to stay clear of these modules for technical or licensing reasons. Let’s assume that your project contains a ‘lib’ directory where the source of the library resides and a ‘src’ directory for the sources of the programs as follows. . |-- configure.ac |-- lib | |-- foo.c | `-- Makefile.am |-- Makefile.am `-- src |-- bar.c `-- Makefile.am You can now add two instances of Gnulib to your project in separate source trees: ~/src/libfoo$ gnulib-tool --import --lib=libgnu --source-base=gnulib \ --m4-base=gnulib/m4 --macro-prefix=gl strndup ~/src/libfoo$ gnulib-tool --import --lib=libgnutools \ --source-base=src/gnulib --m4-base=src/gnulib/m4 \ --macro-prefix=gl_tools getopt-gnu The first one will import the module ‘strndup’ in ‘gnulib’ and the second one will import ‘getopt-gnu’ in ‘src/gnulib’ and you will end up with the following source tree (many files omitted in the interest of brevity): . |-- configure.ac |-- gnulib | |-- m4 | |-- strndup.c |-- lib | |-- foo.c | `-- Makefile.am |-- Makefile.am `-- src |-- bar.c |-- gnulib | |-- getopt.c | |-- getopt.in.h | |-- m4 `-- Makefile.am As discussed in *note Unit tests::, you may not use ‘--with-tests’ for this project since the ‘configure.ac’ is shared. Integration with your code is basically the same as outlined in *note Initial import:: with the one exception that you have to add both the macro ‘gl_EARLY’ and the macro ‘gl_tools_EARLY’ to your ‘configure.ac’ (and of course also both macros ‘gl_INIT’ and ‘gl_tools_INIT’). Obviously the name of the second macro is dependent on the value of the ‘--macro-prefix’ option in your ‘gnulib-tool’ invocation. ... AC_PROG_CC gl_EARLY gl_tools_EARLY ... # For gnulib. gl_INIT gl_tools_INIT ... Also as outlined in *note Initial import:: you will have to add compiler and linker flags. For the library you might have to add something along the line of the following to your ‘Makefile.am’: ... AM_CPPFLAGS = -I$(top_srcdir)/gnulib -I$(top_builddir)/gnulib ... libfoo_la_LIBADD = $(top_builddir)/gnulib/libgnu.la ... Correspondingly for the programs you will have to add something like this: ... AM_CPPFLAGS = -I$(top_srcdir)/src/gnulib -I$(top_builddir)/src/gnulib ... LDADD = $(top_builddir)/src/gnulib/libgnutools.la ... The name of the library that you have pass in the linker option depends on the ‘--lib’ option in ‘gnulib-tool’ invocation. 3.11 Caveat: ‘gettextize’ and ‘autopoint’ users =============================================== The programs ‘gettextize’ and ‘autopoint’, part of GNU ‘gettext’, import or update the internationalization infrastructure. Some of this infrastructure, namely ca. 20 Autoconf macro files and the ‘config.rpath’ file, is also contained in Gnulib and may be imported by ‘gnulib-tool’. The use of ‘gettextize’ or ‘autopoint’ will therefore overwrite some of the files that ‘gnulib-tool’ has imported, and vice versa. Avoiding to use ‘gettextize’ (manually, as package maintainer) or ‘autopoint’ (as part of a script like ‘autoreconf’ or ‘autogen.sh’) is not the solution: These programs also import the infrastructure in the ‘po/’ and optionally in the ‘intl/’ directory. The copies of the conflicting files in Gnulib are more up-to-date than the copies brought in by ‘gettextize’ and ‘autopoint’. When a new ‘gettext’ release is made, the copies of the files in Gnulib will be updated immediately. The choice of which version of gettext to require depends on the needs of your package. For a package that wants to comply to GNU Coding Standards, the steps are: 1. When you run ‘gettextize’, always use the ‘gettextize’ from the matching GNU gettext release. For the most recent Gnulib checkout, this is the newest release found on . For an older Gnulib snapshot, it is the release that was the most recent release at the time the Gnulib snapshot was taken. 2. After running ‘gettextize’, invoke ‘gnulib-tool’ and import the ‘gettext’ module. Also, copy the latest version of gnulib’s ‘build-aux/po/Makefile.in.in’ to your ‘po/’ directory (this is done for you if you use gnulib’s ‘autogen.sh’ script). 3. If you get an error message like ‘*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version ... but the Autoconf macros are from gettext version ...’, it means that a new GNU gettext release was made, and its Autoconf macros were integrated into Gnulib and now mismatch the ‘po/’ infrastructure. In this case, fetch and install the new GNU gettext release and run ‘gettextize’ followed by ‘gnulib-tool’. On the other hand, if your package is not as concerned with compliance to the latest standards, but instead favors development on stable environments, the steps are: 1. Determine the oldest version of ‘gettext’ that you intend to support during development (at this time, gnulib recommends going no older than version 0.17). Run ‘autopoint’ (not ‘gettextize’) to copy infrastructure into place (newer versions of gettext will install the older infrastructure that you requested). 2. Invoke ‘gnulib-tool’, and import the ‘gettext-h’ module. Regardless of which approach you used to get the infrastructure in place, the following steps must then be used to preserve that infrastructure (gnulib’s ‘autogen.sh’ script follows these rules): 1. When a script of yours run ‘autopoint’, invoke ‘gnulib-tool’ afterwards. 2. When you invoke ‘autoreconf’ after ‘gnulib-tool’, make sure to not invoke ‘autopoint’ a second time, by setting the ‘AUTOPOINT’ environment variable, like this: $ env AUTOPOINT=true autoreconf --install 3.12 Handling Gnulib’s own message translations =============================================== Gnulib provides some functions that emit translatable messages using GNU ‘gettext’. The ‘gnulib’ domain at the Translation Project (https://translationproject.org/) collects translations of these messages, which you should incorporate into your own programs. There are two basic ways to achieve this. The first, and older, method is to list all the source files you use from Gnulib in your own ‘po/POTFILES.in’ file. This will cause all the relevant translatable strings to be included in your POT file. When you send this POT file to the Translation Project, translators will normally fill in the translations of the Gnulib strings from their “translation memory”, and send you back updated PO files. However, this process is error-prone: you might forget to list some source files, or the translator might not be using a translation memory and provide a different translation than another translator, or the translation might not be kept in sync between Gnulib and your package. It is also slow and causes substantial extra work, because a human translator must be in the loop for each language and you will need to incorporate their work on request. For these reasons, a new method was designed and is now recommended. If you pass the ‘--po-base=DIRECTORY’ and ‘--po-domain=DOMAIN’ options to ‘gnulib-tool’, then ‘gnulib-tool’ will create a separate directory with its own ‘POTFILES.in’, and fetch current translations directly from the Translation Project (using ‘rsync’ or ‘wget’, whichever is available). The POT file in this directory will be called ‘DOMAIN-gnulib.pot’, depending on the DOMAIN you gave to the ‘--po-domain’ option (typically the same as the package name). This causes these translations to reside in a separate message domain, so that they do not clash either with the translations for the main part of your package nor with those of other packages on the system that use possibly different versions of Gnulib. When you use these options, the functions in Gnulib are built in such a way that they will always use this domain regardless of the default domain set by ‘textdomain’. In order to use this method, you must—in each program that might use Gnulib code—add an extra line to the part of the program that initializes locale-dependent behavior. Where you would normally write something like: setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); you should add an additional ‘bindtextdomain’ call to inform gettext of where the MO files for the extra message domain may be found: bindtextdomain (PACKAGE "-gnulib", LOCALEDIR); (This example assumes that the DOMAIN that you specified to ‘gnulib-tool’ is the same as the value of the ‘PACKAGE’ preprocessor macro.) Since you do not change the ‘textdomain’ call, the default message domain for your program remains the same and your own use of ‘gettext’ functions will not be affected. 3.13 Integration with Version Control Systems ============================================= If a project stores its source files in a version control system (VCS), such as CVS, Subversion, or Git, one needs to decide which files to commit. In principle, all files created by ‘gnulib-tool’, except ‘gnulib-cache.m4’, can be treated like generated source files, like for example a ‘parser.c’ file generated from ‘parser.y’. Alternatively, they can be considered source files and updated manually. Here are the three different approaches in common use. Each has its place, and you should use whichever best suits your particular project and development methods. 1. In projects which commit all source files, whether generated or not, into their VCS, the ‘gnulib-tool’ generated files should all be committed. In this case, you should pass the option ‘--no-vc-files’ to ‘gnulib-tool’, which avoids alteration of VCS-related files such as ‘.gitignore’. Gnulib also contains files generated by ‘make’ (and removed by ‘make clean’), using information determined by ‘configure’. For a Gnulib source file of the form ‘lib/foo.in.h’, the corresponding ‘lib/foo.h’ is such a ‘make’-generated file. These should _not_ be checked into the VCS, but instead added to ‘.gitignore’ or equivalent. 2. In projects which customarily omit from their VCS all files that are generated from other source files, none of these files and directories are added into the VCS. As described in *note Modified imports::, there are two ways to keep track of options and module names that are passed to ‘gnulib-tool’. The command for restoring the omitted files depends on it: • If they are stored in a file other than ‘gnulib-cache.m4’, such as ‘autogen.sh’, ‘bootstrap’, ‘bootstrap.conf’, or similar, the restoration command is the entire ‘gnulib-tool ... --import ...’ invocation with all options and module names. • If the project relies on ‘gnulib-tool’’s memory of the last used options and module names, then the file ‘gnulib-cache.m4’ in the M4 macros directory must be added to the VCS, and the restoration command is: $ gnulib-tool --update The ‘--update’ option operates much like the ‘--add-import’ option, but it does not offer the possibility to change the way Gnulib is used. Also it does not report in the ChangeLogs the files that it had to add because they were missing. Most packages nowadays use the first among these two approaches. Over time, three ways of handling version control have evolved. In the cases (A) and (B), a “git submodule” is used to reference the precise commit of the gnulib repository, so that each developer running ‘./bootstrap --pull’ or ‘autopull.sh’ will get the same version of all gnulib-provided files. The alternative is to always follow the newest Gnulib automatically. Note that this can cause breakages at unexpected moments, namely when a broken commit is pushed in Gnulib. It does not happen often, but it does happen. • (A) In this approach, the developers use a git submodule manually. The location of the submodule can be chosen to fit the package’s needs; here’s how to initially create the submodule in the directory ‘gnulib’: $ git submodule add -- https://git.savannah.gnu.org/git/gnulib.git gnulib Thereafter, the developer will run this command to update the submodule to the recorded checkout level: $ git submodule update --init gnulib Use this sequence to update to a newer version of gnulib: $ git submodule update --remote gnulib $ git add gnulib $ ./bootstrap --bootstrap-sync If multiple submodules are used, the following may be useful: $ git config alias.syncsub "submodule foreach git pull origin master" $ git syncsub • (B) In this approach, the ‘build-aux/bootstrap’ or ‘autopull.sh’ program (see *note Developer tools::) is used to aid a developer in using this setup. You copy this program (and if it’s ‘autopull.sh’, its companion files) into your package and place the copy or copies under version control. The program can be customized using ‘bootstrap.conf’ which you also put under version control. • (C) In this approach, you write the ‘autopull.sh’ and ‘autogen.sh’ files by hand. ‘autopull.sh’ is most easily written as a script that invokes ./gitsub.sh pull || exit 1 where ‘gitsub.sh’ is described in *note Developer tools::. ‘autogen.sh’ typically contains an explicit ‘gnulib-tool’ invocation, followed by aclocal -I m4 \ && autoconf \ && autoheader && touch config.h.in \ && automake --add-missing --copy \ && rm -rf autom4te.cache \ || exit $? 3. Some projects take a “middle road”: they do commit Gnulib source files as in the first approach, but they do not commit other derived files, such as a ‘Makefile.in’ generated by Automake. This increases the size and complexity of the repository, but can help occasional contributors by not requiring them to have a full Gnulib checkout to do a build, and all developers by ensuring that all developers are working with the same version of Gnulib in the repository. It also supports multiple Gnulib instances within a project. It remains important not to commit the ‘make’-generated files, as described above. 3.14 Bundling the unit tests of the Gnulib modules ================================================== You can bundle the unit tests of the Gnulib modules together with your package, through the ‘--with-tests’ option. Together with ‘--with-tests’, you also specify the directory for these tests through the ‘--tests-base’ option. Of course, you need to add this directory to the ‘SUBDIRS’ variable in the ‘Makefile.am’ of the parent directory. The advantage of having the unit tests bundled is that when your program has a problem on a particular platform, running the unit tests may help determine quickly if the problem is on Gnulib’s side or on your package’s side. Also, it helps verifying Gnulib’s portability, of course. The unit tests will be compiled and run when the user runs ‘make check’. When the user runs only ‘make’, the unit tests will not be compiled. In the ‘SUBDIRS’ variable, it is useful to put the Gnulib tests directory after the directory containing the other tests, not before: SUBDIRS = gnulib-lib src man tests gnulib-tests This will ensure that on platforms where there are test failures in either directory, users will see and report the failures from the tests of your program. Note: In packages which use more than one invocation of ‘gnulib-tool’ in the scope of the same ‘configure.ac’, you cannot use ‘--with-tests’. You will have to use a separate ‘configure.ac’ in this case. 3.15 Avoiding unnecessary checks and compilations ================================================= In some cases, a module is needed by another module only on specific platforms. But when a module is present, its Autoconf checks are always executed, and its ‘Makefile.am’ additions are always enabled. So it can happen that some Autoconf checks are executed and some source files are compiled, although no other module needs them on this particular platform, just _in case_ some other module would need them. The option ‘--conditional-dependencies’ enables an optimization of configure checks and ‘Makefile.am’ snippets that avoids this. With this option, whether a module is considered “present” is no longer decided when ‘gnulib-tool’ is invoked, but later, when ‘configure’ is run. This applies to modules that were added as dependencies while ‘gnulib-tool’ was run; modules that were passed on the command line explicitly are always “present”. For example, the ‘timegm’ module needs, on platforms where the system’s ‘timegm’ function is missing or buggy, a replacement that is based on a function ‘mktime_internal’. The module ‘mktime-internal’ that provides this function provides it on all platforms. So, by default, the file ‘mktime-internal.c’ will be compiled on all platforms, even on glibc and BSD systems which have a working ‘timegm’ function. When the option ‘--conditional-dependencies’ is given, on the other hand, and if ‘mktime-internal’ was not explicitly required on the command line, the file ‘mktime-internal.c’ will only be compiled on the platforms where the ‘timegm’ needs them. Conditional dependencies are specified in the module description by putting the condition on the same line as the dependent module, enclosed in brackets. The condition is a boolean shell expression that can assume that the ‘configure.ac’ snippet from the module description has already been executed. In the example above, the dependency from ‘timegm’ to ‘mktime-internal’ is written like this: Depends-on: ... mktime-internal [test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1] ... Note: The option ‘--conditional-dependencies’ cannot be used together with the option ‘--with-tests’. It also cannot be used when a package uses ‘gnulib-tool’ for several subdirectories, with different values of ‘--source-base’, in the scope of a single ‘configure.ac’ file. 4 Writing modules ***************** This chapter explains how to write modules of your own, either to extend Gnulib for your own package (*note Extending Gnulib::), or for inclusion in gnulib proper. The guidelines in this chapter do not necessarily need to be followed for using ‘gnulib-tool’. They merely represent a set of good practices. Following them will result in a good structure of your modules and in consistency with gnulib. 4.1 Source code files ===================== Every API (C functions or variables) provided should be declared in a header file (.h file) and implemented in one or more implementation files (.c files). The separation has the effect that users of your module need to read only the contents of the .h file and the module description in order to understand what the module is about and how to use it—not the entire implementation. Furthermore, users of your module don’t need to repeat the declarations of the functions in their code, and are likely to receive notification through compiler errors if you make incompatible changes to the API (like, adding a parameter or changing the return type of a function). 4.2 Header files ================ The .h file should declare the C functions and variables that the module provides. The .h file should be stand-alone. That is, it does not require other .h files to be included before. Rather, it includes all necessary .h files by itself. It is a tradition to use CPP tricks to avoid parsing the same header file more than once, which might cause warnings. The trick is to wrap the content of the header file (say, ‘foo.h’) in a block, as in: #ifndef FOO_H # define FOO_H ... body of header file goes here ... #endif /* FOO_H */ Whether to use ‘FOO_H’ or ‘_FOO_H’ is a matter of taste and style. The C99 and C11 standards reserve all identifiers that begin with an underscore and either an uppercase letter or another underscore, for any use. Thus, in theory, an application might not safely assume that ‘_FOO_H’ has not already been defined by a library. On the other hand, using ‘FOO_H’ will likely lead the higher risk of collisions with other symbols (e.g., ‘KEY_H’, ‘XK_H’, ‘BPF_H’, which are CPP macro constants, or ‘COFF_LONG_H’, which is a CPP macro function). Your preference may depend on whether you consider the header file under discussion as part of the application (which has its own namespace for CPP symbols) or a supporting library (that shouldn’t interfere with the application’s CPP symbol namespace). Adapting C header files for use in C++ applications can use another CPP trick, as in: # ifdef __cplusplus extern "C" { # endif ... body of header file goes here ... # ifdef __cplusplus } # endif The idea here is that ‘__cplusplus’ is defined only by C++ implementations, which will wrap the header file in an ‘extern "C"’ block. Again, whether to use this trick is a matter of taste and style. While the above can be seen as harmless, it could be argued that the header file is written in C, and any C++ application using it should explicitly use the ‘extern "C"’ block itself. Your preference might depend on whether you consider the API exported by your header file as something available for C programs only, or for C and C++ programs alike. Note that putting a ‘#include’ in an ‘extern "C" { ... }’ block yields a syntax error in C++ mode on some platforms (e.g., glibc systems with g++ v3.3 to v4.2, AIX, IRIX). For this reason, it is recommended to place the ‘#include’ before the ‘extern "C"’ block. 4.3 Implementation files ======================== The .c file or files implement the functions and variables declared in the .h file. Include ordering ---------------- Every implementation file must start with ‘#include ’. This is necessary for activating the preprocessor macros that are defined on behalf of the Autoconf macros. Some of these preprocessor macros, such as ‘_GNU_SOURCE’, would have no effect if defined after a system header file has already been included. Then comes the ‘#include "..."’ specifying the header file that is being implemented. Putting this right after ‘#include ’ has the effect that it verifies that the header file is self-contained. Then come the system and application headers. It is customary to put all the system headers before all application headers, so as to minimize the risk that a preprocessor macro defined in an application header confuses the system headers on some platforms. In summary: • First comes #include . • Second comes the #include "..." specifying the module being implemented. • Then come all the #include <...> of system or system-replacement headers, in arbitrary order. • Then come all the #include "..." of gnulib and application headers, in arbitrary order. 4.4 Specification ================= The specification of a function should answer at least the following questions: • What is the purpose of the function? • What are the arguments? • What is the return value? • What happens in case of failure? (Exit? A specific return value? Errno set?) • Memory allocation policy: If pointers to memory are returned, are they freshly allocated and supposed to be freed by the caller? Where to put the specification describing exported functions? Three practices are used in gnulib: • The specification can be as comments in the header file, just above the function declaration. • The specification can be as comments in the implementation file, just above the function definition. • The specification can be in texinfo format, so that it gets included in the gnulib manual. In any case, the specification should appear in just one place, unless you can ensure that the multiple copies will always remain identical. The advantage of putting it in the header file is that the user only has to read the include file normally never needs to peek into the implementation file(s). The advantage of putting it in the implementation file is that when reviewing or changing the implementation, you have both elements side by side. The advantage of texinfo formatted documentation is that it is easily published in HTML or Info format. Currently (as of 2020), 70% of gnulib uses the first practice, 25% of gnulib uses the second practice, and a small minority uses the texinfo practice. 4.5 Module description ====================== For the module description, you can start from an existing module’s description, or from a blank one: ‘module/TEMPLATE’ for a normal module, or ‘module/TEMPLATE-TESTS’ for a unit test module. Some more fields are possible but rarely used. Use ‘module/TEMPLATE-EXTENDED’ if you want to use one of them. Module descriptions have the following fields. Absent fields are equivalent to fields with empty contents. Description This field should contain a concise description of the module’s functionality. One sentence is enough. For example, if it defines a single function ‘frob’, the description can be ‘frob() function: frobnication.’ Gnulib’s documentation generator will automatically convert the first part to a hyperlink when it has this form. Status This field is either empty/absent, or contains the word ‘obsolete’. In the latter case, ‘gnulib-tool’ will, unless the option ‘--with-obsolete’ is given, omit it when it used as a dependency. It is good practice to also notify the user about an obsolete module. This is done by putting into the ‘Notice’ section (see below) text like ‘This module is obsolete.’ Notice This field contains text that ‘gnulib-tool’ will show to the user when the module is used. This can be a status indicator like ‘This module is obsolete.’ or additional advice. Do not abuse this field. Applicability This field is either empty/absent, or contains the word ‘all’. It describes to which ‘Makefile.am’ the module is applied. By default, a normal module is applied to ‘SOURCE_BASE/Makefile.am’ (normally ‘lib/Makefile.am’), whereas a module ending in ‘-tests’ is applied to ‘TESTS_BASE/Makefile.am’ (normally ‘tests/Makefile.am’). If this field is ‘all’, it is applied to both ‘Makefile.am’s. This is useful for modules which provide Makefile.am macros rather than compiled source code. Files This field contains a newline separated list of the files that are part of the module. ‘gnulib-tool’ copies these files into the package that uses the module. This list is typically ordered by importance: First comes the header file, then the implementation files, then other files. It is possible to have the same file mentioned in multiple modules. That is, if the maintainers of that module agree on the purpose and future of said file. Depends-on This field contains a newline separated list of the modules that are required for the proper working of this module. ‘gnulib-tool’ includes each required module automatically, unless it is specified with option ‘--avoid’ or it is marked as obsolete and the option ‘--with-obsolete’ is not given. A test modules ‘foo-tests’ implicitly depends on the corresponding non-test module ‘foo’. ‘foo’ implicitly depends on ‘foo-tests’ if the latter exists and if the option ‘--with-tests’ has been given. Tests modules can depend on non-tests modules. Non-tests modules should not depend on tests modules. (Recall that tests modules are built in a separate directory.) Each listed required module may be declared a conditional dependency. This is indicated by placing the condition for the dependency on the same line, enclosed in brackets, after the name of the required module. The condition is a shell expression that is run after the module’s ‘configure.ac’ statements. For example: strtoull [test $ac_cv_func_strtoumax = no] Lines starting with ‘#’ are recognized as comments and are ignored. configure.ac-early This field contains ‘configure.ac’ stuff (Autoconf macro invocations and shell statements) that are logically placed early in the ‘configure.ac’ file: right after the ‘AC_PROG_CC’ invocation. This section is adequate for statements that modify ‘CPPFLAGS’, as these can affect the results of other Autoconf macros. configure.ac This field contains ‘configure.ac’ stuff (Autoconf macro invocations and shell statements). It is forbidden to add items to the ‘CPPFLAGS’ variable here, other than temporarily, as these could affect the results of other Autoconf macros. We avoid adding items to the ‘LIBS’ variable, other than temporarily. Instead, the module can export an Autoconf-substituted variable that contains link options. The user of the module can then decide to which executables to apply which link options. Recall that a package can build executables of different kinds and purposes; having all executables link against all libraries is inappropriate. If the statements in this section grow larger than a couple of lines, we recommend moving them to a ‘.m4’ file of their own. Makefile.am This field contains ‘Makefile.am’ statements. Variables like ‘lib_SOURCES’ are transformed to match the name of the library being built in that directory. For example, ‘lib_SOURCES’ may become ‘libgnu_a_SOURCES’ (for a plain library) or ‘libgnu_la_SOURCES’ (for a libtool library). Therefore, the normal way of having an implementation file ‘lib/foo.c’ compiled unconditionally is to write lib_SOURCES += foo.c Include This field contains the preprocessor statements that users of the module need to add to their source code files. Typically it’s a single include statement. A shorthand is allowed: You don’t need to write the word “#include”, just the name of the include file in the way it will appear in an include statement. Example: "foo.h" Link This field contains the set of libraries that are needed when linking libraries or executables that use this module. Often this will be written as a reference to a Makefile variable. Please write them one per line, so that ‘gnulib-tool’ can remove duplicates when presenting a summary to the user. Example: $(POW_LIBM) $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise When this field is omitted, it defaults to the union of the ‘Link’ field of the dependencies. License This field specifies the license that governs the source code parts of this module. See *note Copyright:: for details. Be sure to place, in every source code file, a copyright notice and the appropriate license notice, taken from the ‘etc/license-notices/’ directory. Maintainer This field specifies the persons who have a definitive say about proposed changes to this module. You don’t need to mention email addresses here: they can be inferred from the ‘ChangeLog’ file. Please put at least one person here. We don’t like unmaintained modules. 4.6 Autoconf macros =================== For a module ‘foo’, an Autoconf macro file ‘m4/foo.m4’ is typically created when the Autoconf macro invocations for the module are longer than one or two lines. The name of the main entry point into this Autoconf macro file is typically ‘gl_FOO’. For modules outside Gnulib that are not likely to be moved into Gnulib, please use a prefix specific to your package: ‘gt_’ for GNU gettext, ‘cu_’ for GNU coreutils, etc. For modules that define a function ‘foo’, the entry point is called ‘gl_FUNC_FOO’ instead of ‘gl_FOO’. For modules that provide a header file with multiple functions, say ‘foo.h’, the entry point is called ‘gl_FOO_H’ or ‘gl_HEADER_FOO_H’. This convention is useful because sometimes a header and a function name coincide (for example, ‘fcntl’ and ‘fcntl.h’). For modules that provide a replacement, it is useful to split the Autoconf macro into two macro definitions: one that detects whether the replacement is needed and requests the replacement by setting a ‘HAVE_FOO’ variable to 0 or a ‘REPLACE_FOO’ variable to 1 (this is the entry point, say ‘gl_FUNC_FOO’), and one that arranges for the macros needed by the replacement code ‘lib/foo.c’ (typically called ‘gl_PREREQ_FOO’). The reason of this separation is 1. to make it easy to update the Autoconf macros when you have modified the source code file: after changing ‘lib/foo.c’, all you have to review is the ‘Depends-on’ section of the module description and the ‘gl_PREREQ_FOO’ macro in the Autoconf macro file. 2. The Autoconf macros are often large enough that splitting them eases maintenance. Autoconf macro files in Gnulib all start with a header consisting of 1. A comment line with the file name. This is useful because in some cases the generated ‘aclocal.m4’ file does not contain a reference to the ‘.m4’ file but its entire contents. The comment makes it clear which ‘.m4’ file is where in the ‘aclocal.m4’ file. 2. A comment line with a serial number. This is useful when people use the ‘aclocal --install’ command. ‘aclocal’ will then refrain from copying a file with a smaller serial number onto a file with a larger serial number. The serial number should be a positive integer on the main branch, or a positive fractional number on a stable branch. 3. The copyright and license header, as usual. 4.7 Making proper use of ‘AC_LIBOBJ’ ==================================== Source files that provide a replacement should be only compiled on the platforms that need this replacement. While it is actually possible to compile a ‘.c’ file whose contents is entirely ‘#ifdef’’ed out on the platforms that don’t need the replacement, this practice is discouraged because • It makes the build time longer than needed, by invoking the compiler for nothing. • It produces a ‘.o’ file that suggests that a replacement was needed. • Empty object files produce a linker warning on some platforms: MSVC. The typical idiom for invoking ‘AC_LIBOBJ’ is thus the following, in the module description: if test $HAVE_FOO = 0 || test $REPLACE_FOO = 1; then AC_LIBOBJ([foo]) gl_PREREQ_FOO fi Important: Do not place ‘AC_LIBOBJ’ invocations in the Autoconf macros in the ‘m4/’ directory. The purpose of the Autoconf macros is to determine what features or bugs the platform has, and to make decisions about which replacements are needed. The purpose of the ‘configure.ac’ and ‘Makefile.am’ sections of the module descriptions is to arrange for the replacements to be compiled. *Source file names do not belong in the ‘m4/’ directory.* When an ‘AC_LIBOBJ’ invocation is unconditional, it is simpler to just have the source file compiled through an Automake variable augmentation: In the ‘Makefile.am’ section write lib_SOURCES += foo.c When a module description contains an ‘AC_LIBOBJ([foo])’ invocation, you *must* list the source file ‘lib/foo.c’ in the ‘Files’ section. This is needed even if the module depends on another module that already lists ‘lib/foo.c’ in its ‘Files’ section – because your module might be used among the test modules (in the directory specified through ‘--tests-base’) and the other module among the main modules (in the directory specified through ‘--source-base’), and in this situation, the ‘AC_LIBOBJ([foo])’ of your module can only be satisfied by having ‘foo.c’ be present in the tests source directory as well. 4.8 Unit test modules ===================== A unit test that is a simple C program usually has a module description as simple as this: Files: tests/test-foo.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-foo check_PROGRAMS += test-foo The test program ‘tests/test-foo.c’ often has the following structure: • First comes the obligatory ‘#include ’. • Second comes the include of the header file that declares the API being tested. Including it here verifies that said header file is self-contained. • Then come other includes. In particular, the file ‘macros.h’ is often used here. It contains a convenient ‘ASSERT’ macro. The body of the test, then, contains many ‘ASSERT’ invocations. When a test fails, the ‘ASSERT’ macro prints the line number of the failing statement, thus giving you, the developer, an idea of which part of the test failed, even when you don’t have access to the machine where the test failed and the reporting user cannot run a debugger. Sometimes it is convenient to write part of the test as a shell script. (For example, in areas related to process control or interprocess communication, or when different locales should be tried.) In these cases, the typical module description is like this: Files: tests/test-foo.sh tests/test-foo.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-foo.sh TESTS_ENVIRONMENT += FOO_BAR='@FOO_BAR@' check_PROGRAMS += test-foo Here, the ‘TESTS_ENVIRONMENT’ variable can be used to pass values determined by ‘configure’ or by the ‘Makefile’ to the shell script, as environment variables. The Autoconf values ‘EXEEXT’ and ‘srcdir’ are already provided as environment variables, through an initial value of ‘TESTS_ENVIRONMENT’ that ‘gnulib-tool’ puts in place. Regardless of the specific form of the unit test, the following guidelines should be respected: • A test indicates success by exiting with exit code 0. It should normally not produce output in this case. (Output to temporary files that are cleaned up at the end of the test are possible, of course.) • A test indicates failure by exiting with an exit code different from 0 and 77, typically 1. It is useful to print a message about the failure in this case. The ‘ASSERT’ macro already does so. • A test indicates "skip", that is, that most of its interesting functionality could not be performed, through a return code of 77. A test should also print a message to stdout or stderr about the reason for skipping. For example: fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; Such a message helps detecting bugs in the autoconf macros: A simple message ‘SKIP: test-foo’ does not sufficiently catch the attention of the user. 4.9 Incompatible changes ======================== Incompatible changes to Gnulib modules should be mentioned in Gnulib’s ‘NEWS’ file. Incompatible changes here mean that existing source code may not compile or work any more. We don’t mean changes in the binary interface (ABI), since 1. Gnulib code is used in source-code form. 2. The user who distributes libraries that contain Gnulib code is supposed to bump the version number in the way described in the Libtool documentation before every release. 5 Extending Gnulib ****************** Gnulib modules are intended to be suitable for widespread use. Most problems with Gnulib can and should be fixed in a generic way, so that all of Gnulib’s users can benefit from the change. But occasionally a problem arises that is difficult or undesirable to fix generically, or a project that uses Gnulib may need to work around an issue before the Gnulib maintainers commit a final fix. Maintainers may also want to add their own pools of modules to projects as Gnulib “staging areas.” The obvious way to make local changes to Gnulib modules is to use ‘gnulib-tool’ to check out pristine modules, then to modify the results in-place. This works well enough for short-lived experiments. It is harder to keep modified versions of Gnulib modules for a long time, even though Git (or another distributed version control systems) can help out a lot with this during the development process. Git, however, doesn’t address the distribution issue. When a package “foobar” needs a modified version of, say, ‘stdint.in.h’, it either has to put a comment into ‘foobar/autogen.sh’ saying “Attention! This doesn’t work with a pristine Gnulib, you need this and that patch after checking out Gnulib,” or it has to use the ‘--avoid=stdint’ option and provide the modified ‘stdint’ module in a different directory. The ‘--local-dir’ option to ‘gnulib-tool’ solves this problem. It allows the package to override or augment Gnulib. This means: • You can store files that are to override Gnulib files or modules. • You can store context diffs to be applied to Gnulib files. • You can add modules of your own, that are not (yet) in Gnulib. • You can also add unstructured amounts of code to the library, by grouping the non-Gnulib files of the library in a single kitchen-sink “module.” (This kind of kitchen-sink module is not needed when you use the ‘gnulib-tool’ option ‘--makefile-name’.) In a release tarball, you can distribute the contents of this ‘--local-dir’ directory that will be combinable with newer versions of Gnulib, barring incompatible changes to Gnulib. If the ‘--local-dir=DIRECTORY’ option is specified, then ‘gnulib-tool’ looks in ‘DIRECTORY’ whenever it reads a file from the Gnulib directory. Suppose ‘gnulib-tool’ is looking for FILE. Then: • If ‘DIRECTORY/FILE’ exists, then ‘gnulib-tool’ uses it instead of the file included in Gnulib. • Otherwise, if ‘DIRECTORY/FILE.diff’ exists, then ‘gnulib-tool’ uses the file from Gnulib after applying the diff using the ‘patch’ program. • Otherwise, ‘gnulib-tool’ uses the file included in Gnulib. You can specify the ‘--local-dir’ multiple times. In this case, the first specified directory has the highest precedence. That is, a ‘FILE’ found in one directory will shadow any ‘FILE’ and ‘FILE.diff’ in the later directories and in the Gnulib directory. And a file ‘FILE.diff’ found in one directory will be applied on top of the combination of ‘FILE’ and ‘FILE.diff’ files found in the later directories and in the Gnulib directory. Please make wise use of this option. It also allows you to easily hold back modifications you make to Gnulib macros in cases it may be better to share them. 6 Miscellaneous Notes ********************* 6.1 Out of memory handling ========================== The gnulib API does not have a standard error code for the out of memory error condition. Instead of adding a non-standard error code, gnulib has chosen to adopt a different strategy. Out of memory handling happens in rare situations, but performing the out of memory error handling after almost all API function invocations pollute your source code and might make it harder to spot more serious problems. The strategy chosen improves code readability and robustness. For most applications, aborting the application with an error message when the out of memory situation occurs is the best that can be wished for. This is how the library behaves by default (using the ‘xalloc-die’ module). However, we realize that some applications may not want to abort execution in any situation. Gnulib supports a hook to let the application regain control and perform its own cleanups when an out of memory situation has occurred. The application can define a function (having a ‘void’ prototype, i.e., no return value and no parameters) and set the library variable ‘xalloc_die’ to that function. The variable should be declared as follows. extern void (*xalloc_die) (void); Gnulib will invoke this function if an out of memory error occurs. Note that the function should not return. Of course, care must be taken to not allocate more memory, as that will likely also fail. 6.2 Obsolete modules ==================== Modules can be marked obsolete. This means that the problems they fix don’t occur any more on the platforms that are reasonable porting targets now. ‘gnulib-tool’ warns when obsolete modules are mentioned on the command line, and by default ignores dependencies from modules to obsolete modules. When you pass the option ‘--with-obsolete’ to ‘gnulib-tool’, dependencies to obsolete modules will be included, however, unless blocked through an ‘--avoid’ option. This option is useful if your package should be portable even to very old platforms. In order to mark a module obsolete, you need to add this to the module description: Status: obsolete Notice: This module is obsolete. 6.3 Extra tests modules ======================= Test modules can be marked with some special status attributes. When a test module has such an attribute, ‘gnulib-tool --import’ will not include it by default. The supported status attributes are: ‘c++-test’ Indicates that the test is testing C++ interoperability. Such a test is useful in a C++ or mixed C/C++ package, but is useless in a C package. ‘longrunning-test’ Indicates that the test takes a long time to compile or execute (more than five minutes or so). Such a test is better avoided in a release that is made for the general public. ‘privileged-test’ Indicates that the test will request special privileges, for example, ask for the superuser password. Such a test may hang when run non-interactively and is therefore better avoided in a release that is made for the general public. ‘unportable-test’ Indicates that the test is known to fail on some systems, and that there is no workaround about it. Such a test is better avoided in a release that is made for the general public. ‘gnulib-tool --import --with-tests’ will not include tests marked with these attributes by default. When ‘gnulib-tool’ is invoked with one of the options ‘--with-c++-tests’, ‘--with-longrunning-tests’, ‘--with-privileged-tests’, ‘--with-unportable-tests’, it will include tests despite the corresponding special status attribute. When ‘gnulib-tool’ receives the option ‘--with-all-tests’, it will include all tests regardless of their status attributes. ‘gnulib-tool --create-testdir --with-tests’ and ‘gnulib-tool --create-megatestdir --with-tests’ by default include all tests of modules specified on the command line, regardless of their status attributes. Tests of modules occurring as dependencies are not included by default if they have one of these status attributes. The options ‘--with-c++-tests’, ‘--with-longrunning-tests’, ‘--with-privileged-tests’, ‘--with-unportable-tests’ are recognized here as well. Additionally, ‘gnulib-tool’ also understands the options ‘--without-c++-tests’, ‘--without-longrunning-tests’, ‘--without-privileged-tests’, ‘--without-unportable-tests’. In order to mark a module with a status attribute, you need to add it to the module description, like this: Status: longrunning-test If only a part of a test deserves a particular status attribute, you can split the module into a primary and a secondary test module, say ‘foo-tests’ and ‘foo-extra-tests’. Then add a dependency from ‘foo-tests’ to ‘foo-extra-tests’, and mark the ‘foo-extra-tests’ with the particular status attribute. 6.4 Modules that modify the way other modules work ================================================== The normal way to design modules is that each module has its own code, and the module dependencies provide the facilities on which this code can rely. But sometimes it is necessary to use more advanced techniques. For example: • You may want to have optional module dependencies: Let module A use facilities provided by module B, if module B is present, but without requiring that module B is present. • A module can indicate support for particular behaviours. For example, Gnulib has a module ‘sigpipe’ that requests POSIX compatible SIGPIPE behaviour from all other modules – something that is not enabled by default. Or consider the ‘nonblocking’ module, that is an indicator that all I/O functions should handle non-blocking file descriptors – something that, equally, is not enabled by default. • A module can indicate to other modules that they can rely on certain guarantees, and thus omit specific code. For example, when Gnulib’s ‘malloc-gnu’ module is present, you can omit code that test ‘n’ against zero when you call ‘malloc (n)’. Be aware that these advanced techniques likely cause breakage in the situation of multiple ‘gnulib-tool’ invocations in the scope of a single ‘configure’ file. This is because the question “is module B present?” does not have a unique answer in such situations. ‘gnulib-tool’ has support for these techniques in the situation of ‘--create-testdir --single-configure’, which basically has two ‘gnulib-tool’ invocations, one for a set of modules that end up in ‘gllib’, and one for the set of modules that end up in ‘gltests’. But you should be aware that this does not cover the general situation. Which technique to use, depends on the answer to the question: “If my module occurs among the modules of ‘gltests’, should it have an effect on the modules in ‘gllib’?” If the answer is “no”, your module description should invoke the Autoconf macro ‘gl_MODULE_INDICATOR’. This Autoconf macro takes one argument: the name of your module. The effect of ‘gl_MODULE_INDICATOR([MY-MODULE])’ is to define, in ‘config.h’, a C macro ‘GNULIB_MY_MODULE’ that indicates whether your macro is considered to be present. This works even when your macro is used in ‘gltests’: ‘GNULIB_MY_MODULE’ will then evaluate to 1 in ‘gltests’ but to 0 in ‘gllib’. If the answer is “yes”, you have two techniques available. The first one is to invoke a similar Autoconf macro, named ‘gl_MODULE_INDICATOR_FOR_TESTS’. It works similarly. However, when your macro is used in ‘gltests’, ‘GNULIB_MY_MODULE’ will evaluate to 1 both in ‘gltests’ and in ‘gllib’. The second one is to define a shell variable in the ‘configure’ file that tells whether your module is present, through use of ‘m4_divert_text’. The Autoconf macros of a dependency module will initialize this shell variable, through ‘m4_divert_text([DEFAULTS], [MY_SHELL_VAR=no])’. The Autoconf macros of your module will override this value, through ‘m4_divert_text([INIT_PREPARE], [MY_SHELL_VAR=yes])’. Then you can use ‘MY_SHELL_VAR’ in the Autoconf macros of both modules. You can find more details about this technique in the Gnulib module ‘getopt-gnu’. Reminder: These techniques are advanced. They have the potential to cause lots of headaches if you apply them incorrectly. 6.5 A C++ namespace for gnulib ============================== The function definitions provided by Gnulib (‘.c’ code) are meant to be compiled by a C compiler. The header files (‘.h’ files), on the other hand, can be used in either C or C++. By default, when used in a C++ compilation unit, the ‘.h’ files declare the same symbols and overrides as in C mode, except that functions defined by Gnulib or by the system are declared as ‘extern "C"’. It is also possible to indicate to Gnulib to provide many of its symbols in a dedicated C++ namespace. If you define the macro ‘GNULIB_NAMESPACE’ to an identifier, many functions will be defined in the namespace specified by the identifier instead of the global namespace. For example, after you have defined #define GNULIB_NAMESPACE gnulib at the beginning of a compilation unit, Gnulib’s ‘’ header file will make available the ‘open’ function as ‘gnulib::open’. The symbol ‘open’ will still refer to the system’s ‘open’ function, with its platform specific bugs and limitations. The symbols provided in the Gnulib namespace are those for which the corresponding header file contains a ‘_GL_CXXALIAS_RPL’ or ‘_GL_CXXALIAS_SYS’ macro invocation. The benefits of this namespace mode are: • Gnulib defines fewer symbols as preprocessor macros. For example, on a platform where ‘open’ has to be overridden, Gnulib normally does ‘#define open rpl_open’. If your package has a class with a member ‘open’, for example a class ‘foo’ with a method ‘foo::open’, then if you define this member in a compilation unit that includes ‘’ and use it in a compilation unit that does not include ‘’, or vice versa, you will get a link error. Worse: You will not notice this problem on the platform where the system’s ‘open’ function works fine. This problem goes away in namespace mode. • It provides a safety check whether the set of modules your package requests from Gnulib is sufficient. For example, if you use the function ‘gnulib::open’ in your code, and you forgot to request the module ‘open’ from Gnulib, you will get a compilation error (regardless of the platform). The drawback of this namespace mode is that the system provided symbols in the global namespace are still present, even when they contain bugs that Gnulib fixes. For example, if you call ‘open (...)’ in your code, it will invoke the possibly buggy system function, even if you have requested the module ‘open’ from gnulib-tool. You can turn on the namespace mode in some compilation units and keep it turned off in others. This can be useful if your package consists of an application layer that does not need to invoke POSIX functions and an operating system interface layer that contains all the OS function calls. In such a situation, you will want to turn on the namespace mode for the application layer—to avoid many preprocessor macro definitions—and turn it off for the OS interface layer—to avoid the drawback of the namespace mode, mentioned above. 6.6 License Texinfo sources =========================== Gnulib provides copies of the GNU GPL, GNU LGPL, GNU Affero GPL, and GNU FDL licenses in Texinfo form. (The master location is ). These Texinfo documents do not have any node names and structures built into them; for your manual, you should ‘@include’ them in an appropriate ‘@node’. The conventional name for the GPL node is ‘Copying’ and for the FDL ‘GNU Free Documentation License’. The LGPL doesn’t seem to have a conventional node name. Of course the license texts themselves should not be changed at all. The recommended way to make use of these license files, consistently with current practice, is as follows: • The code license (GNU GPL, GNU LGPL, or GNU Affero GPL) is usually present as a file in the top-level directory. This is true not only for the release tarballs, but also in the VCS repository. The file is typically named ‘COPYING’ for the GNU GPL, or ‘COPYING.LIB’ or ‘COPYING.LESSER’ for the GNU LGPL. The presence of this file fulfills a legal obligation; see . To make use of the code license in your documentation, you may request one of the modules ‘gpl-3.0’, ‘gpl-2.0’, ‘lgpl-3.0’, ‘lgpl-2.1’, ‘agpl-3.0’, through a ‘gnulib-tool’ invocation. Or you may copy the relevant Texinfo file directly into your VCS repository. Both approaches are equally good. The Texinfo file changes very rarely. • The documentation license file (GNU FDL) is usually not present as a file in the top-level directory, because that would be ambiguous: When you use the GNU FDL, you need to specify the Invariant Sections, the Front-Cover Texts, and the Back-Cover Texts. To make use of this documentation license, copy the relevant Texinfo file (‘doc/fdl-1.3.texi’) into your VCS repository. This makes sure that anyone who receives a copy of your VCS repository has also received a copy of the documentation license. In the documentation, also state what are the Invariant Sections, the Front-Cover Texts, and the Back-Cover Texts. We recommend to place the licenses as appendices at the end of the manual, right before any indices. For the FDL, we suggest the following ‘@menu’ entry: * GNU Free Documentation License:: License for copying this manual For any ‘@detailmenu’ entries, we suggest the following: Copying This Manual * GNU Free Documentation License:: Copying and sharing this manual And for actual inclusion of the FDL itself, we suggest the following: @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texi 6.7 Building gnulib =================== If you wish to help the gnulib development effort with build logs for your favorite platform, you may perform these steps: 1. Prerequisites tools Install the proper development tools. To build and test all of Gnulib, you will need development tools for the programming languages C, C++, Java, and Perl, along with standard POSIX utilities such as ‘awk’, ‘make’ and ‘sh’. You will also need development tools that include Autoconf, Automake, Bison, Gettext, Git, GNU M4, Gperf, Libtool, and Texinfo. Some of these tools are needed only by some modules. More details can be found in Gnulib’s ‘DEPENDENCIES’ file. 2. Obtain Gnulib See for how to get the current Gnulib sources via Git. 3. Create gnulib directory On a machine with GNU development tools installed and with a gnulib git checkout, use gnulib-tool --create-testdir --with-tests --dir=... Alternatively, pick a small set of modules and run gnulib-tool --create-megatestdir --with-tests --dir=... autobuild MODULES (You can’t do this with all of Gnulib at once: ‘gnulib-tool’ would run for a week and produce a directory that takes more than 100 GB, maybe even 1 TB, of disk space.) 4. Transfer gnulib directory Transfer this directory to a build machine (HP-UX, Cygwin, or whatever). Often it is easier to transfer one file, and this can be achieved by running, inside the directory the following commands: ./configure make dist And then transferring the ‘dummy-0.tar.gz’ file. 5. Build modules On the build machine, run ./do-autobuild (or "nohup ./do-autobuild"). It creates a directory ‘logs/’ with a log file for each module. 7 Building the ISO C and POSIX Substitutes ****************************************** This section shows a radically different way to use Gnulib. You can extract the ISO C / POSIX substitutes part of gnulib by running the command gnulib-tool --create-testdir --source-base=lib \ --dir=/tmp/posixlib `posix-modules` The command ‘posix-modules’ is found in the same directory as ‘gnulib-tool’. The resulting directory can be built on a particular platform, independently of the program being ported. Then you can configure and build any program, by setting ‘CPPFLAGS’ and ‘LDFLAGS’ at configure time accordingly: set ‘CPPFLAGS="-I.../posixlib/lib"’, plus any essential type definitions and flags that you find in ‘.../posixlib/config.h’, and set ‘LDFLAGS=".../posixlib/lib/libgnu.a"’. This way of using Gnulib is useful when you don’t want to modify the program’s source code, or when the program uses a mix between C and C++ sources (requiring separate builds of the ‘posixlib’ for the C compiler and for the C++ compiler). 8 ISO C Keyword Substitutes *************************** This chapter describes which keywords specified by ISO C are substituted by Gnulib. 8.1 ‘alignof’ and ‘alignas’ =========================== Gnulib module: alignasof The ‘alignasof’ module arranges for ‘alignas’ and ‘alignof’ to be more like standard C. Portability problems fixed by Gnulib: • Pre-C11 platforms lack ‘alignas’ and ‘alignof’. • On pre-C23 platforms, ‘’ must be included before using ‘alignas’ or ‘alignof’. *Note stdalign.h::. Portability problems not fixed by Gnulib: • On pre-C23 platforms, ‘alignas’ and ‘alignof’ are macros. 8.2 ‘bool’ ========== Gnulib module: stdbool Portability problems fixed by Gnulib: • The keywords ‘bool’, ‘true’, and ‘false’ are not available: gcc 12 and other compilers predating C23. Portability problems not fixed by Gnulib: • On pre-C23 platforms, the keyword substitutes are macros. • On pre-C23 platforms, the keyword substitutes assume C99 or later. 8.3 ‘nullptr’ ============= Gnulib module: nullptr The ‘nullptr’ module arranges for ‘nullptr’ to act like standard C and C++. The ‘nullptr’ keyword yields a null pointer. It differs from the ‘NULL’ macro, in that ‘NULL’ might be an integer whereas ‘nullptr’ is of a special ‘nullptr_t’ type with only one value, namely ‘nullptr’ itself. Using ‘nullptr’ can help some compilers emit more sensible warnings, can avoid the need to cast a null pointer passed to a function prototyped with an ellipsis, and removes the need to include ‘’ merely to define ‘NULL’. Portability problems fixed by Gnulib: • Some platforms lack ‘nullptr’: For C: GCC 12, Clang 15, and other pre-2023 C compilers. For C++: pre-2011 C++ compilers. • Some platforms incorrectly warn when ‘nullptr’ is a sentinel argument: GCC 13.2 and 14.0. Portability problems not fixed by Gnulib: • On older platforms, ‘nullptr’ is a macro instead of a keyword. • On older platforms, ‘nullptr’ does not have the type ‘nullptr_t’. In C, it has type ‘void *’; in C++ it has an integer type. • On older platforms Gnulib cannot easily emulate ‘nullptr_t’, so null pointer type checking is more error prone. In C, ‘_Generic’ expressions cannot reliably distinguish the type of ‘nullptr’ from integer or ‘void *’ types. C++ overloading has similar limitations. 8.4 ‘static_assert’ =================== Gnulib module: assert-h The ‘assert-h’ module arranges for both ‘static_assert’ and ‘’ to be like standard C. *Note assert.h::. Portability problems fixed by Gnulib: • Pre-C11 platforms lack ‘static_assert’. • On pre-C23 platforms, ‘’ must be included before using ‘static_assert’. Portability problems not fixed by Gnulib: • On pre-C23 platforms, ‘static_assert’ is a macro. 9 ISO C and POSIX Header File Substitutes ***************************************** This chapter describes which header files specified by ISO C or POSIX are substituted by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. The notation “Gnulib module: —” means that Gnulib does not provide a module providing a substitute for the header file. When the list “Portability problems not fixed by Gnulib” is empty, such a module is not needed: No portability problems are known. Otherwise, it indicates that such a module would be useful but is not available: No one so far found this header file important enough to contribute a substitute for it. If you need this particular header file, you may write to ‘’. 9.1 ‘aio.h’ =========== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin, mingw, MSVC 14, Haiku, Android 9.0. • The type ‘off64_t’ is not defined on some platforms: macOS 12.5, FreeBSD 10.4, NetBSD 10.0, OpenBSD 7.5, Minix 3.3. 9.2 ‘arpa/inet.h’ ================= POSIX specification: Gnulib module: arpa_inet Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 9.3 ‘assert.h’ ============== POSIX specification: Gnulib module: assert-h See also the Gnulib modules ‘assert’ and ‘verify’. Portability problems fixed by Gnulib: • On older C platforms ‘’ must be included before using ‘static_assert’. For example, GCC versions before 13 do not support the ‘static_assert’ keyword that was standardized by C23. • On older platforms ‘static_assert’ does not allow the second string-literal argument to be omitted. For example, GCC versions before 9.1 do not support the single-argument ‘static_assert’ that was standardized by C23 and C++17. • Even-older platforms do not support ‘static_assert’ at all. For example, GCC versions before 4.6 and G++ versions before 4.3 do not support the two-argument form, which was standardized by C11 and C++11. • Older C platforms might not support the obsolescent ‘_Static_assert’ keyword or macro. This portability problem should not matter with code using this module, as such code should use ‘static_assert’ instead. Portability problems not fixed by Gnulib: • A ‘static_assert’ can also be used within a ‘struct’ or ‘union’ specifier, in place of an ordinary declaration of a member of the struct or union. The Gnulib substitute can be used only as an ordinary declaration in code intended to be portable to C99 or earlier. • In C23 and C++11 and later, ‘static_assert’ is a keyword. In C11 and C17 it is a macro. Any Gnulib substitute is also a macro. • In C99 and later, ‘assert’ can be applied to any scalar expression. In C89, the argument to ‘assert’ is of type ‘int’. 9.4 ‘complex.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.7, mingw, MSVC 9. 9.5 ‘cpio.h’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, Cygwin 2.4.x, mingw, MSVC 14. 9.6 ‘ctype.h’ ============= POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 9.7 ‘dirent.h’ ============== POSIX specification: Gnulib module: dirent Portability problems fixed by Gnulib: • This header file is missing on some platforms: MSVC 14. • The type ‘ino_t’ is missing on some platforms: glibc 2.23 and others. Portability problems not fixed by Gnulib: • Although many systems define a ‘struct dirent’ member named ‘d_type’ and directory entry type macros like ‘DT_DIR’ and ‘DT_LNK’, some do not: Minix 3.1.8, AIX 7.2, HP-UX 11, Solaris 11.4, mingw. • On systems with ‘d_type’, not every filesystem supports ‘d_type’, and those lacking support will set it to ‘DT_UNKNOWN’. • Some systems define a ‘struct dirent’ member named ‘d_namlen’ containing the string length of ‘d_name’, but others do not: glibc 2.23 on Linux, Minix 3.1.8, Solaris 11.4, Cygwin. All of these, except Cygwin, have a member ‘d_reclen’ instead, that has a different semantics. • Some systems define a ‘struct dirent’ member named ‘d_off’ containing a magic cookie suitable as an argument to ‘seekdir’, but others do not: glibc 2.23 on Hurd, macOS 11.1, FreeBSD 11.0, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, Cygwin, mingw. • Some systems define a ‘struct dirent’ member named ‘d_reclen’ containing the number of bytes in the directory entry record, but others do not. This member has limited utility, as it is an implementation detail. 9.8 ‘dlfcn.h’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 9.9 ‘errno.h’ ============= POSIX specification: Gnulib module: errno Portability problems fixed by Gnulib: • The macro ‘EOVERFLOW’ is not defined on some platforms: OpenBSD 4.0, mingw, MSVC 9. • The macro ‘ENOLINK’ is not defined on some platforms: OpenBSD 6.7, mingw, MSVC 9. • The macro ‘EMULTIHOP’ is not defined on some platforms: OpenBSD 6.7, mingw, MSVC 14. • The macro ‘ECANCELED’ is not defined on some platforms: OpenBSD 4.0, Cygwin, mingw, MSVC 9. • The macros ‘ENOMSG’, ‘EIDRM’, ‘EPROTO’, ‘EBADMSG’, ‘ENOTSUP’ are not defined on some platforms: OpenBSD 4.0, mingw, MSVC 9. • The macro ‘ESTALE’ is not defined on some platforms: mingw, MSVC 14. • The macro ‘EDQUOT’ is not defined on some platforms: NonStop Kernel, mingw, MSVC 14. • The macros ‘ENETRESET’, ‘ECONNABORTED’ are not defined on some platforms: Minix 3.1.8, mingw, MSVC 9. • The macros ‘EWOULDBLOCK’, ‘ETXTBSY’, ‘ELOOP’, ‘ENOTSOCK’, ‘EDESTADDRREQ’, ‘EMSGSIZE’, ‘EPROTOTYPE’, ‘ENOPROTOOPT’, ‘EPROTONOSUPPORT’, ‘EOPNOTSUPP’, ‘EAFNOSUPPORT’, ‘EADDRINUSE’, ‘EADDRNOTAVAIL’, ‘ENETDOWN’, ‘ENETUNREACH’, ‘ECONNRESET’, ‘ENOBUFS’, ‘EISCONN’, ‘ENOTCONN’, ‘ETIMEDOUT’, ‘ECONNREFUSED’, ‘EHOSTUNREACH’, ‘EALREADY’, ‘EINPROGRESS’ are not defined on some platforms: mingw, MSVC 9. • The macros ‘EOWNERDEAD’, ‘ENOTRECOVERABLE’ are not defined on some platforms: glibc/Linux 2.3.6, glibc/Hurd 2.15, glibc/kFreeBSD 2.15, Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.3, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin, mingw without pthreads-win32, MSVC 9. • The macro ‘EILSEQ’ is not defined on some platforms: LynxOS 178 2.2.2. Portability problems not fixed by Gnulib: 9.10 ‘fcntl.h’ ============== POSIX specification: Gnulib module: fcntl-h Portability problems fixed by Gnulib: • The type ‘pid_t’ is not defined on some platforms: MSVC 14. • The type ‘mode_t’ is not defined on some platforms: MSVC 14. • The type ‘off64_t’ is not defined on some platforms: macOS 12.5, FreeBSD 10.4, NetBSD 10.0, OpenBSD 7.5, MSVC 14, Cygwin, Haiku, Minix 3.3. • ‘O_CLOEXEC’ is not defined on some platforms: Mac OS X 10.6, FreeBSD 8.4, NetBSD 5.1, OpenBSD 4.9, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 10, Cygwin 1.7.1, mingw, MSVC 14. • ‘O_DIRECTORY’, ‘O_DSYNC’, ‘O_NOCTTY’, ‘O_NOFOLLOW’, ‘O_RSYNC’, ‘O_SYNC’, and ‘O_TTY_INIT’ are not defined on some platforms. When not otherwise defined, Gnulib defines these macros to 0, which is generally safe. • ‘O_NONBLOCK’ is not defined on some platforms. If the ‘nonblocking’ module is in use, gnulib guarantees a working non-zero value; otherwise, the gnulib replacement is 0. • ‘O_EXEC’ and ‘O_SEARCH’ are not defined on some platforms. Gnulib defines these macros to ‘O_RDONLY’, which is typically 0. The ‘O_PATH’ macro of GNU/Linux is not a suitable substitute, as fchmod fails with ‘errno==EBADF’ when invoked on a file descriptor that was opened with ‘O_PATH’. • ‘O_ACCMODE’ is not defined on some platforms: MSVC 14. • The ‘O_ACCMODE’ mask mistakenly omits ‘O_SEARCH’ and ‘O_EXEC’ on some platforms: Cygwin. • ‘O_BINARY’, ‘O_TEXT’ (not specified by POSIX, but essential for portability to native Windows platforms) are defined on some platforms but not on others. Gnulib defines these macros to 0 on GNU and other platforms that do not distinguish between text and binary I/O. • ‘O_CLOEXEC’, ‘O_NOFOLLOW’, and ‘O_TTY_INIT’ are defined to values that are too large for an ‘int’ on some platforms: AIX 7.1 with XL C 12.1. • ‘O_DIRECT’, ‘O_IGNORE_CTTY’, ‘O_NDELAY’, ‘O_NOATIME’, ‘O_NOLINK’, ‘O_NOLINKS’, and ‘O_NOTRANS’ (not specified by POSIX) are defined on some platforms but not on others. When not otherwise defined, Gnulib defines these macros to 0, which is generally safe. • ‘FD_CLOEXEC’, ‘F_DUPFD’, and ‘F_GETFD’ are not defined on some platforms: mingw, MSVC 14. • ‘F_DUPFD_CLOEXEC’ is not defined on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, Solaris 11 2010-11, Cygwin 1.7.1, mingw, MSVC 14. • ‘AT_FDCWD’, ‘AT_EACCESS’, ‘AT_SYMLINK_NOFOLLOW’, ‘AT_SYMLINK_FOLLOW’, and ‘AT_REMOVEDIR’ are not defined on many platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. • ‘AT_FDCWD’ is defined with a value too large for an ‘int’ on some platforms: Solaris 11.3. Portability problems not fixed by Gnulib: • ‘O_PATH’ is not defined on some platforms: glibc 2.13, macOS 13, FreeBSD 13.0, NetBSD 9.2, OpenBSD 7.1, Minix 3.3.0, AIX 7.3, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. • ‘F_SETFD’, ‘F_GETFL’, ‘F_SETFL’, ‘F_GETLK’, ‘F_SETLK’, ‘F_SETLKW’, ‘F_GETOWN’, and ‘F_SETOWN’ are not defined on some platforms: mingw, MSVC 14. • ‘POSIX_FADV_DONTNEED’, ‘POSIX_FADV_NOREUSE’, ‘POSIX_FADV_NORMAL’, ‘POSIX_FADV_RANDOM’, ‘POSIX_FADV_SEQUENTIAL’, and ‘POSIX_FADV_WILLNEED’ are not defined on some platforms. 9.11 ‘fenv.h’ ============= POSIX specification: Gnulib module: fenv Portability problems fixed by Gnulib: • This header file is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, Cygwin 1.7.7, MSVC 9. Portability problems not fixed by Gnulib: • On MSVC, the values of the rounding direction macros have changed: In MSVC 14, ‘FE_UPWARD’ is 0x100 and ‘FE_DOWNWARD’ is 0x200, whereas in MSVC 14.30, it’s the opposite. 9.12 ‘float.h’ ============== POSIX specification: Gnulib module: float Portability problems fixed by Gnulib: • The conversion from ‘int’ to ‘long double’ in incorrect on some platforms: glibc 2.7 on Linux/SPARC64. • The values of ‘LDBL_*’ macros are incorrect on some platforms: On OpenBSD 4.0 and MirBSD 10, they are the same as the values of the ‘DBL_*’ macros, although ‘long double’ is a larger type than ‘double’. On FreeBSD/x86 6.4, they represent the incorrect 53-bit precision assumptions in the compiler, not the real 64-bit precision at runtime. On Linux/PowerPC with GCC 4.4, and on AIX 7.1 with GCC 4.2, they don’t reflect the “double double” representation of ‘long double’ correctly. Portability problems not fixed by Gnulib: • The macro ‘FLT_ROUNDS’ is a constant expression and does not represent the current rounding mode on some platforms: glibc 2.11, HP-UX 11, mingw. 9.13 ‘fmtmsg.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. 9.14 ‘fnmatch.h’ ================ POSIX specification: Gnulib module: fnmatch-h, fnmatch-gnu Portability problems fixed by Gnulib module ‘fnmatch-h’: • This header file is missing on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘fnmatch-gnu’, together with module ‘fnmatch-h’: • The macros ‘FNM_LEADING_DIR’ and ‘FNM_CASEFOLD’ are not defined on some platforms: AIX 7.2, HP-UX 11.31, Solaris 10. • The macro ‘FNM_EXTMATCH’ is not defined on all non-glibc platforms: musl libc, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.2, Minix 3.3, AIX 7.2, HP-UX 11.31, Solaris 11.4, Cygwin 3.4.6, Android 13. • The macro ‘FNM_FILE_NAME’ is not defined on some platforms: NetBSD 10.0, AIX 7.2, HP-UX 11.31, Solaris 10. Portability problems not fixed by Gnulib: 9.15 ‘ftw.h’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14. 9.16 ‘glob.h’ ============= POSIX specification: Gnulib module: glob-h Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 9.17 ‘grp.h’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 9.18 ‘iconv.h’ ============== POSIX specification: Gnulib module: iconv Portability problems fixed by Gnulib: • The from GNU libiconv is not found if installed in ‘$PREFIX/include’. Portability problems not fixed by Gnulib: • This header file is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, when GNU libiconv is not installed. 9.19 ‘inttypes.h’ ================= POSIX specification: Gnulib module: inttypes Portability problems fixed by Gnulib: • This header file is missing on some platforms: MSVC 9. • This header file is very incomplete on some platforms. • The declarations of ‘imaxabs’ and ‘imaxdiv’ are missing on some platforms: NetBSD 3.0, OpenBSD 6.7, AIX 5.1, HP-UX 11. • The declarations of ‘strtoimax’ and ‘strtoumax’ are missing on some platforms: OpenBSD 6.7, AIX 5.1 (missing only ‘strtoumax’). • On some hosts that predate C++11, when using C++ one must define ‘__STDC_FORMAT_MACROS’ to make visible the declarations of format macros such as ‘PRIdMAX’. Portability problems not fixed by Gnulib: 9.20 ‘iso646.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, HP-UX 11.00, Cygwin, mingw. 9.21 ‘langinfo.h’ ================= POSIX specification: Gnulib module: langinfo Portability problems fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • The constant ‘CODESET’ is not defined on some platforms: OpenBSD 6.7. • The constants ‘ALTMON_1’ to ‘ALTMON_12’ are not defined on some platforms: glibc 2.26, musl libc, macOS 11.1, NetBSD 8.0, OpenBSD 6.5, AIX 7.2, HP-UX 11.31, Solaris 11.4, Haiku, Cygwin 2.9. • The constants ‘ERA’, ‘ERA_D_FMT’, ‘ERA_D_T_FMT’, ‘ERA_T_FMT’, ‘ALT_DIGITS’ are not defined on some platforms: OpenBSD 6.7. Portability problems not fixed by Gnulib: 9.22 ‘libgen.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. The Gnulib module ‘dirname’ provides similar API, with functions ‘base_name’ and ‘dir_name’ that also work with Windows file names. 9.23 ‘limits.h’ =============== POSIX specification: Gnulib module: limits-h or gethostname Portability problems fixed by Gnulib module ‘limits-h’: • The macros ‘LLONG_MIN’, ‘LLONG_MAX’, ‘ULLONG_MAX’ are not defined on some platforms: older glibc systems (e.g. Fedora 1), AIX 5.1, HP-UX 11, OpenVMS. • The macro ‘MB_LEN_MAX’ is not defined on some platforms: pcc 1.2.0.DEVEL 20220331. • The macros ‘WORD_BIT’, ‘LONG_BIT’ are not defined on some platforms: glibc 2.11 without ‘-D_GNU_SOURCE’, Cygwin, mingw, MSVC 14. • Macros like ‘CHAR_WIDTH’ are not defined on some platforms: glibc 2.24, NetBSD 10.0, many others. • The macros ‘BOOL_MAX’ and ‘BOOL_WIDTH’ are not defined on some platforms: glibc 2.32, many others. • The macro ‘BOOL_MAX’ is not defined with some compilers: clang 15.0.6. • The macro ‘SSIZE_MAX’ is not defined on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘gethostname’: • The ‘HOST_NAME_MAX’ macro is not defined on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. Portability problems not fixed by Gnulib: • The macro ‘SSIZE_MAX’ has the wrong type, albeit with the correct value: 32-bit glibc 2.24 (on some architectures), Cygwin 2.5.2. For ‘PATH_MAX’, Gnulib provides a module ‘pathmax’ with a header file ‘"pathmax.h"’. It defines ‘PATH_MAX’ to a constant on platforms with a file name length limit. 9.24 ‘locale.h’ =============== POSIX specification: Gnulib module: locale Portability problems fixed by Gnulib: • The definition of ‘LC_MESSAGES’ is missing on some platforms: mingw, MSVC 14. • The ‘locale_t’ type is not defined on some platforms: glibc 2.11, macOS 11.1. • The ‘struct lconv’ type does not contain any members on some platforms: Android up to 2014. • The ‘struct lconv’ type does not contain the members ‘int_p_cs_precedes’, ‘int_p_sign_posn’, ‘int_p_sep_by_space’, ‘int_n_cs_precedes’, ‘int_n_sign_posn’, ‘int_n_sep_by_space’ on some platforms: glibc, OpenBSD 4.9, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • Some platforms provide a ‘NULL’ macro that cannot be used in arbitrary expressions: NetBSD 5.0 Portability problems not fixed by Gnulib: 9.25 ‘math.h’ ============= POSIX specification: Gnulib module: math Portability problems fixed by Gnulib: • The conversion from ‘int’ to ‘long double’ in incorrect on some platforms: glibc 2.7 on Linux/SPARC64. • The macro ‘NAN’ is not defined on some platforms: OpenBSD 4.0, AIX 5.1. • The macro ‘NAN’ is not exposed outside of C99 compilation on some platforms: glibc. • The macros ‘NAN’ and ‘HUGE_VAL’ expand to a function address rather than a floating point constant on some platforms: Solaris 10. • The macros ‘HUGE_VALF’ and ‘HUGE_VALL’ are not defined on some platforms: glibc/HPPA, glibc/SPARC, AIX 5.1, Solaris 9, MSVC 9. • The macros ‘FP_ILOGB0’ and ‘FP_ILOGBNAN’ are not defined on some platforms: NetBSD 5.1, AIX 5.1, Solaris 9, MSVC 9. • The macros ‘FP_ILOGB0’ and ‘FP_ILOGBNAN’ have wrong values on some platforms: Haiku 2022. • The macros ‘NAN’, ‘HUGE_VALL’, and ‘INFINITY’ are not defined on some platforms: OpenVMS. Portability problems not fixed by Gnulib: • ‘NAN’ is not a compile time constant with some compilers: OpenVMS. • The macro or variable ‘math_errhandling’ is not defined on some platforms: glibc 2.11, OpenBSD 4.9, NetBSD 5.1, UP-UX 11, Cygwin 1.7.9, mingw, MSVC 9. 9.26 ‘monetary.h’ ================= POSIX specification: Gnulib module: monetary Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.1, mingw, MSVC 14, Android 9.0. • This header file has a syntax error in C++ mode on some platforms: NetBSD 8.0. 9.27 ‘mqueue.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 9.28 ‘ndbm.h’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14, Android 9.0. 9.29 ‘net/if.h’ =============== POSIX specification: Gnulib module: net_if Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header file is not self-contained on some platforms (needing to be included first): Mac OS X 10.5, FreeBSD 8.2, OpenBSD 5.2. Portability problems not fixed by Gnulib: 9.30 ‘netdb.h’ ============== POSIX specification: Gnulib module: netdb Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header file is incomplete on some platforms: Cygwin 1.5.x, Haiku. • This header file does not define ‘AI_ALL’, ‘AI_V4MAPPED’ on some platforms: NetBSD 10.0. • This header file does not define ‘AI_ADDRCONFIG’ on some platforms: NetBSD 5.0. Portability problems not fixed by Gnulib: 9.31 ‘netinet/in.h’ =================== POSIX specification: Gnulib module: netinet_in Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header file is not self-contained on some platforms (it requires ‘’ to be included first): OpenBSD 4.6. Portability problems not fixed by Gnulib: 9.32 ‘netinet/tcp.h’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 9.33 ‘nl_types.h’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. 9.34 ‘poll.h’ ============= POSIX specification: Gnulib module: poll-h Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 9.35 ‘pthread.h’ ================ POSIX specification: Gnulib module: pthread-h Portability problems fixed by Gnulib: • This header file is missing on some platforms. Minix 3.1.8, mingw 2.x, MSVC 14. But the provided replacement covers only the essential POSIX threads API. Furthermore it is just a dummy on some of these platforms: Minix 3.1.8. • This header pollutes the namespace with some broken macro implementations for various functions such as ‘strtok_r’ and ‘gmtime_r’: mingw 3.0. Portability problems not fixed by Gnulib: 9.36 ‘pwd.h’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 9.37 ‘regex.h’ ============== POSIX specification: Gnulib module: regex Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • This header file is not self-contained on some platforms: it requires ‘’ to be included first. 9.38 ‘sched.h’ ============== POSIX specification: Gnulib module: sched Portability problems fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This header file does not define the type ‘pid_t’ on some platforms: glibc 2.11, macOS 11.1. • ‘struct sched_param’ is not defined on some platforms: Haiku. • ‘SCHED_FIFO’, ‘SCHED_RR’, ‘SCHED_OTHER’ are not defined on some platforms: Haiku. Portability problems not fixed by Gnulib: 9.39 ‘search.h’ =============== POSIX specification: Gnulib module: search Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8. 9.40 ‘semaphore.h’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 9.41 ‘setjmp.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 9.42 ‘signal.h’ =============== POSIX specification: Gnulib module: signal-h Portability problems fixed by Gnulib: • ‘volatile sig_atomic_t’ is rejected by older compilers on some platforms: AIX. • ‘sigset_t’ is missing on some platforms: MSVC 14. • ‘sigset_t’ is only declared in on some platforms: mingw. • ‘struct sigaction’ and ‘siginfo_t’ are missing on some platforms: mingw, MSVC 14. • The type ‘pid_t’ is not defined on some platforms: MSVC 14. • The signal ‘SIGPIPE’ is not defined on some platforms: mingw, MSVC 14. • The macros ‘SA_RESETHAND’ and ‘SA_RESTART’ are not defined on some platforms: NonStop. • The type ‘sighandler_t’ (a GNU extension) is not defined on most non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14. Portability problems not fixed by Gnulib: • Many signals are not defined on some platforms: mingw, MSVC 14. • The macro ‘SIGBUS’ is set to the same value as ‘SIGSEGV’, rather than being a distinct signal, on some platforms: Haiku. 9.43 ‘spawn.h’ ============== POSIX specification: Gnulib module: spawn Portability problems fixed by Gnulib: • This header file is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.25, mingw, MSVC 14. Portability problems not fixed by Gnulib: 9.44 ‘stdalign.h’ ================= POSIX specification: Not in POSIX yet, but we expect it will be, at least temporarily until it becomes obsolete due to its phasing out starting in C23. ISO C23 (latest free draft ) sections 6.5.3.4, 6.7.5, 7.15. C++11 (latest free draft ) section 18.10. Gnulib module: alignasof Portability problems fixed by Gnulib: • On older C platforms ‘’ must be included before using ‘alignas’ or ‘alignof’. For example, GCC versions before 13 do not support these keywords, which were standardized by C23. On C23 and later platforms, ‘’ has no effect and need not be included. (Gnulib-using code should not include ‘’ without also employing Gnulib’s now-deprecated ‘stdalign’ module.) • This header file is missing on many platforms: FreeBSD 6.4, NetBSD 7.1, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 11.3, mingw, MSVC 14, Android 9.0. • Clang 3.0’s ‘’ does not define ‘alignof’. • The ‘alignof’ macro returns too large values for the types ‘double’ and ‘long long’ in GCC 4.7.0. • Older C platforms might not support the obsolescent ‘_Alignas’ and ‘_Alignof’ keywords or macros. This portability problem should not matter with code using this module, as such code should use ‘alignas’ and ‘alignof’ instead. • In C11 and C17, ‘’ defines the macros ‘__alignas_is_defined’ and ‘__alignof_is_defined’ to 1. In C23, these macros are not defined. This portability problem should not matter with code using Gnulib’s ‘alignasof’ module, as such code should use ‘alignas’ and ‘alignof’ without checking these two macros. (Gnulib’s now-deprecated ‘stdalign’ module defines these two macros.) • Clang 17 does not support an ‘alignas’ attribute in the specifier-qualifier position of a member declaration. Portability problems not fixed by Gnulib: • In C11 and later, the operand of ‘alignof’ must be a parenthesized type. Recent versions of GCC support an extension in which the operand can also be a unary expression, as with ‘sizeof’. The Gnulib substitute does not support this extension. • On most pre-C11 platforms, the operand of ‘alignof’ cannot be a structure type containing a flexible array member. • The ‘alignas’ keyword or macro is not always supported. Supported compilers include any compiler supporting C11 or later, which includes GCC, IBM C, Sun C 5.9 and later, and MSVC 7.0 and later. • Some compilers do not support alignment via ‘alignas’ of ‘auto’ variables (i.e., variables on the stack). They diagnose and ignore the alignment: Sun C 5.11. • Some linkers do not support operands of ‘alignas’ that are greater than 8: mingw. • Some compilers require the operand of ‘alignas’ to be a single integer constant, not an expression: MSVC 7.0 through at least 10.0. • The Sun C 5.13 (2014) compiler sometimes mishandles the alignment of multiple external variables that are declared close together with ‘alignas’. The bug is fixed in Sun C 5.15, also known as Oracle Developer Studio 12.6 (2017). • You cannot assume that ‘alignas’ and ‘alignof’ are reserved words; they might be macros. 9.45 ‘stdarg.h’ =============== POSIX specification: Gnulib module: stdarg Portability problems fixed by Gnulib: • Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode for the builtin ‘va_copy’ to work. Portability problems not fixed by Gnulib: 9.46 ‘stdatomic.h’ ================== POSIX specification: Not in POSIX yet, but we expect it will be. ISO C11 (latest free draft ) section 7.17. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on many platforms: glibc with GCC 4.8.x or clang 2.8, FreeBSD 6.4, NetBSD 7.0, OpenBSD 6.5, OpenBSD 6.9 with gcc, Minix 3.3.0, AIX 7.2 with xlc or xlclang, HP-UX 11.31, Solaris 11.3 with Oracle Studio 12.4 (Sun C 5.13), Cygwin 1.5.19, mingw, MSVC 14. • Linus Torvalds believes that “no compiler writer will get the C/C++ memory model right”; see . 9.47 ‘stdbit.h’ =============== POSIX : Not in POSIX yet, but we expect it will be. ISO C23 (latest free draft ) section 7.18. Gnulib module: stdbit Portability problems fixed by Gnulib: • This header file is missing on many non-C23 platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: • On older non-C23 platforms lacking ‘typeof’ or equivalent, a call to ‘stdc_bit_floor’ and ‘stdc_bit_ceil’ may yield a type that is wider than its argument. Although C23 seems to allow this, it differs from GNU behavior. • On non-C23 platforms, type-generic functions apply portably only to the standard unsigned integer types specified by C17 or earlier. 9.48 ‘stdbool.h’ ================ POSIX specification: Gnulib module: stdbool-c99 The ‘stdbool-c99’ module is present only for programs that formerly used the old ‘stdbool’ module for C99 compatibility, and that for some reason cannot use the current ‘stdbool’ module for C23 compatibility. Portability problems fixed by Gnulib: • This header file is missing on some platforms: AIX 5.1, HP-UX 11. • This header file is not usable in C++ mode with the vendor compiler on Solaris 10. • Some compilers have bugs relating to ‘bool’. • This header file defines ‘true’ incorrectly on some platforms: OpenBSD 4.7 with gcc 2.95. Portability problems not fixed by Gnulib: • ‘_Bool’ cannot be used before ‘’ is included, or if the program is intended to be compiled by a C++ compiler. (With the advent of C23, ‘_Bool’ is obsolescent anyway.) • You cannot assume that ‘_Bool’ is a typedef; it might be a macro. For example, C23 allows ‘_Bool’ to be a macro. • Bit-fields of type ‘bool’ are not supported. Portable code should use ‘unsigned int foo : 1;’ rather than ‘bool foo : 1;’. • Casts and automatic conversions to ‘bool’ don’t test against the zero value or the null pointer, as they should. Such casts should only be used if the value is known to be equal to 0 or 1. • You cannot assume that casting a floating point literal to ‘bool’ will result in a constant expression. 9.49 ‘stdckdint.h’ ================== POSIX specification: Not in POSIX yet, but we expect it will be. ISO draft C23 () section 7.20. Gnulib module: stdckdint Portability problems fixed by Gnulib: • This header file is missing on many platforms: glibc 2.29, macOS 11.1, FreeBSD 13.2, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: • In draft C23, arguments of ‘stdckdint.h’ macros can have side effects. 9.50 ‘stddef.h’ =============== POSIX specification: Gnulib module: stddef Portability problems fixed by Gnulib: • Some platforms fail to provide ‘unreachable’, which was added in C23: GCC 13, clang 15, AIX with xlc 12.1, Solaris with Sun C 5.15, and others. • Some platforms fail to provide ‘max_align_t’, which was added in C11: NetBSD 8.0, Solaris 11.0, and others. • ‘max_align_t’ does not have the expected alignment on some platforms: NetBSD 8.0/x86, AIX 7.2 with xlc in 64-bit mode. • Some old platforms fail to provide ‘wchar_t’. • Some platforms provide a ‘NULL’ macro that cannot be used in arbitrary expressions: NetBSD 5.0 • Some platforms provide a ‘NULL’ macro whose value does not have the size of a pointer: AIX 7.2 with xlc in 64-bit mode. • When this header file is provided by TinyCC 0.9.27 on glibc or macOS systems, it does not fulfil the expectations of other system header files. Portability problems not fixed by Gnulib: • Some platforms fail to provide ‘nullptr_t’, which Gnulib cannot usefully emulate: GCC 12, Clang 15, and other pre-2023 C compilers. • Some platforms define ‘nullptr_t’ even when ‘’ is not included: GCC 14.0.1 20240411 (Red Hat 14.0.1-0). • Some platforms provide an ‘offsetof’ macro that cannot be used in arbitrary expressions: Solaris 11.4 This problem can be worked around by parenthesizing the ‘offsetof’ expression in the unlikely case you use it with ‘sizeof’ or ‘[]’. 9.51 ‘stdint.h’ =============== POSIX specification: Gnulib module: stdint Portability problems fixed by Gnulib: • This header file is missing on some platforms: OpenBSD 3.8, AIX 5.1, HP-UX 11.11, MSVC 9. • This header file is very incomplete on some platforms. • The values of ‘SIG_ATOMIC_MIN’ and ‘SIG_ATOMIC_MAX’ are incorrect on some platforms: FreeBSD 6.2/ia64, FreeBSD 13.0/arm64. • The value of ‘WINT_MAX’ is incorrect on some platforms: mingw. • The values of ‘INT8_MAX’, ‘UINT8_MAX’ etc. are not usable in preprocessor expressions on some platforms: HP-UX 11.23. • The values of ‘INTPTR_MAX’ and ‘UINTPTR_MAX’, although correctly defined in ‘’, are replaced by empty values when ‘’ or ‘’ gets included later on some platforms: Solaris 9 with GCC 4.5 or newer. • The macros ‘WCHAR_MIN’ and ‘WCHAR_MAX’ are not defined in ‘’ (only in ‘’) on some platforms: Dragonfly. • On some hosts that predate C++11, when using C++ one must define ‘__STDC_CONSTANT_MACROS’ to make visible the definitions of constant macros such as ‘INTMAX_C’, and one must define ‘__STDC_LIMIT_MACROS’ to make visible the definitions of limit macros such as ‘INTMAX_MAX’. • The macro ‘SIZE_MAX’ has the wrong type, albeit with the correct value: 32-bit glibc 2.24 (on s390 architecture), Mac OS X 10.7. • Macros like ‘INTMAX_WIDTH’ are not defined on some platforms: glibc 2.24, NetBSD 10.0, many others. Portability problems not fixed by Gnulib: • ‘{uint,int}_fast{8,16,32,64}_t’ may not correspond to the fastest types available on the system. Other ‘’ substitutes may define these types differently, so public header files should avoid these types. • Macros are used instead of typedefs. • Some C preprocessors mishandle constants that do not fit in ‘long int’. For example, as of 2007, Sun C mishandled ‘#if LLONG_MIN < 0’ on a platform with 32-bit ‘long int’ and 64-bit ‘long long int’; this bug was fixed on or before Oracle Developer Studio 12.6 (Sun C 5.15 SunOS_sparc 2017/05/30). Some older preprocessors mishandle constants ending in ‘LL’. To work around these problems, compute the value of expressions like ‘LONG_MAX < LLONG_MAX’ at ‘configure’-time rather than at ‘#if’-time. The ‘stdint’ module uses ‘#include_next’. If you wish to install the generated stdint.h file under another name, typically in order to be able to use some of the types defined by stdint.h in your public header file, you could use the following Makefile.am-snippet: BUILT_SOURCES += idn-int.h DISTCLEANFILES += idn-int.h nodist_include_HEADERS += idn-int.h idn-int.h: if test -n "$(STDINT_H)"; then \ sed -e s/include_next/include/ gl/stdint.h > idn-int.h; \ else \ echo '#include ' > idn-int.h; \ fi 9.52 ‘stdio.h’ ============== POSIX specification: Gnulib module: stdio Portability problems fixed by Gnulib: • The type ‘off_t’ is not defined on some platforms: glibc 2.8, eglibc 2.11.2 and others. • The type ‘ssize_t’ is not defined on some platforms: glibc 2.8, Mac OS X 10.5, Solaris 10, MSVC 14, and others. • The type ‘va_list’ is not defined on some platforms: glibc 2.8, OpenBSD 4.0, Solaris 11.4, and others. • The type ‘off64_t’ is not defined on some platforms: macOS 12.5, FreeBSD 10.4, NetBSD 10.0, OpenBSD 7.5, MSVC 14, Cygwin, Haiku, Minix 3.3. • Some platforms provide a ‘NULL’ macro that cannot be used in arbitrary expressions: NetBSD 5.0 Portability problems not fixed by Gnulib: 9.53 ‘stdlib.h’ =============== POSIX specification: Gnulib module: stdlib, system-posix Portability problems fixed by the Gnulib module ‘stdlib’: • The macros ‘EXIT_SUCCESS’ and ‘EXIT_FAILURE’ are not defined on some platforms. • Some platforms provide a ‘NULL’ macro that cannot be used in arbitrary expressions: NetBSD 5.0 • The value of ‘MB_CUR_MAX’ is too small (3 instead of 4) in UTF-8 locales on some platforms: Solaris 10. Portability problems fixed by the Gnulib module ‘system-posix’: • The macros ‘WIFSIGNALED’, ‘WIFEXITED’, ‘WIFSTOPPED’, ‘WTERMSIG’, ‘WEXITSTATUS’, ‘WNOHANG’, ‘WUNTRACED’, ‘WSTOPSIG’ are not defined in this header file (only in ‘’) on some platforms: MirBSD 10. Portability problems not fixed by Gnulib: • The definition of the type ‘once_flag’, of the macro ‘ONCE_FLAG_INIT’, and the declaration of the function ‘call_once’, that are required by ISO C 23, are not provided. To get them, import Gnulib module ‘call_once’ and include ‘’ rather than ‘’. • System status macros such as ‘WEXITSTATUS’ require an lvalue argument on some platforms. macOS 11.1. 9.54 ‘stdnoreturn.h’ ==================== POSIX specification: Not in POSIX yet, but we expect it will be. ISO C11 (latest free draft ) sections 7.23. Gnulib module: stdnoreturn Portability problems fixed by Gnulib: • This header file is missing on many platforms: FreeBSD 6.4, NetBSD 7.1, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9.0, mingw, MSVC 14, Android 9.0. • This file conflicts with some system header files, such as ‘’ and ‘’, on some platforms: MSVC/clang. Portability problems not fixed by Gnulib: • ‘’ and the ‘noreturn’ macro are obsolescent in C23. • ‘’ cannot be #included in C++ mode on some platforms: FreeBSD 13.1. • ‘’ should be #included before ‘_Noreturn’ is used. • You cannot assume that ‘_Noreturn’ is a reserved word; it might be a macro. • When the macro ‘lint’ is defined, standard headers define ‘_Noreturn’ (and therefore ‘noreturn’) to be a macro that expands to the empty token sequence on some platforms: Cygwin 2.5.1, FreeBSD 10.3. • On Cygwin 1.7.30 and MSVC 14, ‘noreturn’ expands to the empty token sequence, to avoid problems with standard headers that use ‘noreturn’ in combination with ‘__attribute__’ or ‘__declspec’. Although the resulting code operates correctly, the compiler is not informed whether ‘noreturn’ functions do not return, so it may generate incorrect warnings at compile-time, or code that is slightly less optimized. This problem does not occur with ‘_Noreturn’. • Circa 2012 bleeding-edge GCC with ‘-Werror=old-style-declaration’ requires ‘_Noreturn’ or ‘noreturn’ before the returned type in a declaration, and therefore rejects valid but unusually-worded declarations such as ‘void _Noreturn foo (void);’. 9.55 ‘string.h’ =============== POSIX specification: Gnulib module: string Portability problems fixed by Gnulib: • Some platforms provide a ‘NULL’ macro that cannot be used in arbitrary expressions: NetBSD 5.0 Portability problems not fixed by Gnulib: 9.56 ‘strings.h’ ================ POSIX specification: Gnulib module: strings Portability problems fixed by Gnulib: • This header file is not self-contained on some platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: • This header file is missing on some platforms: MSVC 14. • This header file defines symbols, such as ‘index’, often used for variables, making debugging harder. 9.57 ‘stropts.h’ ================ Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. • This header is removed in POSIX.1-2024. 9.58 ‘sys/ipc.h’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 9.59 ‘sys/mman.h’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 9.60 ‘sys/msg.h’ ================ POSIX specification: Gnulib module: sys_msg Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 9.61 ‘sys/resource.h’ ===================== POSIX specification: Gnulib module: sys_resource Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • On some platforms, this header file requires that and already be included: FreeBSD 5.0. • On some platforms, this header file does not define the ‘RUSAGE_SELF’ and ‘RUSAGE_CHILDREN’ constants: OpenVMS. Portability problems not fixed by Gnulib: • On some platforms, this header does not define some or all of the symbolic constants required by POSIX. For example, OpenVMS and Android do not define ‘RLIM_SAVED_CUR’ or ‘RLIM_SAVED_MAX’. 9.62 ‘sys/select.h’ =================== POSIX specification: Gnulib module: sys_select Portability problems fixed by Gnulib: • This header file is missing on some platforms: HP-UX 11.11, NonStop Kernel, mingw, MSVC 14. • This header file is not self-contained on some platforms: it requires ‘’ to be included first. • This header file is not self-contained—it requires ‘’ before ‘FD_ZERO’ can be used—on some platforms: AIX 7.1, Solaris 11.4. Portability problems not fixed by Gnulib: 9.63 ‘sys/sem.h’ ================ POSIX specification: Gnulib module: sys_sem Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 9.64 ‘sys/shm.h’ ================ POSIX specification: Gnulib module: sys_shm Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 9.65 ‘sys/socket.h’ =================== POSIX specification: Gnulib module: sys_socket Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header file is not self-contained on some platforms: it requires ‘’ to be included first. • This header file does not define the type ‘struct iovec’ on some platforms: OpenBSD 4.4. • This header file is lacking the ‘SHUT_RD’, ‘SHUT_WR’, ‘SHUT_RDWR’ macros on some platforms, despite having the ‘shutdown’ functions: emx+gcc. • The ‘struct sockaddr_storage’ type does not have a member ‘ss_family’ on some platforms: AIX 7.1. • The ‘CMSG_SPACE’ and ‘CMSG_LEN’ macros are not provided on some platforms: OpenVMS. • This header file does not define the ‘SO_REUSEPORT’ macro on some platforms: Minix 3.1.8, Solaris 10, Cygwin, mingw, MSVC 14. Portability problems not fixed by Gnulib: • This header file does not declare the ‘msg_control’ and ‘msg_controllen’ members of ‘struct msghdr’ on some platforms. This can be detected by the absence of the ‘CMSG_FIRSTHDR’ macro: gnulib replacement header, old BSD 9.66 ‘sys/stat.h’ ================= POSIX specification: Gnulib module: sys_stat Portability problems fixed by Gnulib module ‘sys_stat’: • The type ‘mode_t’ is not defined on some platforms: MSVC 14. • Some macros, such as ‘S_IFMT’ or ‘S_IFIFO’, are missing on some platforms. • The macros ‘S_ISBLK’, ‘S_ISCHR’, ‘S_ISDIR’, ‘S_ISFIFO’, ‘S_ISLNK’, ‘S_ISREG’, ‘S_ISSOCK’ are broken on some platforms. • Some platforms define macros, such as ‘S_ISDOOR’, that are not defined on other platforms. • The functions ‘lstat’ and ‘mkdir’ are not declared on some platforms: mingw, MSVC 14. • The macros ‘UTIME_NOW’ and ‘UTIME_OMIT’ are missing on some platforms. • On some platforms, ‘struct stat’ does not include ‘st_atim’, ‘st_mtim’, or ‘st_ctim’ members. Use the gnulib module ‘stat-time’ for accessors to portably get at subsecond resolution. Portability problems fixed by Gnulib module ‘sys_stat’, together with module ‘windows-stat-inodes’: • On Windows platforms (excluding Cygwin), ‘st_ino’ is always 0. On platforms where ‘off_t’ is a 32-bit type, ‘struct stat’ cannot represent the size of files or block devices 2 GiB or lager and may not work correctly on directories 2 GiB or larger. Also, on platforms where ‘ino_t’ is a 32-bit type, ‘struct stat’ cannot represent larger inode numbers. *Note Large File Support::, for how to address these problems. *Note Avoiding the year 2038 problem::, for portability issues with the ‘time_t’ components of ‘struct stat’. Portability problems not fixed by Gnulib: • The macro ‘S_IFBLK’ is missing on some platforms: MSVC 14. • On OpenVMS, ‘st_ino’ is an array of three ‘ino_t’ values, not a single value. ‘b’ are known to represent the same file. • On some platforms, two different files may have the same ‘st_dev’ and ‘st_ino’ values, even when ‘st_ino’ is nonzero: • GNU/Linux NFS servers that export all local file systems as a single NFS file system, if a local ‘st_dev’ exceeds 255, or if a local ‘st_ino’ exceeds 16777215. • Network Appliance NFS servers in snapshot directories; see Network Appliance bug #195. • ClearCase MVFS; see bug id ATRia04618. • On some file systems, ‘st_size’ contains bogus information for symlinks; use the Gnulib module ‘areadlink-with-size’ for a better way to get symlink contents. To partially work around porting problems with Microsoft Windows and OpenVMS, you can use the Gnulib ‘same-inode’ module to test whether two ‘struct stat’ objects are known to represent the same file. For example, ‘psame_inode (&a, &b)’ is true if the ‘struct stat’ objects ‘a’ and ‘b’ are known to represent the same file. Another partial workaround is to compare other file metadata such as ‘st_mode’ and ‘st_mtime’ on platforms where ‘st_dev’ and ‘st_ino’ not uniquely identify a file. However, this does not work reliably on files whose metadata are being changed by other programs, or where the metadata happen to be equal. 9.67 ‘sys/statvfs.h’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: OpenBSD 3.8, mingw, MSVC 14. 9.68 ‘sys/time.h’ ================= POSIX specification: Gnulib module: sys_time Portability problems fixed by Gnulib: • This header file is missing on some platforms: MSVC 14. • ‘struct timeval’ is not defined on some platforms. • ‘struct timeval’ is defined with a ‘tv_sec’ type that is narrower than ‘time_t’ on some native Windows platforms: mingw64 in 64-bit mode, mingw64 in 32-bit mode when ‘__MINGW_USE_VC2005_COMPAT’ is defined, MSVC 14 in 64-bit mode, MSVC 14 in 32-bit mode when ‘_USE_32BIT_TIME_T’ is not defined. *Note Avoiding the year 2038 problem::, for portability issues with ‘time_t’ and the ‘time_t’ component of ‘struct timeval’. Portability problems not fixed by Gnulib: • ‘struct timeval’ is defined with a ‘tv_sec’ type that is wider than ‘time_t’: OpenBSD 5.1 in 64-bit mode. 9.69 ‘sys/timeb.h’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: OpenBSD 6.7, Android 9.0. 9.70 ‘sys/times.h’ ================== POSIX specification: Gnulib module: sys_times Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 9.71 ‘sys/types.h’ ================== POSIX specification: Gnulib module: sys_types Portability problems fixed by Gnulib: • The type ‘pid_t’ is not defined on some platforms: MSVC 14. • The type ‘size_t’ is not defined in this file on some platforms: MSVC 14. • The type ‘ssize_t’ is not defined on some platforms: MSVC 14. • The type ‘mode_t’ is not defined on some platforms: MSVC 14. • The type ‘off64_t’ is not defined on some platforms: macOS 12.5, FreeBSD 10.4, NetBSD 10.0, OpenBSD 7.5, MSVC 14, Cygwin, Haiku, Minix 3.3. • Some systems leak definitions of ‘major’, ‘minor’, and ‘makedev’ through this header; however, when ‘sys/sysmacros.h’ exists, that file should also be included to avoid deprecation warnings from the versions in this header: glibc 2.25. *Note Avoiding the year 2038 problem::, for portability issues with ‘time_t’. Portability problems not fixed by Gnulib: • On some platforms the types ‘blksize_t’ and ‘suseconds_t’ are signed integer types that are wider than ‘long’: glibc x32 This module, together with the module ‘largefile’, also defines the type ‘off_t’ to a 64-bit integer type on some platforms: mingw, MSVC 14. 9.72 ‘sys/uio.h’ ================ POSIX specification: Gnulib module: sys_uio Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header file is not self-contained (it requires ‘’ to be included first) on some platforms: OpenBSD 4.4. Portability problems not fixed by Gnulib: 9.73 ‘sys/un.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header requires sys/socket.h to be included first on some platforms: Cygwin 1.7.18. 9.74 ‘sys/utsname.h’ ==================== POSIX specification: Gnulib module: sys_utsname Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header file is not self-contained on some platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 9.75 ‘sys/wait.h’ ================= POSIX specification: Gnulib module: sys_wait Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • System status macros such as ‘WEXITSTATUS’ require an lvalue argument on some platforms. macOS 11.1. 9.76 ‘syslog.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 9.77 ‘tar.h’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. 9.78 ‘termios.h’ ================ POSIX specification: Gnulib module: termios Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header does not declare ‘pid_t’ on all platforms: glibc on some architectures, FreeBSD 6.4, OpenBSD 4.9, Cygwin 1.7.11. Portability problems not fixed by Gnulib: • The types ‘struct termios’, ‘cc_t’, ‘speed_t’, ‘tcflag_t’ are not defined on some platforms: mingw, MSVC 14. 9.79 ‘tgmath.h’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Mac OS X 10.5, FreeBSD 5.2.1, NetBSD 10.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. 9.80 ‘threads.h’ ================ Defines the multithreading facility of ISO C11. Gnulib module: threads-h Portability problems fixed by Gnulib: • This header file is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.2.x, mingw, MSVC 14, Android 9.0. • This header file defines ‘thrd_start_t’ incorrectly on some platforms: AIX 7.2. • This header file does not define ‘TSS_DTOR_ITERATIONS’ on some platforms: AIX 7.2. Portability problems not fixed by Gnulib: • There is no way to define a working ‘thread_local’ macro on some platforms: • Mac OS X 10.5, • OpenBSD 6.5, • AIX 7.1 with gcc (but it works with ‘xlc -qthreaded -qtls’), • HP-UX 11.31 with cc (but it works with gcc), • Android 4.3. 9.81 ‘time.h’ ============= POSIX specification: Gnulib module: time-h Portability problems fixed by Gnulib: • ‘struct timespec’ is not defined on some platforms. • The macro ‘TIME_UTC’ is not defined on many platforms: glibc 2.15, macOS 10.13, FreeBSD 11.0, NetBSD 7.1, OpenBSD 6.0, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • Some platforms provide a ‘NULL’ macro that cannot be used in arbitrary expressions: NetBSD 5.0. Portability problems fixed by the Gnulib module ‘year2038’: • On some platforms where ‘time_t’ defaults to 32-bit but can be changed to 64-bit, functions like ‘stat’ can fail with ‘errno == EOVERFLOW’ when a 32-bit timestamp is out of range, such as with a file timestamp in the far future or past: glibc 2.34+ atop 32-bit x86 or ARM Linux. *Note Avoiding the year 2038 problem::. Portability problems not fixed by Gnulib: • On platforms where ‘time_t’ is always 32-bit, functions like ‘stat’ can fail with ‘errno == EOVERFLOW’ when a timestamp is out of range, such as with a file timestamp in the far future or past; on other such platforms, the functions silently return the low-order 32 bits of the correct timestamp. These platforms will be obsolete when 32-bit ‘time_t’ rolls around, which will occur in 2038 for the typical case when ‘time_t’ is signed. *Note Avoiding the year 2038 problem::. • On some platforms the ‘tv_nsec’ member of ‘struct timespec’ is not of type ‘long’, but is of type ‘long long’ instead: glibc x32 9.82 ‘trace.h’ ============== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. • This header is removed in POSIX.1-2024. 9.83 ‘uchar.h’ ============== Defines the types ‘char16_t’, ‘char32_t’ and declares the functions ‘mbrtoc16’, ‘c16rtomb’, ‘mbrtoc32’, ‘c32rtomb’. Gnulib module: uchar or uchar-c23 Portability problems fixed by either Gnulib module ‘uchar’ or ‘uchar-c23’: • This header file is missing on many non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin, mingw, MSVC 9. • This file is not self-contained on some platforms: Haiku. • This file produces compilation errors in C++ mode on some platforms: AIX 7.2 with xlclang++. Portability problems fixed by Gnulib module ‘uchar-c23’: • ‘char32_t’ values may not be Unicode code points. This is the case in ISO C 11 compliant but not ISO C 23 compliant implementations. Portability problems not fixed by Gnulib: 9.84 ‘ucontext.h’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.35, mingw, MSVC 14. 9.85 ‘ulimit.h’ =============== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. • This header is removed in POSIX.1-2024. 9.86 ‘unistd.h’ =============== POSIX specification: Gnulib module: unistd Portability problems fixed by Gnulib: • This header file is missing on some platforms: MSVC 14. • The type ‘off64_t’ is not defined on some platforms: macOS 12.5, FreeBSD 10.4, NetBSD 10.0, OpenBSD 7.5, MSVC 14, Cygwin, Haiku, Minix 3.3. • The SEEK_* macros are not defined in this file on some platforms: mingw. • The *_FILENO macros are not defined in this file on some platforms: OS/2 EMX, mingw. • The ‘_exit’ function is not declared in this file on some platforms: mingw. • Some platforms provide a ‘NULL’ macro that cannot be used in arbitrary expressions: NetBSD 5.0 Portability problems not fixed by Gnulib: 9.87 ‘utime.h’ ============== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: utime-h Portability problems fixed by Gnulib: • This header file is missing on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This header is removed in POSIX.1-2024. 9.88 ‘utmpx.h’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: FreeBSD 8.4, OpenBSD 7.2, Minix 3.1.8, mingw, MSVC 14, Android 13.0. • While some platforms have the ‘struct utmpx’ field ‘ut_user’, older platforms have the field ‘ut_name’. • The ‘struct utmpx’ field ‘ut_exit’ does not exist on some platforms: macOS, FreeBSD, AIX, Cygwin. • The ‘struct utmpx’ field ‘ut_session’ does not exist on some platforms: macOS, FreeBSD, AIX, HP-UX, Cygwin. • The ‘struct utmpx’ field ‘ut_addr’ or ‘ut_addr_v6’ or ‘ut_ss’ does not exist on some platforms: macOS, FreeBSD, AIX, Solaris. • On some platforms, the ‘struct utmpx’ field ‘ut_tv’ is not of type ‘struct timeval’. Instead, it is a different struct with ‘tv_sec’ and ‘tv_usec’ members that may have different types than the members of ‘struct timeval’: glibc 2.39 on platforms where ‘time_t’ was historically 32 bits and where log file formats were not changed when 64-bit ‘time_t’ was introduced. • On some platforms, this API does not support timestamps past the year 2038: glibc 2.39 on 32-bit platforms like x86 and ARM where ‘time_t’ was historically 32 bits; however, glibc 2.40 is planned to support timestamps up to the year 2106, by changing ‘ut_tv.tv_sec’’s type to be a 32-bit unsigned integer. • On some platforms, this header misbehaves if the ‘year2038’ or ‘year2038-recommended’ modules are used and the program is configured without the ‘--disable-year2038’ option. The ‘readutmp’ module works around this problem: glibc 2.38 on 32-bit platforms like x86 and ARM where ‘time_t’ was historically 32 bits. *Note Avoiding the year 2038 problem::. 9.89 ‘wchar.h’ ============== POSIX specification: Gnulib module: wchar Portability problems fixed by Gnulib: • This header file cannot be included on some platforms: Linux uClibc built without wide character support. • The type ‘wint_t’ is incorrect on some platforms: mingw, MSVC 14. • Some platforms provide a ‘NULL’ macro that cannot be used in arbitrary expressions: NetBSD 5.0 Portability problems not fixed by Gnulib: • This header file leads to link errors and endless recursions or endless loops on some platforms: glibc version 2.5 or older, together with gcc version 4.3 or newer and the option ‘-std=c99’ or ‘-std=gnu99’. 9.90 ‘wctype.h’ =============== POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This header file is missing on some platforms: HP-UX 11.00. • The type ‘wint_t’ is incorrect on some platforms: mingw, MSVC 14. • The functions ‘isw*’ are missing on some platforms: FreeBSD 4.11. Portability problems not fixed by Gnulib: 9.91 ‘wordexp.h’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10 ISO C and POSIX Function Substitutes *************************************** This chapter describes which functions and function-like macros specified by ISO C (including ISO TS 18661-1) or POSIX are substituted by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. The notation “Gnulib module: —” means that Gnulib does not provide a module providing a substitute for the function. When the list “Portability problems not fixed by Gnulib” is empty, such a module is not needed: No portability problems are known. Otherwise, it indicates that such a module would be useful but is not available: No one so far found this function important enough to contribute a substitute for it. If you need this particular function, you may write to ‘’. 10.1 ‘FD_CLR’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.2 ‘FD_ISSET’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.3 ‘FD_SET’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.4 ‘FD_ZERO’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.5 ‘_Exit’ ============ POSIX specification: Gnulib module: _Exit Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.5.x, Android 4.4. Portability problems not fixed by Gnulib: 10.6 ‘_exit’ ============ POSIX specification: Gnulib module: unistd Portability problems fixed by Gnulib: • This function is declared in a different header file (namely, ‘’) on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.7 ‘_longjmp’ =============== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function is removed in POSIX.1-2024. Note: Despite its being removed from POSIX, in 2024 on all systems which have ‘_setjmp’, it is the fastest way to save the registers but not the signal mask (up to 30 times faster than ‘setjmp’ on some systems). 10.8 ‘_setjmp’ ============== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is removed in POSIX.1-2024. Note: Despite its being removed from POSIX, in 2024 on all systems which have ‘_setjmp’, it is the fastest way to save the registers but not the signal mask (up to 30 times faster than ‘setjmp’ on some systems). 10.9 ‘_tolower’ =============== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, Android 4.4. • This function is removed in POSIX.1-2024. Use the function ‘tolower’ instead. 10.10 ‘_toupper’ ================ Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, Android 4.4. • This function is removed in POSIX.1-2024. Use the function ‘toupper’ instead. 10.11 ‘a64l’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, Minix 3.1.8, mingw, MSVC 14, Android 9.0. • This function was not correctly implemented in glibc versions before 2.2.5. 10.12 ‘abort’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • Some platforms mistakenly close all stdio streams prior to raising SIGABRT: Cygwin 1.5.x. • Some platforms always print a message to stderr, even if a SIGABRT handler uses longjmp to resume execution at a safe point: mingw, MSVC 14. 10.13 ‘abs’ =========== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 4.3. 10.14 ‘accept’ ============== POSIX specification: Gnulib module: accept Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), the descriptors returned by the ‘accept’ function cannot be used in calls to ‘read’, ‘write’, and ‘close’; you have to use ‘recv’, ‘send’, ‘closesocket’ in these cases instead. • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. • On HP-UX 11, in 64-bit mode, when the macro ‘_HPUX_ALT_XOPEN_SOCKET_API’ is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide ‘socklen_t’ entity but in fact considers it as a pointer to a 32-bit wide ‘unsigned int’ entity. Portability problems not fixed by Gnulib: • Some platforms don’t have a ‘socklen_t’ type; in this case this function’s third argument type is ‘int *’. • On some platforms, this function’s third argument type is ‘void *’, not ‘socklen_t *’: Solaris 10. 10.15 ‘access’ ============== POSIX specification: Gnulib module: access Portability problems fixed by Gnulib: • This function does not support the ‘X_OK’ mode on some platforms: MSVC 14. • This function does not reject trailing slashes on symlinks to non-directories on some platforms: Mac OS X 10.5. Portability problems not fixed by Gnulib: • This function uses the effective id instead of the real id on some platforms: Cygwin 1.5.x. Other problems of this function: • There is an inherent race between calling this function and performing some action based on the results; you should think twice before trusting this function, especially in a set-uid or set-gid program. • This function does not have an option for not following symbolic links (like ‘stat’ versus ‘lstat’). If you need this option, use the Gnulib module ‘faccessat’ with the ‘AT_EACCESS’ flag. • On Solaris, for the root user, any file is ‘X_OK’ even if the file does not have the ‘x’ permission bit set. • On native Windows, files whose basename does not contain a ‘.’ cannot be executed through ‘execlp’ or ‘execvp’. Nevertheless, this function may return true for such files. • On Windows, different facilities for executing a program have different ways of finding an executable file, by trying various suffixes. For example, ‘execlp’ and ‘execvp’ search for files with the suffixes ‘.com’, ‘.exe’, ‘.bat’, ‘.cmd’, when the file with the given file name does not exist. Whereas ‘cmd.exe’ searches according to the ‘PATHEXT’ environment variable. This function does not perform any search; it merely looks at the file with the given file name. 10.16 ‘acos’ ============ POSIX specification: Gnulib module: acos Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.17 ‘acosf’ ============= POSIX specification: Gnulib module: acosf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.18 ‘acosh’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 9. 10.19 ‘acoshf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 9. 10.20 ‘acoshl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.21 ‘acosl’ ============= POSIX specification: Gnulib module: acosl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.22 ‘aio_cancel’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.23 ‘aio_error’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.24 ‘aio_fsync’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.25 ‘aio_read’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.26 ‘aio_return’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.27 ‘aio_suspend’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.28 ‘aio_write’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.29 ‘alarm’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function has no impact if SIGALRM is inherited as ignored; programs should use signal (SIGALRM, SIG_DFL) if it is important to ensure the alarm will fire. • Use of this function in multi-threaded applications is not advised. • This function is missing on some platforms: mingw (2011), MSVC 14. • This function is conditionally declared in the non-standard ‘’ header on some platforms: mingw (2012 or newer). 10.30 ‘aligned_alloc’ ===================== Documentation: man aligned_alloc Gnulib module: aligned_alloc Portability problems fixed by Gnulib: • This function fails if the alignment argument is smaller than ‘sizeof (void *)’ on some platforms: macOS 11.1, AIX 7.3.1. Portability problems not fixed by Gnulib: • On some platforms, ‘aligned_alloc’ crashes if the requested size is not a multiple of the alignment: AddressSanitizer (gcc 11.2 or clang 13). • This function is missing on many older platforms: glibc 2.15, macOS 10.13, FreeBSD 6.4, NetBSD 7.1, OpenBSD 6.0, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Gnulib has partial substitutes for ‘aligned_alloc’ that do not crash even if the AddressSanitizer bug is present: • The Gnulib module ‘alignalloc’ provides a portable function ‘alignalloc’ that is a near-substitute for glibc ‘aligned_alloc’, except that the result must be freed with ‘alignfree’ rather than plain ‘free’. • The Gnulib module ‘aligned-malloc’ provides functions for allocating and freeing blocks of suitably aligned memory. • The Gnulib module ‘pagealign_alloc’ provides a similar API for allocating and freeing blocks of memory aligned on a system page boundary. 10.31 ‘alphasort’ ================= POSIX specification: Gnulib module: alphasort Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 9, mingw, MSVC 14. Portability problems not fixed by Gnulib: • The parameters of this function are declared as ‘const void *’ on some platforms: glibc 2.3.6, macOS 10.7, FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7. • The parameters of this function are declared as ‘void *’ on some platforms: AIX 5.1. 10.32 ‘asctime’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is deprecated in C23. Likewise, POSIX says this function is obsolescent and it is planned to be removed in a future version. Portable applications can use ‘strftime’ (or even ‘sprintf’) instead. However, ‘strftime’ is locale dependent. • This function may overflow its internal buffer if its argument specifies a year before 1000 or after 9999. *Note ctime::. • Although it is tempting to call this function on the value that functions like ‘localtime’ return, this is typically a mistake. On most current platforms, these functions return a null pointer for timestamps out of range, and this function has undefined behavior in that case. 10.33 ‘asctime_r’ ================= Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: extensions Portability problems fixed by Gnulib: • This function has an incompatible declaration on some platforms: Solaris 11.4 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function is removed in POSIX.1-2024. Use the function ‘strftime’ (or even ‘sprintf’) instead. However, ‘strftime’ is locale dependent. • This function may overflow its output buffer if its argument specifies a year before 1000 or after 9999. *Note ctime::. • Although it is tempting to call this function on the value that functions like ‘localtime’ return, this is typically a mistake. On most current platforms, these functions return a null pointer for timestamps out of range, and this function has undefined behavior in that case. 10.34 ‘asin’ ============ POSIX specification: Gnulib module: asin Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.35 ‘asinf’ ============= POSIX specification: Gnulib module: asinf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.36 ‘asinh’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 9. 10.37 ‘asinhf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 9. 10.38 ‘asinhl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.39 ‘asinl’ ============= POSIX specification: Gnulib module: asinl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.40 ‘assert’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: Extension: Gnulib offers a module ‘assert’ that allows the installer to disable assertions through a ‘configure’ option: ‘--disable-assert’. 10.41 ‘atan’ ============ POSIX specification: Gnulib module: atan Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.42 ‘atan2’ ============= POSIX specification: Gnulib module: atan2 Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.43 ‘atan2f’ ============== POSIX specification: Gnulib module: atan2f Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.44 ‘atan2l’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.45 ‘atanf’ ============= POSIX specification: Gnulib module: atanf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.46 ‘atanh’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 9. 10.47 ‘atanhf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 9. 10.48 ‘atanhl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.49 ‘atanl’ ============= POSIX specification: Gnulib module: atanl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.50 ‘atexit’ ============== POSIX specification: Gnulib module: atexit Portability problems fixed by Gnulib: • This function is missing on some old platforms. Portability problems not fixed by Gnulib: 10.51 ‘atof’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 4.4. • This function mis-parses strings with leading ‘+’ on some old platforms: Old versions of Linux. • This function returns a positive value for negative underflow on some platforms: glibc 2.4, Mingw, Cygwin. • This function fails to do a valid parse of ‘-0x’ on some platforms: glibc 2.4, Cygwin < 1.5.25-11. • This function fails to parse Infinities and plain NaNs on some platforms: Mingw, OpenBSD 4.0. • This function fails to parse NaN() on some platforms: Mingw, OpenBSD 4.0, Cygwin < 1.5.25-11. • This function fails to parse NaN(n-char-sequence) on some platforms: Mingw, OpenBSD 4.0. • This function fails to parse C99 hexadecimal floating point on some platforms: Mingw, OpenBSD 4.0. • This function fails to correctly parse very long strings on some platforms: Mingw, Cygwin. 10.52 ‘atoi’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.53 ‘atol’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.54 ‘atoll’ ============= POSIX specification: Gnulib module: atoll Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.23, MSVC 9. Portability problems not fixed by Gnulib: 10.55 ‘basename’ ================ POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • glibc and Android have two different functions ‘basename’: the POSIX version and the GNU version. • ‘basename’ assumes file names in POSIX syntax; it does not work with file names in Windows syntax. The Gnulib module ‘basename-lgpl’ provides similar API, with a function ‘last_component’, that also works with Windows file names. 10.56 ‘bind’ ============ POSIX specification: Gnulib module: bind Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: 10.57 ‘bsearch’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.58 ‘btowc’ ============= POSIX specification: Gnulib module: btowc Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. • This function returns WEOF for a NUL argument on some platforms: Cygwin 1.7.2. • In the C or POSIX locales, this function is not consistent with Gnulib’s ‘mbrtowc’ and can return ‘WEOF’: glibc 2.35, MirOS BSD #10. • In the C or POSIX locales, this function is not consistent with ‘mbrtowc’ on some platforms: mingw. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘btoc32’, provided by Gnulib module ‘btoc32’, operates on 32-bit wide characters and therefore does not have this limitation. 10.59 ‘c8rtomb’ =============== Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on most platforms: glibc 2.29, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.4.6, mingw, MSVC 14, Android 9.0. 10.60 ‘c16rtomb’ ================ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on most non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 3.4.6, mingw, MSVC 9, Android 4.4. 10.61 ‘c32rtomb’ ================ Gnulib module: c32rtomb Portability problems fixed by Gnulib: • This function is missing on most non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 3.4.6, mingw, MSVC 9, Android 4.4. • This function returns 0 when the first argument is NULL in some locales on some platforms: AIX 7.2. Portability problems not fixed by Gnulib: • This function is only defined as an inline function on some platforms: Haiku 2020. 10.62 ‘cabs’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 9. 10.63 ‘cabsf’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 9. 10.64 ‘cabsl’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 10.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. 10.65 ‘cacos’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.66 ‘cacosf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.67 ‘cacosh’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.68 ‘cacoshf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.69 ‘cacoshl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.70 ‘cacosl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.71 ‘calloc’ ============== POSIX specification: Gnulib module: calloc-posix Portability problems fixed by Gnulib: • Upon failure, the function does not set ‘errno’ to ‘ENOMEM’ on some platforms: mingw, MSVC 14. • On some platforms, ‘calloc (n, s)’ can succeed even if multiplying ‘n’ by ‘s’ would exceed ‘PTRDIFF_MAX’ or ‘SIZE_MAX’. Although failing to check for exceeding ‘PTRDIFF_MAX’ is arguably allowed by POSIX it can lead to undefined behavior later, so ‘calloc-posix’ does not allow going over the limit. Extension: Gnulib provides a module ‘calloc-gnu’ that substitutes a ‘calloc’ implementation that behaves more like the glibc implementation. It fixes this portability problem: • ‘calloc (0, s)’ and ‘calloc (n, 0)’ return ‘NULL’ on success on some platforms: AIX 7.2. 10.72 ‘call_once’ ================= Documentation: *note Call Once: (libc)Call Once. Gnulib module: call_once Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: • This function makes applications hang forever on some platforms: Cygwin 3.5.3. • This function does not work on some platforms: Haiku. 10.73 ‘canonicalize’ ==================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.74 ‘canonicalizef’ ===================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.75 ‘canonicalizel’ ===================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.76 ‘carg’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.77 ‘cargf’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.78 ‘cargl’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. 10.79 ‘casin’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.80 ‘casinf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.81 ‘casinh’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.82 ‘casinhf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.83 ‘casinhl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.84 ‘casinl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.85 ‘catan’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.86 ‘catanf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.87 ‘catanh’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.88 ‘catanhf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. 10.89 ‘catanhl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.90 ‘catanl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.91 ‘catclose’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 7.1. 10.92 ‘catgets’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 7.1. 10.93 ‘catopen’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 7.1. 10.94 ‘cbrt’ ============ POSIX specification: Gnulib module: cbrt Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. Portability problems not fixed by Gnulib: 10.95 ‘cbrtf’ ============= POSIX specification: Gnulib module: cbrtf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. Portability problems not fixed by Gnulib: 10.96 ‘cbrtl’ ============= POSIX specification: Gnulib module: cbrtl or cbrtl-ieee Portability problems fixed by either Gnulib module ‘cbrtl’ or ‘cbrtl-ieee’ • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. • This function produces grossly wrong results on some platforms: OpenBSD 5.1/SPARC. Portability problems fixed by Gnulib module ‘cbrtl-ieee’: Portability problems not fixed by Gnulib: 10.97 ‘ccos’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.98 ‘ccosf’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.99 ‘ccosh’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.100 ‘ccoshf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.101 ‘ccoshl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.102 ‘ccosl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.103 ‘ceil’ ============= POSIX specification: Gnulib module: ceil or ceil-ieee Portability problems fixed by either Gnulib module ‘ceil’ or ‘ceil-ieee’: Portability problems fixed by Gnulib module ‘ceil-ieee’: • This function returns a positive zero for an argument between −1 and 0 on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: 10.104 ‘ceilf’ ============== POSIX specification: Gnulib module: ceilf or ceilf-ieee Portability problems fixed by either Gnulib module ‘ceilf’ or ‘ceilf-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘ceilf-ieee’: • This function returns a positive zero for an argument between −1 and 0 on some platforms: macOS 10.13, AIX 7.1. Portability problems not fixed by Gnulib: 10.105 ‘ceill’ ============== POSIX specification: Gnulib module: ceill or ceill-ieee Portability problems fixed by either Gnulib module ‘ceill’ or ‘ceill-ieee’: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function returns a wrong result for small arguments on some platforms: OpenBSD 5.6. Portability problems fixed by Gnulib module ‘ceill-ieee’: Portability problems not fixed by Gnulib: 10.106 ‘cexp’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.107 ‘cexpf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.108 ‘cexpl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.109 ‘cfgetispeed’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 10.110 ‘cfgetospeed’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 10.111 ‘cfsetispeed’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 10.112 ‘cfsetospeed’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 10.113 ‘chdir’ ============== POSIX specification: Gnulib module: chdir Portability problems fixed by Gnulib: • This function is declared in different header files (namely, ‘’ or ‘’) on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.114 ‘chmod’ ============== POSIX specification: Gnulib module: chmod Portability problems fixed by Gnulib: • This function does not fail when the file name argument ends in a slash and (without the slash) names a non-directory, on some platforms: AIX 7.2. • This function fails with a wrong error code (EINVAL instead of ENOTDIR) when the file name argument ends in a slash and (without the slash) names a non-directory, on some platforms: mingw, MSVC. Portability problems not fixed by Gnulib: • This function sometimes fails with ‘EACCES’ when the failure is due to lack of appropriate privileges (‘EPERM’), not to search permission denied on the file name prefix (‘EACCES’): Linux kernel 5.15 with glibc 2.35 and a CIFS v1 file system (see ). 10.115 ‘chown’ ============== POSIX specification: Gnulib module: chown Portability problems fixed by Gnulib: • Some platforms fail to detect trailing slash on non-directories, as in ‘chown("link-to-file/",uid,gid)’: macOS 12.5, FreeBSD 7.2, AIX 7.3.1, Solaris 9. • Some platforms fail to update the change time when at least one argument was not −1, but no ownership changes resulted: OpenBSD 7.2. • When passed an argument of −1, some implementations really set the owner user/group id of the file to this value, rather than leaving that id of the file alone: some very old platforms. • When applied to a symbolic link, some implementations don’t dereference the symlink, i.e. they behave like ‘lchown’: some very old platforms. • This function is missing on some platforms; however, the replacement always fails with ‘ENOSYS’: mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function sometimes fails with ‘EACCES’ when the failure is due to lack of appropriate privileges (‘EPERM’), not to search permission denied on the file name prefix (‘EACCES’): Linux kernel 5.15 with glibc 2.35 and a CIFS v1 file system (see ). 10.116 ‘cimag’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.117 ‘cimagf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.118 ‘cimagl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. 10.119 ‘clearerr’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.120 ‘clock’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.121 ‘clock_getcpuclockid’ ============================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. 10.122 ‘clock_getres’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, Minix 3.1.8, mingw, MSVC 14. • On many platforms, this function returns a value other than the clock resolution of ‘clock_gettime’, i.e., the minimum distance between differing timestamps. For example, on AIX 7.2 it returns 10 milliseconds even though the clock resolution is 1 microsecond. Conversely, on GNU/Linux it typically returns 1 nanosecond even though the clock resolution may be greater. The Gnulib module ‘gettime-res’ is a partial substitute; it implements the ‘CLOCK_REALTIME’ functionality of ‘clock_getres’, and fixes the too-high resolution bug of platforms like AIX 7.2. 10.123 ‘clock_gettime’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, Minix 3.1.8, mingw, MSVC 14. • This function leaves the upper 32 bits of the ‘tv_sec’ field of the result uninitialized on some platforms: mingw in 32-bit mode. The Gnulib modules ‘gettime’ and ‘timespec_get’ are partial substitutes; they implement the ‘CLOCK_REALTIME’ functionality of ‘clock_gettime’. 10.124 ‘clock_nanosleep’ ======================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, FreeBSD 11.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14. 10.125 ‘clock_settime’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, Minix 3.1.8, Cygwin 1.7.9, mingw, MSVC 14. 10.126 ‘clog’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 7.1. 10.127 ‘clogf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 7.1. 10.128 ‘clogl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.129 ‘close’ ============== POSIX specification: Gnulib module: close Portability problems fixed by Gnulib: • This function is declared in a different header file (namely, ‘’) on some platforms: MSVC 14. • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. • On Windows platforms (excluding Cygwin), ‘socket’ and ‘accept’ do not return file descriptors that can be closed by ‘close’. Instead, ‘closesocket’ must be used. Portability problems not fixed by Gnulib: 10.130 ‘closedir’ ================= POSIX specification: Gnulib module: closedir Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.131 ‘closelog’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.132 ‘cnd_broadcast’ ====================== Documentation: *note Condition Variables: (libc)ISO C Condition Variables. Gnulib module: cnd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.133 ‘cnd_destroy’ ==================== Documentation: *note Condition Variables: (libc)ISO C Condition Variables. Gnulib module: cnd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.134 ‘cnd_init’ ================= Documentation: *note Condition Variables: (libc)ISO C Condition Variables. Gnulib module: cnd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.135 ‘cnd_signal’ =================== Documentation: *note Condition Variables: (libc)ISO C Condition Variables. Gnulib module: cnd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.136 ‘cnd_timedwait’ ====================== Documentation: *note Condition Variables: (libc)ISO C Condition Variables. Gnulib module: cnd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.137 ‘cnd_wait’ ================= Documentation: *note Condition Variables: (libc)ISO C Condition Variables. Gnulib module: cnd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.138 ‘confstr’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.139 ‘conj’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.140 ‘conjf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.141 ‘conjl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. 10.142 ‘connect’ ================ POSIX specification: Gnulib module: connect Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: 10.143 ‘copysign’ ================= POSIX specification: Gnulib module: copysign Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. Portability problems not fixed by Gnulib: 10.144 ‘copysignf’ ================== POSIX specification: Gnulib module: copysignf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. Portability problems not fixed by Gnulib: 10.145 ‘copysignl’ ================== POSIX specification: Gnulib module: copysignl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. Portability problems not fixed by Gnulib: 10.146 ‘cos’ ============ POSIX specification: Gnulib module: cos Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.147 ‘cosf’ ============= POSIX specification: Gnulib module: cosf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.148 ‘cosh’ ============= POSIX specification: Gnulib module: cosh Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.149 ‘coshf’ ============== POSIX specification: Gnulib module: coshf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.150 ‘coshl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.151 ‘cosl’ ============= POSIX specification: Gnulib module: cosl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.152 ‘cpow’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 7.1. 10.153 ‘cpowf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 7.1. 10.154 ‘cpowl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.155 ‘cproj’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. • The glibc implementation is or was broken. 10.156 ‘cprojf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. • The glibc implementation is or was broken. 10.157 ‘cprojl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. • The glibc implementation is or was broken. 10.158 ‘creal’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.159 ‘crealf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.160 ‘creall’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. 10.161 ‘creat’ ============== POSIX specification: Gnulib module: creat Portability problems fixed by Gnulib: • This function does not support modes with execution bits (such as 0700) on some platforms: MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, ‘creat’ may not work correctly with files 2 GiB and larger. *Note Large File Support::. • This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file, on some platforms: FreeBSD 7.2, AIX 7.1, HP-UX 11.31, Solaris 9. Portability problems not fixed by Gnulib: • On Windows, this function returns a file handle in ‘O_TEXT’ mode. If you need a file handle in ‘O_BINARY’ mode, you need to use the function ‘open’ instead. 10.162 ‘crypt’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.34, FreeBSD 6.0, NetBSD 5.0, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is not declared in ‘’ (without ‘-D_GNU_SOURCE’) on some platforms: glibc (at least 2.11–2.13). 10.163 ‘csin’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.164 ‘csinf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.165 ‘csinh’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.166 ‘csinhf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.167 ‘csinhl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.168 ‘csinl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.169 ‘csqrt’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.170 ‘csqrtf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.171 ‘csqrtl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. 10.172 ‘ctan’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.173 ‘ctanf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.174 ‘ctanh’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.175 ‘ctanhf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. 10.176 ‘ctanhl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.177 ‘ctanl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. 10.178 ‘ctermid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.179 ‘ctime’ ============== POSIX specification: Gnulib module: ctime Portability problems fixed by Gnulib: • On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable ‘TZ’ has been set by Cygwin. Portability problems not fixed by Gnulib: • This function is deprecated in C23. Likewise, POSIX says this function is obsolescent and it is planned to be removed in a future version. Portable applications can use ‘localtime_r’ and ‘strftime’ (or even ‘sprintf’) instead. However, ‘localtime_r’ can fail and ‘strftime’ is locale dependent. • This function may overflow its internal buffer if its argument specifies a time before the year 1000 or after the year 9999. • This function may dereference an internal null pointer if its argument specifies a time before the year ‘INT_MIN’+1900 or after the year ‘INT_MAX’+1900. • The ‘ctime’ function need not be reentrant, and consequently is not required to be thread safe. Implementations of ‘ctime’ typically write the timestamp into static buffer. If two threads call ‘ctime’ at roughly the same time, you might end up with the wrong date in one of the threads, or some undefined string. • Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX. *Note tzset::. Although ‘ctime’ and related functions ‘asctime’, ‘asctime_r’ and ‘ctime_r’ formerly were plausible to use, they are now unsafe in general, and should be avoided. Decades ago when ‘time_t’ was narrow and there was no ‘strftime’ or internationalization, code could call these functions and then select the parts needed. For example, in Unix 7th Edition ‘/usr/src/cmd/ls.c’ (1979): cp = ctime(&p->lmtime); if(p->lmtime < year) printf(" %-7.7s %-4.4s ", cp+4, cp+20); else printf(" %-12.12s ", cp+4); This had well-defined behavior when ‘time_t’ was only 32 bits and so was OK for circa 1979 platforms. However, today’s platforms have a ‘time_t’ so wide that the year might not be in the range [1000, 9999]. In this case the behavior of ‘ctime’ is undefined and some platforms behave badly, overrunning a buffer or dereferencing an internal null pointer; and even on platforms where no undefined behavior occurs, the 7th Edition code generates wrong output for out-of-range years, because it incorrectly assumes that every year is represented by exactly four digits. 10.180 ‘ctime_r’ ================ Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: extensions Portability problems fixed by Gnulib: • This function has an incompatible declaration on some platforms: Solaris 11.4 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function is removed in POSIX.1-2024. Use the functions ‘localtime_r’ and ‘strftime’ (or even ‘sprintf’) instead. However, ‘localtime_r’ can fail and ‘strftime’ is locale dependent. • This function may overflow its output buffer if its argument specifies a time before the year 1000 or after the year 9999. *Note ctime::. • This function may dereference an internal null pointer if its argument specifies a time before the year ‘INT_MIN’+1900 or after the year ‘INT_MAX’+1900. 10.181 ‘daddl’ ============== Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.182 ‘daylight’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: FreeBSD 14.0, OpenBSD 3.8. • The address of this variable is not a compile-time constant on some platforms: Cygwin, mingw. • Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX. *Note tzset::. A more portable way of getting the UTC offset is to use ‘strftime’ with the ‘%z’ format. *Note strftime::. 10.183 ‘dbm_clearerr’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.184 ‘dbm_close’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.185 ‘dbm_delete’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.186 ‘dbm_error’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.187 ‘dbm_fetch’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.188 ‘dbm_firstkey’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.189 ‘dbm_nextkey’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.190 ‘dbm_open’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.191 ‘dbm_store’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.192 ‘ddivl’ ============== Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.193 ‘difftime’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.194 ‘dirfd’ ============== POSIX specification: Gnulib module: dirfd Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 7.1, HP-UX 11, Solaris 10, mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function always fails on some platforms: mingw. • There is a ‘dirfd’ macro but no function, and the macro does not work with an argument of type ‘void *’, as a function would: NetBSD 9.2. 10.195 ‘dirname’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • ‘dirname’ assumes file names in POSIX syntax; it does not work with file names in Windows syntax. The Gnulib module ‘dirname’ provides similar API, with functions ‘dir_name’ and ‘mdir_name’, that also works with Windows file names. 10.196 ‘div’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.197 ‘dlclose’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.198 ‘dlerror’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.199 ‘dlopen’ =============== POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • If the file name argument is not absolute, the file is searched for. The search algorithm is system specific. 10.200 ‘dlsym’ ============== POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • The visibility of symbols loaded in dependent shared libraries or present in the main executable is system dependent. 10.201 ‘dmull’ ============== Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.202 ‘dprintf’ ================ POSIX specification: Gnulib module: dprintf or dprintf-posix or dprintf-gnu Portability problems fixed by either Gnulib module ‘dprintf’ or ‘dprintf-posix’ or ‘dprintf-gnu’: • This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14. Portability problems fixed by either Gnulib module ‘dprintf-posix’ or ‘dprintf-gnu’: • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, Solaris 11.4, Cygwin 2.9.0. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: Solaris 11.4. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Solaris 11.4. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, Solaris 11.4, Cygwin 2.9.0. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Solaris 11.4. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. Portability problems fixed by Gnulib module ‘dprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘dprintf-posix’ or ‘dprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.203 ‘drand48’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.204 ‘dsubl’ ============== Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.205 ‘dup’ ============ POSIX specification: Gnulib module: dup Portability problems fixed by Gnulib: • This function is declared in a different header file (namely, ‘’) on some platforms: MSVC 14. • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.206 ‘dup2’ ============= POSIX specification: Gnulib module: dup2 Portability problems fixed by Gnulib: • This function is declared in a different header file (namely, ‘’) on some platforms: MSVC 14. • This function always returns 0 for success on some platforms: mingw, MSVC 14. • This function can hang when duplicating an fd to itself on some platforms: mingw, MSVC 14. • This function crashes when invoked with invalid arguments on some platforms: Cygwin 1.7.17, MSVC 14. • This function crashes when invoked with valid arguments on some platforms: Cygwin 1.7.25. • This function fails with ‘EINVAL’ when duplicating an fd to itself: Android. • This function resets the ‘FD_CLOEXEC’ flag when duplicating an fd to itself on some platforms: Haiku. • This function returns 0 for ‘dup2 (1, 1)’ on some platforms: Cygwin 1.5.x. • This function may return ‘-EBADF’ instead of ‘-1’ on some platforms: Linux releases between July 2008 and May 2009 (versions 2.6.27 to 2.6.29). • This function returns ‘EMFILE’ instead of ‘EBADF’ for large targets, which interferes with using ‘dup2(fd,fd)==fd)’ as the minimal ‘EBADF’ filter: AIX 7.1, FreeBSD 6.1, Cygwin 1.5. Portability problems not fixed by Gnulib: 10.207 ‘duplocale’ ================== POSIX specification: Gnulib module: duplocale Portability problems fixed by Gnulib: • The argument ‘LC_GLOBAL_LOCALE’ is not supported on some platforms: glibc 2.11, AIX 7.1. • With the argument ‘LC_GLOBAL_LOCALE’, this function returns a wrong result on some platforms: NetBSD 7.1. Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 9.0, NetBSD 5.0, OpenBSD 6.1, Minix 3.1.8, AIX 6.1, HP-UX 11, Solaris 11.3, Cygwin 2.5.x, mingw, MSVC 14, Android 4.4. • This function is useless because the ‘locale_t’ type is not defined on some platforms: z/OS. • With the argument ‘LC_GLOBAL_LOCALE’, this function returns a wrong result on some platforms: Haiku. 10.208 ‘encrypt’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is not declared in ‘’ (without ‘-D_GNU_SOURCE’) on some platforms: glibc (at least 2.11–2.13). • POSIX 202x says this function is obsolescent and it is planned to be removed in a future version. 10.209 ‘endgrent’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.210 ‘endhostent’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 8.1. 10.211 ‘endnetent’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14, Android 8.1. 10.212 ‘endprotoent’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 8.1. 10.213 ‘endpwent’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.214 ‘endservent’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.215 ‘endutxent’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.216 ‘environ’ ================ POSIX specification: Gnulib module: environ Portability problems fixed by Gnulib: • POSIX does not require this variable to be declared, and it is indeed not declared on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Solaris 11.4. • On macOS, this variable is not declared. Up to Mac OS X 10.4, one can use extern char **environ; to get the variable declared. This does not work any more, however, in shared libraries on macOS 11.1. Here is a workaround: Instead, one can use #include #define environ (*_NSGetEnviron()) This works at all versions of macOS. • On Cygwin in 64-bit mode, references to this variable cause a link error when the option ‘-Wl,--disable-auto-import’ is in use. Portability problems not fixed by Gnulib: • The address of this variable is not a compile-time constant on some platforms: mingw. • Assigning NULL to ‘environ’ to clear all variables is not portable; better is to assign ‘environ’ to one-element array containing a NULL pointer. That said, an empty environment is not portable either, as some systems may require particular environment variables (such as ‘PATH’) to be present in order to operate consistently. 10.217 ‘erand48’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.218 ‘erf’ ============ POSIX specification: Gnulib module: erf Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. 10.219 ‘erfc’ ============= POSIX specification: Gnulib module: erfc Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. 10.220 ‘erfcf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.221 ‘erfcl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.222 ‘erff’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.223 ‘erfl’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.224 ‘errno’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows, the socket functions don’t set ‘errno’; their error code is available through ‘WSAGetLastError()’ instead. 10.225 ‘execl’ ============== POSIX specification: Gnulib module: execl Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. • On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child’s exit status. • On Windows platforms (excluding Cygwin), the return type of this function is ‘intptr_t’, not ‘int’. Note: The Gnulib replacement for this function is not async-safe, that is, it must not be invoked from a signal handler. Portability problems not fixed by Gnulib: • On some platforms, a script without executable permission is still run: Cygwin 1.5.x. 10.226 ‘execle’ =============== POSIX specification: Gnulib module: execle Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. • On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child’s exit status. • On Windows platforms (excluding Cygwin), the return type of this function is ‘intptr_t’, not ‘int’. Note: The Gnulib replacement for this function is not async-safe, that is, it must not be invoked from a signal handler. Portability problems not fixed by Gnulib: • On some platforms, a script without executable permission is still run: Cygwin 1.5.x. 10.227 ‘execlp’ =============== POSIX specification: Gnulib module: execlp Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. • On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child’s exit status. • On Windows platforms (excluding Cygwin), the return type of this function is ‘intptr_t’, not ‘int’. Portability problems not fixed by Gnulib: • On some platforms, a script without executable permission is still run: Cygwin 1.5.x. 10.228 ‘execv’ ============== POSIX specification: Gnulib module: execv Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. • On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child’s exit status. • On Windows platforms (excluding Cygwin), the return type of this function is ‘intptr_t’, not ‘int’. Note: The Gnulib replacement for this function is not async-safe, that is, it must not be invoked from a signal handler. Portability problems not fixed by Gnulib: • On some platforms, a script without executable permission is still run: Cygwin 1.5.x. 10.229 ‘execve’ =============== POSIX specification: Gnulib module: execve Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. • On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child’s exit status. • On Windows platforms (excluding Cygwin), the return type of this function is ‘intptr_t’, not ‘int’. Note: The Gnulib replacement for this function is not async-safe, that is, it must not be invoked from a signal handler. Portability problems not fixed by Gnulib: • On some platforms, a script without executable permission is still run: Cygwin 1.5.x. 10.230 ‘execvp’ =============== POSIX specification: Gnulib module: execvp Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. • On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child’s exit status. • On Windows platforms (excluding Cygwin), the return type of this function is ‘intptr_t’, not ‘int’. Portability problems not fixed by Gnulib: • On some platforms, a script without executable permission is still run: Cygwin 1.5.x. 10.231 ‘exit’ ============= POSIX specification: Gnulib module: stdlib Portability problems fixed by Gnulib: • Some problems with the macros ‘EXIT_SUCCESS’ and ‘EXIT_FAILURE’, see *note stdlib.h::. Portability problems not fixed by Gnulib: 10.232 ‘exp’ ============ POSIX specification: Gnulib module: exp Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.233 ‘exp2’ ============= POSIX specification: Gnulib module: exp2 Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. • This function returns grossly wrong results on some platforms: OpenBSD 4.9. Portability problems not fixed by Gnulib: 10.234 ‘exp2f’ ============== POSIX specification: Gnulib module: exp2f Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. Portability problems not fixed by Gnulib: 10.235 ‘exp2l’ ============== POSIX specification: Gnulib module: exp2l or exp2l-ieee Portability problems fixed by either Gnulib module ‘exp2l’ or ‘exp2l-ieee’: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. • This function returns Infinity instead of large finite values on some platforms: NetBSD 10.0/i386. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0/x86_64. Portability problems fixed by Gnulib module ‘exp2l-ieee’: • This function returns a wrong value for a NaN argument on some platforms: OpenBSD 4.9. Portability problems not fixed by Gnulib: 10.236 ‘expf’ ============= POSIX specification: Gnulib module: expf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.237 ‘expl’ ============= POSIX specification: Gnulib module: expl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function returns 0.0 for all arguments on some platforms: Haiku 2017. • This function returns NaN for small operands on some platforms: OpenBSD 5.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 10.0. Portability problems not fixed by Gnulib: 10.238 ‘expm1’ ============== POSIX specification: Gnulib module: expm1 or expm1-ieee Portability problems fixed by either Gnulib module ‘expm1’ or ‘expm1-ieee’: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 9. Portability problems fixed by Gnulib module ‘expm1-ieee’: • This function has problems when the argument is minus zero on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: 10.239 ‘expm1f’ =============== POSIX specification: Gnulib module: expm1f or expm1f-ieee Portability problems fixed by either Gnulib module ‘expm1f’ or ‘expm1f-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 9. Portability problems fixed by Gnulib module ‘expm1f-ieee’: • This function returns a positive zero for a minus zero argument on some platforms: AIX 7.2. Portability problems not fixed by Gnulib: 10.240 ‘expm1l’ =============== POSIX specification: Gnulib module: expm1l Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. • This function returns 0 instead of small positive values on some platforms: NetBSD 10.0/i386. • This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, Mac OS X 10.5, NetBSD 10.0/x86_64. Portability problems not fixed by Gnulib: 10.241 ‘fabs’ ============= POSIX specification: Gnulib module: fabs Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.242 ‘fabsf’ ============== POSIX specification: Gnulib module: fabsf Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.243 ‘fabsl’ ============== POSIX specification: Gnulib module: fabsl Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.244 ‘faccessat’ ================== POSIX specification: Gnulib module: faccessat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 10.12, FreeBSD 7.4, NetBSD 6.1.5, OpenBSD 4.9, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. • On some platforms, ‘faccessat (dfd, "file/", amode, flag)’ succeeds instead of failing when ‘file’ is not a directory. macOS 11.1. Portability problems not fixed by Gnulib: • The replacement does not always take ACLs into account. • The replacement is not safe to be used in libraries. • The replacement is not multithread-safe. • The replacement does not support the ‘AT_SYMLINK_NOFOLLOW’ flag, which is supported by GNU ‘faccessat’. • On some platforms, ‘faccessat’ can mishandle ‘AT_EACCESS’ after a process starts as root and then becomes non-root: GNU/Linux with glibc 2.32. Other problems of this function: • There is an inherent race between calling this function and performing some action based on the results; you should think twice before trusting this function, especially in a set-uid or set-gid program. 10.245 ‘fadd’ ============= Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.246 ‘faddl’ ============== Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.247 ‘fattach’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.248 ‘fchdir’ =============== POSIX specification: Gnulib module: fchdir Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. Portability problems not fixed by Gnulib: 10.249 ‘fchmod’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function sometimes fails with ‘EACCES’ when the failure is due to lack of appropriate privileges (‘EPERM’), not to search permission denied on the file name prefix (‘EACCES’): Linux kernel 5.15 with glibc 2.35 and a CIFS v1 file system (see ). 10.250 ‘fchmodat’ ================= POSIX specification: Gnulib module: fchmodat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. • This function does not fail when the file name argument ends in a slash and (without the slash) names a non-directory, on some platforms: AIX 7.2. • When given the ‘AT_SYMLINK_NOFOLLOW’ flag, this function fails with ‘errno’ set to ‘ENOTSUP’, even when the file is not a symbolic link: GNU/Linux with glibc 2.31, Cygwin 2.9. Portability problems not fixed by Gnulib: • Some platforms do not allow changing the access bits on symbolic links. • If the ‘AT_SYMLINK_NOFOLLOW’ flag is specified, this function can fail with ‘errno’ set to ‘EMFILE’ or ‘ENFILE’, and it fails with ‘errno’ set to ‘EOPNOTSUPP’ if the ‘/proc’ file system is not mounted: GNU/Linux with glibc 2.34. • This function sometimes fails with ‘EACCES’ when the failure is due to lack of appropriate privileges (‘EPERM’), not to search permission denied on the file name prefix (‘EACCES’): Linux kernel 5.15 with glibc 2.35 and a CIFS v1 file system (see ). 10.251 ‘fchown’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function sometimes fails with ‘EACCES’ when the failure is due to lack of appropriate privileges (‘EPERM’), not to search permission denied on the file name prefix (‘EACCES’): Linux kernel 5.15 with glibc 2.35 and a CIFS v1 file system (see ). 10.252 ‘fchownat’ ================= POSIX specification: Gnulib module: fchownat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. Also, the replacement may fail to change symlinks if ‘lchown’ is unsupported, or fail altogether if ‘chown’ is unsupported. • This function is declared in ‘’, not in ‘’, on some platforms: Android 4.3. • Some platforms fail to detect trailing slash on non-directories, as in ‘fchown(dir,"link-to-file/",uid,gid,flag)’: Solaris 9. • Some platforms mistakenly dereference symlinks when using ‘AT_SYMLINK_NOFOLLOW’: Linux kernel 2.6.17. • This function does not fail for an empty filename on some platforms: Linux with glibc < 2.11. Portability problems not fixed by Gnulib: • This function sometimes fails with ‘EACCES’ when the failure is due to lack of appropriate privileges (‘EPERM’), not to search permission denied on the file name prefix (‘EACCES’): Linux kernel 5.15 with glibc 2.35 and a CIFS v1 file system (see ). 10.253 ‘fclose’ =============== POSIX specification: Gnulib module: fclose Portability problems fixed by Gnulib: • On some platforms, this function fails to set the file position of a seekable input stream to the byte after the last one actually read: glibc 2.34, FreeBSD, AIX 7.2. • This function crashes if the stream’s file descriptor has already been closed on some platforms: MSVC 14. • On Windows platforms (excluding Cygwin), ‘socket’ and ‘accept’ followed by ‘fdopen’ do not return streams that can be closed by ‘fclose’. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. 10.254 ‘fcntl’ ============== POSIX specification: LSB specification: Gnulib module: fcntl Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function does not support ‘F_DUPFD_CLOEXEC’ on some platforms: glibc with Linux kernels before 2.6.24, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, AIX 7.1, HP-UX 11, Solaris 11 2010-11, Cygwin 1.7.1. Note that the gnulib replacement code is functional but not atomic. • The ‘F_DUPFD_CLOEXEC’ action of this function does not set the ‘FD_CLOEXEC’ flag on some platforms: NetBSD 10.0. • The ‘F_DUPFD_CLOEXEC’ action of this function sets the ‘FD_CLOEXEC’ flag on the wrong file descriptor on some platforms: Haiku. • The ‘F_DUPFD’ action of this function does not reject out-of-range targets properly on some platforms: AIX 7.1, Cygwin 1.5.x, Haiku. • The ‘F_DUPFD’ action of this function mistakenly clears ‘FD_CLOEXEC’ on the source descriptor on some platforms: Haiku. Portability problems not fixed by Gnulib: • The replacement function does not support ‘F_SETFD’, ‘F_GETFL’, ‘F_SETFL’, ‘F_GETOWN’, ‘F_SETOWN’, ‘F_GETLK’, ‘F_SETLK’, and ‘F_SETLKW’ on some platforms: mingw, MSVC 14. • When a file does not support locking (such as on an NFS file system that does not support file locking), calls with ‘F_SETLK’ and ‘F_SETLKW’ fail with ‘errno’ set to different values on different systems: ‘EINVAL’ on OpenIndiana (as suggested by the POSIX 1003.1-2017 ‘fcntl’ specification), ‘ENOLCK’ on GNU/Linux, and ‘EOPNOTSUPP’ on FreeBSD. 10.255 ‘fdatasync’ ================== POSIX specification: Gnulib module: fdatasync Portability problems fixed by Gnulib: • This function is present but not declared on some platforms: Mac OS X 10.7. • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 11.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 2.2. Portability problems not fixed by Gnulib: 10.256 ‘fdetach’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.257 ‘fdim’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. 10.258 ‘fdimf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.259 ‘fdiml’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. 10.260 ‘fdiv’ ============= Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.261 ‘fdivl’ ============== Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.262 ‘fdopen’ =============== POSIX specification: Gnulib module: fdopen Portability problems fixed by Gnulib: • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. Portability problems not fixed by Gnulib: 10.263 ‘fdopendir’ ================== POSIX specification: Gnulib module: fdopendir Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. Also, the replacement does not guarantee that ‘dirfd(fdopendir(n))==n’ (dirfd might fail, or return a different file descriptor than n). • This function exists but is not declared on some platforms: FreeBSD 7.3. • This function does not reject non-directory file descriptors on some platforms: GNU/Hurd. • This function mistakenly closes non-directory file descriptors on some platforms: FreeBSD 8.1. Portability problems not fixed by Gnulib: 10.264 ‘feclearexcept’ ====================== POSIX specification: Gnulib module: fenv-exceptions-tracking-c99 Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. • This function is broken on some platforms: OpenBSD 7.4/mips64, Minix 3.3/i386. Portability problems not fixed by Gnulib: 10.265 ‘fegetenv’ ================= POSIX specification: Gnulib module: fenv-environment Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. • This function clears all exception trap bits on some platforms: glibc 2.19/x86_64, Mac OS X 10.5/i386, Mac OS X 10.5/x86_64. • This function does not save the exception trap bits on some platforms: AIX 7.3. Portability problems not fixed by Gnulib: 10.266 ‘fegetexceptflag’ ======================== POSIX specification: Gnulib module: fenv-exceptions-state-c99 Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. Portability problems not fixed by Gnulib: 10.267 ‘fegetmode’ ================== Documentation: *note Floating-Point Control Functions: (libc)Control Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.268 ‘fegetround’ =================== POSIX specification: Gnulib module: fenv-rounding Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. Portability problems not fixed by Gnulib: 10.269 ‘feholdexcept’ ===================== POSIX specification: Gnulib module: fenv-environment Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. • This function does not work on some platforms: glibc 2.5, FreeBSD 12.2/arm64. • This function does not save the exception trap bits on some platforms: AIX 7.3. • This function does not clear the exception trap bits on some platforms: musl libc, mingw. • This function may fail on some platforms: MSVC 14. • Portability problems not fixed by Gnulib: 10.270 ‘feof’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.271 ‘feraiseexcept’ ====================== POSIX specification: Gnulib module: fenv-exceptions-tracking-c99 Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. • This function does not detect failures on glibc 2.19/arm. • This function does not trigger traps on Cygwin 3.4.9/x86_64. Portability problems not fixed by Gnulib: 10.272 ‘ferror’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.273 ‘fesetenv’ ================= POSIX specification: Gnulib module: fenv-environment Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. • This function does not work on some platforms: FreeBSD 12.2/arm64. • This function does not restore the floating-point exception trap bits on some platforms: musl libc/i386, musl libc/x86_64, AIX 7.3, Solaris 10 and 11, MSVC 14. • The macro ‘FE_DFL_ENV’ cannot be used because it leads to a link error on some platforms: NetBSD 10.0/hppa, NetBSD 10.0/sparc, Cygwin 2.9.0. • This function, when called with ‘FE_DFL_ENV’ argument, has no effect on the x86 ‘mxcsr’ register and thus on floating-point operations performed in the SSE unit on some platforms: mingw 10. Portability problems not fixed by Gnulib: 10.274 ‘fesetexcept’ ==================== Documentation: *note Examining the FPU status word: (libc)Status bit operations. Gnulib module: fenv-exceptions-tracking-c23 Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function triggers floating-point exception traps although it shouldn’t, on glibc 2.37/i386, glibc 2.37/powerpc. Portability problems not fixed by Gnulib: 10.275 ‘fesetexceptflag’ ======================== POSIX specification: Gnulib module: fenv-exceptions-state-c99 Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. • This function triggers floating-point exception traps although it shouldn’t, on glibc 2.37/i386, glibc 2.37/x86_64, glibc 2.37/powerpc, musl libc, Mac OS X 10.5, Minix 3.3, mingw, Haiku. • This function clears too many floating-point exception flags on glibc 2.37/alpha. • This function loses the ‘FE_INVALID’ flag on FreeBSD 14.0/powerpc64, NetBSD 9.3/powerpc. • This function is also buggy on AIX 7.3.1. Portability problems not fixed by Gnulib: 10.276 ‘fesetmode’ ================== Documentation: *note Floating-Point Control Functions: (libc)Control Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.277 ‘fesetround’ =================== POSIX specification: Gnulib module: fenv-rounding Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. • This function does not work on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • The rounding mode has no effect on ‘long double’ operations on some platforms: FreeBSD/arm64, NetBSD/sparc64, OpenBSD/arm64, OpenBSD/mips64. 10.278 ‘fetestexcept’ ===================== POSIX specification: Gnulib module: fenv-exceptions-tracking-c99 Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. • This function clears the floating-point exception trap bits on some platforms: NetBSD 9.3/x86_64. • This function is broken on some platforms: Minix 3.3/i386. Portability problems not fixed by Gnulib: 10.279 ‘fetestexceptflag’ ========================= Documentation: *note Examining the FPU status word: (libc)Status bit operations. Gnulib module: fenv-exceptions-state-c23 Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 10.280 ‘feupdateenv’ ==================== POSIX specification: Gnulib module: fenv-environment Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 14, Android 4.4. • This function crashes when given the argument ‘FE_DFL_ENV’ on some platforms: glibc 2.37/riscv64. • This function does not work on some platforms: glibc 2.5/ia64, FreeBSD 12.2/arm64. • This function forgets about the currently set floating-point exception flags on some platforms: Mac OS X 10.5/i386, Mac OS X 10.5/x86_64. • This function does not restore the floating-point exception trap bits on some platforms: musl libc/i386, musl libc/x86_64, AIX 7.3, Solaris 10 and 11, mingw 10. • This function does not trigger traps on glibc 2.37/hppa, musl libc/s390x, NetBSD 10.0/powerpc. • This function may fail on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.281 ‘fexecve’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 14, Android 8.1. 10.282 ‘fflush’ =============== POSIX specification: Gnulib module: fflush Portability problems fixed by Gnulib: • ‘fflush’ followed by ‘fseek’ or ‘fseeko’, applied to an input stream, should have the effect of positioning the underlying file descriptor. It doesn’t do this on some platforms: glibc 2.34, FreeBSD 14.0, and others. • ‘fflush’ on an input stream changes the position of the stream to the end of the previous buffer, on some platforms: mingw, MSVC 14. • ‘fflush’ on an input stream right after ‘ungetc’ does not discard the ‘ungetc’ buffer, on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Cygwin 1.5.25-10. Portability problems not fixed by Gnulib: • ‘fflush’, ‘ftell’, ‘ftello’, ‘fgetpos’ behave incorrectly on input streams that are opened in ‘O_TEXT’ mode and whose contents contains Unix line terminators (LF), on some platforms: mingw, MSVC 14. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • This function crashes if the stream’s file descriptor has already been closed, if ‘MSVC_INVALID_PARAMETER_HANDLING’ is ‘HAIRY_LIBRARY_HANDLING’ or ‘SANE_LIBRARY_HANDLING’, on some platforms: MSVC 14. • ‘fflush’ on an input stream right after ‘ungetc’ does not discard the ‘ungetc’ buffer, on some platforms: AIX 5.1, HP-UX 11, Solaris 11 2010-11, mingw, MSVC 14. 10.283 ‘ffs’ ============ POSIX specification: Gnulib module: ffs Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function is only defined as an inline function on some platforms: Android 13. 10.284 ‘fgetc’ ============== POSIX specification: Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if ‘feof’ would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream’s end-of-file indicator is set. These systems include glibc and default Solaris. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • This function crashes if the stream’s file descriptor has already been closed, if ‘MSVC_INVALID_PARAMETER_HANDLING’ is ‘HAIRY_LIBRARY_HANDLING’ or ‘SANE_LIBRARY_HANDLING’, on some platforms: MSVC 14. 10.285 ‘fgetpos’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • ‘fflush’, ‘ftell’, ‘ftello’, ‘fgetpos’ behave incorrectly on input streams that are opened in ‘O_TEXT’ mode and whose contents contains Unix line terminators (LF), on some platforms: mingw, MSVC 14. • This function mistakenly succeeds on pipes on some platforms: mingw 10. 10.286 ‘fgets’ ============== POSIX specification: Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if ‘feof’ would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream’s end-of-file indicator is set. These systems include glibc and default Solaris. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. 10.287 ‘fgetwc’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.288 ‘fgetws’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.289 ‘fileno’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.290 ‘flockfile’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.291 ‘floor’ ============== POSIX specification: Gnulib module: floor or floor-ieee Portability problems fixed by either Gnulib module ‘floor’ or ‘floor-ieee’: Portability problems fixed by Gnulib module ‘floor-ieee’: Portability problems not fixed by Gnulib: 10.292 ‘floorf’ =============== POSIX specification: Gnulib module: floorf or floorf-ieee Portability problems fixed by either Gnulib module ‘floorf’ or ‘floorf-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘floorf-ieee’: Portability problems not fixed by Gnulib: 10.293 ‘floorl’ =============== POSIX specification: Gnulib module: floorl or floorl-ieee Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.294 ‘fma’ ============ POSIX specification: Gnulib module: fma Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. • This function produces wrong results on some platforms: glibc 2.11, Mac OS X 10.5, FreeBSD 6.4/x86, NetBSD 8.0, OpenBSD 7.4/arm64, Cygwin 1.5, mingw. Portability problems not fixed by Gnulib: 10.295 ‘fmaf’ ============= POSIX specification: Gnulib module: fmaf Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. • This function produces wrong results on some platforms: glibc 2.11, Mac OS X 10.5, FreeBSD 6.4/x86, FreeBSD 12.2/arm, OpenBSD 7.4/arm64, Cygwin 1.5, mingw. Portability problems not fixed by Gnulib: • This function produces wrong results on some platforms: musl libc/powerpc64le when emulated by QEMU 5.0.0. 10.296 ‘fmal’ ============= POSIX specification: Gnulib module: fmal Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. • This function produces wrong results on some platforms: glibc 2.17, macOS 10.13, FreeBSD 6.4/x86, OpenBSD 7.4/arm64, mingw. Portability problems not fixed by Gnulib: 10.297 ‘fmax’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. 10.298 ‘fmaxf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.299 ‘fmaxl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. 10.300 ‘fmaxmag’ ================ Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.301 ‘fmaxmagf’ ================= Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.302 ‘fmaxmagl’ ================= Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.303 ‘fmemopen’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. 10.304 ‘fmin’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. 10.305 ‘fminf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.306 ‘fminl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. 10.307 ‘fminmag’ ================ Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.308 ‘fminmagf’ ================= Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.309 ‘fminmagl’ ================= Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.310 ‘fmod’ ============= POSIX specification: Gnulib module: fmod or fmod-ieee Portability problems fixed by either Gnulib module ‘fmod’ or ‘fmod-ieee’: Portability problems fixed by Gnulib module ‘fmod-ieee’: • This function has problems when the first argument is minus zero on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.311 ‘fmodf’ ============== POSIX specification: Gnulib module: fmodf or fmodf-ieee Portability problems fixed by either Gnulib module ‘fmodf’ or ‘fmodf-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘fmodf-ieee’: • This function has problems when the first argument is minus zero on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.312 ‘fmodl’ ============== POSIX specification: Gnulib module: fmodl or fmodl-ieee Portability problems fixed by either Gnulib module ‘fmodl’ or ‘fmodl-ieee’: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function is not declared and does not work on some platforms: AIX 5.1. Portability problems fixed by Gnulib module ‘fmodl-ieee’: • This function has problems when the first argument is minus zero on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.313 ‘fmtmsg’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.314 ‘fmul’ ============= Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.315 ‘fmull’ ============== Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.316 ‘fnmatch’ ================ POSIX specification: LSB specification: Documentation: • *note Wildcard Matching: (libc)Wildcard Matching, • man fnmatch. Gnulib module: fnmatch or fnmatch-gnu Portability problems fixed by either Gnulib module ‘fnmatch’ or ‘fnmatch-gnu’: • This function is missing on some platforms: mingw, MSVC 14. • The ‘"?"’ pattern character fails to match characters outside the single-byte range on some platforms: NetBSD 10.0, Android 13. • The ‘"?"’ pattern character fails to match characters outside the Unicode BMP on some platforms: Solaris 10, Cygwin 3.4.6, MSVC, 32-bit AIX. • In the pattern, negated character ranges (such as ‘[!a-z]’) are not supported on some platforms: Solaris 11.4. • In the pattern, character classes (such as ‘[:alnum:]’) inside bracket expressions are not supported on some platforms: FreeBSD 13.2, NetBSD 10.0, Solaris 11 OpenIndiana, Cygwin 3.4.6. • In the pattern, character classes (such as ‘[:alnum:]’) inside bracket expressions fail to match characters outside the single-byte range on some platforms: Android 13. • The character class ‘[:cntrl:]’ matches the empty string on some platforms: Solaris 11.4. • Ranges that start or end with a backslash don’t work right on some platforms: glibc 2.3.3. • In the pattern, an opening bracket without closing bracket does not match a literal ‘'['’ on some platforms: glibc 2.12, macOS 12.5, NetBSD 10.0. Portability problems fixed by Gnulib module ‘fnmatch-gnu’: • This function does not support the flags ‘FNM_LEADING_DIR’ and ‘FNM_CASEFOLD’ on some platforms: AIX 7.2, HP-UX 11.31, Solaris 10. • The flag ‘FNM_CASEFOLD’ does not work in many situations on some platforms: NetBSD 10.0. • The flag ‘FNM_CASEFOLD’ does not work for multibyte characters consisting of more than one byte on some platforms: Android 13. • This function does not support the flag ‘FNM_EXTMATCH’ on all non-glibc platforms: musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, Minix 3.3, AIX 7.2, HP-UX 11.31, Solaris 11.4, Cygwin 3.4.6, Android 13. • This function does not support the flag ‘FNM_FILE_NAME’ as an alias of ‘FNM_PATHNAME’ on some platforms: NetBSD 10.0, AIX 7.2, HP-UX 11.31, Solaris 10. Portability problems not fixed by Gnulib: Note: Gnulib’s replacement function has some limitations: • It does not implement patterns with collating elements (such as ‘"[[.ch.]]"’) or equivalence classes (such as ‘"[[=a=]]"’). 10.317 ‘fopen’ ============== POSIX specification: Gnulib module: fopen or fopen-gnu Portability problems fixed by either Gnulib module ‘fopen’ or ‘fopen-gnu’: • This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: HP-UX 11.00, AIX 7.1, Solaris 9. • On platforms where ‘off_t’ is a 32-bit type, ‘fopen’ may not work correctly with files 2 GiB and larger. *Note Large File Support::. • On Windows platforms (excluding Cygwin), this function does usually not recognize the ‘/dev/null’ filename. Portability problems fixed by Gnulib module ‘fopen-gnu’: • This function does not support the mode character ‘x’ (corresponding to ‘O_EXCL’), introduced in ISO C11, on some platforms: FreeBSD 8.2, NetBSD 6.1, OpenBSD 5.6, Minix 3.2, AIX 6.1, HP-UX 11.31, Solaris 11.3, Cygwin 1.7.16 (2012), mingw, MSVC 14. • This function does not support the mode character ‘e’ (corresponding to ‘O_CLOEXEC’), introduced into a future POSIX revision through , on some platforms: glibc 2.6, macOS 11.1, FreeBSD 9.0, NetBSD 5.1, OpenBSD 5.6, Minix 3.2, AIX 7.2, HP-UX 11.31, Solaris 11.3, Cygwin 1.7.16 (2012), mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On Windows, this function returns a file stream in “text” mode by default; this means that it translates ‘'\n'’ to CR/LF by default. Use the ‘"b"’ flag if you need reliable binary I/O. • On Windows platforms (excluding Cygwin), this function fails to open directories for reading. Such streams have implementation-defined semantics on other platforms. To avoid directory streams with a consistent error message, use ‘fstat’ after ‘open’ and ‘fdopen’, rather than ‘fopen’ and ‘fileno’. 10.318 ‘fork’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • On some platforms, ‘fork’ followed by a call of the ‘exec’ family (‘execl’, ‘execlp’, ‘execle’, ‘execv’, ‘execvp’, or ‘execve’) is less efficient than ‘vfork’ followed by the same call. ‘vfork’ is a variant of ‘fork’ that has been introduced to optimize the ‘fork’/‘exec’ pattern. • On Windows platforms (excluding Cygwin), this function is not implemented; use ‘_spawnvp’ instead. 10.319 ‘fpathconf’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.320 ‘fpclassify’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, AIX 5.1, Solaris 11.4, Android 9.0. 10.321 ‘fprintf’ ================ POSIX specification: Gnulib module: fprintf-posix or fprintf-gnu or stdio, nonblocking, sigpipe Portability problems fixed by either Gnulib module ‘fprintf-posix’ or ‘fprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. • This function mishandles large floating point precisions (for example, formatting 1.0 with ‘"%.511f"’) on some platforms: Solaris 10. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. Portability problems fixed by Gnulib module ‘fprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘fprintf-posix’ or ‘fprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’ or ‘fprintf-posix’ or ‘fprintf-gnu’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’ or ‘fprintf-posix’ or ‘fprintf-gnu’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • Attempting to write to a read-only stream fails with ‘EOF’ but does not set the error flag for ‘ferror’ on some platforms: glibc 2.13, cygwin 1.7.9. 10.322 ‘fputc’ ============== POSIX specification: Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. • This function crashes if the stream’s file descriptor has already been closed, if ‘MSVC_INVALID_PARAMETER_HANDLING’ is ‘HAIRY_LIBRARY_HANDLING’ or ‘SANE_LIBRARY_HANDLING’, on some platforms: MSVC 14. 10.323 ‘fputs’ ============== POSIX specification: Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.324 ‘fputwc’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.325 ‘fputws’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.326 ‘fread’ ============== POSIX specification: Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if ‘feof’ would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream’s end-of-file indicator is set. These systems include glibc and default Solaris. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • This function crashes if the stream’s file descriptor has already been closed, if ‘MSVC_INVALID_PARAMETER_HANDLING’ is ‘HAIRY_LIBRARY_HANDLING’ or ‘SANE_LIBRARY_HANDLING’, on some platforms: MSVC 14. 10.327 ‘free’ ============= POSIX specification: Gnulib module: free-posix Portability problems fixed by Gnulib: • This function may clobber ‘errno’ on many platforms: glibc 2.32, Mac OS X, FreeBSD, NetBSD, OpenBSD 4.4, Minix, AIX, HP-UX, Cygwin, mingw, MSVC. Portability problems not fixed by Gnulib: 10.328 ‘freeaddrinfo’ ===================== POSIX specification: Gnulib module: getaddrinfo Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.11, Cygwin 1.5.x, mingw, MSVC 14. • On Windows, this function is declared in ‘’ rather than in ‘’. • On Windows, in 32-bit mode, this function is defined with a calling convention that is different from ‘cdecl’. Portability problems not fixed by Gnulib: 10.329 ‘freelocale’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 9.0, NetBSD 5.0, OpenBSD 6.1, Minix 3.1.8, AIX 6.1, HP-UX 11, Solaris 11.3, Cygwin 2.5.x, mingw, MSVC 14, Android 4.4. • This function is useless because the ‘locale_t’ type is not defined on some platforms: z/OS. • This function may cause crashes in subsequent ‘newlocale’ invocations on some platforms: Haiku. 10.330 ‘freopen’ ================ POSIX specification: Gnulib module: freopen Portability problems fixed by Gnulib: • On some platforms, if ‘stream’ does not already have an open file descriptor, ‘freopen’ returns the stream without opening the file: glibc 2.24. • On platforms where ‘off_t’ is a 32-bit type, ‘freopen’ may not work correctly with files 2 GiB and larger. *Note Large File Support::. • On Windows platforms (excluding Cygwin), this function does usually not recognize the ‘/dev/null’ filename. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • This function does not support a ‘NULL’ file name argument on some platforms: OpenBSD 4.9, AIX 7.1, HP-UX 11.23, Solaris 10, mingw, MSVC 14. • This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: HP-UX 11.00, Solaris 9. • Applications should not assume that ‘fileno(f)’ will be the same before and after a call to ‘freopen(name,mode,f)’. However, the module ‘freopen-safer’ can at least protect ‘stdin’, ‘stdout’, and ‘stderr’. 10.331 ‘frexp’ ============== POSIX specification: Gnulib module: frexp Portability problems fixed by Gnulib: • This function does not work on denormalized numbers on some platforms: NetBSD 3.0. • This function does not work on negative zero on some platforms: NetBSD 4.99, MSVC 14. • This function does not work on infinite numbers on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.332 ‘frexpf’ =============== POSIX specification: Gnulib module: frexpf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function does not work on negative zero on some platforms: mingw. • This function does not work on infinite numbers on some platforms: mingw. Portability problems not fixed by Gnulib: 10.333 ‘frexpl’ =============== POSIX specification: Gnulib module: frexpl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function does not work on finite numbers on some platforms: AIX 5.1, MSVC 14. • This function does not work on denormalized numbers on some platforms: macOS 10.13/i386. • This function does not work on infinite numbers on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.334 ‘fromfp’ =============== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.335 ‘fromfpf’ ================ Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.336 ‘fromfpl’ ================ Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.337 ‘fromfpx’ ================ Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.338 ‘fromfpxf’ ================= Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.339 ‘fromfpxl’ ================= Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.340 ‘fscanf’ =============== POSIX specification: LSB specification: Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if ‘feof’ would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream’s end-of-file indicator is set. These systems include glibc and default Solaris. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On Windows, this function doesn’t support the ‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’ size specifiers. 10.341 ‘fseek’ ============== POSIX specification: Gnulib module: fseek Portability problems fixed by Gnulib: • This function mistakenly succeeds on pipes on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On platforms where ‘long’ is a 32-bit type, ‘fseek’ does not work correctly with files 2 GiB and larger, even when the ‘AC_SYS_LARGEFILE’ macro is used. The fix is to use ‘fseeko’ instead. 10.342 ‘fseeko’ =============== POSIX specification: Gnulib module: fseeko Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • The declaration of ‘fseeko’ in ‘’ is not enabled by default on some platforms: glibc 2.3.6. • This function fails on seekable stdin, stdout, and stderr: cygwin <= 1.5.24. • On platforms where ‘off_t’ is a 32-bit type, ‘fseeko’ does not work correctly with files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: 10.343 ‘fsetpos’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: 10.344 ‘fstat’ ============== POSIX specification: Gnulib module: fstat Portability problems fixed by Gnulib: • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, ‘fstat’ may not correctly report the size of files or block devices 2 GiB and larger.. *Note Large File Support::. • On Linux/x86 and Linux/x86_64, applications compiled in 32-bit mode cannot access files that happen to have a 64-bit inode number. This can occur with file systems such as XFS (typically on large disks) and NFS. *Note Large File Support::. • On macOS 12.6, when this function yields a timestamp with a nonpositive ‘tv_sec’ value, ‘tv_nsec’ might be in the range −999999999..−1, representing a negative nanoseconds offset from ‘tv_sec’. Solaris 11.4 is similar, except that ‘tv_sec’ might also be −1000000000. • The ‘st_atime’, ‘st_ctime’, ‘st_mtime’ fields are affected by the current time zone and by the DST flag of the current time zone on some platforms: mingw, MSVC 14 (when the environment variable ‘TZ’ is set). Portability problems not fixed by Gnulib: • *Note sys/stat.h::, for general portability problems with ‘struct stat’. • On Cygwin, ‘fstat’ applied to the file descriptors 0 and 1, returns different ‘st_ino’ values, even if standard input and standard output are not redirected and refer to the same terminal. 10.345 ‘fstatat’ ================ POSIX specification: Gnulib module: fstatat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. • On platforms where ‘off_t’ is a 32-bit type, ‘fstatat’ may not correctly report the size of files or block devices larger than 2 GB. *Note Large File Support::. • On some platforms, ‘fstatat(fd,"file/",buf,flag)’ succeeds instead of failing with ‘ENOTDIR’. Solaris 9. • For symlinks, when the argument ends in a slash, some platforms don’t dereference the argument: Solaris 9. • On macOS 12.6, when this function yields a timestamp with a nonpositive ‘tv_sec’ value, ‘tv_nsec’ might be in the range −999999999..−1, representing a negative nanoseconds offset from ‘tv_sec’. Solaris 11.4 is similar, except that ‘tv_sec’ might also be −1000000000. Portability problems not fixed by Gnulib: • This function does not fail when the second argument is an empty string on some platforms, even when ‘AT_EMPTY_PATH’ is not used: glibc 2.7, Linux 2.6.38. • This function sets ‘st_ino’ only to the low-order 32 bits of the inode number of a socket or pipe, which thus can disagree with the ‘st_ino’ obtained by ‘fstat’: macOS 14. • *Note sys/stat.h::, for general portability problems with ‘struct stat’. 10.346 ‘fstatvfs’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘f_blocks’ in ‘struct statvfs’ is a 32-bit value, this function may not work correctly on files systems larger than 4 TiB. *Note Large File Support::. This affects glibc/Hurd, HP-UX 11, Solaris. Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, mingw, MSVC 14, Android 4.3. 10.347 ‘fsub’ ============= Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.348 ‘fsubl’ ============== Documentation: *note Miscellaneous FP arithmetic functions: (libc)Misc FP Arithmetic. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.349 ‘fsync’ ============== POSIX specification: Gnulib module: fsync Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • If the argument is a read-only file descriptor, this function fails with ‘EBADF’ on some platforms: AIX 7.2, Cygwin 2.9. 10.350 ‘ftell’ ============== POSIX specification: Gnulib module: ftell Portability problems fixed by Gnulib: • This function mistakenly succeeds on pipes on some platforms: mingw, MSVC 14. • This function produces incorrect results after ‘putc’ that followed a ‘getc’ call that reached EOF on some platforms: Solaris 11 2010-11. • This function, when invoked after ‘ungetc’, throws away the ‘ungetc’ buffer, changes the stream’s file position, and returns the wrong position on some platforms: macOS 10.15 and newer. • This function mistakenly succeeds on pipes on some platforms: mingw 10. Portability problems not fixed by Gnulib: • This function produces incorrect results immediately after ‘fseek’ on some platforms: HP-UX 11. • ‘fflush’, ‘ftell’, ‘ftello’, ‘fgetpos’ behave incorrectly on input streams that are opened in ‘O_TEXT’ mode and whose contents contains Unix line terminators (LF), on some platforms: mingw, MSVC 14. • On platforms where ‘long’ is a 32-bit type, ‘ftell’ does not work correctly with files 2 GiB and larger, even when the ‘AC_SYS_LARGEFILE’ macro is used. The fix is to use ‘ftello’ instead. 10.351 ‘ftello’ =============== POSIX specification: Gnulib module: ftello Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • The declaration of ‘ftello’ in ‘’ is not enabled by default on some platforms: glibc 2.3.6. • This function produces incorrect results after ‘putc’ that followed a ‘getc’ call that reached EOF on some platforms: Solaris 11 2010-11. • This function, when invoked after ‘ungetc’, throws away the ‘ungetc’ buffer, changes the stream’s file position, and returns the wrong position on some platforms: macOS 10.15 and newer. • This function fails on seekable stdin, stdout, and stderr: cygwin <= 1.5.24. • This function mistakenly succeeds on pipes on some platforms: mingw 10. • On platforms where ‘off_t’ is a 32-bit type, ‘ftello’ does not work correctly with files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function produces incorrect results immediately after ‘fseek’ on some platforms: HP-UX 11. • ‘fflush’, ‘ftell’, ‘ftello’, ‘fgetpos’ behave incorrectly on input streams that are opened in ‘O_TEXT’ mode and whose contents contains Unix line terminators (LF), on some platforms: mingw, MSVC 14. 10.352 ‘ftok’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.353 ‘ftruncate’ ================== POSIX specification: Gnulib module: ftruncate Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: 10.354 ‘ftrylockfile’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.355 ‘ftw’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14, Android 4.1. • POSIX says this function is obsolescent and it is planned to be removed in POSIX 202x. Use the Gnulib module ‘fts’ instead. 10.356 ‘funlockfile’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.357 ‘futimens’ ================= POSIX specification: Gnulib module: futimens Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.5, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.3. However, the replacement function may end up truncating timestamps to worse resolution than supported by the file system. • This function returns a bogus value instead of failing with ‘ENOSYS’ on some platforms: Linux kernel 2.6.21. • When using ‘UTIME_OMIT’ or ‘UTIME_NOW’, some systems require the ‘tv_sec’ argument to be 0, and don’t necessarily handle all file permissions in the manner required by POSIX: Linux kernel 2.6.25. • When using ‘UTIME_OMIT’ for the modification time, but specifying an access time, some systems fail to update the change time: Linux kernel 2.6.32, macOS 11.1, NetBSD 10.0, Solaris 11.1. • Passing ‘AT_FDCWD’ as the fd argument does not properly fail with ‘EBADF’ on some systems: glibc 2.11, musl libc, Solaris 11. Portability problems not fixed by Gnulib: • Some platforms lack the ability to change the timestamps of a file descriptor, so the replacement can fail with ‘ENOSYS’; the gnulib module ‘utimens’ provides a more reliable interface ‘fdutimens’. • The mere act of using ‘stat’ modifies the access time of directories on some platforms, so ‘utimensat’ can only effectively change directory modification time: Cygwin 1.5.x. 10.358 ‘fwide’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x, MSVC 14. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • ‘fwide’ is not guaranteed to be able to change a file stream’s mode to a different mode than the current one. 10.359 ‘fwprintf’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • In the C or POSIX locales, the ‘%c’ and ‘%s’ conversions may fail on some platforms: glibc 2.35. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.360 ‘fwrite’ =============== POSIX specification: Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. • This function crashes if the stream’s file descriptor has already been closed, if ‘MSVC_INVALID_PARAMETER_HANDLING’ is ‘HAIRY_LIBRARY_HANDLING’ or ‘SANE_LIBRARY_HANDLING’, on some platforms: MSVC 14. 10.361 ‘fwscanf’ ================ POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.362 ‘gai_strerror’ ===================== POSIX specification: Gnulib module: getaddrinfo Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.11, Cygwin 1.5.x. • This function is only available in ‘’ on some platforms: mingw, MSVC 14. • This function’s return type is ‘char *’ instead of ‘const char *’ on some platforms: AIX 7.1, HP-UX 11, Solaris 9, mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.363 ‘getaddrinfo’ ==================== POSIX specification: Gnulib module: getaddrinfo Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.11, Cygwin 1.5.x, mingw, MSVC 14. • On Windows, this function is declared in ‘’ rather than in ‘’. • On Windows, in 32-bit mode, this function is defined with a calling convention that is different from ‘cdecl’. Portability problems not fixed by Gnulib: • Unlike glibc’s implementation, gnulib’s replacement does not support internationalized domain names (IDN) encoding. 10.364 ‘getc’ ============= POSIX specification: Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if ‘feof’ would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream’s end-of-file indicator is set. These systems include glibc and default Solaris. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. 10.365 ‘getc_unlocked’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.366 ‘getchar’ ================ POSIX specification: Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if ‘feof’ would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream’s end-of-file indicator is set. These systems include glibc and default Solaris. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. 10.367 ‘getchar_unlocked’ ========================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.368 ‘getcwd’ =============== POSIX specification: LSB specification: Gnulib module: getcwd or getcwd-lgpl Portability problems fixed by either Gnulib module ‘getcwd’ or ‘getcwd-lgpl’: • This function is declared in different header files (namely, ‘’ or ‘’) on some platforms: mingw, MSVC 14. • On glibc and Solaris 11.4 platforms, ‘getcwd (NULL, n)’ allocates memory for the result. On some other platforms, this call is not allowed. • On some platforms, the prototype for ‘getcwd’ uses ‘int’ instead of ‘size_t’ for the size argument when using non-standard headers, and the declaration is missing from ‘’: mingw, MSVC 14. • On some platforms, ‘getcwd (buf, 0)’ crashes: MSVC 14. • On some platforms, ‘getcwd (buf, 0)’ fails with ‘ERANGE’ instead of the required ‘EINVAL’: mingw. Portability problems fixed by Gnulib module ‘getcwd’: • This function does not handle long file names (greater than ‘PATH_MAX’) correctly on some platforms: glibc on Linux 2.4.20, musl libc 1.2.2/powerpc64le, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, AIX 7.1. Portability problems not fixed by Gnulib: • When using ‘getcwd(NULL, nonzero)’, some platforms, such as glibc or cygwin, allocate exactly ‘nonzero’ bytes and fail with ‘ERANGE’ if it was not big enough, while other platforms, such as FreeBSD, mingw, or MSVC 14, ignore the size argument and allocate whatever size is necessary. If this call succeeds, an application cannot portably access beyond the string length of the result. 10.369 ‘getdate’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Gnulib provides a module ‘parse-datetime’ that contains a function ‘parse_datetime’ that has similar functionality as the ‘getdate’ function. 10.370 ‘getdate_err’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 10.13, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.371 ‘getdelim’ ================= POSIX specification: Gnulib module: getdelim Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14, Android 4.2. • This function makes out-of-bounds reads on some platforms: macOS 10.13. • This function crashes when passed a pointer to a NULL buffer together with a pointer to a non-zero buffer size on some platforms: FreeBSD 8.0. Portability problems not fixed by Gnulib: • This function has quadratic running time for long lines on some platforms: uClibc 0.9.31. 10.372 ‘getegid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.373 ‘getenv’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.374 ‘geteuid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.375 ‘getgid’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.376 ‘getgrent’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.377 ‘getgrgid’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.378 ‘getgrgid_r’ =================== POSIX specification: Gnulib module: extensions Portability problems fixed by Gnulib: • This function has an incompatible declaration on some platforms: Solaris 11.3 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 6.0. 10.379 ‘getgrnam’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.380 ‘getgrnam_r’ =================== POSIX specification: Gnulib module: extensions Portability problems fixed by Gnulib: • This function has an incompatible declaration on some platforms: Solaris 11.3 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 6.0. 10.381 ‘getgroups’ ================== POSIX specification: Gnulib module: getgroups Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • On some platforms, this function fails to reject a negative count, even though that is less than the size that would be returned: macOS 11.1, FreeBSD 13.0. • On NeXTstep 3.2, ‘getgroups (0, NULL)’ always fails. See macro ‘AC_FUNC_GETGROUPS’. • On very old systems, this function operated on an array of ‘int’, even though that was a different size than an array of ‘gid_t’. Portability problems not fixed by Gnulib: • This function is unsafe to call between ‘fork’ and ‘exec’ if the parent process is multi-threaded. • It is unspecified whether the effective group id will be included in the returned list, nor whether the list will be sorted in any particular order. For that matter, some platforms include the effective group id twice, if it is also a member of the current supplemental group ids. The Gnulib module ‘mgetgroups’ provides a similar API. 10.382 ‘gethostent’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14. 10.383 ‘gethostid’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.384 ‘gethostname’ ==================== POSIX specification: Gnulib module: gethostname Portability problems fixed by Gnulib: • This function is declared in a different header file (namely, ‘’) on some platforms: MSVC 14. • On mingw and MSVC 14, this function has a prototype that differs from that specified by POSIX, and it is defined only in the ws2_32 library. Portability problems not fixed by Gnulib: • This function’s second argument type is ‘int’ instead of ‘size_t’ on some platforms: Solaris 10. • If the given buffer is too small for the host name, some implementations fail with ‘EINVAL’, instead of returning a truncated host name. 10.385 ‘getitimer’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • POSIX says this function is obsolescent and it is planned to be removed in POSIX 202x. Use the function ‘timer_gettime’ instead. 10.386 ‘getline’ ================ POSIX specification: Gnulib module: getline Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14, Android 4.2. • This function is missing a declaration on some platforms: AIX 7.1. • Some platforms provide a function by this name but with the wrong signature, for example in -linet. • This function crashes when passed a pointer to a NULL buffer together with a pointer to a non-zero buffer size on some platforms: FreeBSD 8.0. Portability problems not fixed by Gnulib: • This function has quadratic running time for long lines on some platforms: uClibc 0.9.31. 10.387 ‘getlogin’ ================= POSIX specification: Gnulib module: getlogin Portability problems fixed by Gnulib: • This function is missing on some platforms: older mingw, MSVC 14. • This function is not declared unless ‘_POSIX’ is defined on some platforms: mingw. Portability problems not fixed by Gnulib: • This function returns an empty string even when standard input is a tty on some platforms: HP-UX 11.11. 10.388 ‘getlogin_r’ =================== POSIX specification: Gnulib module: getlogin_r Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14, Android 8.1. • This function is not declared unless ‘_REENTRANT’ is defined, on some platforms: HP-UX 11. • This function returns a truncated result, instead of failing with error code ‘ERANGE’, when the buffer is not large enough, on some platforms: macOS 11.1. Portability problems not fixed by Gnulib: • This function has an incompatible declaration on some platforms: FreeBSD 12.0, MidnightBSD 2.0, Solaris 11.4 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). • This function fails even when standard input is a tty on some platforms: HP-UX 11.11. • This function fails with error code ‘EINVAL’ instead of ‘ERANGE’ when the second argument is zero on some platforms: HP-UX 11.31. • This function fails with error code ‘ENOMEM’ instead of ‘ERANGE’ on some platforms: Haiku. 10.389 ‘getmsg’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.390 ‘getnameinfo’ ==================== POSIX specification: Gnulib module: getaddrinfo Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.11, Cygwin 1.5.x, mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.391 ‘getnetbyaddr’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14. 10.392 ‘getnetbyname’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14. 10.393 ‘getnetent’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14, Android 8.1. 10.394 ‘getopt’ =============== POSIX specification: LSB specification: Gnulib module: getopt-posix or getopt-gnu The module ‘getopt-gnu’ has support for “long options” and for “options that take optional arguments”. Compared to the API defined by POSIX, it adds a header file ‘’ and a function ‘getopt_long’. Portability problems fixed by either Gnulib module ‘getopt-posix’ or ‘getopt-gnu’: • This function is missing on some platforms: MSVC 14. • The value of ‘optind’ after a missing required argument is wrong on some platforms: macOS 11.1, AIX 7.1, mingw. Portability problems fixed by Gnulib module ‘getopt-gnu’: • The function ‘getopt’ does not support the ‘+’ flag in the options string on some platforms: macOS 11.1, AIX 5.2, HP-UX 11, Solaris 11 2010-11. • The function ‘getopt’ does not obey the combination of ‘+’ and ‘:’ flags in the options string on some platforms: glibc 2.11. • The function ‘getopt’ does not obey the ‘-’ flag in the options string when ‘POSIXLY_CORRECT’ is set on some platforms: Cygwin 1.7.0. • The function ‘getopt’ does not support options with optional arguments on some platforms: macOS 11.1, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11 2010-11, Cygwin 1.5.x. • The function ‘getopt_long’ is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 9, MSVC 14. • The function ‘getopt_long’ does not support abbreviated long options where all disambiguations are equivalent on some platforms: OpenBSD 5.0. • The function ‘getopt_long_only’ is missing on some platforms: FreeBSD 5.2.1, NetBSD 10.0, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 14. • This function crashes if the option string includes ‘W;’ on some platforms: glibc 2.14. Portability problems not fixed by Gnulib: • The default behavior of the glibc implementation of ‘getopt’ allows mixing option and non-option arguments on the command line in any order. Other implementations, such as the one in Cygwin, enforce strict POSIX compliance: they require that the option arguments precede the non-option arguments. This is something to watch out in your program’s testsuite. • The glibc implementation allows a complete reset of the environment, including re-checking for ‘POSIXLY_CORRECT’, by setting ‘optind’ to 0. Several BSD implementations provide ‘optreset’, causing a reset by setting it non-zero, although it does not necessarily re-read ‘POSIXLY_CORRECT’. Solaris ‘getopt’ does not support either reset method, but does not maintain state that needs the extra level of reset. • On some platforms, this function does not set the stream error indicator on attempts to write to a read-only stream: glibc 2.13, Cygwin 1.7.9. 10.395 ‘getpayload’ =================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: getpayload Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function returns a wrong result for non-NaN arguments on some platforms: glibc 2.31. Portability problems not fixed by Gnulib: 10.396 ‘getpayloadf’ ==================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: getpayloadf Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function returns a wrong result for non-NaN arguments on some platforms: glibc 2.31. Portability problems not fixed by Gnulib: 10.397 ‘getpayloadl’ ==================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: getpayloadl Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function returns a wrong result for non-NaN arguments on some platforms: glibc 2.31. Portability problems not fixed by Gnulib: 10.398 ‘getpeername’ ==================== POSIX specification: Gnulib module: getpeername Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. • On HP-UX 11, in 64-bit mode, when the macro ‘_HPUX_ALT_XOPEN_SOCKET_API’ is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide ‘socklen_t’ entity but in fact considers it as a pointer to a 32-bit wide ‘unsigned int’ entity. Portability problems not fixed by Gnulib: • Some platforms don’t have a ‘socklen_t’ type; in this case this function’s third argument type is ‘int *’. 10.399 ‘getpgid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.400 ‘getpgrp’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.401 ‘getpid’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.402 ‘getpmsg’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.403 ‘getppid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.404 ‘getpriority’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.405 ‘getprotobyname’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.406 ‘getprotobynumber’ ========================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.407 ‘getprotoent’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 8.1. 10.408 ‘getpwent’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.409 ‘getpwnam’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.410 ‘getpwnam_r’ =================== POSIX specification: Gnulib module: extensions Portability problems fixed by Gnulib: • This function has an incompatible declaration on some platforms: Solaris 11.3 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 3.0. 10.411 ‘getpwuid’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is unsafe to call between ‘fork’ and ‘exec’ if the parent process is multi-threaded. Instead, use ‘getpwuid_r’ prior to forking. • This function is missing on some platforms: mingw, MSVC 14. 10.412 ‘getpwuid_r’ =================== POSIX specification: Gnulib module: extensions Portability problems fixed by Gnulib: • This function has an incompatible declaration on some platforms: Solaris 11.3 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). Portability problems not fixed by Gnulib: • This function is unsafe to call between ‘fork’ and ‘exec’ if the parent process is multi-threaded. Use it prior to forking. • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 3.0. 10.413 ‘getrlimit’ ================== POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘rlim_t’ is a 32-bit type, this function does not allow to retrieve limits larger than 4 GiB and larger, such as for RLIMIT_FSIZE. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.414 ‘getrusage’ ================== POSIX specification: Gnulib module: getrusage Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. Portability problems not fixed by Gnulib: • Many platforms don’t fill in all the fields of ‘struct rusage’ with meaningful values. 10.415 ‘gets’ ============= Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is removed in POSIX.1-2024. Use the function ‘fgets’ instead. • This function should never be used, because it can overflow any given buffer. • This function is missing on some platforms: OpenBSD 6.7, Solaris 11.4. • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. 10.416 ‘getservbyname’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.417 ‘getservbyport’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.418 ‘getservent’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.419 ‘getsid’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.1. 10.420 ‘getsockname’ ==================== POSIX specification: Gnulib module: getsockname Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. • On HP-UX 11, in 64-bit mode, when the macro ‘_HPUX_ALT_XOPEN_SOCKET_API’ is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide ‘socklen_t’ entity but in fact considers it as a pointer to a 32-bit wide ‘unsigned int’ entity. Portability problems not fixed by Gnulib: • Some platforms don’t have a ‘socklen_t’ type; in this case this function’s third argument type is ‘int *’. 10.421 ‘getsockopt’ =================== POSIX specification: LSB specification: Gnulib module: getsockopt Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. • On HP-UX 11, in 64-bit mode, when the macro ‘_HPUX_ALT_XOPEN_SOCKET_API’ is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide ‘socklen_t’ entity but in fact considers it as a pointer to a 32-bit wide ‘unsigned int’ entity. Portability problems not fixed by Gnulib: • Some platforms don’t have a ‘socklen_t’ type; in this case this function’s fifth argument type is ‘int *’. • Many socket options are not available on all platforms. 10.422 ‘getsubopt’ ================== POSIX specification: Gnulib module: getsubopt Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. • This function is declared in ‘unistd.h’ instead of ‘stdlib.h’ on some platforms: Cygwin 1.7.1. Portability problems not fixed by Gnulib: 10.423 ‘gettimeofday’ ===================== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: gettimeofday Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. • This function is declared with a nonstandard function prototype (only one argument, or “...” after the first argument) on some platforms. • On some platforms, the second argument has type ‘struct timezone*’ rather than ‘void *’, making it an error to redeclare the function with the POSIX signature: glibc. However, rather than penalize these systems with a replacement function, gnulib defines ‘GETTIMEOFDAY_TIMEZONE’ to the appropriate type for use in avoiding a compiler warning if assigning ‘gettimeofday’ to a function pointer. • This function has only a precision of 15.6 milliseconds on some platforms: mingw. Portability problems not fixed by Gnulib: • Behavior is non-portable if the second argument to ‘gettimeofday’ is not ‘NULL’. • This function is removed in POSIX.1-2024. Use the Gnulib module ‘gettime’ or ‘timespec_get’ instead. (POSIX recommends to use the function ‘clock_gettime’, but there is no corresponding Gnulib module for it yet.) 10.424 ‘getuid’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.425 ‘getutxent’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.426 ‘getutxid’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.427 ‘getutxline’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.428 ‘getwc’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.429 ‘getwchar’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.430 ‘glob’ ============= POSIX specification: Gnulib module: glob Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 8.1. • This function does not list symbolic links to nonexistent files among the results, on some platforms: glibc 2.26, AIX 7.2, HP-UX 11, Solaris 11.4. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on huge directories 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • Some platforms may store additional flags in the ‘gl_flags’ field. 10.431 ‘globfree’ ================= POSIX specification: Gnulib module: glob Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.432 ‘gmtime’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. • On some platforms, this function returns NULL for arguments < -43200, that is, for timestamps before 1969-12-31 12:00:00 UTC: mingw, MSVC. 10.433 ‘gmtime_r’ ================= POSIX specification: Gnulib module: time_r Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function is not declared unless ‘_REENTRANT’ is defined, on some platforms: HP-UX 11. Portability problems not fixed by Gnulib: • On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. 10.434 ‘grantpt’ ================ POSIX specification: Gnulib module: grantpt Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 4.4. Portability problems not fixed by Gnulib: • This function reports success for invalid file descriptors on some platforms: OpenBSD, Cygwin 1.7.9, musl libc. 10.435 ‘hcreate’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 8.1. 10.436 ‘hdestroy’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 8.1. 10.437 ‘hsearch’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 8.1. 10.438 ‘htonl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, mingw, MSVC 14, Android 4.4. 10.439 ‘htons’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, mingw, MSVC 14, Android 4.4. 10.440 ‘hypot’ ============== POSIX specification: Gnulib module: hypot or hypot-ieee Portability problems fixed by either Gnulib module ‘hypot’ or ‘hypot-ieee’: Portability problems fixed by Gnulib module ‘hypot-ieee’: • When the arguments are mixed NaN and Infinity, this function returns a wrong value on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.441 ‘hypotf’ =============== POSIX specification: Gnulib module: hypotf or hypotf-ieee Portability problems fixed by either Gnulib module ‘hypotf’ or ‘hypotf-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 14. • This function produces wrong values on some platforms: NetBSD 5.1, OpenBSD 4.9. Portability problems fixed by Gnulib module ‘hypot-ieee’: • When the arguments are mixed NaN and Infinity, this function returns a wrong value on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.442 ‘hypotl’ =============== POSIX specification: Gnulib module: hypotl or hypotl-ieee Portability problems fixed by either Gnulib module ‘hypotl’ or ‘hypotl-ieee’: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 14, Android 4.4. • This function produces very imprecise results on some platforms: NetBSD 10.0, OpenBSD 5.1/SPARC. Portability problems fixed by Gnulib module ‘hypotl-ieee’: • When the arguments are mixed NaN and Infinity, this function returns a wrong value on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.443 ‘iconv’ ============== POSIX specification: Gnulib module: iconv Portability problems fixed by Gnulib: • GNU libiconv is not found if installed in ‘$PREFIX/lib’. Portability problems handled by Gnulib (in the sense that ‘HAVE_ICONV’ does not get defined if the system’s ‘iconv’ function has this problem): • Failures are not distinguishable from successful returns on some platforms: macOS 14.4, AIX 5.1..7.2, Solaris 10. • A buffer overrun can occur on some platforms: AIX 6.1..7.1. Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 8.1, when GNU libiconv is not installed. • This function was not correctly implemented in glibc versions before 2.2. • When ‘iconv’ encounters an input character that is valid but that cannot be converted to the output character set, glibc’s and GNU libiconv’s ‘iconv’ stop the conversion. Some other implementations put an implementation-defined character into the output buffer. Gnulib provides higher-level facilities ‘striconv’ and ‘striconveh’ (wrappers around ‘iconv’) that deal with conversion errors in a platform independent way. • This function returns a positive return value, instead of zero, when converting from ISO-8859-1 to UTF-8 on HP-UX 11. 10.444 ‘iconv_close’ ==================== POSIX specification: Gnulib module: iconv Portability problems fixed by Gnulib: • GNU libiconv is not found if installed in ‘$PREFIX/lib’. Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 8.1, when GNU libiconv is not installed. 10.445 ‘iconv_open’ =================== POSIX specification: Gnulib module: iconv, iconv_open, iconv_open-utf Portability problems fixed by either Gnulib module ‘iconv’ or ‘iconv_open’: • GNU libiconv is not found if installed in ‘$PREFIX/lib’. Portability problems handled by either Gnulib module ‘iconv’ or ‘iconv_open’ (in the sense that ‘HAVE_ICONV’ does not get defined if the system’s ‘iconv_open’ function has this problem): • No converter from EUC-JP to UTF-8 is provided on some platforms: HP-UX 11. Portability problems fixed by Gnulib module ‘iconv_open’: • This function recognizes only non-standard aliases for many encodings (not the IANA registered encoding names) on many platforms: AIX 5.1, HP-UX 11, Solaris 11 2010-11, z/OS. Portability problems fixed by Gnulib module ‘iconv_open-utf’: • This function does not support the encodings UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE on many platforms: AIX 5.1, HP-UX 11. Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 8.1, when GNU libiconv is not installed. • For some encodings A and B, this function cannot convert directly from A to B, although an indirect conversion from A through UTF-8 to B is possible. This occurs on some platforms: Solaris 11 2010-11. Gnulib provides a higher-level facility ‘striconveh’ (a wrapper around ‘iconv’) that deals with this problem. • The set of supported encodings and conversions is system dependent. 10.446 ‘if_freenameindex’ ========================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, HP-UX 11.23, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. • This is available only as a macro, rather than a function, on some platforms: OpenBSD 4.6, MirBSD 10. 10.447 ‘if_indextoname’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, Cygwin 1.5.x, mingw, MSVC 14. 10.448 ‘if_nameindex’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. 10.449 ‘if_nametoindex’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, Cygwin 1.5.x, mingw, MSVC 14. 10.450 ‘ilogb’ ============== POSIX specification: Gnulib module: ilogb Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. • This function returns a wrong result for a zero argument on some platforms: OpenBSD 6.7, AIX 5.1. • This function returns a wrong result for denormalized arguments on some platforms: Mac OS X 10.5 64-bit, AIX 7.1 64-bit. • This function returns a wrong result for an infinite argument on some platforms: NetBSD 7.1, OpenBSD 6.7. • This function returns a wrong result for a NaN argument on some platforms: NetBSD 7.1, OpenBSD 6.7. Portability problems not fixed by Gnulib: 10.451 ‘ilogbf’ =============== POSIX specification: Gnulib module: ilogbf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. • This function returns a wrong result for a zero argument on some platforms: OpenBSD 6.7. • This function returns a wrong result for an infinite argument on some platforms: NetBSD 7.1, OpenBSD 6.7. Portability problems not fixed by Gnulib: 10.452 ‘ilogbl’ =============== POSIX specification: Gnulib module: ilogbl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. • This function returns a wrong result for a zero argument on some platforms: Cygwin 2.9. • This function returns a wrong result for a NaN argument on some platforms: Cygwin 3.4.6. • This function returns a wrong result for denormalized arguments on some platforms: AIX 7.1 64-bit, Haiku 2017. Portability problems not fixed by Gnulib: 10.453 ‘imaxabs’ ================ POSIX specification: Gnulib module: imaxabs Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 9, MSVC 9, Android 4.3. Portability problems not fixed by Gnulib: 10.454 ‘imaxdiv’ ================ POSIX specification: Gnulib module: imaxdiv Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 9, MSVC 9, Android 4.3. Portability problems not fixed by Gnulib: 10.455 ‘inet_addr’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • POSIX 202x says this function is obsolescent and it is planned to be removed in a future version. Use the function ‘inet_pton’ instead. • On some old platforms, this function returns a ‘struct in_addr’ rather than a scalar type such as ‘unsigned int’ or ‘unsigned long’. 10.456 ‘inet_ntoa’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • POSIX 202x says this function is obsolescent and it is planned to be removed in a future version. Use the function ‘inet_ntop’ instead. • The ‘inet_ntoa’ function need not be reentrant, and consequently is not required to be thread safe. Implementations of ‘inet_ntoa’ typically write the timestamp into static buffer. If two threads call ‘inet_ntoa’ at roughly the same time, you might end up with the wrong date in one of the threads, or some undefined string. Note: ‘inet_ntoa’ is specific for IPv4 addresses. A protocol independent function is ‘inet_ntop’. 10.457 ‘inet_ntop’ ================== POSIX specification: Gnulib module: inet_ntop Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.00, mingw, MSVC 14. • This function is declared in ‘’ instead of ‘’ on some platforms: NonStop Kernel. • This function is declared in ‘’, with a POSIX incompatible declaration, on some platforms: MSVC 14 on Windows >= Vista. Portability problems not fixed by Gnulib: • This function’s fourth argument type is ‘size_t’ instead of ‘socklen_t’ on some platforms: Solaris 10. 10.458 ‘inet_pton’ ================== POSIX specification: Gnulib module: inet_pton Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.00, mingw, MSVC 14. • This function is declared in ‘’ instead of ‘’ on some platforms: NonStop Kernel. • This function is declared in ‘’, with a POSIX incompatible declaration, on some platforms: MSVC 14 on Windows >= Vista. Portability problems not fixed by Gnulib: 10.459 ‘initstate’ ================== POSIX specification: Gnulib module: random Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • This function is not declared on some platforms: Cygwin 1.5.25. Portability problems not fixed by Gnulib: • This function crashes if the state buffer is unaligned on some platforms: glibc 2.36/sparc. • The first parameter is ‘unsigned long’ instead of ‘unsigned int’ on some platforms: MidnightBSD 2.0. • The third parameter is ‘long’ instead of ‘size_t’ on some platforms: MidnightBSD 2.0. • This function makes out-of-bounds writes on some platforms: Haiku. 10.460 ‘insque’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. 10.461 ‘ioctl’ ============== POSIX specification: LSB specification: • Gnulib module: ioctl Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), ‘ioctl’ is called ‘ioctlsocket’, and error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. • The second parameter is of type ‘unsigned long’ rather than ‘int’ on some platforms: glibc 2.26, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Haiku 2017. Portability problems not fixed by Gnulib: • Most ‘ioctl’ requests are platform and hardware specific. 10.462 ‘isalnum’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isalnum’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswalnum’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isalnum’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isalnum’. ‘mb_isalnum’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_alnum’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-alnum’. 10.463 ‘isalnum_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.464 ‘isalpha’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isalpha’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswalpha’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isalpha’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isalpha’. ‘mb_isalpha’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_alpha’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-alpha’. 10.465 ‘isalpha_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.466 ‘isascii’ ================ Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • This function is removed in POSIX.1-2024. Note: This function’s behaviour depends on the locale, but requires special handling for the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are two alternative APIs: ‘c_isascii’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘mb_isascii’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. 10.467 ‘isastream’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.468 ‘isatty’ =============== POSIX specification: Gnulib module: isatty Portability problems fixed by Gnulib: • This function is declared in a different header file (namely, ‘’) on some platforms: MSVC 14. • On native Windows, this function also returns true for character devices such as ‘NUL’. • On native Windows, this function returns false for Cygwin consoles. • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.469 ‘isblank’ ================ POSIX specification: Gnulib module: isblank Portability problems fixed by Gnulib: • This function is missing on some platforms: Solaris 9, mingw, MSVC 9. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isblank’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswblank’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isblank’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isblank’. ‘mb_isblank’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_blank’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-blank’. 10.470 ‘isblank_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.471 ‘iscntrl’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_iscntrl’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswcntrl’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32iscntrl’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32iscntrl’. ‘mb_iscntrl’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_cntrl’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-cntrl’. 10.472 ‘iscntrl_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.473 ‘isdigit’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isdigit’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswdigit’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isdigit’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isdigit’. ‘mb_isdigit’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_digit’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-digit’. 10.474 ‘isdigit_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.475 ‘isfinite’ ================= POSIX specification: Gnulib module: isfinite Portability problems fixed by Gnulib: • This macro is missing on some platforms: macOS 11.1, OpenBSD 6.7, AIX 5.1, Solaris 11.4. • This macro incorrectly yields true for some ‘double’ and for some ‘long double’ arguments, on some platforms: Linux/ia64 (NaNs). Portability problems not fixed by Gnulib: • It is implementation-dependent whether ‘isfinite’ raises an exception given a signaling NaN operand. • This macro returns an unspecified result when given noncanonical values such as unnormalized numbers, pseudo-denormals, pseudo-NaNs, pseudo-Infinities, and pseudo-zeroes. 10.476 ‘isgraph’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isgraph’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswgraph’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isgraph’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isgraph’. ‘mb_isgraph’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_graph’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-graph’. 10.477 ‘isgraph_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.478 ‘isgreater’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, Solaris 11.4, Android 9.0. 10.479 ‘isgreaterequal’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, Solaris 11.4, Android 9.0. 10.480 ‘isinf’ ============== POSIX specification: Gnulib module: isinf Portability problems fixed by Gnulib: • This macro is missing on some platforms: AIX 5.1, Solaris 11.4. Portability problems not fixed by Gnulib: • This macro returns an unspecified result when given noncanonical values such as unnormalized numbers, pseudo-denormals, pseudo-NaNs, pseudo-Infinities, and pseudo-zeroes. 10.481 ‘isless’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, Solaris 11.4, Android 9.0. 10.482 ‘islessequal’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, Solaris 11.4, Android 9.0. 10.483 ‘islessgreater’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, Solaris 11.4, Android 9.0. 10.484 ‘islower’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_islower’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswlower’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32islower’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32islower’. ‘mb_islower’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_lower’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-lower’. 10.485 ‘islower_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.486 ‘isnan’ ============== POSIX specification: Gnulib module: isnan Portability problems fixed by Gnulib: • This macro is missing on some platforms: MSVC 9. • ‘isnan’ was introduced with C99 and is thus commonly not present on pre-C99 systems. • ‘isnan’ is not a macro on some platforms: Solaris 11.4. • This macro does not work on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This macro returns an unspecified result when given noncanonical values such as unnormalized numbers, pseudo-denormals, pseudo-NaNs, pseudo-Infinities, and pseudo-zeroes. 10.487 ‘isnormal’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, AIX 5.1, Solaris 11.4, Android 4.4. 10.488 ‘isprint’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isprint’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswprint’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isprint’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isprint’. ‘mb_isprint’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_print’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-print’. 10.489 ‘isprint_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.490 ‘ispunct’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_ispunct’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswpunct’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32ispunct’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32ispunct’. ‘mb_ispunct’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_punct’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-punct’. 10.491 ‘ispunct_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.492 ‘isspace’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isspace’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswspace’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isspace’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isspace’. ‘mb_isspace’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_space’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-space’. 10.493 ‘isspace_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.494 ‘isunordered’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, Solaris 11.4, Android 9.0. 10.495 ‘isupper’ ================ POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isupper’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswupper’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isupper’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isupper’. ‘mb_isupper’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_upper’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-upper’. 10.496 ‘isupper_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.497 ‘iswalnum’ ================= POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isalnum’, provided by Gnulib module ‘c32isalnum’, operates on 32-bit wide characters and therefore does not have this limitation. 10.498 ‘iswalnum_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.499 ‘iswalpha’ ================= POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isalpha’, provided by Gnulib module ‘c32isalpha’, operates on 32-bit wide characters and therefore does not have this limitation. 10.500 ‘iswalpha_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.501 ‘iswblank’ ================= POSIX specification: Gnulib module: iswblank Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 9, mingw, MSVC 9, Android 4.4. • This function is not declared (without ‘-D_GNU_SOURCE’) on some platforms: glibc 2.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isblank’, provided by Gnulib module ‘c32isblank’, operates on 32-bit wide characters and therefore does not have this limitation. 10.502 ‘iswblank_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.503 ‘iswcntrl’ ================= POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32iscntrl’, provided by Gnulib module ‘c32iscntrl’, operates on 32-bit wide characters and therefore does not have this limitation. • This function returns 0 for U+2028 (LINE SEPARATOR) and U+2029 (PARAGRAPH SEPARATOR) on some platforms: macOS 11.1. 10.504 ‘iswcntrl_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.505 ‘iswctype’ ================= POSIX specification: Gnulib module: iswctype Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function is declared in ‘’, not in ‘’, on some platforms: HP-UX 11.00. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32_apply_type_test’, provided by Gnulib module ‘c32_apply_type_test’, operates on 32-bit wide characters and therefore does not have this limitation. 10.506 ‘iswctype_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.507 ‘iswdigit’ ================= POSIX specification: Gnulib module: iswdigit Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. • This function is not ISO C 99 compliant on some platforms: FreeBSD 14.0, NetBSD 10.0, Solaris 11.4, mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isdigit’, provided by Gnulib module ‘c32isdigit’, operates on 32-bit wide characters and therefore does not have this limitation. 10.508 ‘iswdigit_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.509 ‘iswgraph’ ================= POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isgraph’, provided by Gnulib module ‘c32isgraph’, operates on 32-bit wide characters and therefore does not have this limitation. 10.510 ‘iswgraph_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.511 ‘iswlower’ ================= POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32islower’, provided by Gnulib module ‘c32islower’, operates on 32-bit wide characters and therefore does not have this limitation. 10.512 ‘iswlower_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.513 ‘iswprint’ ================= POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. • This function returns true for the tab (‘'\t'’) character on some platforms: mingw. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isprint’, provided by Gnulib module ‘c32isprint’, operates on 32-bit wide characters and therefore does not have this limitation. 10.514 ‘iswprint_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.515 ‘iswpunct’ ================= POSIX specification: Gnulib module: iswpunct Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. • This function is inconsistent with the ‘ispunct’ function, because it returns false for the characters ‘'$'’, ‘'+'’, ‘'<'’, ‘'='’, ‘'>'’, ‘'^'’, ‘'`'’ , ‘'|'’, ‘'~'’ on some platforms: Android 11. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32ispunct’, provided by Gnulib module ‘c32ispunct’, operates on 32-bit wide characters and therefore does not have this limitation. 10.516 ‘iswpunct_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.517 ‘iswspace’ ================= POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isspace’, provided by Gnulib module ‘c32isspace’, operates on 32-bit wide characters and therefore does not have this limitation. 10.518 ‘iswspace_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.519 ‘iswupper’ ================= POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isupper’, provided by Gnulib module ‘c32isupper’, operates on 32-bit wide characters and therefore does not have this limitation. 10.520 ‘iswupper_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.521 ‘iswxdigit’ ================== POSIX specification: Gnulib module: iswxdigit Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. • This function is not ISO C 99 compliant on some platforms: FreeBSD 14.0, NetBSD 10.0, Solaris 11.4, MSVC 14. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32isxdigit’, provided by Gnulib module ‘c32isxdigit’, operates on 32-bit wide characters and therefore does not have this limitation. 10.522 ‘iswxdigit_l’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.523 ‘isxdigit’ ================= POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are five alternative APIs: ‘c_isxdigit’ This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘iswxdigit’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32isxdigit’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32isxdigit’. ‘mb_isxdigit’ This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module ‘mbchar’. ‘uc_is_xdigit’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unictype/ctype-xdigit’. 10.524 ‘isxdigit_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.525 ‘j0’ =========== POSIX specification: Gnulib module: j0 Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. 10.526 ‘j1’ =========== POSIX specification: Gnulib module: j1 Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. 10.527 ‘jn’ =========== POSIX specification: Gnulib module: jn Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. 10.528 ‘jrand48’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.529 ‘kill’ ============= POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.530 ‘killpg’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.531 ‘l64a’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, Minix 3.1.8, mingw, MSVC 14, Android 9.0. • This function was not correctly implemented in glibc versions before 2.2.5. 10.532 ‘labs’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 4.3. 10.533 ‘lchown’ =============== POSIX specification: Gnulib module: lchown Portability problems fixed by Gnulib: • This function is missing on some platforms; however, the replacement fails with ‘ENOSYS’: mingw, MSVC 14. • This function is missing on some platforms; however, the replacement fails on symlinks: Minix 3.2.1. • Some platforms fail to detect trailing slash on non-directories, as in ‘lchown("link-to-file/",uid,gid)’: FreeBSD 7.2, Solaris 9. • Some platforms fail to update the change time when at least one argument was not -1, but no ownership changes resulted. However, without ‘lchmod’, the replacement only fixes this for non-symlinks: OpenBSD 4.0. Portability problems not fixed by Gnulib: • This function sometimes fails with ‘EACCES’ when the failure is due to lack of appropriate privileges (‘EPERM’), not to search permission denied on the file name prefix (‘EACCES’): Linux kernel 5.15 with glibc 2.35 and a CIFS v1 file system (see ). 10.534 ‘lcong48’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 5.1. 10.535 ‘ldexp’ ============== POSIX specification: Gnulib module: ldexp Portability problems fixed by Gnulib: • This function produces wrong results on some platforms: OpenBSD 7.3/mips64. Portability problems not fixed by Gnulib: 10.536 ‘ldexpf’ =============== POSIX specification: Gnulib module: ldexpf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.537 ‘ldexpl’ =============== POSIX specification: Gnulib module: ldexpl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function has no prototype in ‘’ on some platforms: Mac OS X. • This function does not work on finite numbers on some platforms: AIX 5.1. Portability problems not fixed by Gnulib: 10.538 ‘ldiv’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.539 ‘lfind’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 4.4. 10.540 ‘lgamma’ =============== POSIX specification: Gnulib module: lgamma Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. 10.541 ‘lgammaf’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.542 ‘lgammal’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. 10.543 ‘link’ ============= POSIX specification: LSB specification: Gnulib module: link Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function fails to reject trailing slashes on non-directories on some platforms: FreeBSD 7.2, Solaris 11.3, Cygwin 1.5.x. Portability problems not fixed by Gnulib: • When the first argument is a symlink, some platforms create a hard-link to what the symlink referenced, rather than to the symlink itself. Use ‘linkat’ to force a particular behavior. 10.544 ‘linkat’ =============== POSIX specification: Gnulib module: linkat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.9, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. But the replacement function is not safe to be used in libraries and is not multithread-safe. • This function fails to directly hardlink symlinks on some platforms: Mac OS X 10.10. • This function fails to reject trailing slashes on non-directories on some platforms: macOS 11.1, AIX 7.1, Solaris 11.3. • This functions does not support ‘AT_SYMLINK_FOLLOW’ on some platforms: Linux kernel 2.6.17. Portability problems not fixed by Gnulib: 10.545 ‘lio_listio’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.546 ‘listen’ =============== POSIX specification: Gnulib module: listen Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: 10.547 ‘llabs’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, MSVC 9, Android 4.3. 10.548 ‘lldiv’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, HP-UX 11.23, MSVC 9. 10.549 ‘llogb’ ============== Documentation: *note Exponentiation and Logarithms: (libc)Exponents and Logarithms. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.550 ‘llogbf’ =============== Documentation: *note Exponentiation and Logarithms: (libc)Exponents and Logarithms. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.551 ‘llogbl’ =============== Documentation: *note Exponentiation and Logarithms: (libc)Exponents and Logarithms. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.552 ‘llrint’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.5.x, MSVC 9. 10.553 ‘llrintf’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.5.x, MSVC 9. 10.554 ‘llrintl’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. 10.555 ‘llround’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9. 10.556 ‘llroundf’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.7, MSVC 9. 10.557 ‘llroundl’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. 10.558 ‘localeconv’ =================== POSIX specification: Gnulib module: localeconv Portability problems fixed by Gnulib: • The ‘struct lconv’ type does not contain any members on some platforms: Android up to 2014. • The ‘struct lconv’ type does not contain the members ‘int_p_cs_precedes’, ‘int_p_sign_posn’, ‘int_p_sep_by_space’, ‘int_n_cs_precedes’, ‘int_n_sign_posn’, ‘int_n_sep_by_space’ on some platforms: glibc, OpenBSD 4.9, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • The values of fields of ‘struct lconv’ of type ‘char’ are -1 instead of CHAR_MAX on some platforms: mingw. Portability problems not fixed by Gnulib: 10.559 ‘localtime’ ================== POSIX specification: Gnulib module: localtime Portability problems fixed by Gnulib: • On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable ‘TZ’ has been set by Cygwin. Portability problems not fixed by Gnulib: • On some platforms, this function loops forever for values near extrema (such as the year -2**31): Mac OS X 10.6. You can use the ‘time_rz’ module to work around the problem. • On some platforms, this function returns nonsense values for unsupported arguments (like 2^56), rather than failing: FreeBSD 10. • On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. • On some platforms, this function returns NULL for negative arguments, that is, for timestamps before 1970-01-01 00:00:00 local time: mingw, MSVC. • Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX. *Note tzset::. 10.560 ‘localtime_r’ ==================== POSIX specification: Gnulib module: time_r Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function is not declared unless ‘_REENTRANT’ is defined, on some platforms: HP-UX 11. Portability problems not fixed by Gnulib: • On some platforms, this function loops forever for values near extrema (such as the year -2**31): Mac OS X 10.6. You can use the ‘time_rz’ module to work around the problem. • On some platforms, this function returns nonsense values for unsupported arguments (like 2^56), rather than failing: FreeBSD 10. • On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. 10.561 ‘lockf’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly across the entire data range of files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. 10.562 ‘log’ ============ POSIX specification: Gnulib module: log or log-ieee Portability problems fixed by either Gnulib module ‘log’ or ‘log-ieee’: Portability problems fixed by Gnulib module ‘log-ieee’: • This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1, Solaris 11.4. Portability problems not fixed by Gnulib: 10.563 ‘log10’ ============== POSIX specification: Gnulib module: log10 or log10-ieee Portability problems fixed by either Gnulib module ‘log10’ or ‘log10-ieee’: Portability problems fixed by Gnulib module ‘log10-ieee’: • This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1, Solaris 11.4. Portability problems not fixed by Gnulib: 10.564 ‘log10f’ =============== POSIX specification: Gnulib module: log10f or log10f-ieee Portability problems fixed by either Gnulib module ‘log10f’ or ‘log10f-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘log10f-ieee’: • This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1. Portability problems not fixed by Gnulib: 10.565 ‘log10l’ =============== POSIX specification: Gnulib module: log10l Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function is not declared and does not work on some platforms: AIX 5.1. • This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 10.0. Portability problems not fixed by Gnulib: 10.566 ‘log1p’ ============== POSIX specification: Gnulib module: log1p or log1p-ieee Portability problems fixed by either Gnulib module ‘log1p’ or ‘log1p-ieee’: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. Portability problems fixed by Gnulib module ‘log1p-ieee’: • This function has problems when the argument is minus zero on some platforms: AIX 7.1, HP-UX 11. Portability problems not fixed by Gnulib: 10.567 ‘log1pf’ =============== POSIX specification: Gnulib module: log1pf or log1pf-ieee Portability problems fixed by either Gnulib module ‘log1pf’ or ‘log1pf-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. Portability problems fixed by Gnulib module ‘log1pf-ieee’: • This function has problems when the argument is minus zero on some platforms: OpenBSD 4.9, AIX 7.1. Portability problems not fixed by Gnulib: 10.568 ‘log1pl’ =============== POSIX specification: Gnulib module: log1pl or log1pl-ieee Portability problems fixed by either Gnulib module ‘log1pl’ or ‘log1pl-ieee’: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. • This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 10.0. Portability problems fixed by Gnulib module ‘log1pl-ieee’: • This function has problems when the argument is minus zero on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: 10.569 ‘log2’ ============= POSIX specification: Gnulib module: log2 or log2-ieee Portability problems fixed by either Gnulib module ‘log2’ or ‘log2-ieee’: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9, Android 4.2. • This function is only provided as a macro on some platforms: Cygwin 1.5.x. • This function returns slightly wrong values for exact powers of 2 on some platforms: Cygwin 1.7.9. Portability problems fixed by Gnulib module ‘log2-ieee’: • This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1, Solaris 10/x86_64. Portability problems not fixed by Gnulib: 10.570 ‘log2f’ ============== POSIX specification: Gnulib module: log2f or log2f-ieee Portability problems fixed by either Gnulib module ‘log2f’ or ‘log2f-ieee’: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9, Android 4.2. • This function is only provided as a macro on some platforms: Cygwin 1.5.x. • This function returns slightly wrong values for exact powers of 2 on some platforms: Cygwin 1.7.9. Portability problems fixed by Gnulib module ‘log2f-ieee’: • This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1, Solaris 10/x86_64. Portability problems not fixed by Gnulib: 10.571 ‘log2l’ ============== POSIX specification: Gnulib module: log2l Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.2. • This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x. • This function returns Infinity for some large finite arguments on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 10.0. Portability problems not fixed by Gnulib: 10.572 ‘logb’ ============= POSIX specification: Gnulib module: logb Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. • This function is missing a declaration on some platforms: Cygwin 1.5.x. • This function produces wrong results for subnormal numbers on some platforms: glibc 2.17/ppc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 11.4, Cygwin 1.5.x. Portability problems not fixed by Gnulib: 10.573 ‘logbf’ ============== POSIX specification: Gnulib module: logbf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. • This function produces wrong results for subnormal numbers on some platforms: glibc 2.11/ppc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 11.4. Portability problems not fixed by Gnulib: 10.574 ‘logbl’ ============== POSIX specification: Gnulib module: logbl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.2. • This function goes into an endless loop for arguments such as ‘1.6810515715560467531313389086608763012990396724232e-4932L’ on some platforms: OpenBSD 7.3/mips64. • This function produces wrong results for subnormal numbers on some platforms: glibc 2.11/powerpc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 11.4, glibc 2.23/powerpc64le. Portability problems not fixed by Gnulib: 10.575 ‘logf’ ============= POSIX specification: Gnulib module: logf or logf-ieee Portability problems fixed by either Gnulib module ‘logf’ or ‘logf-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘logf-ieee’: • This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1. Portability problems not fixed by Gnulib: 10.576 ‘logl’ ============= POSIX specification: Gnulib module: logl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function returns wrong results on some platforms: glibc 2.7 on Linux/SPARC64. • This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 10.0. Portability problems not fixed by Gnulib: 10.577 ‘longjmp’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • The effects of this call are system and compiler optimization dependent, since it restores the contents of register-allocated variables but not the contents of stack-allocated variables. • When longjumping out of a signal handler that was being executed on an alternate stack (installed through ‘sigaltstack’), on FreeBSD, NetBSD, OpenBSD, you need to clear the ‘SS_ONSTACK’ flag in the ‘stack_t’ structure managed by the kernel. 10.578 ‘lrand48’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.579 ‘lrint’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. 10.580 ‘lrintf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.581 ‘lrintl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. 10.582 ‘lround’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. 10.583 ‘lroundf’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.584 ‘lroundl’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. 10.585 ‘lsearch’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 4.4. 10.586 ‘lseek’ ============== POSIX specification: Gnulib module: lseek Portability problems fixed by Gnulib: • On some platforms, ‘lseek (fd, offset, SEEK_DATA)’ returns a value greater than ‘offset’ even when ‘offset’ addresses data: macOS 12 • This function is declared in a different header file (namely, ‘’) on some platforms: MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, ‘lseek’ does not work correctly with files 2 GiB and larger. *Note Large File Support::. • This function mistakenly succeeds on pipes on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • POSIX does not specify which file descriptors support seeking and which don’t. In practice, regular files and block devices support seeking, and ttys, pipes, and most character devices don’t support it. • Some systems do not support ‘SEEK_DATA’ and ‘SEEK_HOLE’: AIX, HP-UX, Microsoft Windows, NetBSD, OpenBSD, Cygwin 3.4.6. • Some systems have a buggy ‘SEEK_DATA’ and ‘SEEK_HOLE’, and Gnulib works around the problem via ‘#undef SEEK_DATA’ and ‘#undef SEEK_HOLE’: FreeBSD 13, macOS 12. 10.587 ‘lstat’ ============== POSIX specification: Gnulib module: lstat Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, ‘lstat’ may not correctly report the size of files or block devices 2 GiB and larger. *Note Large File Support::. • On Linux/x86 and Linux/x86_64, applications compiled in 32-bit mode cannot access files that happen to have a 64-bit inode number. This can occur with file systems such as XFS (typically on large disks) and NFS. *Note Large File Support::. • For symlinks, when the argument ends in a slash, some platforms don’t dereference the argument: Solaris 9. • On some platforms, ‘lstat("file/",buf)’ succeeds instead of failing with ‘ENOTDIR’. macOS 11.1, Solaris 9. • On macOS 12.6, when this function yields a timestamp with a nonpositive ‘tv_sec’ value, ‘tv_nsec’ might be in the range −999999999..−1, representing a negative nanoseconds offset from ‘tv_sec’. Solaris 11.4 is similar, except that ‘tv_sec’ might also be −1000000000. • On Windows platforms (excluding Cygwin), symlinks are not supported, so ‘lstat’ does not exist. Portability problems not fixed by Gnulib: • *Note sys/stat.h::, for general portability problems with ‘struct stat’. 10.588 ‘malloc’ =============== POSIX specification: Gnulib module: malloc-posix Portability problems fixed by Gnulib: • Upon failure, the function does not set ‘errno’ to ‘ENOMEM’ on some platforms: mingw, MSVC 14. • On some platforms, ‘malloc (n)’ can succeed even if ‘n’ exceeds ‘PTRDIFF_MAX’. Although this behavior is arguably allowed by POSIX it can lead to behavior not defined by POSIX later, so ‘malloc-posix’ does not allow going over the limit. Extension: Gnulib provides a module ‘malloc-gnu’ that substitutes a ‘malloc’ implementation that behaves more like the glibc implementation, by fixing this portability problem: • ‘malloc (0)’ returns ‘NULL’ on success on some platforms: AIX 7.2. 10.589 ‘mblen’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 7.1. 10.590 ‘mbrlen’ =============== POSIX specification: Gnulib module: mbrlen Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. • In the C or POSIX locales, this function can return ‘(size_t) -1’ and set ‘errno’ to ‘EILSEQ’: glibc 2.35. • This function returns 0 instead of ‘(size_t) -2’ when the input is empty: glibc 2.19. • This function returns ‘(size_t) -1’ instead of ‘(size_t) -2’ when the input is empty: AIX 5.1. • This function does not put the state into non-initial state when parsing an incomplete multibyte character on some platforms: AIX 5.1. • This function returns the total number of bytes that make up the multibyte character, not the number of bytes that were needed to complete the multibyte character, on some platforms: HP-UX 11.11, Solaris 11 2010-11. • This function may not return 0 when parsing the NUL character on some platforms: Solaris 9. Portability problems not fixed by Gnulib: 10.591 ‘mbrtoc8’ ================ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on most platforms: glibc 2.29, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.4.6, mingw, MSVC 14, Android 9.0. 10.592 ‘mbrtoc16’ ================= Gnulib module: mbrtoc16 Portability problems fixed by Gnulib: • This function is missing on most non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 3.4.6, mingw, MSVC 9, Android 4.4. • This function may crash when the first argument is NULL on some platforms: glibc 2.36. • In the C or POSIX locales, this function can return ‘(size_t) -1’ and set ‘errno’ to ‘EILSEQ’: glibc 2.36. • This function returns 0 instead of ‘(size_t) -2’ when the input is empty: glibc 2.19, Android 11. • This function returns the total number of bytes that make up the multibyte character, not the number of bytes that were needed to complete the multibyte character, on some platforms: mingw. • This function returns ‘(size_t) -3’ instead of a byte count when it has stored a high surrogate, and returns a byte count instead of ‘(size_t) -3’ when it has stored a low surrogate, on some platforms: Android. • This function does not recognize multibyte sequences that ‘mbrtowc’ recognizes on some platforms: FreeBSD 13.2, Solaris 11.4, MSVC 14. Portability problems not fixed by Gnulib: • After ‘mbrtoc16’ returns a ‘char16_t’ value, ‘mbsinit’ cannot be used to determine whether the function is ready to return another ‘char16_t’ value. To do so, instead call ‘mbrtoc16’ again, with an appropriately incremented ‘const char *’ argument and an appropriately decremented ‘size_t’ argument. 10.593 ‘mbrtoc32’ ================= Gnulib module: mbrtoc32 or mbrtoc32-regular Portability problems fixed by either Gnulib module ‘mbrtoc32’ or ‘mbrtoc32-regular’: • This function is missing on most non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 3.4.6, mingw, MSVC 9, Android 4.4. • In the C or POSIX locales, this function can return ‘(size_t) -1’ and set ‘errno’ to ‘EILSEQ’: glibc 2.35. • This function returns 0 instead of ‘(size_t) -2’ when the input is empty: glibc 2.19, mingw, Android 11, Haiku. • This function does not recognize multibyte sequences that ‘mbrtowc’ recognizes on some platforms: FreeBSD 13.2, Solaris 11.4, mingw, MSVC 14. • This function does not work when it’s fed the input bytes one-by-one on some platforms: Cygwin 3.5.3. Portability problems fixed by Gnulib module ‘mbrtoc32-regular’: • This function can map some multibyte characters to a sequence of two or more Unicode characters, and may thus return ‘(size_t) -3’. No known implementation currently (2023) behaves that way, but it may theoretically happen. With the ‘mbrtoc32-regular’ module, you have the guarantee that the Gnulib-provided ‘mbrtoc32’ function maps each multibyte character to exactly one Unicode character and thus never returns ‘(size_t) -3’. • This function behaves incorrectly when converting precomposed characters from the BIG5-HKSCS encoding: glibc 2.36. Portability problems not fixed by Gnulib: • This function is only defined as an inline function on some platforms: Haiku 2020. Note: If you want the guarantee that the ‘char32_t’ values returned by this function are Unicode code points, you also need to request the ‘uchar-c23’ module. 10.594 ‘mbrtowc’ ================ POSIX specification: Gnulib module: mbrtowc Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. • In the C or POSIX locales, this function can return ‘(size_t) -1’ and set ‘errno’ to ‘EILSEQ’: glibc 2.35. • This function returns 0 instead of ‘(size_t) -2’ when the input is empty: glibc 2.19, MSVC 14, Android 11. • This function returns ‘(size_t) -1’ instead of ‘(size_t) -2’ when the input is empty: AIX 7.2. • This function does not put the state into non-initial state when parsing an incomplete multibyte character on some platforms: AIX 7.2. • This function stores a wide character when parsing an incomplete multibyte character on some platforms: MSVC 14. • This function returns the total number of bytes that make up the multibyte character, not the number of bytes that were needed to complete the multibyte character, on some platforms: HP-UX 11.11, Solaris 11 2010-11, mingw, MSVC 14. • This function may not return 0 when parsing the NUL character on some platforms: Solaris 9. Portability problems not fixed by Gnulib: • In UTF-8 locales, this function may return wide characters up to 0x7FFFFFFF (that is, beyond 0x0010FFFF) on some platforms: glibc 2.34. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the ISO C11 function ‘mbrtoc32’, provided by Gnulib module ‘mbrtoc32’, operates on 32-bit wide characters and therefore does not have this limitation. 10.595 ‘mbsinit’ ================ POSIX specification: Gnulib module: mbsinit Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, MSVC 14. • This function always returns 1, even in multibyte locales, on some platforms: mingw. Portability problems not fixed by Gnulib: • This function is not useful after calls to ‘mbrtoc16’ or ‘mbrtoc8’. 10.596 ‘mbsnrtowcs’ =================== POSIX specification: Gnulib module: mbsnrtowcs Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. • This function produces invalid wide characters on some platforms: Solaris 11.4. • In the C or POSIX locales, this function can return ‘(size_t) -1’ and set ‘errno’ to ‘EILSEQ’: glibc 2.35. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘mbsnrtoc32s’, provided by Gnulib module ‘mbsnrtoc32s’, operates on 32-bit wide characters and therefore does not have this limitation. • The specification is not clear about whether this function should update the conversion state when the first argument (the destination pointer) is NULL. The glibc, Mac OS X, FreeBSD implementations do update the state in this case. For portability, when passing a NULL destination argument, it is best to pass a pointer to a temporary copy of the conversion state. 10.597 ‘mbsrtowcs’ ================== POSIX specification: Gnulib module: mbsrtowcs Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. • This function does not work on some platforms: HP-UX 11, Solaris 11 2010-11. • In the C or POSIX locales, this function can return ‘(size_t) -1’ and set ‘errno’ to ‘EILSEQ’: glibc 2.35. • This function does not work when the first argument is NULL on some platforms: mingw. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘mbsrtoc32s’, provided by Gnulib module ‘mbsrtoc32s’, operates on 32-bit wide characters and therefore does not have this limitation. • The specification is not clear about whether this function should update the conversion state when the first argument (the destination pointer) is NULL. The glibc implementation does not update the state in this case; the macOS and FreeBSD implementations do. For portability, when passing a NULL destination argument, it is best to pass a pointer to a temporary copy of the conversion state. 10.598 ‘mbstowcs’ ================= POSIX specification: Gnulib module: mbstowcs Portability problems fixed by Gnulib: • In the C or POSIX locales, this function can return ‘(size_t) -1’ and set ‘errno’ to ‘EILSEQ’: glibc 2.35. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘mbstoc32s’, provided by Gnulib module ‘mbstoc32s’, operates on 32-bit wide characters and therefore does not have this limitation. 10.599 ‘mbtowc’ =============== POSIX specification: Gnulib module: mbtowc Portability problems fixed by Gnulib: • This function is missing on some platforms: Android 4.4. Portability problems not fixed by Gnulib: • In UTF-8 locales, this function may return wide characters up to 0x7FFFFFFF (that is, beyond 0x0010FFFF) on some platforms: glibc 2.34. • This function accumulates hidden state on some platforms: glibc 2.8 (see ). • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.600 ‘memccpy’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.601 ‘memchr’ =============== POSIX specification: Gnulib module: memchr Portability problems fixed by Gnulib: • This function dereferences too much memory on some platforms: glibc 2.10 on x86_64, IA-64; glibc 2.11 on Alpha, AIX 7.2. • This function returns NULL if the character argument is not in the range of an ‘unsigned char’ on some platforms: Android 5.0. Portability problems not fixed by Gnulib: 10.602 ‘memcmp’ =============== POSIX specification: Gnulib module: memcmp Portability problems fixed by Gnulib: • This function fails when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary on some older platforms: NeXTstep/x86. Portability problems not fixed by Gnulib: • This function produces wrong results when the arguments are constant strings and the compiler is clang 6.0.1. 10.603 ‘memcpy’ =============== POSIX specification: Gnulib module: memcpy Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.604 ‘memmove’ ================ POSIX specification: Gnulib module: memmove Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.605 ‘memset’ =============== POSIX specification: Gnulib module: memset Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.606 ‘memset_explicit’ ======================== Documentation: • *note Erasing Sensitive Data: (libc)Erasing Sensitive Data, Gnulib module: memset_explicit The ‘memset_explicit’ function is an approximation to what is needed, and does not suffice in general to erase information. Although calling ‘memset_explicit’ should clear the memory in question, the information that was in memory may still be available elsewhere on the machine. Proper implementation of information erasure requires support from levels below C code. Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.36, FreeBSD 13.1, NetBSD 10.0, OpenBSD 7.2, macOS 13, Solaris 11.4, Android API level 33, and many other systems. Portability problems not fixed by Gnulib: • Although the module’s implementation should set the memory on platforms compatible with GCC and on platforms using traditional linkers, it may not set the memory on non-GCC platforms that use whole-program optimization. 10.607 ‘mkdir’ ============== POSIX specification: Gnulib module: sys_stat or mkdir Portability problems fixed by either Gnulib module ‘sys_stat’ or ‘mkdir’: • This function is declared in different header files (namely, ‘’ or ‘’) on some platforms: mingw, MSVC 14. • On Windows platforms (excluding Cygwin), this function is called ‘_mkdir’ and takes only one argument. The fix (without Gnulib) is to define a macro like this: #define mkdir ((int (*)()) _mkdir) or #define mkdir(path,mode) _mkdir (path) Portability problems fixed by Gnulib module ‘mkdir’: • When the argument ends in a slash, the function call fails on some platforms. • This function mistakenly succeeds on ‘mkdir("d/./",mode)’ on some platforms: Cygwin 1.5.x, mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.608 ‘mkdirat’ ================ POSIX specification: Gnulib module: mkdirat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. Portability problems not fixed by Gnulib: 10.609 ‘mkdtemp’ ================ POSIX specification: Gnulib module: mkdtemp Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.610 ‘mkfifo’ =============== POSIX specification: Gnulib module: mkfifo Portability problems fixed by Gnulib: • This function mishandles trailing slash on some platforms: FreeBSD 7.2, Solaris 9. • This function is missing on some platforms; however, the replacement always fails with ‘ENOSYS’: mingw, MSVC 14, Android 4.4. Portability problems not fixed by Gnulib: • If the argument exists and is a directory, this function fails with ‘EISDIR’ instead of the correct ‘EEXIST’: HP-UX 11.11. 10.611 ‘mkfifoat’ ================= POSIX specification: Gnulib module: mkfifoat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. But the replacement function is not safe to be used in libraries and is not multithread-safe. • This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file, on some platforms: AIX 7.2. • This function does not fail when the file name argument ends in a slash and (without the slash) names a symbolic link, on some platforms: macOS 14. Portability problems not fixed by Gnulib: • The gnulib replacement function always fails with ‘ENOSYS’ on some platforms: mingw, MSVC 14. • If the argument exists and is a directory, the gnulib replacement function fails with ‘EISDIR’ instead of the correct ‘EEXIST’: HP-UX 11.11. 10.612 ‘mknod’ ============== POSIX specification: Gnulib module: mknod Portability problems fixed by Gnulib: • This function requires super-user privileges to create a fifo: FreeBSD 7.2, NetBSD 8.0, OpenBSD 6.7. • This function mishandles trailing slash on some platforms: FreeBSD 7.2, Solaris 9. • This function is missing on some platforms; however, the replacement always fails with ‘ENOSYS’: mingw, MSVC 14. Portability problems not fixed by Gnulib: • Use of this function for anything except fifos is not portable, generally requiring super-user privileges and knowledge of supported device numbers. • If the argument exists and is a directory, this function fails with ‘EISDIR’ instead of the correct ‘EEXIST’: HP-UX 11.11. 10.613 ‘mknodat’ ================ POSIX specification: Gnulib module: mkfifoat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. But the replacement function is not safe to be used in libraries and is not multithread-safe. • This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file, on some platforms: AIX 7.2. Portability problems not fixed by Gnulib: • The gnulib replacement function always fails with ‘ENOSYS’ on some platforms: mingw, MSVC 14. • If the argument exists and is a directory, the gnulib replacement function fails with ‘EISDIR’ instead of the correct ‘EEXIST’: HP-UX 11.11. 10.614 ‘mkstemp’ ================ POSIX specification: Gnulib module: mkstemp Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, ‘mkstemp’ may not work correctly to create files 2 GiB and larger. *Note Large File Support::. • On some older platforms, ‘mkstemp’ can create a world or group writable or readable file, if you haven’t set the process umask to 077. This is a security risk. Portability problems not fixed by Gnulib: The gnulib module ‘clean-temp’ can create temporary files that will not be left behind after signals such as SIGINT. 10.615 ‘mktime’ =============== POSIX specification: Gnulib module: mktime Portability problems fixed by Gnulib: • On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable ‘TZ’ has been set by Cygwin. • ‘mktime’ may go into an endless loop on some platforms. • ‘mktime’ may occasionally return wrong results on some platforms. Portability problems not fixed by Gnulib: • On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. • Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX. *Note tzset::. 10.616 ‘mlock’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.617 ‘mlockall’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 4.1. 10.618 ‘mmap’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly across the entire data range of files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • To get anonymous memory, on some platforms, you can use the flags ‘MAP_ANONYMOUS | MAP_PRIVATE’ and ‘-1’ instead of a file descriptor; on others you have to use a read-only file descriptor of ‘/dev/zero’. • On HP-UX, passing a non-NULL first argument, as a hint for the address (even without ‘MAP_FIXED’), often causes ‘mmap’ to fail. Better pass NULL in this case. • On HP-UX, ‘MAP_FIXED’ basically never works. On other platforms, it depends on the circumstances whether memory can be returned at a given address. 10.619 ‘modf’ ============= POSIX specification: Gnulib module: modf or modf-ieee Portability problems fixed by either Gnulib module ‘modf’ or ‘modf-ieee’: Portability problems fixed by Gnulib module ‘modf-ieee’: • This function has problems with a NaN argument on some platforms: NetBSD 5.1, Cygwin. • This function has problems with infinite arguments on some platforms: FreeBSD 6.4, OpenBSD 6.7. Portability problems not fixed by Gnulib: 10.620 ‘modff’ ============== POSIX specification: Gnulib module: modff or modff-ieee Portability problems fixed by either Gnulib module ‘modff’ or ‘modff-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11. • This function is only defined as a buggy macro with arguments on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘modff-ieee’: • This function has problems with a NaN argument on some platforms: NetBSD 5.1, OpenBSD 6.7, Solaris 9, Cygwin. • This function has problems with infinite arguments on some platforms: mingw. Portability problems not fixed by Gnulib: 10.621 ‘modfl’ ============== POSIX specification: Gnulib module: modfl or modfl-ieee Portability problems fixed by either Gnulib module ‘modfl’ or ‘modfl-ieee’: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function produces wrong results on some platforms: NetBSD 10.0/arm64. Portability problems fixed by Gnulib module ‘modfl-ieee’: • This function has problems with infinite arguments on some platforms: mingw. Portability problems not fixed by Gnulib: 10.622 ‘mprotect’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This function does not set ‘errno’ on some platforms: mingw. • On AIX, it is not possible to use ‘mprotect’ on memory regions allocated with ‘malloc’. 10.623 ‘mq_close’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.624 ‘mq_getattr’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.625 ‘mq_notify’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.626 ‘mq_open’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.627 ‘mq_receive’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.628 ‘mq_send’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.629 ‘mq_setattr’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.630 ‘mq_timedreceive’ ======================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.631 ‘mq_timedsend’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.632 ‘mq_unlink’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.633 ‘mrand48’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.634 ‘msgctl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. 10.635 ‘msgget’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. 10.636 ‘msgrcv’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. 10.637 ‘msgsnd’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. 10.638 ‘msync’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • On NetBSD, ‘msync’ takes only two arguments. 10.639 ‘mtx_destroy’ ==================== Documentation: *note Mutexes: (libc)ISO C Mutexes. Gnulib module: mtx Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.640 ‘mtx_init’ ================= Documentation: *note Mutexes: (libc)ISO C Mutexes. Gnulib module: mtx Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.641 ‘mtx_lock’ ================= Documentation: *note Mutexes: (libc)ISO C Mutexes. Gnulib module: mtx Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.642 ‘mtx_timedlock’ ====================== Documentation: *note Mutexes: (libc)ISO C Mutexes. Gnulib module: mtx Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.643 ‘mtx_trylock’ ==================== Documentation: *note Mutexes: (libc)ISO C Mutexes. Gnulib module: mtx Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.644 ‘mtx_unlock’ =================== Documentation: *note Mutexes: (libc)ISO C Mutexes. Gnulib module: mtx Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.645 ‘munlock’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.646 ‘munlockall’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 4.1. 10.647 ‘munmap’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.648 ‘nan’ ============ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. 10.649 ‘nanf’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.650 ‘nanl’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 3.1. 10.651 ‘nanosleep’ ================== POSIX specification: Gnulib module: nanosleep Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function mishandles large arguments when interrupted by a signal on some platforms: Linux 64-bit, Solaris 64-bit. • This function cannot sleep longer than 49.7 days on some platforms: Cygwin 1.5.x. • This function does not fail when passed a negative nanosecond value on some platforms: newer 32-bit mingw. Portability problems not fixed by Gnulib: 10.652 ‘nearbyint’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, Solaris 9, MSVC 9. 10.653 ‘nearbyintf’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.654 ‘nearbyintl’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. 10.655 ‘newlocale’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 9.0, NetBSD 5.0, OpenBSD 6.1, Minix 3.1.8, AIX 6.1, HP-UX 11, Solaris 11.3, Cygwin 2.5.x, mingw, MSVC 14, Android 4.4. • This function is useless because the ‘locale_t’ type is not defined on some platforms: z/OS. • This function is useless because the ‘locale_t’ type contains basically no information on some platforms: OpenBSD 6.3. 10.656 ‘nextafter’ ================== POSIX specification: Gnulib module: nextafter Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. 10.657 ‘nextafterf’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. 10.658 ‘nextafterl’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. 10.659 ‘nextdown’ ================= Documentation: • *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling, • man nextdown. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.660 ‘nextdownf’ ================== Documentation: • *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling, • man nextdownf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.661 ‘nextdownl’ ================== Documentation: • *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling, • man nextdownl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.662 ‘nexttoward’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.2. 10.663 ‘nexttowardf’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9. 10.664 ‘nexttowardl’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 8.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.2. 10.665 ‘nextup’ =============== Documentation: • *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling, • man nextup. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.666 ‘nextupf’ ================ Documentation: • *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling, • man nextupf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.667 ‘nextupl’ ================ Documentation: • *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling, • man nextupl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.668 ‘nftw’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not correctly report the size of files or block devices 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14, Android 4.1. 10.669 ‘nice’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • In glibc before glibc 2.2.4, ‘nice’ returned 0 upon success. 10.670 ‘nl_langinfo’ ==================== POSIX specification: Gnulib module: nl_langinfo Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. • The constant ‘CODESET’ is not supported on some platforms: OpenBSD 3.8. • The constants ‘ALTMON_1’ to ‘ALTMON_12’ are not defined on some platforms: glibc 2.26, musl libc, macOS 11.1, NetBSD 8.0, OpenBSD 6.7, AIX 7.2, HP-UX 11.31, Solaris 11.4, Haiku, Cygwin 2.9. • The constants ‘ERA’, ‘ERA_D_FMT’, ‘ERA_D_T_FMT’, ‘ERA_T_FMT’, ‘ALT_DIGITS’ are not supported on some platforms: OpenBSD 6.7. • This function is not multithread-safe on some platforms: Solaris 11.3. Portability problems not fixed by Gnulib: • On Cygwin 1.5.x, which doesn’t have locales, ‘nl_langinfo(CODESET)’ always returns ‘"US-ASCII"’. • On Cygwin 1.7.0, only the charset portion of a locale designation is honored. • On NetBSD 5.0, in some locales, ‘nl_langinfo(CRNCYSTR)’ returns the empty string, although the local currency symbol, as returned by ‘localeconv()->currency_symbol’, is non-empty. • On NetBSD 5.1, in the "C" locale, the results of ‘nl_langinfo(ABMON_1)’ ... ‘nl_langinfo(ABMON_12)’ are full month names, not abbreviated month names. 10.671 ‘nl_langinfo_l’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. 10.672 ‘nrand48’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.673 ‘ntohl’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, mingw, MSVC 14, Android 4.4. 10.674 ‘ntohs’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, mingw, MSVC 14, Android 4.4. 10.675 ‘open’ ============= POSIX specification: Gnulib module: open, fchdir Portability problems fixed by the Gnulib module ‘open’: • Some platforms do not support ‘O_CLOEXEC’: Mac OS X 10.6, FreeBSD 8.4, NetBSD 5.1, OpenBSD 4.9, Minix 3.1.8, AIX 7.1, HP-UX 11, Solaris 10, Cygwin 1.7.x, mingw, MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, ‘open’ may not work correctly with files 2 GiB and larger. *Note Large File Support::. • This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: macOS 11.1, FreeBSD 7.2, AIX 7.1, HP-UX 11.00, Solaris 9. • This function does not support the ‘O_NONBLOCK’ flag when it is defined by the gnulib module ‘nonblocking’ on some platforms: mingw, MSVC 14. • On Windows platforms (excluding Cygwin), this function does usually not recognize the ‘/dev/null’ filename. Portability problems fixed by the Gnulib module ‘fchdir’: • On Windows platforms (excluding Cygwin), this function fails to open a read-only descriptor for directories. Portability problems not fixed by Gnulib: • The Gnulib replacement for ‘O_CLOEXEC’ is not atomic, and so is not safe in the presence of multiple threads or signal handlers. • ‘open ("symlink", O_CREAT ...)’ fails when the argument points to a nonexistent file in an existing directory on some platforms: Haiku. • ‘open ("symlink", O_NOFOLLOW ...)’ fails with ‘errno’ set to ‘EMLINK’ instead of the POSIX-required ‘ELOOP’ on some platforms: FreeBSD 10.1. • ‘open ("symlink", O_NOFOLLOW ...)’ fails with ‘errno’ set to ‘EFTYPE’ instead of the POSIX-required ‘ELOOP’ on some platforms: NetBSD 6.1. • On Windows, this function returns a file handle in ‘O_TEXT’ mode by default; this means that it translates ‘'\n'’ to CR/LF by default. Use the ‘O_BINARY’ flag if you need reliable binary I/O. 10.676 ‘openat’ =============== POSIX specification: Gnulib module: openat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. • Some platforms do not support ‘O_CLOEXEC’: AIX 7.1, Solaris 10. • On platforms where ‘off_t’ is a 32-bit type, ‘open’ may not work correctly with files 2 GiB and larger. *Note Large File Support::. • This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: Solaris 9. Portability problems not fixed by Gnulib: • The Gnulib replacement for ‘O_CLOEXEC’ is not atomic, and so is not safe in the presence of multiple threads or signal handlers. • ‘openat (fd, "symlink", O_NOFOLLOW ...)’ fails with ‘errno’ set to ‘EMLINK’ instead of the POSIX-required ‘ELOOP’ on some platforms: FreeBSD 10.1. • ‘openat (fd, "symlink", O_NOFOLLOW ...)’ fails with ‘errno’ set to ‘EFTYPE’ instead of the POSIX-required ‘ELOOP’ on some platforms: NetBSD 6.1. 10.677 ‘opendir’ ================ POSIX specification: Gnulib module: opendir Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on huge directories 2 GiB and larger. Also, on platforms where ‘ino_t’ is a 32-bit type, this function may report inode numbers incorrectly. *Note Large File Support::. Portability problems not fixed by Gnulib: 10.678 ‘openlog’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.679 ‘open_memstream’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. An alternative to the ‘open_memstream’ function is the Gnulib module ‘string-buffer’. 10.680 ‘open_wmemstream’ ======================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.681 ‘optarg’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: Mac OS X 10.5, MSVC 14. 10.682 ‘opterr’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: MSVC 14. 10.683 ‘optind’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: MSVC 14. 10.684 ‘optopt’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: Mac OS X 10.5, MSVC 14. 10.685 ‘pathconf’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.686 ‘pause’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.687 ‘pclose’ =============== POSIX specification: Gnulib module: pclose Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.688 ‘perror’ =============== POSIX specification: Gnulib module: perror Portability problems fixed by Gnulib: • This function does not support the error values that are specified by POSIX but not defined by the system, on some platforms: OpenBSD 4.0, Cygwin 1.5.x, mingw, MSVC 14. • This function treats ‘errno’ of 0 like failure, although POSIX requires that the message declare it as a success, on some platforms: FreeBSD 8.2, OpenBSD 4.7, macOS 11.1. • This function clobbers the ‘strerror’ buffer on some platforms: Cygwin 1.7.9, Android 11. • This function fails to print a useful a string for out-of-range integers on some platforms: HP-UX 11. Portability problems not fixed by Gnulib: • POSIX requires that this function set the stream error bit (detected by ‘ferror’) on write failure, but not all platforms do this: glibc 2.13, cygwin 1.7.9. • POSIX requires that this function not alter stream orientation, but the gnulib replacement locks in byte orientation and fails on wide character streams. 10.689 ‘pipe’ ============= POSIX specification: Gnulib module: pipe-posix Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function crashes rather than failing with ‘EMFILE’ if no resources are left on some platforms: Cygwin 1.7.9. 10.690 ‘poll’ ============= POSIX specification: Gnulib module: poll Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, HP NonStop. • This function doesn’t work on special files like ‘/dev/null’ and ttys like ‘/dev/tty’ on some platforms: macOS 10.15, AIX 5.3. Portability problems not fixed by Gnulib: • Under Windows, when passing a pipe, Gnulib’s ‘poll’ replacement might return 0 even before the timeout has passed. Programs using it with pipes can thus busy wait. • On some platforms, file descriptors other than sockets do not support POLLHUP; they will return a "readable" or "writable" status instead: AIX 7.2, Cygwin 3.4.6, HP NonStop, mingw, MSVC. 10.691 ‘popen’ ============== POSIX specification: Gnulib module: popen Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. • Some platforms start the child with closed stdin or stdout if the standard descriptors were closed in the parent: Cygwin 1.5.x. Portability problems not fixed by Gnulib: • On native Windows platforms, this functions terminates the current process with exit code 127 if the environment variable ‘COMSPEC’ is not set. • Some platforms mistakenly set the close-on-exec bit, then if it is cleared by the application, the platform then leaks file descriptors from earlier ‘popen’ calls into subsequent ‘popen’ children: Cygwin 1.5.x. 10.692 ‘posix_fadvise’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly across the entire data range of files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. 10.693 ‘posix_fallocate’ ======================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly across the entire data range of files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. • POSIX specifies that EINVAL should be returned when the file system doesn’t support the allocation operation directly. glibc however emulates the file system allocation with writes where unsupported, and apps have depended on that long term implementation. This is both inefficient, and as of glibc 2.21 at least, buggy on certain NFS setups. 10.694 ‘posix_madvise’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. 10.695 ‘posix_mem_offset’ ========================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.696 ‘posix_memalign’ ======================= POSIX specification: Gnulib module: posix_memalign Portability problems fixed by Gnulib: • This function produces misaligned results on some platforms: OpenBSD 6.1. Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.1. The Gnulib module ‘aligned-malloc’ provides functions for allocating and freeing blocks of suitably aligned memory. The Gnulib module ‘pagealign_alloc’ provides a similar API for allocating and freeing blocks of memory aligned on a system page boundary. 10.697 ‘posix_openpt’ ===================== POSIX specification: Gnulib module: posix_openpt Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. However, the replacement may fail with ‘ENOSYS’ or ‘ENOENT’ on some platforms. Portability problems not fixed by Gnulib: Note that when using this function to open the master side of a pseudo-terminal, you still need platform dependent code to open the corresponding slave side. The Gnulib module ‘openpty’ provides an easy-to-use API that does both at once. 10.698 ‘posix_spawn’ ==================== POSIX specification: Gnulib module: posix_spawn Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.3, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • When this function fails, it causes the stdio buffer contents to be output twice on some platforms: AIX 6.1. • When the program to be invoked is an executable script without a ‘#!’ marker in the first line, this function executes the script as if it were a shell script, on some platforms: GNU/Hurd. Portability problems not fixed by Gnulib: • This function does not work on some platforms: AIX 6.1 (under particular circumstances). The Gnulib modules ‘posix_spawn_file_actions_addchdir’ and ‘posix_spawn_file_actions_addfchdir’ provide additional actions, that consist in changing the current directory of the child process before starting the specified program. 10.699 ‘posix_spawn_file_actions_addclose’ ========================================== POSIX specification: Gnulib module: posix_spawn_file_actions_addclose Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • This function does not reject a negative file descriptor on some platforms: musl libc. Portability problems not fixed by Gnulib: 10.700 ‘posix_spawn_file_actions_adddup2’ ========================================= POSIX specification: Gnulib module: posix_spawn_file_actions_adddup2 Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • This function does not reject a too large file descriptor on some platforms: musl libc, Solaris 11.4. Portability problems not fixed by Gnulib: 10.701 ‘posix_spawn_file_actions_addopen’ ========================================= POSIX specification: Gnulib module: posix_spawn_file_actions_addopen Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • This function does not reject a too large file descriptor on some platforms: musl libc, Solaris 11.4. Portability problems not fixed by Gnulib: 10.702 ‘posix_spawn_file_actions_destroy’ ========================================= POSIX specification: Gnulib module: posix_spawn_file_actions_destroy Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.703 ‘posix_spawn_file_actions_init’ ====================================== POSIX specification: Gnulib module: posix_spawn_file_actions_init Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.704 ‘posix_spawnattr_destroy’ ================================ POSIX specification: Gnulib module: posix_spawnattr_destroy Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.705 ‘posix_spawnattr_getflags’ ================================= POSIX specification: Gnulib module: posix_spawnattr_getflags Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.706 ‘posix_spawnattr_getpgroup’ ================================== POSIX specification: Gnulib module: posix_spawnattr_getpgroup Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.707 ‘posix_spawnattr_getschedparam’ ====================================== POSIX specification: Gnulib module: posix_spawnattr_getschedparam Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.708 ‘posix_spawnattr_getschedpolicy’ ======================================= POSIX specification: Gnulib module: posix_spawnattr_getschedpolicy Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.709 ‘posix_spawnattr_getsigdefault’ ====================================== POSIX specification: Gnulib module: posix_spawnattr_getsigdefault Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.710 ‘posix_spawnattr_getsigmask’ =================================== POSIX specification: Gnulib module: posix_spawnattr_getsigmask Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.711 ‘posix_spawnattr_init’ ============================= POSIX specification: Gnulib module: posix_spawnattr_init Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.712 ‘posix_spawnattr_setflags’ ================================= POSIX specification: Gnulib module: posix_spawnattr_setflags Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.713 ‘posix_spawnattr_setpgroup’ ================================== POSIX specification: Gnulib module: posix_spawnattr_setpgroup Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.714 ‘posix_spawnattr_setschedparam’ ====================================== POSIX specification: Gnulib module: posix_spawnattr_setschedparam Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.715 ‘posix_spawnattr_setschedpolicy’ ======================================= POSIX specification: Gnulib module: posix_spawnattr_setschedpolicy Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.716 ‘posix_spawnattr_setsigdefault’ ====================================== POSIX specification: Gnulib module: posix_spawnattr_setsigdefault Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.717 ‘posix_spawnattr_setsigmask’ =================================== POSIX specification: Gnulib module: posix_spawnattr_setsigmask Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. Portability problems not fixed by Gnulib: 10.718 ‘posix_spawnp’ ===================== POSIX specification: Gnulib module: posix_spawnp Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.3, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • When this function fails, it causes the stdio buffer contents to be output twice on some platforms: AIX 6.1. • When the program to be invoked is an executable script without a ‘#!’ marker in the first line, this function executes the script as if it were a shell script, on some platforms: glibc 2.14/Linux, glibc 2.32/Hurd, macOS 12.5, FreeBSD 14.0, OpenBSD 7.2, AIX 7.2, Solaris 11.4, Cygwin 3.4.6. Portability problems not fixed by Gnulib: • This function does not work on some platforms: AIX 6.1 (under particular circumstances). The Gnulib modules ‘posix_spawn_file_actions_addchdir’ and ‘posix_spawn_file_actions_addfchdir’ provide additional actions, that consist in changing the current directory of the child process before starting the specified program. 10.719 ‘posix_trace_attr_destroy’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.720 ‘posix_trace_attr_getclockres’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.721 ‘posix_trace_attr_getcreatetime’ ======================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.722 ‘posix_trace_attr_getgenversion’ ======================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.723 ‘posix_trace_attr_getinherited’ ====================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.724 ‘posix_trace_attr_getlogfullpolicy’ ========================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.725 ‘posix_trace_attr_getlogsize’ ==================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.726 ‘posix_trace_attr_getmaxdatasize’ ======================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.727 ‘posix_trace_attr_getmaxsystemeventsize’ =============================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.728 ‘posix_trace_attr_getmaxusereventsize’ ============================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.729 ‘posix_trace_attr_getname’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.730 ‘posix_trace_attr_getstreamfullpolicy’ ============================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.731 ‘posix_trace_attr_getstreamsize’ ======================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.732 ‘posix_trace_attr_init’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.733 ‘posix_trace_attr_setinherited’ ====================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.734 ‘posix_trace_attr_setlogfullpolicy’ ========================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.735 ‘posix_trace_attr_setlogsize’ ==================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.736 ‘posix_trace_attr_setmaxdatasize’ ======================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.737 ‘posix_trace_attr_setname’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.738 ‘posix_trace_attr_setstreamfullpolicy’ ============================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.739 ‘posix_trace_attr_setstreamsize’ ======================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.740 ‘posix_trace_clear’ ========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.741 ‘posix_trace_close’ ========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.742 ‘posix_trace_create’ =========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.743 ‘posix_trace_create_withlog’ =================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.744 ‘posix_trace_event’ ========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.745 ‘posix_trace_eventid_equal’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.746 ‘posix_trace_eventid_get_name’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.747 ‘posix_trace_eventid_open’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.748 ‘posix_trace_eventset_add’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.749 ‘posix_trace_eventset_del’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.750 ‘posix_trace_eventset_empty’ =================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.751 ‘posix_trace_eventset_fill’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.752 ‘posix_trace_eventset_ismember’ ====================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.753 ‘posix_trace_eventtypelist_getnext_id’ ============================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.754 ‘posix_trace_eventtypelist_rewind’ ========================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.755 ‘posix_trace_flush’ ========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.756 ‘posix_trace_get_attr’ ============================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.757 ‘posix_trace_get_filter’ =============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.758 ‘posix_trace_get_status’ =============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.759 ‘posix_trace_getnext_event’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.760 ‘posix_trace_open’ ========================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.761 ‘posix_trace_rewind’ =========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.762 ‘posix_trace_set_filter’ =============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.763 ‘posix_trace_shutdown’ ============================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.764 ‘posix_trace_start’ ========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.765 ‘posix_trace_stop’ ========================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.766 ‘posix_trace_timedgetnext_event’ ======================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.767 ‘posix_trace_trid_eventid_open’ ====================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.768 ‘posix_trace_trygetnext_event’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.769 ‘posix_typed_mem_get_info’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.770 ‘posix_typed_mem_open’ ============================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.771 ‘pow’ ============ POSIX specification: Gnulib module: pow Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.772 ‘powf’ ============= POSIX specification: Gnulib module: powf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 9. Portability problems not fixed by Gnulib: 10.773 ‘powl’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.774 ‘pread’ ============== POSIX specification: Gnulib module: pread Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. • This function returns zero instead of positive values when large file support is enabled on some platforms: HP-UX 11.11. • This function does not fail on pipes on some platforms: HP-UX 11.31. Portability problems not fixed by Gnulib: 10.775 ‘printf’ =============== POSIX specification: Gnulib module: printf-posix or printf-gnu or stdio, nonblocking, sigpipe Portability problems fixed by either Gnulib module ‘printf-posix’ or ‘printf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. • This function mishandles large floating point precisions (for example, formatting 1.0 with ‘"%.511f"’) on some platforms: Solaris 10. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. Portability problems fixed by Gnulib module ‘printf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘printf-posix’ or ‘printf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’ or ‘printf-posix’ or ‘printf-gnu’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’ or ‘printf-posix’ or ‘printf-gnu’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • Attempting to write to a read-only stream fails with ‘EOF’ but does not set the error flag for ‘ferror’ on some platforms: glibc 2.13, cygwin 1.7.9. 10.776 ‘pselect’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 9, mingw, MSVC 14. • On some platforms, this function fails to detect invalid fds with EBADF, but only if they lie beyond the current maximum open fd: FreeBSD 8.2. Portability problems not fixed by Gnulib: • This function has a slightly incompatible declaration on some platforms: AIX 7.1 (when ‘_ALL_SOURCE’ is defined). • When the SIGMASK argument is nonnull on platforms that do not natively support this function, race conditions are possible when its gnulib implementation temporarily modifies the signal mask, and the behavior is unspecified in a multi-threaded process. 10.777 ‘psiginfo’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 4.1. 10.778 ‘psignal’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 4.1. 10.779 ‘pthread_atfork’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 3.0. 10.780 ‘pthread_attr_destroy’ ============================= POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.781 ‘pthread_attr_getdetachstate’ ==================================== POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.782 ‘pthread_attr_getguardsize’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, Cygwin 1.7.9, mingw, MSVC 14. 10.783 ‘pthread_attr_getinheritsched’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 8.1. 10.784 ‘pthread_attr_getschedparam’ =================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.785 ‘pthread_attr_getschedpolicy’ ==================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.786 ‘pthread_attr_getscope’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.787 ‘pthread_attr_getstack’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14. 10.788 ‘pthread_attr_getstacksize’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.789 ‘pthread_attr_init’ ========================== POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. • This function is only defined as an inline function on some platforms: HP-UX 11.11. Portability problems not fixed by Gnulib: 10.790 ‘pthread_attr_setdetachstate’ ==================================== POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.791 ‘pthread_attr_setguardsize’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, Cygwin 1.7.9, mingw, MSVC 14. 10.792 ‘pthread_attr_setinheritsched’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 8.1. 10.793 ‘pthread_attr_setschedparam’ =================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.794 ‘pthread_attr_setschedpolicy’ ==================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.795 ‘pthread_attr_setscope’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.796 ‘pthread_attr_setstack’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14. 10.797 ‘pthread_attr_setstacksize’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.798 ‘pthread_barrier_destroy’ ================================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. 10.799 ‘pthread_barrier_init’ ============================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. 10.800 ‘pthread_barrier_wait’ ============================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. 10.801 ‘pthread_barrierattr_destroy’ ==================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. 10.802 ‘pthread_barrierattr_getpshared’ ======================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.2, macOS 11.1, FreeBSD 5.2.1, NetBSD 10.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. 10.803 ‘pthread_barrierattr_init’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. 10.804 ‘pthread_barrierattr_setpshared’ ======================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, NetBSD 10.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. 10.805 ‘pthread_cancel’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.806 ‘pthread_cleanup_pop’ ============================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, NetBSD 10.0, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.807 ‘pthread_cleanup_push’ ============================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, NetBSD 10.0, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.808 ‘pthread_cond_broadcast’ =============================== POSIX specification: Gnulib module: pthread-cond Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.809 ‘pthread_cond_destroy’ ============================= POSIX specification: Gnulib module: pthread-cond Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.810 ‘pthread_cond_init’ ========================== POSIX specification: Gnulib module: pthread-cond Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.811 ‘pthread_cond_signal’ ============================ POSIX specification: Gnulib module: pthread-cond Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.812 ‘pthread_cond_timedwait’ =============================== POSIX specification: Gnulib module: pthread-cond Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.813 ‘pthread_cond_wait’ ========================== POSIX specification: Gnulib module: pthread-cond Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.814 ‘pthread_condattr_destroy’ ================================= POSIX specification: Gnulib module: pthread-cond Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.815 ‘pthread_condattr_getclock’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.2, macOS 11.1, FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 4.4. 10.816 ‘pthread_condattr_getpshared’ ==================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 10.817 ‘pthread_condattr_init’ ============================== POSIX specification: Gnulib module: pthread-cond Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.818 ‘pthread_condattr_setclock’ ================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.2, macOS 11.1, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 4.4. 10.819 ‘pthread_condattr_setpshared’ ==================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 10.820 ‘pthread_create’ ======================= POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. • This function is only defined as an inline function on some platforms: HP-UX 11.11. Portability problems not fixed by Gnulib: • On Linux/glibc platforms before the advent of NPTL in 2003, signals could only be sent to one particular thread. In POSIX, signals are sent to the entire process and executed by any thread of the process that happens to have the particular signal currently unblocked. 10.821 ‘pthread_detach’ ======================= POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.822 ‘pthread_equal’ ====================== POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.823 ‘pthread_exit’ ===================== POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.824 ‘pthread_getconcurrency’ =============================== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, Minix 3.1.8, mingw, MSVC 14, Android 9.0. • This function is removed in POSIX.1-2024. You can remove calls to this function. 10.825 ‘pthread_getcpuclockid’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. 10.826 ‘pthread_getschedparam’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.827 ‘pthread_getspecific’ ============================ POSIX specification: Gnulib module: pthread-tss Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.828 ‘pthread_join’ ===================== POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.829 ‘pthread_key_create’ =========================== POSIX specification: Gnulib module: pthread-tss Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.830 ‘pthread_key_delete’ =========================== POSIX specification: Gnulib module: pthread-tss Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.831 ‘pthread_kill’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.832 ‘pthread_mutex_consistent’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.11, macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.833 ‘pthread_mutex_destroy’ ============================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.834 ‘pthread_mutex_getprioceiling’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.835 ‘pthread_mutex_init’ =========================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.836 ‘pthread_mutex_lock’ =========================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.837 ‘pthread_mutex_setprioceiling’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.838 ‘pthread_mutex_timedlock’ ================================ POSIX specification: Gnulib module: pthread_mutex_timedlock Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.839 ‘pthread_mutex_trylock’ ============================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.840 ‘pthread_mutex_unlock’ ============================= POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.841 ‘pthread_mutexattr_destroy’ ================================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.842 ‘pthread_mutexattr_getprioceiling’ ========================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.843 ‘pthread_mutexattr_getprotocol’ ====================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 8.1. 10.844 ‘pthread_mutexattr_getpshared’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 10.845 ‘pthread_mutexattr_getrobust’ ==================================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.11, macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. But the provided replacement is just a dummy. Portability problems not fixed by Gnulib: 10.846 ‘pthread_mutexattr_gettype’ ================================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.847 ‘pthread_mutexattr_init’ =============================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.848 ‘pthread_mutexattr_setprioceiling’ ========================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.849 ‘pthread_mutexattr_setprotocol’ ====================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 8.1. 10.850 ‘pthread_mutexattr_setpshared’ ===================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 10.851 ‘pthread_mutexattr_setrobust’ ==================================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.11, macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. But the provided replacement is just a dummy. Portability problems not fixed by Gnulib: 10.852 ‘pthread_mutexattr_settype’ ================================== POSIX specification: Gnulib module: pthread-mutex Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.853 ‘pthread_once’ ===================== POSIX specification: Gnulib module: pthread-once Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. • This function makes applications hang forever on some platforms: Cygwin 3.5.3. Portability problems not fixed by Gnulib: 10.854 ‘pthread_rwlock_destroy’ =============================== POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.855 ‘pthread_rwlock_init’ ============================ POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.856 ‘pthread_rwlock_rdlock’ ============================== POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: • This function prefers readers to writers (meaning, when this function is called on an rwlock that is already taken by one or more readers, and another writer is already waiting to take it, this function may return successfully immediately) – a behaviour that may lead to writer starvation – on some platforms: glibc 2.28. As a workaround, you can use the ‘gl_rwlock_t’ type from the Gnulib module ‘lock’. 10.857 ‘pthread_rwlock_timedrdlock’ =================================== POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: • This function prefers readers to writers (meaning, when this function is called on an rwlock that is already taken by one or more readers, and another writer is already waiting to take it, this function may return successfully immediately) – a behaviour that may lead to writer starvation – on some platforms: glibc 2.28. 10.858 ‘pthread_rwlock_timedwrlock’ =================================== POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.859 ‘pthread_rwlock_tryrdlock’ ================================= POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: • This function prefers readers to writers (meaning, when this function is called on an rwlock that is already taken by one or more readers, and another writer is already waiting to take it, this function may return successfully immediately) – a behaviour that may lead to writer starvation – on some platforms: glibc 2.28. 10.860 ‘pthread_rwlock_trywrlock’ ================================= POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.861 ‘pthread_rwlock_unlock’ ============================== POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.862 ‘pthread_rwlock_wrlock’ ============================== POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.863 ‘pthread_rwlockattr_destroy’ =================================== POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.864 ‘pthread_rwlockattr_getpshared’ ====================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, Minix 3.1.8, mingw, MSVC 14. 10.865 ‘pthread_rwlockattr_init’ ================================ POSIX specification: Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.866 ‘pthread_rwlockattr_setpshared’ ====================================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, Minix 3.1.8, mingw, MSVC 14. 10.867 ‘pthread_self’ ===================== POSIX specification: Gnulib module: pthread-thread Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.868 ‘pthread_setcancelstate’ =============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.869 ‘pthread_setcanceltype’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.870 ‘pthread_setconcurrency’ =============================== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, Minix 3.1.8, mingw, MSVC 14, Android 9.0. • This function is removed in POSIX.1-2024. You can remove calls to this function. 10.871 ‘pthread_setschedparam’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.872 ‘pthread_setschedprio’ ============================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.3, macOS 11.1, FreeBSD 14.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 8.1. 10.873 ‘pthread_setspecific’ ============================ POSIX specification: Gnulib module: pthread-tss Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.874 ‘pthread_sigmask’ ======================== POSIX specification: Gnulib module: pthread_sigmask Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This function is declared in ‘’ instead of ‘’ on some platforms: FreeBSD 6.4, OpenBSD 3.8. • This function does nothing and always returns 0 in programs that are not linked with ‘-lpthread’ on some platforms: FreeBSD 14.0, MidnightBSD 1.1, HP-UX 11.31, Solaris 9. • When it fails, this functions returns −1 instead of the error number on some platforms: Cygwin 1.7.5. Portability problems not fixed by Gnulib: • On platforms that do not natively support this function, it has unspecified behavior in a multi-threaded process. • In case of failure, the return value is wrong on some platforms: NetBSD 9.3 when libpthread is not in use. 10.875 ‘pthread_spin_destroy’ ============================= POSIX specification: Gnulib module: pthread-spin Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.876 ‘pthread_spin_init’ ========================== POSIX specification: Gnulib module: pthread-spin Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.877 ‘pthread_spin_lock’ ========================== POSIX specification: Gnulib module: pthread-spin Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.878 ‘pthread_spin_trylock’ ============================= POSIX specification: Gnulib module: pthread-spin Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.879 ‘pthread_spin_unlock’ ============================ POSIX specification: Gnulib module: pthread-spin Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.880 ‘pthread_testcancel’ =========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.881 ‘ptsname’ ================ POSIX specification: Gnulib module: ptsname Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14. • This function fails to set errno on failure on some platforms: FreeBSD 8.2. Portability problems not fixed by Gnulib: • On Solaris 11 2010-11, this function fails on all BSD-style ‘/dev/pty*’ device files. • This function is not thread-safe on some platforms: Cygwin 1.7.9. Likewise, the gnulib replacement is not thread-safe. Note that the Gnulib module ‘ptsname_r’ is a version of this function that is more likely to be thread-safe. 10.882 ‘putc’ ============= POSIX specification: Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.883 ‘putc_unlocked’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.884 ‘putchar’ ================ POSIX specification: Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.885 ‘putchar_unlocked’ ========================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.886 ‘putenv’ =============== POSIX specification: , amended through . Documentation: *note Environment Access: (libc)Environment Access. Note: POSIX ‘putenv’ supports adding or changing the value of an environment variable, while glibc also supports removing an environment variable (as if by ‘unsetenv’). Gnulib module: putenv-gnu Portability problems fixed by Gnulib: • This function does not support removing an environment variable on some platforms: macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, mingw, MSVC 14, Android 11.0. Portability problems not fixed by Gnulib: 10.887 ‘putmsg’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.888 ‘putpmsg’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.889 ‘puts’ ============= POSIX specification: Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.890 ‘pututxline’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.891 ‘putwc’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.892 ‘putwchar’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.893 ‘pwrite’ =============== POSIX specification: Gnulib module: pwrite Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files 2 GiB and larger. *Note Large File Support::. • This function does not fail when an invalid (negative) offset is passed when large file support is enabled on some platforms: HP-UX 11.11. • This function uses an arbitrary offset instead of the ‘off_t’ argument when large file support is enabled on some platforms: HP-UX 11.11. Portability problems not fixed by Gnulib: 10.894 ‘qsort’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.895 ‘quick_exit’ =================== Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 6.4, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. 10.896 ‘raise’ ============== POSIX specification: Gnulib module: raise Portability problems fixed by Gnulib: • This function is missing on some old platforms. • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.897 ‘rand’ ============= POSIX specification: Gnulib module: rand Portability problems fixed by Gnulib: • This function crashes when used in multithreaded programs on some platforms: CheriBSD. Portability problems not fixed by Gnulib: • This function is only defined as an inline function on some platforms: Android 4.4. • This function is not multithread-safe on some platforms: musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, AIX 7.1, Solaris 11.4. 10.898 ‘rand_r’ =============== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.4. • This function is removed in POSIX.1-2024. Use the function ‘random_r’ from Gnulib module ‘random_r’ instead. 10.899 ‘random’ =============== POSIX specification: Gnulib module: random Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function is only defined as an inline function on some platforms: Android 4.4. • This function is not multithread-safe on some platforms: macOS 12.5, FreeBSD 13.2, Solaris 11.4, Cygwin 3.4.6, Haiku. Portability problems not fixed by Gnulib: • This function has a slightly incompatible declaration (the return type being ‘int’ instead of ‘long’) on some platforms: Cygwin 1.5.25, Haiku. • When ‘srandom’ was not called, this function returns a non-deterministic sequence rather than a deterministic sequence of numbers on some platforms: OpenBSD 7.4. 10.900 ‘read’ ============= POSIX specification: Gnulib module: read, stdio, nonblocking Portability problems fixed by Gnulib module ‘read’: • This function is declared in a different header file (namely, ‘’) on some platforms: mingw, MSVC 14. • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function may fail with error ‘EINTR’, even in programs that don’t install any signal handlers, on some platforms: macOS 11.1. For handling ‘EINTR’, Gnulib provides a module ‘safe-read’ with a function ‘safe_read’. 10.901 ‘readdir’ ================ POSIX specification: Gnulib module: readdir Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on huge directories 2 GiB and larger. Also, on platforms where ‘ino_t’ is a 32-bit type, this function may report inode numbers incorrectly. This can occur with file systems such as XFS (typically on large disks) and NFS. *Note Large File Support::. Portability problems not fixed by Gnulib: • Although POSIX places no restrictions on ‘d_ino’ values, some older systems are rumored to return ‘d_ino’ values equal to zero for directory entries that do not really exist. Although Gnulib formerly attempted to cater to these older systems, this caused misbehavior on standard systems and so Gnulib does not attempt to cater to them any more. If you know of any problems caused by this, please send a bug report. 10.902 ‘readdir_r’ ================== POSIX specification: Gnulib module: extensions Portability problems fixed by Gnulib: • This function is planned to be removed from POSIX and to be deprecated in glibc. Portable applications should use ‘readdir’. • This function has an incompatible declaration on some platforms: Solaris 11.4 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on huge directories 2 GiB and larger. Also, on platforms where ‘ino_t’ is a 32-bit type, this function may report inode numbers incorrectly. This can occur with file systems such as XFS (typically on large disks) and NFS. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.903 ‘readlink’ ================= POSIX specification: Gnulib module: readlink Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • Some platforms mistakenly succeed on file names ending in ‘/’: FreeBSD 7.2, Solaris 9, Mac OS X 10.10. • On some platforms, this function returns ‘int’ instead of ‘ssize_t’: glibc 2.4, FreeBSD 6.0, OpenBSD 6.7, Cygwin 1.5.x, AIX 7.1. Portability problems mostly fixed by Gnulib: • On some platforms, this function fails and sets ‘errno’ to ‘ERANGE’ rather than returning truncated contents: AIX 7.2, HP-UX 11. The Gnulib replacement normally works as POSIX requires by returning the truncated contents. However, if the full link contents are unreasonably large (more than 4000 bytes) the replacement clears the entire buffer and returns the buffer size; although this is not a complete fix, it suffices for typical callers, which ignore the buffer contents anyway. Portability problems not fixed by Gnulib: • This function always fails on platforms that don’t support symlinks: mingw, MSVC 14. • When this function is called on a directory: In the case of NFS mounted directories, Cygwin sets ‘errno’ to ‘ENOENT’ or ‘EIO’ instead of ‘EINVAL’. To avoid this problem, check for a directory before calling this function. • When this function is called on a file that is not a symbolic link: Cygwin may set errno to ‘EACCES’ instead of ‘EINVAL’. • When this function fails because it is called on an existing non-directory’s name concatenated to ‘/’, it sets ‘errno’ to ‘EINVAL’: AIX 7.2. • Symlink contents do not always have a trailing null byte, and there is no indication if symlink contents were truncated if the return value matches the length. Furthermore, Linux sets ‘errno’ to ‘EINVAL’ if the requested length is zero. Use the gnulib module ‘areadlink’ for improved ability to read symlink contents. 10.904 ‘readlinkat’ =================== POSIX specification: Gnulib module: readlinkat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.9, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. But the replacement function is not safe to be used in libraries and is not multithread-safe. • Some platforms mistakenly succeed on file names ending in ‘/’: OS X 10.10. • On some platforms, this function returns ‘int’ instead of ‘ssize_t’: AIX 7.1. Portability problems mostly fixed by Gnulib: • On some platforms, this function fails and sets ‘errno’ to ‘ERANGE’ rather than returning truncated contents: AIX 7.2. The Gnulib replacement normally works as POSIX requires by returning the truncated contents. However, if the full link contents are unreasonably large (more than 4000 bytes) the replacement clears the entire buffer and returns the buffer size; although this is not a complete fix, it suffices for typical callers, which ignore the buffer contents anyway. Portability problems not fixed by Gnulib: • This function always fails on platforms that don’t support symlinks: mingw, MSVC 14. • When this function is called on a directory: In the case of NFS mounted directories, Cygwin sets ‘errno’ to ‘ENOENT’ or ‘EIO’ instead of ‘EINVAL’. To avoid this problem, check for a directory before calling this function. • When this function is called on a file that is not a symbolic link: Cygwin may set errno to ‘EACCES’ instead of ‘EINVAL’. • When this function fails because it is called on an existing non-directory’s name concatenated to ‘/’, it sets ‘errno’ to ‘EINVAL’: AIX 7.2. • When this function is called on an empty file name, it fails with error ‘EBADF’ instead of ‘ENOENT’: Cygwin 3.4.6. • Symlink contents do not always have a trailing null byte, and there is no indication if symlink contents were truncated if the return value matches the length. Furthermore, Linux sets ‘errno’ to ‘EINVAL’ if the requested length is zero. Use the gnulib module ‘areadlink’ for improved ability to read symlink contents. 10.905 ‘readv’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.906 ‘realloc’ ================ POSIX specification: Gnulib module: realloc-posix Portability problems fixed by Gnulib: • Upon failure, the function does not set ‘errno’ to ‘ENOMEM’ on some platforms: mingw, MSVC 14. • On some platforms, ‘realloc (p, n)’ can succeed even if ‘n’ exceeds ‘PTRDIFF_MAX’. Although this behavior is arguably allowed by POSIX it can lead to behavior not defined by POSIX later, so ‘realloc-posix’ does not allow going over the limit. Without the ‘realloc-gnu’ module described below, it is not portable to call ‘realloc’ with a size of 0. With a NULL pointer argument, this is the same ambiguity as ‘malloc (0)’ on whether a unique zero-size object is created. With a non-NULL pointer argument ‘p’, C17 says that it is implementation-defined whether ‘realloc (p, 0)’ frees ‘p’. Behavior varies on whether ‘realloc (p, 0)’ always frees ‘p’ and successfully returns a null pointer, or always fails and leaves ‘p’ valid, or usually succeeds and returns a unique zero-size object; a program not suspecting these variations in semantics will leak memory (either the still-valid ‘p’, or the non-NULL return value). Extension: Gnulib provides a module ‘realloc-gnu’ that substitutes a ‘realloc’ implementation that behaves more like the glibc implementation. It fixes these portability problems: • ‘realloc (NULL, 0)’ returns ‘NULL’ on success on some platforms: AIX 7.2. • On some platforms, ‘realloc (p, 0)’ with non-null ‘p’ might not free ‘p’, or might clobber ‘errno’, or might not return ‘NULL’. 10.907 ‘realpath’ ================= POSIX specification: Gnulib module: canonicalize-lgpl Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function does not allow for a NULL ‘resolved’ parameter on some platforms: Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.4, Solaris 10. • This function does not always return an absolute path on some platforms: Solaris 10. • This function fails to detect trailing slashes on non-directories on some platforms: glibc 2.3.5, macOS 11.1, OpenBSD 6.0. • This function fails to recognize non-directories or symlinks to non-directories followed by ‘..’ on some platforms: Cygwin 2.9. • This function misbehaves on consecutive slashes on some platforms: musl libc 1.2.2, AIX 7. Portability problems not fixed by Gnulib: • This function does not allow to determine the required size of output buffer; the use of a non-NULL ‘resolved’ buffer is non-portable, since PATH_MAX, if it is defined, is nothing more than a guess. 10.908 ‘recv’ ============= POSIX specification: Gnulib module: recv Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: 10.909 ‘recvfrom’ ================= POSIX specification: Gnulib module: recvfrom Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. • On HP-UX 11, in 64-bit mode, when the macro ‘_HPUX_ALT_XOPEN_SOCKET_API’ is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide ‘socklen_t’ entity but in fact considers it as a pointer to a 32-bit wide ‘unsigned int’ entity. Portability problems not fixed by Gnulib: • Some platforms don’t have a ‘socklen_t’ type; in this case this function’s sixth argument type is ‘int *’. 10.910 ‘recvmsg’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.911 ‘regcomp’ ================ POSIX specification: Gnulib module: regex Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • Many regular expression implementations have bugs. Portability problems not fixed by Gnulib: 10.912 ‘regerror’ ================= POSIX specification: Gnulib module: regex Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.913 ‘regexec’ ================ POSIX specification: LSB specification: Gnulib module: regex Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • Many regular expression implementations have bugs. Portability problems not fixed by Gnulib: 10.914 ‘regfree’ ================ POSIX specification: Gnulib module: regex Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.915 ‘remainder’ ================== POSIX specification: Gnulib module: remainder or remainder-ieee Portability problems fixed by either Gnulib module ‘remainder’ or ‘remainder-ieee’: • This function is missing on some platforms: MSVC 9. Portability problems fixed by Gnulib module ‘remainder-ieee’: Portability problems not fixed by Gnulib: 10.916 ‘remainderf’ =================== POSIX specification: Gnulib module: remainderf or remainderf-ieee Portability problems fixed by either Gnulib module ‘remainderf’ or ‘remainderf-ieee’: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. Portability problems fixed by Gnulib module ‘remainderf-ieee’: Portability problems not fixed by Gnulib: 10.917 ‘remainderl’ =================== POSIX specification: Gnulib module: remainderl or remainderl-ieee Portability problems fixed by either Gnulib module ‘remainderl’ or ‘remainderl-ieee’: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. • This function returns completely wrong values on some platforms: OpenBSD 5.1/SPARC. • This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 10.0. Portability problems fixed by Gnulib module ‘remainderl-ieee’: Portability problems not fixed by Gnulib: 10.918 ‘remove’ =============== POSIX specification: Gnulib module: remove Portability problems fixed by Gnulib: • This function fails to reject trailing slashes on non-directories on some platforms: FreeBSD 7.2, Solaris 9. • This function mistakenly removes a directory with ‘remove("dir/./")’ on some platforms: Cygwin 1.5.x. • This function does not remove empty directories on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.919 ‘remque’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. 10.920 ‘remquo’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. 10.921 ‘remquof’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.922 ‘remquol’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. 10.923 ‘rename’ =============== POSIX specification: Gnulib module: rename Portability problems fixed by Gnulib: • This function does not allow trailing slashes when creating a destination directory, as in ‘rename("dir","new/")’: NetBSD 1.6. • This function does not reject trailing slashes on the destination for non-directories on some platforms, as in ‘rename("file","new/")’: AIX 7.1, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14. • This function does not reject trailing slashes on symlinks to non-directories on some platforms, as in ‘rename("link-to-file/","f")’: FreeBSD 7.2. • This function ignores trailing slashes on symlinks on some platforms, such that ‘rename("link/","new")’ corrupts ‘link’: Solaris 9. • This function incorrectly reduces the link count when comparing two spellings of a hard link on some platforms: NetBSD 1.6, Cygwin 1.5.x. • This function will not always replace an existing destination on some platforms: Cygwin 1.5.x, mingw, MSVC 14. However, the replacement is not atomic for directories, and may end up losing the empty destination if the source could not be renamed. • This function mistakenly allows names ending in ‘.’ or ‘..’ on some platforms: Cygwin 1.5.x, mingw, MSVC 14. • This function does not reject attempts to rename existing directories and non-directories onto one another on some platforms: Cygwin 1.5.x, mingw, MSVC 14. Portability problems not fixed by Gnulib: • POSIX requires that ‘rename("symlink-to-dir/","dir2")’ rename ‘dir’ and leave ‘symlink-to-dir’ dangling; likewise, it requires that ‘rename("dir","dangling/")’ rename ‘dir’ so that ‘dangling’ is no longer a dangling symlink. This behavior is counter-intuitive, so on some systems, ‘rename’ fails with ‘ENOTDIR’ if either argument is a symlink with a trailing slash: glibc, OpenBSD, Cygwin 1.7. • POSIX requires that ‘rename’ do nothing and return 0 if the source and destination are hard links to the same file. This behavior is counterintuitive, and on some systems ‘renameat’ is a no-op in this way only if the source and destination identify the same directory entry. On these systems, for example, although renaming ‘./f’ to ‘f’ is a no-op, renaming ‘f’ to ‘g’ deletes ‘f’ when ‘f’ and ‘g’ are hard links to the same file: NetBSD 7.0. • After renaming a non-empty directory over an existing empty directory, the old directory name is still visible through the ‘stat’ function for 30 seconds after the rename, on NFS file systems, on some platforms: Linux 2.6.18. • This function will not rename a source that is currently opened by any process: mingw, MSVC 14. 10.924 ‘renameat’ ================= POSIX specification: Gnulib module: renameat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. • This function is declared in ‘’, not in ‘’, on some platforms: NetBSD 7.0, Solaris 11.4. • This function is declared in ‘’, not in ‘’, on some platforms: Android 4.3. • This function does not reject trailing slashes on non-directories on some platforms, as in ‘renameat(fd,"file",fd,"new/")’: Solaris 11.4. • This function ignores trailing slashes on symlinks on some platforms, such that ‘renameat(fd,"link/",fd,"new")’ corrupts ‘link’: Solaris 9. Portability problems not fixed by Gnulib: • POSIX requires that ‘renameat(fd,"symlink-to-dir/",fd,"dir2")’ rename ‘dir’ and leave ‘symlink-to-dir’ dangling; likewise, it requires that ‘renameat(fd,"dir",fd,"dangling/")’ rename ‘dir’ so that ‘dangling’ is no longer a dangling symlink. This behavior is counter-intuitive, so on some systems, ‘renameat’ fails with ‘ENOTDIR’ if either argument is a symlink with a trailing slash: glibc, OpenBSD, Cygwin 1.7. • POSIX requires that ‘renameat’ do nothing and return 0 if the source and destination are hard links to the same file. This behavior is counterintuitive, and on some systems ‘renameat’ is a no-op in this way only if the source and destination identify the same directory entry. On these systems, for example, although renaming ‘./f’ to ‘f’ is a no-op, renaming ‘f’ to ‘g’ deletes ‘f’ when ‘f’ and ‘g’ are hard links to the same file: NetBSD 7.0. • After renaming a non-empty directory over an existing empty directory, the old directory name is still visible through the ‘stat’ function for 30 seconds after the rename, on NFS file systems, on some platforms: Linux 2.6.18. • This function will not rename a source that is currently opened by any process: mingw, MSVC 14. 10.925 ‘rewind’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. 10.926 ‘rewinddir’ ================== POSIX specification: Gnulib module: rewinddir Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. • On Mac OS X platforms where ‘long int’ is a 32-bit type, this function may not work correctly on huge directories 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: 10.927 ‘rint’ ============= POSIX specification: Gnulib module: rint Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 9. Portability problems not fixed by Gnulib: 10.928 ‘rintf’ ============== POSIX specification: Gnulib module: rintf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. Portability problems not fixed by Gnulib: 10.929 ‘rintl’ ============== POSIX specification: Gnulib module: rintl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. • This function produces wrong results for negative numbers on some platforms: NetBSD 8.0. Portability problems not fixed by Gnulib: 10.930 ‘rmdir’ ============== POSIX specification: Gnulib module: rmdir Portability problems fixed by Gnulib: • This function is declared in different header files (namely, ‘’ or ‘’) on some platforms: mingw, MSVC 14. • This function mistakenly removes a directory with ‘rmdir("dir/./")’ on some platforms: Cygwin 1.5.x. • This function fails with ‘EINVAL’ instead of the expected ‘ENOTDIR’ for ‘rmdir("file/")’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • When ‘rmdir’ fails because the specified directory is not empty, the ‘errno’ value is system dependent. • POSIX requires that ‘rmdir("link-to-empty/")’ remove ‘empty’ and leave ‘link-to-empty’ as a dangling symlink. This is counter-intuitive, so some systems fail with ‘ENOTDIR’ instead: glibc 10.931 ‘round’ ============== POSIX specification: Gnulib module: round or round-ieee Portability problems fixed by either Gnulib module ‘round’ or ‘round-ieee’: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. • This function is not declared on some platforms: glibc 2.8. • This functions returns a wrong result for x = 1/2 - 2^-54 on some platforms: NetBSD 3.0, AIX 7.1. Portability problems fixed by Gnulib module ‘round-ieee’: • This function returns a positive zero for an argument between −0.5 and 0 on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: 10.932 ‘roundeven’ ================== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.933 ‘roundevenf’ =================== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.934 ‘roundevenl’ =================== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.935 ‘roundf’ =============== POSIX specification: Gnulib module: roundf or roundf-ieee Portability problems fixed by either Gnulib module ‘roundf’ or ‘roundf-ieee’: • This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. • This function is not declared on some platforms: glibc 2.8. • This functions returns a wrong result for x = 1/2 - 2^-25 on some platforms: mingw. Portability problems fixed by Gnulib module ‘roundf-ieee’: • This function returns a positive zero for an argument between −0.5 and 0 on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: 10.936 ‘roundl’ =============== POSIX specification: Gnulib module: roundl or roundl-ieee Portability problems fixed by either Gnulib module ‘roundl’ or ‘roundl-ieee’: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. • This function is not declared on some platforms: glibc 2.8. Portability problems fixed by Gnulib module ‘roundl-ieee’: • This function returns a positive zero for an argument between −0.5 and 0 on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: 10.937 ‘scalbln’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9, Android 9.0. 10.938 ‘scalblnf’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9, Android 9.0. 10.939 ‘scalblnl’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 9.0. 10.940 ‘scalbn’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, MSVC 9. 10.941 ‘scalbnf’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.942 ‘scalbnl’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. 10.943 ‘scandir’ ================ POSIX specification: Gnulib module: scandir Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 9, mingw, MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on huge directories 2 GiB and larger. Also, on platforms where ‘ino_t’ is a 32-bit type, this function may report inode numbers incorrectly. *Note Large File Support::. Portability problems not fixed by Gnulib: • The fourth parameter of this function is declared as ‘int (*) (const void *, const void *)’ on some platforms: glibc 2.3.6, macOS 10.7, FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7. • The fourth parameter of this function is declared as ‘int (*) (void *, void *)’ on some platforms: AIX 5.1. 10.944 ‘scanf’ ============== POSIX specification: LSB specification: Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if ‘feof’ would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream’s end-of-file indicator is set. These systems include glibc and default Solaris. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On Windows, this function doesn’t support the ‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’ size specifiers. 10.945 ‘sched_get_priority_max’ =============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, HP-UX 11, mingw, MSVC 14. 10.946 ‘sched_get_priority_min’ =============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, HP-UX 11, mingw, MSVC 14. 10.947 ‘sched_getparam’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 10.948 ‘sched_getscheduler’ =========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 10.949 ‘sched_rr_get_interval’ ============================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, mingw, MSVC 14. 10.950 ‘sched_setparam’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 10.951 ‘sched_setscheduler’ =========================== POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 10.952 ‘sched_yield’ ==================== POSIX specification: Gnulib module: sched_yield Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: 10.953 ‘seed48’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.954 ‘seekdir’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘long int’ is a 32-bit type, this function may not work correctly on huge directories 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: MSVC 14, Android 5.1. 10.955 ‘select’ =============== POSIX specification: Gnulib module: select Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), ‘select’ can only be called on descriptors created by the ‘socket’ function, not on regular file descriptors. • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. • On some platforms, this function fails to detect invalid fds with EBADF, but only if they lie beyond the current maximum open fd: FreeBSD 8.2. Portability problems not fixed by Gnulib: • When you call ‘select’ with a timeout, some implementations modify the timeout parameter so that upon return from the function, it contains the amount of time not slept. Other implementations leave the timeout parameter unmodified. • Under Windows, when passing a pipe, Gnulib’s ‘select’ replacement might return 0 even before the timeout has passed. Programs using it with pipes can thus busy wait. • On Linux, when some file descriptor refers to a regular file, ‘select’ may fail, setting ‘errno’ to ‘EBADF’. 10.956 ‘sem_close’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.957 ‘sem_destroy’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This function is not implemented on some platforms: Mac OS X 10.11. 10.958 ‘sem_getvalue’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This function is not implemented on some platforms: Mac OS X 10.11. 10.959 ‘sem_init’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This function is not implemented on some platforms: Mac OS X 10.11. 10.960 ‘sem_open’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.961 ‘sem_post’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.962 ‘sem_timedwait’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 14. 10.963 ‘sem_trywait’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.964 ‘sem_unlink’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14. 10.965 ‘sem_wait’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.966 ‘semctl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.967 ‘semget’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.968 ‘semop’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.969 ‘send’ ============= POSIX specification: Gnulib module: send Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: 10.970 ‘sendmsg’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.971 ‘sendto’ =============== POSIX specification: Gnulib module: sendto Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: 10.972 ‘setbuf’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.973 ‘setegid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.23, mingw, MSVC 14. 10.974 ‘setenv’ =============== POSIX specification: Gnulib module: setenv Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.23, Solaris 9, mingw, MSVC 14. • On some platforms, this function does not fail with ‘EINVAL’ when passed an empty string or a string containing ‘=’: Mac OS X 10.5, FreeBSD 6.0, NetBSD 1.6, OpenBSD 6.7, Cygwin 1.5.x. • On some platforms, this function removes a leading ‘=’ from the value argument: Cygwin 1.5.x. Portability problems not fixed by Gnulib: • Older versions of POSIX required that ‘setenv(NULL,"",0)’ gracefully fail with ‘EINVAL’, but not all implementations guarantee this, and the requirement was removed. 10.975 ‘seteuid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.23, mingw, MSVC 14. 10.976 ‘setgid’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.977 ‘setgrent’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.978 ‘sethostent’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 8.1. 10.979 ‘setitimer’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • POSIX says this function is obsolescent and it is planned to be removed in POSIX 202x. Use the functions ‘timer_create’ and ‘timer_settime’ instead. 10.980 ‘setjmp’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • POSIX does not specify whether ‘setjmp’ saves the signal mask in the ‘jmp_buf’. It does on BSD platforms, and on glibc platforms when ‘_BSD_SOURCE’ (and/or ‘_DEFAULT_SOURCE’ on glibc >= 2.19) is defined; in this case ‘setjmp’ behaves like ‘sigsetjmp(.,1)’, and functions ‘_setjmp’ and ‘_longjmp’ are available that don’t save or restore the signal mask. On System V platforms (excluding HP-UX), and on glibc platforms by default, ‘setjmp’ doesn’t save the signal mask. 10.981 ‘setkey’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.34, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is not declared in ‘’ (without ‘-D_GNU_SOURCE’) on some platforms: glibc (at least 2.11–2.13). • POSIX 202x says this function is obsolescent and it is planned to be removed in a future version. 10.982 ‘setlocale’ ================== POSIX specification: Gnulib module: setlocale, setlocale-null Portability problems fixed by Gnulib module ‘setlocale’: • On Windows platforms (excluding Cygwin), ‘setlocale(CATEGORY,"")’ and ‘setlocale(CATEGORY,NULL)’ both ignore the environment variables ‘LC_ALL’, ‘CATEGORY’, and ‘LANG’. • On Windows platforms (excluding Cygwin) and Cygwin 1.5.x, ‘setlocale(LC_ALL,NAME)’ succeeds and sets the LC_CTYPE category to ‘C’ when it does not support the encoding, instead of failing. • On Windows platforms (excluding Cygwin), ‘setlocale’ understands different locale names, that are not based on ISO 639 language names and ISO 3166 country names. • On Android < 5.0, which doesn’t have locales, the ‘setlocale’ function always fails. The replacement, however, supports only the locale names ‘"C"’ and ‘"POSIX"’. Portability problems fixed by Gnulib module ‘setlocale’ or ‘setlocale-null’: • Invocations of ‘setlocale (..., NULL)’ are not multithread-safe on some platforms: musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. To make these invocations multithread-safe, you need the Gnulib module ‘setlocale’, or you need to change the code to invoke ‘setlocale_null’ or ‘setlocale_null_r’ instead. Portability problems not fixed by Gnulib: • On Cygwin 1.5.x, which doesn’t have locales, ‘setlocale(LC_ALL,NULL)’ always returns ‘"C"’. • On Cygwin 1.7.0, only the charset portion of a locale designation is honored. • On OpenBSD, ‘setlocale(LC_ALL,"")’ will only update categories that are deemed appropriate for the ‘LC_ALL’ environment value, even if there are other categories set to different values in the environment. In addition any value is accepted for ‘LC_CTYPE’, and so NULL is never returned to indicate a failure to set locale. To verify category values, each category must be set individually with ‘setlocale(LC_COLLATE,"")’ etc. • On Android 5.0 and newer, the default locale (i.e. the locale in use when ‘setlocale’ was not called) is the ‘"C.UTF-8"’ locale, not the ‘"C"’ locale. Additionally, a ‘setlocale’ call that is meant to set the ‘"C"’ or ‘"POSIX"’ locale actually sets an equivalent of the ‘"C.UTF-8"’ locale. 10.983 ‘setlogmask’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.984 ‘setnetent’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14, Android 8.1. 10.985 ‘setpayload’ =================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: setpayload Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 10.986 ‘setpayloadf’ ==================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: setpayloadf Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 10.987 ‘setpayloadl’ ==================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: setpayloadl Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 10.988 ‘setpayloadsig’ ====================== Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: setpayloadsig Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 10.989 ‘setpayloadsigf’ ======================= Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: setpayloadsigf Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 10.990 ‘setpayloadsigl’ ======================= Documentation: *note Setting and modifying single bits of FP values: (libc)FP Bit Twiddling. Gnulib module: setpayloadsigl Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 10.991 ‘setpgid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.992 ‘setpgrp’ ================ Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This function is removed in POSIX.1-2024. Use the function ‘setpgid’ or ‘setsid’ instead, as appropriate. 10.993 ‘setpriority’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.994 ‘setprotoent’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 8.1. 10.995 ‘setpwent’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.996 ‘setregid’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.997 ‘setreuid’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.998 ‘setrlimit’ ================== POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘rlim_t’ is a 32-bit type, this function does not allow to set limits 4 GiB and larger, such as for RLIMIT_FSIZE. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.999 ‘setservent’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1000 ‘setsid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1001 ‘setsockopt’ ==================== POSIX specification: LSB specification: Gnulib module: setsockopt Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: • Many socket options are not available on all platforms. 10.1002 ‘setstate’ ================== POSIX specification: Gnulib module: random Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • This function is not declared on some platforms: Cygwin 1.5.25. Portability problems not fixed by Gnulib: • This function has a slightly incompatible declaration (the argument type being ‘const char *’ instead of ‘char *’) on some platforms: macOS 11.1, AIX 7.1, HP-UX 11.31, Solaris 11.4, Solaris 11 OpenIndiana. 10.1003 ‘setuid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1004 ‘setutxent’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 10.1005 ‘setvbuf’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On Windows platforms (excluding Cygwin), ‘_IOLBF’ (line-buffering) is treated as if it were ‘_IOFBF’ (full buffering), possibly with a warning generated. 10.1006 ‘shm_open’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.1007 ‘shm_unlink’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.1008 ‘shmat’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. • On Linux, the flag ‘SHM_REMAP’ is needed in order to force ‘shmat’ to replace existing memory mappings in the specify address range. On other platforms, it is not needed. 10.1009 ‘shmctl’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.1010 ‘shmdt’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. 10.1011 ‘shmget’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 7.1. • On many platforms (not Linux), SHMMAX is so small that it is unusable for reasonable applications, and/or ‘shmget’ requires superuser privileges. 10.1012 ‘shutdown’ ================== POSIX specification: Gnulib module: shutdown Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: 10.1013 ‘sigaction’ =================== POSIX specification: Gnulib module: sigaction Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • POSIX recommends that when specifying SA_RESETHAND, SA_NODEFER must also be specified. • Support for SA_ONSTACK is missing on some platforms: mingw, MSVC 14, cygwin. • Support for SA_SIGINFO is missing on some platforms: mingw, MSVC 14. • Support for SIGCHLD, and thus for SA_NOCLDSTOP and SA_NOCLDWAIT, is missing on some platforms: mingw, MSVC 14. • Support for SA_RESETHAND is missing on some platforms: NonStop. • Support for SA_RESTART is missing on some platforms: mingw, MSVC 14, NonStop. • The symbolic value ‘SIG_IGN’ for the ‘SIGCHLD’ signal is equivalent to a signal handler void handle_child (int sigchld) { while (waitpid (-1, NULL, WNOHANG) > 0) ; } except that ‘SIG_IGN’ for ‘SIGCHLD’ has the effect that the children execution times are not accounted in the ‘times’ function. On some platforms (BSD? SystemV? Linux?), you need to use the ‘sigaction’ flag ‘SA_NOCLDWAIT’ in order to obtain this behavior. 10.1014 ‘sigaddset’ =================== POSIX specification: Gnulib module: sigprocmask Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1015 ‘sigaltstack’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.x, mingw, MSVC 14. • ‘sigaltstack’ doesn’t work on HP-UX 11/IA-64 and OpenBSD 3.6/Sparc64. 10.1016 ‘sigdelset’ =================== POSIX specification: Gnulib module: sigprocmask Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1017 ‘sigemptyset’ ===================== POSIX specification: Gnulib module: sigprocmask Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1018 ‘sigfillset’ ==================== POSIX specification: Gnulib module: sigprocmask Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1019 ‘sighold’ ================= Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 7.1. • This function is removed in POSIX.1-2024. Use the function ‘sigprocmask’ instead. 10.1020 ‘sigignore’ =================== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 7.1. • This function is removed in POSIX.1-2024. Use the function ‘sigaction’ instead. 10.1021 ‘siginterrupt’ ====================== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This funciton is removed in POSIX.1-2024. Use the function ‘sigaction’ instead. Note: POSIX recommends using ‘sigaction’ with SA_RESTART instead of ‘siginterrupt (sig, 0)’. 10.1022 ‘sigismember’ ===================== POSIX specification: Gnulib module: sigprocmask Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1023 ‘siglongjmp’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This is only provided as a macro on some platforms: Cygwin. 10.1024 ‘signal’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. • On System V platforms, when the signal is triggered, the kernel uninstalls the handler (i.e. resets the signal’s action to SIG_DFL) before invoking the handler. This opens the door to race conditions: undesired things happen if the signal is triggered twice and the signal handler was not quick enough reinstalling itself as a handler. On BSD platforms and glibc platforms, on the other hand, when the signal is triggered, the kernel blocks the signal before invoking the handler. This is saner, but POSIX still allows either behavior. To avoid this problem, use ‘sigaction’ instead of ‘signal’. 10.1025 ‘signbit’ ================= POSIX specification: Gnulib module: signbit Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, AIX 5.1, Solaris 11.0, MSVC 9, Android 9.0. Portability problems not fixed by Gnulib: 10.1026 ‘signgam’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 10.13, Minix 3.1.8, AIX 5.1, mingw, MSVC 14. 10.1027 ‘sigpause’ ================== Removed in POSIX.1-2024. POSIX.1-2017 specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. • This function is removed in POSIX.1-2024. Use the function ‘sigsuspend’ instead. 10.1028 ‘sigpending’ ==================== POSIX specification: Gnulib module: sigprocmask Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.1029 ‘sigprocmask’ ===================== POSIX specification: Gnulib module: sigprocmask Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • In case of failure, the return value is wrong on some platforms: NetBSD 10.0 when libpthread is in use. Note: Although ‘sigprocmask’ officially has undefined behaviour in multi-threaded programs, in practice it is essentially equivalent to ‘pthread_sigmask’, with only a difference regarding the error return convention. It’s simpler to use ‘sigprocmask’, since it does not require linking with ‘-lpthread’ on some platforms: glibc, NetBSD, OpenBSD, AIX. 10.1030 ‘sigqueue’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 5.1. 10.1031 ‘sigrelse’ ================== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 7.1. • This function is removed in POSIX.1-2024. Use the function ‘sigprocmask’ instead. 10.1032 ‘sigset’ ================ Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 7.1. • This function is removed in POSIX.1-2024. Use the function ‘sigaction’ instead. 10.1033 ‘sigsetjmp’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.1034 ‘sigsuspend’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1035 ‘sigtimedwait’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 5.1. • Linux implements the meaning of NULL timeout by doing what ‘sigwaitinfo’ does; other platforms may not do the same. 10.1036 ‘sigwait’ ================= POSIX specification: Gnulib module: extensions Portability problems fixed by Gnulib: • This function has an incompatible declaration on some platforms: Solaris 11.4 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • On Linux/glibc platforms before the advent of NPTL, signals could only be sent to one particular thread. In POSIX, signals are sent to the entire process and executed by any thread of the process that happens to have the particular signal currently unblocked. 10.1037 ‘sigwaitinfo’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 5.1. 10.1038 ‘sin’ ============= POSIX specification: Gnulib module: sin Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1039 ‘sinf’ ============== POSIX specification: Gnulib module: sinf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.1040 ‘sinh’ ============== POSIX specification: Gnulib module: sinh Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1041 ‘sinhf’ =============== POSIX specification: Gnulib module: sinhf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.1042 ‘sinhl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.1043 ‘sinl’ ============== POSIX specification: Gnulib module: sinl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.1044 ‘sleep’ =============== POSIX specification: Gnulib module: sleep Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw (2005 or newer), MSVC 14. • This function takes milliseconds as argument and returns ‘void’ on some platforms: mingw (2005 and older). • This function cannot sleep longer than 49.7 days on some platforms: Cygwin 1.5.x. Portability problems not fixed by Gnulib: • According to POSIX, the ‘sleep’ function may interfere with the program’s use of the ‘SIGALRM’ signal. On Linux, it doesn’t; on other platforms, it may. 10.1045 ‘snprintf’ ================== POSIX specification: Gnulib module: snprintf or snprintf-posix or snprintf-gnu Portability problems fixed by either Gnulib module ‘snprintf’ or ‘snprintf-posix’ or ‘snprintf-gnu’: • This function is missing on some platforms: MSVC 14. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw. • This function does not return a byte count as specified in C99 on some platforms: HP-UX 11, Solaris 9, mingw. Portability problems fixed by either Gnulib module ‘snprintf-posix’ or ‘snprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. • This function mishandles large floating point precisions (for example, formatting 1.0 with ‘"%.511f"’) on some platforms: Solaris 10. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. • This function does not truncate the result as specified in C99 on some platforms: mingw, MSVC 14. • This function does not fully support the ‘n’ directive on some platforms: HP-UX 11, mingw. Portability problems fixed by Gnulib module ‘snprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘snprintf-posix’ or ‘snprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. 10.1046 ‘sockatmark’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 10.1047 ‘socket’ ================ POSIX specification: Gnulib module: socket Portability problems fixed by Gnulib: • On Windows platforms (excluding Cygwin), the descriptors returned by the ‘socket’ function cannot be used in calls to ‘read’, ‘write’, and ‘close’; you have to use ‘recv’, ‘send’, ‘closesocket’ in these cases instead. • On Windows platforms (excluding Cygwin), error codes from this function are not placed in ‘errno’, and ‘WSAGetLastError’ must be used instead. Portability problems not fixed by Gnulib: 10.1048 ‘socketpair’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1049 ‘sprintf’ ================= POSIX specification: Gnulib module: sprintf-posix or sprintf-gnu Portability problems fixed by either Gnulib module ‘sprintf-posix’ or ‘sprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. • This function mishandles large floating point precisions (for example, formatting 1.0 with ‘"%.511f"’) on some platforms: Solaris 10. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. • The compiler warns that this function is deprecated: macOS 13.0. Portability problems fixed by Gnulib module ‘sprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘sprintf-posix’ or ‘sprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. 10.1050 ‘sqrt’ ============== POSIX specification: Gnulib module: sqrt Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1051 ‘sqrtf’ =============== POSIX specification: Gnulib module: sqrtf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.1052 ‘sqrtl’ =============== POSIX specification: Gnulib module: sqrtl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function produces very imprecise results on some platforms: OpenBSD 5.1/SPARC. Portability problems not fixed by Gnulib: 10.1053 ‘srand’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is only defined as an inline function on some platforms: Android 4.4. • This function has no effect on ‘rand’ invocations in other threads on some platforms: Cygwin 3.4.6. 10.1054 ‘srand48’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.1055 ‘srandom’ ================= POSIX specification: Gnulib module: random Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function is only defined as an inline function on some platforms: Android 4.4. Portability problems not fixed by Gnulib: • This function has a slightly incompatible declaration (the return type being ‘long’ instead of ‘void’) on some platforms: Cygwin 1.5.25. • The parameter is ‘unsigned long’ instead of ‘unsigned int’ on some platforms: MidnightBSD 2.0. • This function has no effect on some platforms: OpenBSD 7.4. This platform has, instead, a function ‘srandom_deterministic’. 10.1056 ‘sscanf’ ================ POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On Windows, this function doesn’t support the ‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’ size specifiers. 10.1057 ‘stat’ ============== POSIX specification: Gnulib module: stat Portability problems fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, ‘stat’ may not correctly report the size of files or block devices 2 GiB and larger. *Note Large File Support::. • On Linux/x86 and Linux/x86_64, applications compiled in 32-bit mode cannot access files that happen to have a 64-bit inode number. This can occur with file systems such as XFS (typically on large disks) and NFS. *Note Large File Support::. • The ‘st_atime’, ‘st_ctime’, ‘st_mtime’ fields are affected by the current time zone and by the DST flag of the current time zone on some platforms: mingw, MSVC 14 (when the environment variable ‘TZ’ is set). • On MSVC 14, this function fails with error ‘ENOENT’ on files such as ‘C:\pagefile.sys’ and on directories such as ‘C:\System Volume Information’. • On some platforms, ‘stat("link-to-file/",buf)’ succeeds instead of failing with ‘ENOTDIR’. macOS 11.1, FreeBSD 7.2, AIX 7.1, Solaris 9, mingw64. • On some platforms, ‘stat(".",buf)’ and ‘stat("./",buf)’ give different results: mingw, MSVC 14. • On macOS 12.6, when this function yields a timestamp with a nonpositive ‘tv_sec’ value, ‘tv_nsec’ might be in the range −999999999..−1, representing a negative nanoseconds offset from ‘tv_sec’. Solaris 11.4 is similar, except that ‘tv_sec’ might also be −1000000000. Portability problems not fixed by Gnulib: • *Note sys/stat.h::, for general portability problems with ‘struct stat’. • Cygwin’s ‘stat’ function sometimes sets ‘errno’ to ‘EACCES’ when ‘ENOENT’ would be more appropriate. • This function sets ‘st_ino’ only to the low-order 32 bits of the inode number of a socket or pipe, which thus can disagree with the ‘st_ino’ obtained by ‘fstat’: macOS 14. • Because of the definition of ‘struct stat’, it is not possible to portably replace ‘stat’ via an object-like macro. Therefore, expressions such as ‘(islnk ? lstat : stat) (name, buf)’ are not portable, and should instead be written ‘islnk ? lstat (name, buf) : stat (name, buf)’. 10.1058 ‘statvfs’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘f_blocks’ in ‘struct statvfs’ is a 32-bit value, this function may not work correctly on files systems larger than 4 TiB. *Note Large File Support::. This affects glibc/Hurd, HP-UX 11, Solaris. Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, mingw, MSVC 14, Android 4.3. • This function can hang if it stats all preceding entries in /proc/mounts, and any of those file systems are hard-mounted and not available. This affects Linux < 2.6.36. Gnulib provides a module ‘fsusage’ that provides similar information as ‘statvfs’. 10.1059 ‘stdc_bit_ceil’ ======================= Documentation: ISO C23 (latest free draft ) section 7.18.16. Gnulib module: stdc_bit_ceil Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1060 ‘stdc_bit_floor’ ======================== Documentation: ISO C23 (latest free draft ) section 7.18.15. Gnulib module: stdc_bit_floor Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1061 ‘stdc_bit_width’ ======================== Documentation: ISO C23 (latest free draft ) section 7.18.14. Gnulib module: stdc_bit_width Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1062 ‘stdc_count_ones’ ========================= Documentation: ISO C23 (latest free draft ) section 7.18.12. Gnulib module: stdc_count_ones Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1063 ‘stdc_count_zeros’ ========================== Documentation: ISO C23 (latest free draft ) section 7.18.11. Gnulib module: stdc_count_zeros Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1064 ‘stdc_first_leading_one’ ================================ Documentation: ISO C23 (latest free draft ) section 7.18.8. Gnulib module: stdc_first_leading_one Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1065 ‘stdc_first_leading_zero’ ================================= Documentation: ISO C23 (latest free draft ) section 7.18.7. Gnulib module: stdc_first_leading_zero Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1066 ‘stdc_first_trailing_one’ ================================= Documentation: ISO C23 (latest free draft ) section 7.18.10. Gnulib module: stdc_first_trailing_one Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1067 ‘stdc_first_trailing_zero’ ================================== Documentation: ISO C23 (latest free draft ) section 7.18.9. Gnulib module: stdc_first_trailing_zero Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1068 ‘stdc_has_single_bit’ ============================= Documentation: ISO C23 (latest free draft ) section 7.18.13. Gnulib module: stdc_has_single_bit Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1069 ‘stdc_leading_ones’ =========================== Documentation: ISO C23 (latest free draft ) section 7.18.4. Gnulib module: stdc_leading_ones Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1070 ‘stdc_leading_zeros’ ============================ Documentation: ISO C23 (latest free draft ) section 7.18.3. Gnulib module: stdc_leading_zeros Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1071 ‘stdc_trailing_ones’ ============================ Documentation: ISO C23 (latest free draft ) section 7.18.6. Gnulib module: stdc_trailing_ones Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1072 ‘stdc_trailing_zeros’ ============================= Documentation: ISO C23 (latest free draft ) section 7.18.5. Gnulib module: stdc_trailing_zeros Portability problems fixed by Gnulib: • This macro is missing on many platforms: glibc 2.38, macOS 12.5, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15. Portability problems not fixed by Gnulib: 10.1073 ‘stderr’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • stderr is created in 32-bit mode instead of 64-bit mode: Cygwin 1.5.x. One workaround is to use freopen(NULL, “r+”, stderr) on Cygwin 1.5.21 or newer. Another is to use the gnulib ‘ftello’ module and do ftello(stderr). • POSIX states that a setuid application can guarantee that fd 2 is open, but some systems guarantee this even for non-setuid programs. If an application is executed with fd 2 closed, use of ‘stderr’ can affect an unrelated file that happened to be assigned to fd 2. The gnulib *-safer modules may be used to guarantee that fd 2 stays reserved for ‘stderr’. 10.1074 ‘stdin’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • stdin is created in 32-bit mode instead of 64-bit mode: Cygwin 1.5.x. One workaround is to use freopen(NULL, “r”, stdin) on Cygwin 1.5.21 or newer. Another is to use the gnulib ftello module and do ftello(stdin). • POSIX states that a setuid application can guarantee that fd 0 is open, but some systems guarantee this even for non-setuid programs. If an application is executed with fd 0 closed, use of ‘stdin’ can affect an unrelated file that happened to be assigned to fd 0. The gnulib *-safer modules may be used to guarantee that fd 0 stays reserved for ‘stdin’. 10.1075 ‘stdout’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • stdout is created in 32-bit mode instead of 64-bit mode: Cygwin 1.5.x. One workaround is to use freopen(NULL, “w”, stdout) on Cygwin 1.5.21 or newer. Another is to use the gnulib ‘ftello’ module and do ftello(stdout). • POSIX states that a setuid application can guarantee that fd 1 is open, but some systems guarantee this even for non-setuid programs. If an application is executed with fd 1 closed, use of ‘stdout’ can affect an unrelated file that happened to be assigned to fd 1. The gnulib *-safer modules may be used to guarantee that fd 1 stays reserved for ‘stdout’. 10.1076 ‘stpcpy’ ================ POSIX specification: Gnulib module: stpcpy Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1077 ‘stpncpy’ ================= POSIX specification: Gnulib module: stpncpy Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. • This function has an incompatible return value on some platforms: AIX 5.1. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1078 ‘strcasecmp’ ==================== POSIX specification: Gnulib module: strcase Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function ‘mbscasecmp’ that does a case insensitive comparison of character strings and that works in all locales. 10.1079 ‘strcasecmp_l’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. 10.1080 ‘strcat’ ================ POSIX specification: Gnulib module: string Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1081 ‘strchr’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in some multibyte locales. Gnulib provides an alternative function ‘mbschr’ that works on character strings in all locales. 10.1082 ‘strcmp’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1083 ‘strcoll’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function fails, setting ‘errno’ to ‘EILSEQ’, on Solaris 10, in UTF-8 locales, when at least one of the strings contains a Unicode character in a block that was not assigned in Unicode 4.0. 10.1084 ‘strcoll_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.1085 ‘strcpy’ ================ POSIX specification: Gnulib module: string Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: ‘strcpy (dst, src)’ is only safe to use when you can guarantee that there are at least ‘strlen (src) + 1’ bytes allocated at ‘dst’. 10.1086 ‘strcspn’ ================= POSIX specification: Gnulib module: strcspn Portability problems fixed by Gnulib: • This function is missing on some old platforms. Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function ‘mbscspn’ that works on character strings in all locales. 10.1087 ‘strdup’ ================ POSIX specification: Gnulib module: strdup or strdup-posix Portability problems fixed by either Gnulib module ‘strdup’ or ‘strdup-posix’: • This function has no prototype in ‘’ on some old platforms. Portability problems fixed by Gnulib module ‘strdup-posix’: • Upon failure, the function does not set ‘errno’ to ‘ENOMEM’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.1088 ‘strerror’ ================== POSIX specification: Gnulib module: strerror Portability problems fixed by Gnulib: • This function does not support the error values that are specified by POSIX but not defined by the system, on some platforms: OpenBSD 4.0, NonStop Kernel, Cygwin 1.5.x, mingw, MSVC 14. • This function reports failure for ‘strerror(0)’ (by setting ‘errno’ or using a string similar to out-of-range values), although POSIX requires this to leave ‘errno’ unchanged and report success, on some platforms: FreeBSD 8.2, NetBSD 10.0, OpenBSD 4.7, macOS 11.1. • This function fails to return a string for out-of-range integers on some platforms: HP-UX 11. (Some return NULL which is a POSIX violation, others return the empty string which is valid but not as useful); this can still cause bugs because most programs call ‘strerror’ without setting and testing ‘errno’.) Portability problems not fixed by Gnulib: 10.1089 ‘strerror_l’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.5, macOS 11.1, FreeBSD 12.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. 10.1090 ‘strerror_r’ ==================== POSIX specification: LSB specification: • Gnulib module: strerror_r-posix Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, Minix 3.1.8, HP-UX 11.23, Solaris 9, mingw, MSVC 14. • glibc, Cygwin, and Android have an incompatible version of this function. The POSIX compliant code char *s = (strerror_r (err, buf, buflen) == 0 ? buf : NULL); is essentially equivalent to this code using the glibc function: char *s = strerror_r (err, buf, buflen); • This function clobbers the ‘strerror’ buffer on some platforms: Cygwin 1.7.9. • This function is sometimes not declared in ‘’ on some platforms: glibc 2.8. • The third argument is of type ‘int’ instead of ‘size_t’ on some platforms: AIX 5.1. • When this function fails, it returns −1 and sets ‘errno’, instead of returning the error number, on some platforms: glibc 2.12 with ‘-D_POSIX_C_SOURCE=200112L’, AIX 6.1. • When this function fails, it corrupts ‘errno’, on some platforms: Solaris 10. • This function does not support many error values defined in ‘’ on some platforms: MSVC 14. • This function does not support the error values that are specified by POSIX but not defined by the system, on some platforms: OpenBSD 4.0, NonStop Kernel, Cygwin 1.5.x. • This function reports failure for ‘strerror_r(0, buf, len)’, although POSIX requires this to succeed, on some platforms: FreeBSD 8.2. • This function produces a different string for ‘0’ than ‘strerror’ on some platforms: macOS 11.1. • This function always fails when the third argument is less than 80 on some platforms: HP-UX 11.31. • When the buffer is too small and the value is in range, this function does not fail, but instead truncates the result and returns 0 on some platforms: AIX 6.1, Haiku 2017. • When the value is not in range or the buffer is too small, this function fails to leave a NUL-terminated string in the buffer on some platforms: glibc 2.13, FreeBSD 8.2, Solaris 10. • When the value is out of range but the buffer is too small, this function does not always return the longest possible string on some platforms: OpenBSD 4.7. Portability problems not fixed by Gnulib: Note: Gnulib has a module ‘xstrerror’, with the property that ‘xstrerror (NULL, errnum)’ returns the value of ‘strerror_r’ as a freshly allocated string. (Recall that the expression ‘strerror (errnum)’ is not multithread-safe.) 10.1091 ‘strfmon’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.1, mingw, MSVC 14, Android 9.0. 10.1092 ‘strfmon_l’ =================== POSIX specification: Gnulib module: strfmon_l Portability problems fixed by Gnulib: • This function ignores the locale argument on some platforms: FreeBSD 13.0, Cygwin 2.9. • This function uses a wrong locale for the numbers on some platforms: glibc 2.23. Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 10.1093 ‘strfromd’ ================== Documentation: • *note Printing of Floats: (libc)Printing of Floats, • man strfromd. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1094 ‘strfromf’ ================== Documentation: • *note Printing of Floats: (libc)Printing of Floats, • man strfromf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1095 ‘strfroml’ ================== Documentation: • *note Printing of Floats: (libc)Printing of Floats, • man strfroml. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1096 ‘strftime’ ================== POSIX specification: Gnulib module: strftime-fixes Portability problems fixed by Gnulib: • On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable ‘TZ’ has been set by Cygwin. Portability problems not fixed by Gnulib: • The %c specifier does not work with a time retrieved through ‘gmtime’ or ‘gmtime_r’, since it outputs also the current time zone, on some platforms: glibc 2.30, NetBSD 10.0, Solaris 11.4. • The %c specifier produces no weekday name and no month name, only a potentially ambiguous numerical output, on some platforms: mingw, MSVC. • The %h specifier produces empty output on some platforms: mingw, MSVC. • The %r specifier produces empty output on some platforms: mingw, MSVC. • The %r specifier produces empty output, at least in a French locale, on some platforms: macOS 12.5, FreeBSD 14.0. • The %r specifier includes an AM/PM indicator, at least in a French locale, on some platforms: NetBSD 10.0, Solaris 11.4. • The %p specifier produces non-empty output, at least in a French locale, on some platforms: NetBSD 10.0, Solaris 11.4. • The Windows C runtime library (which is used by MinGW) does not support the %e specifier (and possibly the other more recent SUS specifiers too, i.e., %C, %D, %h, %n, %r, %R, %t, and %T). • Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX. *Note tzset::. Extension: Gnulib offers a module ‘nstrftime’ that provides an ‘nstrftime’ function with various GNU extensions. 10.1097 ‘strftime_l’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.1098 ‘strlen’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1099 ‘strncasecmp’ ===================== POSIX specification: Gnulib module: strcase Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in multibyte locales. Gnulib provides alternative functions ‘mbsncasecmp’ and ‘mbspcasecmp’ that do a case insensitive comparison of character strings and that work in all locales. 10.1100 ‘strncasecmp_l’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. 10.1101 ‘strncat’ ================= POSIX specification: Gnulib module: strncat Portability problems fixed by Gnulib: • This function dereferences too much memory on some platforms: Solaris 11.4 on SPARC, Solaris 11.0 on x86. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: 10.1102 ‘strncmp’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1103 ‘strncpy’ ================= POSIX specification: Gnulib module: string Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function was designed for the use-case of filling a fixed-size record with a string, before writing it to a file. This function is *not* appropriate for copying a string into a bounded memory area, because you have no guarantee that the result will be NUL-terminated. Even if you add the NUL byte at the end yourself, this function is inefficient (as it spends time clearing unused memory) and will allow silent truncation to occur, which is not a good behavior for GNU programs. For more details, see . 10.1104 ‘strndup’ ================= POSIX specification: Gnulib module: strndup Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 10, mingw, MSVC 14. • This function does not NUL-terminate the result on some platforms: AIX 5.1. Portability problems not fixed by Gnulib: 10.1105 ‘strnlen’ ================= POSIX specification: Gnulib module: strnlen Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, HP-UX 11, Solaris 10, mingw. Portability problems not fixed by Gnulib: 10.1106 ‘strpbrk’ ================= POSIX specification: Gnulib module: strpbrk Portability problems fixed by Gnulib: • This function is missing on some old platforms. Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function ‘mbspbrk’ that works on character strings in all locales. 10.1107 ‘strptime’ ================== POSIX specification: LSB specification: Gnulib module: strptime Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.1108 ‘strrchr’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in some multibyte locales. Gnulib provides an alternative function ‘mbsrchr’ that works on character strings in all locales. 10.1109 ‘strsignal’ =================== POSIX specification: Gnulib module: strsignal Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, mingw, MSVC 14. • This function does not return a string for out-of-range numbers on some platforms: Solaris, AIX 5.1. • This function is declared in ‘unistd.h’ instead of ‘string.h’ on some platforms: NetBSD 5.0. Portability problems not fixed by Gnulib: • This function returns ‘const char *’ instead of ‘char *’ on some platforms: cygwin 1.5.25. 10.1110 ‘strspn’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function ‘mbsspn’ that works on character strings in all locales. 10.1111 ‘strstr’ ================ POSIX specification: Gnulib module: strstr or strstr-simple Portability problems fixed by either Gnulib module ‘strstr-simple’ or ‘strstr’: • This function can trigger memchr bugs on some platforms: glibc 2.10. • This function can trigger false positives for long periodic needles on some platforms: glibc 2.12, Cygwin 1.7.7. • This function may fail to find matches on some platforms: glibc 2.28. Portability problems fixed by Gnulib module ‘strstr’: • This function has quadratic instead of linear worst-case complexity on some platforms: glibc 2.8, macOS 12.5, FreeBSD 11.4, NetBSD 10.0, OpenBSD 6.1, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in most multibyte locales. Gnulib provides an alternative function ‘mbsstr’ that works on character strings in all locales. 10.1112 ‘strtod’ ================ POSIX specification: Gnulib module: strtod or strtod-obsolete Portability problems fixed by either Gnulib module ‘strtod’ or ‘strtod-obsolete’: • This function mis-parses strings with leading ‘+’ on some old platforms: Old versions of Linux. • This function returns a wrong end pointer on some old platforms. • This function allows whitespace between ‘e’ and the exponent on some platforms: HP-UX 11.11. • This function returns the wrong end pointer for ‘-0x’ on some platforms: glibc 2.4, Mac OS X 10.5, FreeBSD 6.2, AIX 7.1, Cygwin < 1.5.25-11. • This function fails to parse Infinities and plain NaNs on some platforms: OpenBSD 4.0, HP-UX 11.11, Solaris 9, mingw, MSVC 14. • This function fails to parse ‘NaN()’ on some platforms: glibc-2.3.6, Mac OS X 10.5, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, Cygwin < 1.5.25-11, mingw, MSVC 14. • This function fails to parse ‘NaN(N-CHAR-SEQUENCE)’ on some platforms: OpenBSD 4.0, HP-UX 11.11, mingw, MSVC 14. • This function parses ‘NaN(N-CHAR-SEQUENCE)’, but returns the wrong end pointer on some platforms: glibc-2.4, AIX 7.1. • This function fails to parse C99 hexadecimal floating point on some platforms: NetBSD 5.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, Solaris 11.4, mingw, MSVC 14. • In hexadecimal floats, this function allows whitespace between ‘p’ and the exponent on some platforms: HP-UX 11.31/ia64. • This function returns the wrong end pointer for ‘0x1p’ on some platforms: AIX 7.1. Portability problems fixed by Gnulib module ‘strtod-obsolete’: • This function is missing on some old platforms. Portability problems not fixed by Gnulib: • This function returns +0.0 (not −0.0) for negative underflow on some platforms: glibc 2.7, Cygwin 1.5.x, mingw, MSVC 14. • This function cannot distinguish between “nan” and “-nan” on some platforms: glibc 2.7, mingw, MSVC 14. • This function fails to correctly parse very long strings on some platforms: Mac OS X 10.5, FreeBSD 6.2, NetBSD 5.0, OpenBSD 4.0, Cygwin, mingw, MSVC 14. • The replacement function does not always return correctly rounded results. 10.1113 ‘strtof’ ================ POSIX specification: Gnulib module: strtof Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, MSVC 9, Android 4.4. • This function returns the wrong end pointer for ‘-0x’ on some platforms: glibc 2.4, Mac OS X 10.5, FreeBSD 6.2. • This function fails to parse ‘NaN()’ on some platforms: glibc-2.5, FreeBSD 6.2. Portability problems not fixed by Gnulib: • This function returns +0.0 (not −0.0) for negative underflow on some platforms: glibc 2.7, mingw, MSVC 14. • This function cannot distinguish between “nan” and “-nan” on some platforms: glibc 2.7, mingw, MSVC 14. • This function fails to correctly parse very long strings on some platforms: Mac OS X 10.5, FreeBSD 6.2, NetBSD 5.0, Cygwin, mingw, MSVC 14. • The replacement function does not always return correctly rounded results. 10.1114 ‘strtoimax’ =================== POSIX specification: Gnulib module: strtoimax Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, Solaris 9, MSVC 9. • This function fails on valid input strings on some platforms: AIX 5.1. Portability problems not fixed by Gnulib: • This function is only defined as a macro on some platforms: HP-UX 11.11. 10.1115 ‘strtok’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1116 ‘strtok_r’ ================== POSIX specification: Gnulib module: strtok_r Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function crashes when invoked from code compiled with optimization enabled on some platforms: glibc 2.7. Portability problems not fixed by Gnulib: • This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function ‘mbstok_r’ that works on character strings in all locales. 10.1117 ‘strtol’ ================ POSIX specification: Gnulib module: strtol Portability problems fixed by Gnulib: • This function is missing on some old platforms. • This function does not parse the leading ‘0’ when the input string is ‘"0x"’ and the base is 16 or 0 on some platforms: Minix 3.3, mingw, MSVC 14. • This function does not parse binary integers (with a ‘0b’ or ‘0B’ prefix) when the base is 2 or 0 on many platforms. Portability problems not fixed by Gnulib: 10.1118 ‘strtold’ ================= POSIX specification: Gnulib module: strtold Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, Solaris 9, older Cygwin 1.7.x, MSVC 9, Android 4.4. • This function returns a struct, not a ‘long double’, on some platforms: HP-UX 11.31/hppa. • This function allows whitespace between ‘e’ and the exponent on some platforms: HP-UX 11.31/ia64. • This function returns the wrong end pointer for ‘-0x’ on some platforms: glibc-2.3.2, Mac OS X 10.5, Haiku. • This function fails to parse Infinities and plain NaNs on some platforms: HP-UX 11.31/ia64. • This function fails to parse ‘NaN()’ on some platforms: glibc-2.3.2, mingw, Haiku. • This function parses ‘NaN(N-CHAR-SEQUENCE)’, but returns the wrong end pointer on some platforms: glibc-2.3.2, mingw, Haiku. • This function fails to parse C99 hexadecimal floating point on some platforms: mingw. • In hexadecimal floats, this function allows whitespace between ‘p’ and the exponent on some platforms: HP-UX 11.31/ia64. • This function fails to set ‘errno’ upon underflow on some platforms: Cygwin 2.9. Portability problems not fixed by Gnulib: • The replacement function does not always return correctly rounded results. 10.1119 ‘strtoll’ ================= POSIX specification: Gnulib module: strtoll Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.11, MSVC 9. • This function does not parse the leading ‘0’ when the input string is ‘"0x"’ and the base is 16 or 0 on some platforms: Minix 3.3, mingw, MSVC 14. • This function does not parse binary integers (with a ‘0b’ or ‘0B’ prefix) when the base is 2 or 0 on many platforms. Portability problems not fixed by Gnulib: 10.1120 ‘strtoul’ ================= POSIX specification: Gnulib module: strtoul Portability problems fixed by Gnulib: • This function is missing on some old platforms. • This function does not parse the leading ‘0’ when the input string is ‘"0x"’ and the base is 16 or 0 on some platforms: Minix 3.3, mingw, MSVC 14. • This function does not parse binary integers (with a ‘0b’ or ‘0B’ prefix) when the base is 2 or 0 on many platforms. Portability problems not fixed by Gnulib: 10.1121 ‘strtoull’ ================== POSIX specification: Gnulib module: strtoull Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.11, MSVC 9. • This function does not parse the leading ‘0’ when the input string is ‘"0x"’ and the base is 16 or 0 on some platforms: Minix 3.3, mingw, MSVC 14. • This function does not parse binary integers (with a ‘0b’ or ‘0B’ prefix) when the base is 2 or 0 on many platforms. Portability problems not fixed by Gnulib: 10.1122 ‘strtoumax’ =================== POSIX specification: Gnulib module: strtoumax Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. Portability problems not fixed by Gnulib: • This function is only defined as a macro on some platforms: HP-UX 11.11. 10.1123 ‘strxfrm’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function has a wrong return value on some platforms: Haiku. 10.1124 ‘strxfrm_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.1125 ‘swab’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 8.1. 10.1126 ‘swprintf’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x. • This function has a different signature on some platforms: MSVC 9. • This function is only defined as a macro on some platforms: MSVC 14. • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14. • This function sometimes returns a wrong value through the ‘n’ directive on some platforms: musl libc 1.2.3. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • On Windows, this function does not take a buffer size as second argument. • This function produces wrong values for the ‘La’ directive on some platforms: glibc 2.15, Haiku, NetBSD 10.0. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function ignores the minimum field width in the ‘lc’ directive on some platforms: musl libc 1.2.3. • This function is broken when it produces output that contains null wide characters on some platforms: musl libc 1.2.3, FreeBSD 13.1, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, mingw. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • In the C or POSIX locales, the ‘%c’ and ‘%s’ conversions may fail on some platforms: glibc 2.35, musl libc 1.2.4, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, Cygwin 2.9.0. • The ‘%lc’ directive may fail on some platforms: musl libc 1.2.4, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. 10.1127 ‘swscanf’ ================= POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1128 ‘symlink’ ================= POSIX specification: Gnulib module: symlink Portability problems fixed by Gnulib: • On some systems, ‘symlink(value,"name/")’ mistakenly creates a symlink: macOS 11.1, FreeBSD 7.2, AIX 7.1, Solaris 9. • This function is missing on some platforms; however, the replacement always fails with ‘EPERM’: mingw, MSVC 14. Portability problems not fixed by Gnulib: • Some file systems do not support symbolic links. 10.1129 ‘symlinkat’ =================== POSIX specification: Gnulib module: symlinkat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. But the replacement function is not safe to be used in libraries and is not multithread-safe. • Some platforms declare this function in ‘stdio.h’ instead of ‘unistd.h’: Cygwin 1.7.1. • On some systems, ‘symlinkat(value, fd, "name/")’ mistakenly creates a symlink: macOS 11.1, AIX 7.1. Portability problems not fixed by Gnulib: • This function always fails with ‘ENOSYS’ on platforms that don’t support symlinks: mingw, MSVC 14. 10.1130 ‘sync’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1131 ‘sysconf’ ================= POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1132 ‘syslog’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1133 ‘system’ ================ POSIX specification: LSB specification: Gnulib module: system-posix Portability problems fixed by Gnulib: • The macros ‘WIFSIGNALED’, ‘WIFEXITED’, ‘WIFSTOPPED’, ‘WTERMSIG’, ‘WEXITSTATUS’, ‘WNOHANG’, ‘WUNTRACED’, ‘WSTOPSIG’ are not defined in ‘’ (only in ‘’) on some platforms: MirBSD 10. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), the command processor used by the ‘system’ function is ‘cmd.exe’, not ‘/bin/sh’. Accordingly, the rules for quoting shell arguments containing spaces, quote or other special characters are different. 10.1134 ‘tan’ ============= POSIX specification: Gnulib module: tan Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1135 ‘tanf’ ============== POSIX specification: Gnulib module: tanf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.1136 ‘tanh’ ============== POSIX specification: Gnulib module: tanh Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1137 ‘tanhf’ =============== POSIX specification: Gnulib module: tanhf Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: 10.1138 ‘tanhl’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.1139 ‘tanl’ ============== POSIX specification: Gnulib module: tanl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, Android 4.4. • This function is only defined as a macro with arguments on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This function produces results which are accurate to only 16 digits on some platforms: NetBSD 10.0. 10.1140 ‘tcdrain’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • On some platforms, ‘tcdrain’ on a non-tty fails with ‘errno’ set to ‘EINVAL’ or, on Mac OS X, also ‘EOPNOTSUPP’ or ‘ENODEV’, rather than ‘ENOTTY’. 10.1141 ‘tcflow’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 10.1142 ‘tcflush’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. • On some platforms, ‘tcflush’ of ‘TCIFLUSH’ on a non-tty fails with errno set to ‘EINVAL’ rather than ‘ENOTTY’. • On some platforms, ‘tcflush’ of ‘TCOFLUSH’ on a non-tty fails with errno set to ‘EINVAL’ or, on Mac OS X, also ‘EOPNOTSUPP’ or ‘ENODEV’, rather than ‘ENOTTY’. 10.1143 ‘tcgetattr’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 10.1144 ‘tcgetpgrp’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.1145 ‘tcgetsid’ ================== POSIX specification: Gnulib module: tcgetsid Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, OpenBSD 4.5, Minix 3.1.8, Cygwin 1.7.9, mingw, MSVC 14, Android 4.4. • The declaration of this function in C++ compilation units has C++ linkage, not C linkage, on some platforms: HP-UX 11.00. Portability problems not fixed by Gnulib: • This function always fails on some platforms: FreeBSD 6.0, Cygwin 1.7.8, mingw, MSVC 14. • This function returns int instead of pid_t on some platforms: Cygwin 1.7.11. 10.1146 ‘tcsendbreak’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 10.1147 ‘tcsetattr’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 10.1148 ‘tcsetpgrp’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 10.1149 ‘tdelete’ ================= POSIX specification: Gnulib module: tsearch Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.0.4. • ‘tdelete’ returns ‘NULL’ when removing the last element of a tree on some platforms: OpenBSD 4.0. Portability problems not fixed by Gnulib: 10.1150 ‘telldir’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: • On platforms where ‘long int’ is a 32-bit type, this function may not work correctly on huge directories 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: • This function is missing on some platforms: MSVC 14, Android 5.1. 10.1151 ‘tempnam’ ================= Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • This function is removed in POSIX.1-2024. Use the function ‘mkstemp’ instead. • This function is not appropriate for creating temporary files. (It has security risks.) Better use ‘mkstemp’ instead. 10.1152 ‘tfind’ =============== POSIX specification: Gnulib module: tsearch Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.0.4. Portability problems not fixed by Gnulib: 10.1153 ‘tgamma’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.1154 ‘tgammaf’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. 10.1155 ‘tgammal’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. 10.1156 ‘thrd_create’ ===================== Documentation: *note Creation and Control: (libc)ISO C Thread Management. Gnulib module: thrd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. • This function uses an incorrectly defined ‘thrd_start_t’ on some platforms: AIX 7.2. Portability problems not fixed by Gnulib: 10.1157 ‘thrd_current’ ====================== Documentation: *note Creation and Control: (libc)ISO C Thread Management. Gnulib module: thrd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1158 ‘thrd_detach’ ===================== Documentation: *note Creation and Control: (libc)ISO C Thread Management. Gnulib module: thrd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1159 ‘thrd_equal’ ==================== Documentation: *note Creation and Control: (libc)ISO C Thread Management. Gnulib module: thrd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1160 ‘thrd_exit’ =================== Documentation: *note Creation and Control: (libc)ISO C Thread Management. Gnulib module: thrd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. • The exit code provided to this function is discarded on some platforms: AIX 7.3.1. Portability problems not fixed by Gnulib: 10.1161 ‘thrd_join’ =================== Documentation: *note Creation and Control: (libc)ISO C Thread Management. Gnulib module: thrd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. • This function never stores an exit code on some platforms: AIX 7.3.1. • This function crashes when the second argument is NULL on some platforms: Solaris 11.4. Portability problems not fixed by Gnulib: 10.1162 ‘thrd_sleep’ ==================== Documentation: *note Creation and Control: (libc)ISO C Thread Management. Gnulib module: thrd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1163 ‘thrd_yield’ ==================== Documentation: *note Creation and Control: (libc)ISO C Thread Management. Gnulib module: thrd Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1164 ‘time’ ============== POSIX specification: Gnulib module: time Portability problems fixed by Gnulib: • This function is not consistent with ‘gettimeofday’ and ‘timespec_get’ on some platforms: glibc 2.31 or newer on Linux, FreeBSD 12.2/sparc64, AIX 7.2, native Windows. Namely, in the first 1 to 2.5 milliseconds of every second (or, on AIX and Windows, in the first 5 milliseconds of every second), ‘time’ returns a value that is one less than the ‘tv_sec’ part of the return value of ‘gettimeofday’ or ‘timespec_get’. Portability problems not fixed by Gnulib: 10.1165 ‘timegm’ ================ Documentation: • *note Broken-down Time: (libc)Broken-down Time, • man timegm. Gnulib module: timegm Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, mingw, MSVC 14, Android 3.0. Portability problems not fixed by Gnulib: 10.1166 ‘timer_create’ ====================== POSIX specification: Gnulib module: timer-time Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.4, Minix 3.1.8, mingw, MSVC 14. • This function fails with ‘ENOSYS’ on some platforms: OpenBSD 4.9. 10.1167 ‘timer_delete’ ====================== POSIX specification: Gnulib module: timer-time Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.4, Minix 3.1.8, mingw, MSVC 14. • This function fails with ‘ENOSYS’ on some platforms: OpenBSD 4.9. 10.1168 ‘timer_getoverrun’ ========================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.0, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14. 10.1169 ‘timer_gettime’ ======================= POSIX specification: Gnulib module: timer-time Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.4, Minix 3.1.8, mingw, MSVC 14. • This function fails with ‘ENOSYS’ on some platforms: OpenBSD 4.9. 10.1170 ‘timer_settime’ ======================= POSIX specification: Gnulib module: timer-time Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.4, Minix 3.1.8, mingw, MSVC 14. • This function fails with ‘ENOSYS’ on some platforms: OpenBSD 4.9. 10.1171 ‘times’ =============== POSIX specification: Gnulib module: times Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • There is no function on Windows to measure consumed process child times, thus the ‘tms_cutime’ and ‘tms_cstime’ will always be 0 when the module is used. 10.1172 ‘timespec_getres’ ========================= ISO C23 specification: section 7.29.2.7 Gnulib module: timespec_getres Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.33, macOS 12, FreeBSD 14.0, NetBSD 9.2, OpenBSD 7.0, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 34. Portability problems not fixed by Gnulib: • On some platforms, this function returns a value other than the clock resolution of ‘timespec_get’, i.e., the minimum distance between differing timestamps. For example, on GNU/Linux it typically returns 1 nanosecond regardless of the actual clock resolution. The Gnulib module ‘gettime-res’ is a partial substitute; it implements the ‘TIME_UTC’ functionality of ‘timespec_getres’. 10.1173 ‘timezone’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: mingw. • The address of this variable is not a compile-time constant on some platforms: mingw. • Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX. *Note tzset::. A more portable way of getting the UTC offset is to use ‘strftime’ with the ‘%z’ format. *Note strftime::. 10.1174 ‘tmpfile’ ================= POSIX specification: Gnulib module: tmpfile Portability problems fixed by Gnulib: • This function always fails on some platforms: Android 4.3. • This function often fails for trivial reasons on some platforms: mingw, MSVC 14. • On platforms where ‘off_t’ is a 32-bit type, ‘tmpfile’ may not work correctly to create files 2 GiB and larger. *Note Large File Support::. Portability problems not fixed by Gnulib: 10.1175 ‘tmpnam’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is not appropriate for creating temporary files. (It has security risks.) Better use ‘mkstemp’ instead. 10.1176 ‘toascii’ ================= POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • POSIX says this function is obsolescent and it is planned to be removed in POSIX 202x. 10.1177 ‘tolower’ ================= POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are four alternative APIs: ‘c_tolower’ This function operates in a locale independent way and returns a different value than the argument only for uppercase ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘towlower’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32tolower’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32tolower’. ‘uc_tolower’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unicase/tolower’. 10.1178 ‘tolower_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.1179 ‘totalorder’ ==================== Documentation: • *note Floating-Point Comparison Functions: (libc)FP Comparison Functions. • Gnulib module: totalorder Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.30. Portability problems not fixed by Gnulib: • This function treats signalling NaNs incorrectly on some platforms: glibc 2.35/sh4. 10.1180 ‘totalorderf’ ===================== Documentation: • *note Floating-Point Comparison Functions: (libc)FP Comparison Functions. • Gnulib module: totalorderf Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.30. Portability problems not fixed by Gnulib: • This function treats signalling NaNs incorrectly on some platforms: glibc 2.35/sh4. 10.1181 ‘totalorderl’ ===================== Documentation: • *note Floating-Point Comparison Functions: (libc)FP Comparison Functions. • Gnulib module: totalorderl Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.30. Portability problems not fixed by Gnulib: • This function treats signalling NaNs incorrectly on some platforms: glibc 2.35/sh4. 10.1182 ‘totalordermag’ ======================= Documentation: *note Floating-Point Comparison Functions: (libc)FP Comparison Functions. Gnulib module: totalordermag Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.30. Portability problems not fixed by Gnulib: 10.1183 ‘totalordermagf’ ======================== Documentation: *note Floating-Point Comparison Functions: (libc)FP Comparison Functions. Gnulib module: totalordermagf Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.30. Portability problems not fixed by Gnulib: 10.1184 ‘totalordermagl’ ======================== Documentation: *note Floating-Point Comparison Functions: (libc)FP Comparison Functions. Gnulib module: totalordermagl Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.30. Portability problems not fixed by Gnulib: 10.1185 ‘toupper’ ================= POSIX specification: Gnulib module: ctype Portability problems fixed by Gnulib: • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: Note: This function’s behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with ‘MB_CUR_MAX > 1’ (this includes all the common UTF-8 locales). There are four alternative APIs: ‘c_toupper’ This function operates in a locale independent way and returns a different value than the argument only for lowercase ASCII characters. It is provided by the Gnulib module ‘c-ctype’. ‘towupper’ This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the ‘mbrtowc’ function. It is provided by the Gnulib module ‘wctype’. ‘c32toupper’ This function operates in a locale dependent way, on 32-bit wide characters. In order to use it, you first have to convert from multibyte to 32-bit wide characters, using the ‘mbrtoc32’ function. It is provided by the Gnulib module ‘c32toupper’. ‘uc_toupper’ This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module ‘unicase/toupper’. 10.1186 ‘toupper_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 10.1187 ‘towctrans’ =================== POSIX specification: Gnulib module: towctrans Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw, MSVC 9, Android 7.1. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32_apply_mapping’, provided by Gnulib module ‘c32_apply_mapping’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1188 ‘towctrans_l’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1189 ‘towlower’ ================== POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function returns values of which the upper 16 bits are incorrect on some platforms: mingw. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32tolower’, provided by Gnulib module ‘c32tolower’, operates on 32-bit wide characters and therefore does not have this limitation. • This function returns wrong values even for the ASCII characters in a zh_CN.GB18030 locale on some platforms: NetBSD 10.0. 10.1190 ‘towlower_l’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1191 ‘towupper’ ================== POSIX specification: Gnulib module: wctype-h Portability problems fixed by Gnulib: • This function returns values of which the upper 16 bits are incorrect on some platforms: mingw. • This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32toupper’, provided by Gnulib module ‘c32toupper’, operates on 32-bit wide characters and therefore does not have this limitation. • This function returns wrong values even for the ASCII characters in a zh_CN.GB18030 locale on some platforms: NetBSD 10.0. 10.1192 ‘towupper_l’ ==================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1193 ‘trunc’ =============== POSIX specification: Gnulib module: trunc or trunc-ieee Portability problems fixed by either Gnulib module ‘trunc’ or ‘trunc-ieee’: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Solaris 9, MSVC 9. • This function is not declared (without ‘-D_GNU_SOURCE’) on some platforms: glibc 2.8. Portability problems fixed by Gnulib module ‘trunc-ieee’: Portability problems not fixed by Gnulib: 10.1194 ‘truncate’ ================== POSIX specification: Gnulib module: truncate Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4 with ‘AC_SYS_LARGEFILE’ in effect. • On platforms where ‘off_t’ is a 32-bit type, this function is not applicable to arbitrary lengths for files 2 GiB and larger. *Note Large File Support::. • This function does not fail when the file name argument ends in a slash and (without the slash) names a non-directory, on some platforms: AIX 7.2. Portability problems not fixed by Gnulib: 10.1195 ‘truncf’ ================ POSIX specification: Gnulib module: truncf or truncf-ieee Portability problems fixed by either Gnulib module ‘truncf’ or ‘truncf-ieee’: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. • This function is not declared (without ‘-D_GNU_SOURCE’) on some platforms: glibc 2.8. Portability problems fixed by Gnulib module ‘truncf-ieee’: Portability problems not fixed by Gnulib: 10.1196 ‘truncl’ ================ POSIX specification: Gnulib module: truncl or truncl-ieee Portability problems fixed by either Gnulib module ‘truncl’ or ‘truncl-ieee’: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9. • This function is not declared (without ‘-D_GNU_SOURCE’) on some platforms: glibc 2.8. Portability problems fixed by Gnulib module ‘truncl-ieee’: Portability problems not fixed by Gnulib: 10.1197 ‘tsearch’ ================= POSIX specification: Gnulib module: tsearch Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.0.4. Portability problems not fixed by Gnulib: 10.1198 ‘tss_create’ ==================== Documentation: *note Thread-local Storage: (libc)ISO C Thread-local Storage. Gnulib module: tss Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1199 ‘tss_delete’ ==================== Documentation: *note Thread-local Storage: (libc)ISO C Thread-local Storage. Gnulib module: tss Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1200 ‘tss_get’ ================= Documentation: *note Thread-local Storage: (libc)ISO C Thread-local Storage. Gnulib module: tss Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1201 ‘tss_set’ ================= Documentation: *note Thread-local Storage: (libc)ISO C Thread-local Storage. Gnulib module: tss Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android API level 29. Portability problems not fixed by Gnulib: 10.1202 ‘ttyname’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. • This function is just a stub that produces an error message on standard error on some platforms: Android 4.3. 10.1203 ‘ttyname_r’ =================== POSIX specification: Gnulib module: ttyname_r Portability problems fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14. • This function is not declared unless ‘_REENTRANT’ is defined, on some platforms: HP-UX 11. • This function has an incompatible declaration on some platforms: Solaris 11.4 (when ‘_POSIX_PTHREAD_SEMANTICS’ is not defined). • This function refuses to do anything when the output buffer is less than 128 bytes large, on some platforms: Solaris 11 2010-11. • This function is just a stub that produces an error message on standard error on some platforms: Android 4.3. Portability problems not fixed by Gnulib: 10.1204 ‘twalk’ =============== POSIX specification: Gnulib module: tsearch Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.4. Portability problems not fixed by Gnulib: 10.1205 ‘tzname’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: mingw. • The address of this variable is not a compile-time constant on some platforms: Cygwin, mingw. • Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX. *Note tzset::. A more portable way of getting the time zone abbreviation is to use ‘strftime’ with the ‘%Z’ format. *Note strftime::. 10.1206 ‘tzset’ =============== POSIX specification: Gnulib module: tzset Portability problems fixed by Gnulib: • On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable ‘TZ’ has been set by Cygwin. Portability problems not fixed by Gnulib: • Native Windows platforms (mingw, MSVC) support only a subset of POSIX-specified values for the ‘TZ’ environment variable, consisting of a time zone abbreviation containing exactly three ASCII letters with no daylight saving time or angle brackets, and with no support for ‘tz’ database settings like ‘TZ='America/New_York'’. Even this subset does not work on applications built via the Universal Windows Platform, as it does not make environment variables like ‘TZ’ available to applications. • Older POSIX platforms do not support angle brackets in ‘TZ’ values, as this feature was added in IEEE Std 1003.1-2001. 10.1207 ‘ufromfp’ ================= Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1208 ‘ufromfpf’ ================== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1209 ‘ufromfpl’ ================== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1210 ‘ufromfpx’ ================== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1211 ‘ufromfpxf’ =================== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1212 ‘ufromfpxl’ =================== Documentation: *note Rounding Functions: (libc)Rounding Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 10.1213 ‘ulimit’ ================ Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is removed in POSIX.1-2024. Use the functions ‘getrlimit’ and ‘setrlimit’ instead. 10.1214 ‘umask’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1215 ‘uname’ =============== POSIX specification: Gnulib module: uname Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.1216 ‘ungetc’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. 10.1217 ‘ungetwc’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1218 ‘unlink’ ================ POSIX specification: LSB specification: Gnulib module: unlink Portability problems fixed by Gnulib: • This function is declared in a different header file (namely, ‘’) on some platforms: MSVC 14. • Some systems mistakenly succeed on ‘unlink("link-to-file/")’: GNU/Hurd, FreeBSD 7.2, AIX 7.1, Solaris 9. • On Mac OS X 10.10, in a writable HFS mount, ‘unlink("..")’ succeeds without doing anything. Portability problems not fixed by Gnulib: • Some systems allow a superuser to unlink directories, even though this can cause file system corruption. The error given if a process is not permitted to unlink directories varies across implementations; it is not always the POSIX value of ‘EPERM’. Meanwhile, if a process has the ability to unlink directories, POSIX requires that ‘unlink("symlink-to-dir/")’ remove ‘dir’ and leave ‘symlink-to-dir’ dangling; this behavior is counter-intuitive. The gnulib module ‘unlinkdir’ can help determine whether code must be cautious of unlinking directories. • Removing an open file is non-portable: On Unix this allows the programs that have the file already open to continue working with it; the file’s storage is only freed when the no process has the file open any more. On Windows, the attempt to remove an open file fails. 10.1219 ‘unlinkat’ ================== POSIX specification: Gnulib module: unlinkat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. • This function is declared in ‘’, not in ‘’, on some platforms: Cygwin 1.7.1, Android 4.3. • On Mac OS X 10.10, in a writable HFS mount, ‘unlinkat(fd, "..", 0)’ succeeds without doing anything. • Some systems mistakenly succeed on ‘unlinkat(fd,"file/",flag)’: GNU/Hurd, Solaris 9. Portability problems not fixed by Gnulib: • When ‘unlinkat(fd,name,AT_REMOVEDIR)’ fails because the specified directory is not empty, the ‘errno’ value is system dependent. • POSIX requires that ‘unlinkdir(fd,"link-to-empty/",AT_REMOVEDIR)’ remove ‘empty’ and leave ‘link-to-empty’ as a dangling symlink. This is counter-intuitive, so some systems fail with ‘ENOTDIR’ instead: glibc • Some systems allow a superuser to unlink directories, even though this can cause file system corruption. The error given if a process is not permitted to unlink directories varies across implementations; it is not always the POSIX value of ‘EPERM’. Meanwhile, if a process has the ability to unlink directories, POSIX requires that ‘unlinkat(fd,"symlink-to-dir/",0)’ remove ‘dir’ and leave ‘symlink-to-dir’ dangling; this behavior is counter-intuitive. The gnulib module ‘unlinkdir’ can help determine whether code must be cautious of unlinking directories. • Removing an open file is non-portable: On Unix this allows the programs that have the file already open to continue working with it; the file’s storage is only freed when the no process has the file open any more. On Windows, the attempt to remove an open file fails. 10.1220 ‘unlockpt’ ================== POSIX specification: Gnulib module: unlockpt Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function reports success for invalid file descriptors on some platforms: NetBSD 5.1, Cygwin 1.7.9. 10.1221 ‘unsetenv’ ================== POSIX specification: Gnulib module: unsetenv Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, mingw, MSVC 14. • This function has the return type ‘void’ instead of ‘int’ on some platforms: FreeBSD 6.0, NetBSD 1.6, OpenBSD 3.8. • On some platforms, this function does not fail with ‘EINVAL’ when passed an empty string or a string containing ‘=’: FreeBSD 6.0, NetBSD 1.6, OpenBSD 4.7. • This function removes only the first value association for the given environment variable, not all of them, on some platforms: Solaris 11.4, Haiku. Portability problems not fixed by Gnulib: • Older versions of POSIX required that ‘unsetenv(NULL)’ gracefully fail with ‘EINVAL’, but not all implementations guarantee this, and the requirement was removed. 10.1222 ‘uselocale’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 9.0, NetBSD 10.0, OpenBSD 6.1, Minix 3.1.8, AIX 6.1, HP-UX 11, Solaris 11.3, Cygwin 2.5.x, mingw, MSVC 14, Android API level 20. • This function is not documented and leads to crashes in subsequent ‘setlocale’ invocations on some platforms: AIX 7.2. • This function is useless because the ‘locale_t’ type is not defined on some platforms: z/OS. • This function is useless because the ‘locale_t’ type contains basically no information on some platforms: OpenBSD 7.4. 10.1223 ‘utime’ =============== Removed in POSIX.1-2024. POSIX.1-2017 specification: Gnulib module: utime Portability problems fixed by Gnulib: • The times that are set on the file are affected by the current time zone and by the DST flag of the current time zone on some platforms: mingw, MSVC 14 (when the environment variable ‘TZ’ is set). • On some platforms, the prototype for ‘utime’ omits ‘const’ for the second argument: mingw, MSVC 14. • On some platforms, ‘utime("link-to-file/",buf)’ succeeds instead of failing with ‘ENOTDIR’. macOS 11.1. Portability problems not fixed by Gnulib: • On some platforms, this function mis-handles a trailing slash: Solaris 9. • This function cannot set full timestamp resolution. Use ‘utimensat(AT_FDCWD,file,times,0)’, or the gnulib module ‘utimens’, instead. • This function is removed in POSIX.1-2024. You can use Gnulib module ‘utimens’ instead. 10.1224 ‘utimensat’ =================== POSIX specification: Gnulib module: utimensat Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.5, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 3.0. However, the replacement function may end up truncating timestamps to worse resolution than supported by the file system. Furthermore, the replacement function is not safe to be used in libraries and is not multithread-safe. • This function returns a bogus value instead of failing with ‘ENOSYS’ on some platforms: Linux kernel 2.6.21. • This function fails with ‘ENOSYS’ if passed the flag ‘AT_SYMLINK_NOFOLLOW’ on a regular file: Linux kernel 2.6.22. • When using ‘UTIME_OMIT’ or ‘UTIME_NOW’, some systems require the ‘tv_sec’ argument to be 0, and don’t necessarily handle all file permissions in the manner required by POSIX: Linux kernel 2.6.25. • When using ‘UTIME_OMIT’ for the modification time, but specifying an access time, some systems fail to update the change time: Linux kernel 2.6.32, macOS 11.1, NetBSD 10.0, Solaris 11.1. • Out-of-range values of ‘tv_nsec’ do not lead to a failure on some platforms: Linux kernel 2.6.22.19 on hppa, NetBSD 10.0. • On some platforms, this function mis-handles a trailing slash: AIX 7.2. Portability problems not fixed by Gnulib: • On some platforms, timestamps of symbolic links cannot be modified, so the replacement fails with ‘ENOSYS’ if passed the flag ‘AT_SYMLINK_NOFOLLOW’ on a symlink. • The mere act of using ‘lstat’ modifies the access time of symlinks on some platforms, so ‘utimensat’ with ‘AT_SYMLINK_NOFOLLOW’ can only effectively change modification time: Cygwin. • The mere act of using ‘stat’ modifies the access time of directories on some platforms, so ‘utimensat’ can only effectively change directory modification time: Cygwin 1.5.x. The gnulib module ‘fdutimensat’ provides a similar interface. 10.1225 ‘utimes’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • On some platforms, this function mis-handles a trailing slash: FreeBSD 7.2, Solaris 9. • This function cannot set full timestamp resolution. In particular, some platforms incorrectly round rather than truncate. Use ‘utimensat(AT_FDCWD,file,times,0)’, or the gnulib module ‘utimens’, instead. • On some platforms, ‘utimes (file, NULL)’ fails to set the file’s timestamp to the current time: glibc 2.3.3. • On some platforms, ‘utimes’ failed on read-only files when ‘utime’ worked fine. glibc 2.2.5. • On OS/2, this function cannot set the timestamp to earlier than the year 1980 in local time. • On OS/2, this function cannot set the timestamp to an odd number of seconds. • On OS/2, this function does not work on an opened file. Extension: Gnulib provides a module ‘utimens’ that works around these problems and allows to set the time with nanosecond resolution (as far as supported by the file system). 10.1226 ‘va_arg’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • The second argument of ‘va_arg’ must be a type that is invariant under the “default argument promotions” (ISO C 99 6.5.2.2 paragraph 6). This means that the following are not valid here: ‘float’ Use ‘double’ instead. ‘bool’ Use ‘int’ instead. Integer types smaller than ‘int’. Use ‘int’ or ‘unsigned int’ instead. This is a portability problem because you don’t know the width of some abstract types like ‘uid_t’, ‘gid_t’, ‘mode_t’. So, instead of mode = va_arg (ap, mode_t); you have to write mode = (sizeof (mode_t) < sizeof (int) ? va_arg (ap, int) : va_arg (ap, mode_t)); 10.1227 ‘va_copy’ ================= POSIX specification: Gnulib module: stdarg Portability problems fixed by Gnulib: • This macro is missing on some platforms: AIX 5.1 with cc or xlc, HP-UX 11 with cc. Portability problems not fixed by Gnulib: 10.1228 ‘va_end’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1229 ‘va_start’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 10.1230 ‘vdprintf’ ================== POSIX specification: Gnulib module: vdprintf or vdprintf-posix or vdprintf-gnu Portability problems fixed by either Gnulib module ‘vdprintf’ or ‘vdprintf-posix’ or ‘vdprintf-gnu’: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14. Portability problems fixed by either Gnulib module ‘vdprintf-posix’ or ‘vdprintf-gnu’: • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, Solaris 11.4, Cygwin 2.9.0. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: Solaris 11.4. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Solaris 11.4. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, Solaris 11.4, Cygwin 2.9.0. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Solaris 11.4. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. Portability problems fixed by Gnulib module ‘vdprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘vdprintf-posix’ or ‘vdprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.1231 ‘vfprintf’ ================== POSIX specification: Gnulib module: vfprintf-posix or vfprintf-gnu or stdio, nonblocking, sigpipe Portability problems fixed by either Gnulib module ‘vfprintf-posix’ or ‘vfprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. • This function mishandles large floating point precisions (for example, formatting 1.0 with ‘"%.511f"’) on some platforms: Solaris 10. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. Portability problems fixed by Gnulib module ‘vfprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘vfprintf-posix’ or ‘vfprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’ or ‘vfprintf-posix’ or ‘vfprintf-gnu’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’ or ‘vfprintf-posix’ or ‘vfprintf-gnu’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • Attempting to write to a read-only stream fails with ‘EOF’ but does not set the error flag for ‘ferror’ on some platforms: glibc 2.13, cygwin 1.7.9. 10.1232 ‘vfscanf’ ================= POSIX specification: LSB specification: Gnulib module: vfscanf, nonblocking Portability problems fixed by Gnulib module ‘vfscanf’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On Windows, this function doesn’t support the ‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’ size specifiers. 10.1233 ‘vfwprintf’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • In the C or POSIX locales, the ‘%c’ and ‘%s’ conversions may fail on some platforms: glibc 2.35. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.1234 ‘vfwscanf’ ================== POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Cygwin 1.5.x, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1235 ‘vprintf’ ================= POSIX specification: Gnulib module: vprintf-posix or vprintf-gnu or stdio, nonblocking, sigpipe Portability problems fixed by either Gnulib module ‘vprintf-posix’ or ‘vprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. • This function mishandles large floating point precisions (for example, formatting 1.0 with ‘"%.511f"’) on some platforms: Solaris 10. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. Portability problems fixed by Gnulib module ‘vprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘vprintf-posix’ or ‘vprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’ or ‘vprintf-posix’ or ‘vprintf-gnu’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’ or ‘vprintf-posix’ or ‘vprintf-gnu’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • Attempting to write to a read-only stream fails with ‘EOF’ but does not set the error flag for ‘ferror’ on some platforms: glibc 2.13, cygwin 1.7.9. 10.1236 ‘vscanf’ ================ POSIX specification: LSB specification: Gnulib module: vscanf, nonblocking Portability problems fixed by Gnulib module ‘vscanf’, together with module ‘nonblocking’: • When reading from a non-blocking pipe whose buffer is empty, this function fails with ‘errno’ being set to ‘EINVAL’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On Windows, these functions don’t support the ‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’ size specifiers. 10.1237 ‘vsnprintf’ =================== POSIX specification: Gnulib module: vsnprintf or vsnprintf-posix or vsnprintf-gnu Portability problems fixed by either Gnulib module ‘vsnprintf’ or ‘vsnprintf-posix’ or ‘vsnprintf-gnu’: • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function does not return a byte count as specified in C99 on some platforms: HP-UX 11, Solaris 9, mingw, MSVC 14. Portability problems fixed by either Gnulib module ‘vsnprintf-posix’ or ‘vsnprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. • This function mishandles large floating point precisions (for example, formatting 1.0 with ‘"%.511f"’) on some platforms: Solaris 10. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. • This function does not truncate the result as specified in C99 on some platforms: mingw, MSVC 14. • This function overwrites memory even when a zero size argument is passed on some platforms: HP-UX 11. Portability problems fixed by Gnulib module ‘vsnprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘vsnprintf-posix’ or ‘vsnprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not fully support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, HP-UX 11, mingw, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. 10.1238 ‘vsprintf’ ================== POSIX specification: Gnulib module: vsprintf-posix or vsprintf-gnu Portability problems fixed by either Gnulib module ‘vsprintf-posix’ or ‘vsprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. • This function mishandles large floating point precisions (for example, formatting 1.0 with ‘"%.511f"’) on some platforms: Solaris 10. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. • The compiler warns that this function is deprecated: macOS 13.0. Portability problems fixed by Gnulib module ‘vsprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘vsprintf-posix’ or ‘vsprintf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: glibc when used with ‘_FORTIFY_SOURCE >= 2’ (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • Formatting noncanonical ‘long double’ numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. 10.1239 ‘vsscanf’ ================= POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: MSVC 14. • On Windows platforms (excluding Cygwin), this function does not set ‘errno’ upon failure. • On Windows, these functions don’t support the ‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’ size specifiers. 10.1240 ‘vswprintf’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • On Windows, this function does not take a buffer size as second argument. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • In the C or POSIX locales, the ‘%c’ and ‘%s’ conversions may fail on some platforms: glibc 2.35. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. 10.1241 ‘vswscanf’ ================== POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Cygwin 1.5.x, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1242 ‘vwprintf’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, Cygwin 1.7. • This function exists, but does not support wide arguments on some platforms: Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • In the C or POSIX locales, the ‘%c’ and ‘%s’ conversions may fail on some platforms: glibc 2.35. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.1243 ‘vwscanf’ ================= POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Cygwin 1.5.x, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1244 ‘wait’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1245 ‘waitid’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14. • As of 2005, no system is known on which ‘waitid’ with flag ‘WNOWAIT’ works correctly. 10.1246 ‘waitpid’ ================= POSIX specification: LSB specification: Gnulib module: waitpid Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: 10.1247 ‘wcpcpy’ ================ POSIX specification: Gnulib module: wcpcpy Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. • This function is not declared (without ‘-D_GNU_SOURCE’) on some platforms: glibc 2.13. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1248 ‘wcpncpy’ ================= POSIX specification: Gnulib module: wcpncpy Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. • This function is not declared (without ‘-D_GNU_SOURCE’) on some platforms: glibc 2.13. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1249 ‘wcrtomb’ ================= POSIX specification: Gnulib module: wcrtomb Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. • This function produces wrong characters in the C locale on some platforms: Android 4.3. • This function returns 0 when the first argument is NULL in some locales on some platforms: Solaris 11.3. • This function does not ignore the second argument when the first argument is NULL on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the ISO C11 function ‘c32rtomb’, provided by Gnulib module ‘c32rtomb’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1250 ‘wcscasecmp’ ==================== POSIX specification: Gnulib module: wcscasecmp Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1251 ‘wcscasecmp_l’ ====================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1252 ‘wcscat’ ================ POSIX specification: Gnulib module: wcscat Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1253 ‘wcschr’ ================ POSIX specification: Gnulib module: wcschr Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1254 ‘wcscmp’ ================ POSIX specification: Gnulib module: wcscmp Portability problems fixed by Gnulib: • This function compares the wide characters as if they were unsigned, although ‘wchar_t’ is signed, on some platforms: glibc 2.14.1 on x86 or x86_64, musl libc 1.2.3, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, Solaris 11.4. • This function may return a wrong result if the two arguments are of different length, on some platforms: glibc 2.37 on arm and arm64 CPUs, AIX 7.2 in 64-bit mode. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1255 ‘wcscoll’ ================= POSIX specification: Gnulib module: wcscoll Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1256 ‘wcscoll_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1257 ‘wcscpy’ ================ POSIX specification: Gnulib module: wcscpy Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. Note: ‘wcscpy (dst, src)’ is only safe to use when you can guarantee that there are at least ‘wcslen (src) + 1’ wide characters allocated at ‘dst’. 10.1258 ‘wcscspn’ ================= POSIX specification: Gnulib module: wcscspn Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1259 ‘wcsdup’ ================ POSIX specification: Gnulib module: wcsdup Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, HP-UX 11, Solaris 10, Cygwin 1.5.x. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1260 ‘wcsftime’ ================== POSIX specification: Gnulib module: wcsftime Portability problems fixed by Gnulib: • On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable ‘TZ’ has been set by Cygwin. Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • Native Windows platforms (mingw, MSVC) support only a subset of time zones specified by POSIX. *Note tzset::. 10.1261 ‘wcslen’ ================ POSIX specification: Gnulib module: wcslen Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1262 ‘wcsncasecmp’ ===================== POSIX specification: Gnulib module: wcsncasecmp Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1263 ‘wcsncasecmp_l’ ======================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1264 ‘wcsncat’ ================= POSIX specification: Gnulib module: wcsncat Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1265 ‘wcsncmp’ ================= POSIX specification: Gnulib module: wcsncmp Portability problems fixed by Gnulib: • This function compares the wide characters as if they were unsigned, although ‘wchar_t’ is signed, on some platforms: glibc 2.14.1 on x86 or x86_64, musl libc 1.2.3, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, Solaris 11.4. • This function may return a wrong result if the two arguments are of different length, on some platforms: AIX 7.2 in 64-bit mode. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1266 ‘wcsncpy’ ================= POSIX specification: Gnulib module: wcsncpy Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. Note: This function has no real use: It cannot be used for filling a fixed-size record with a wide string, before writing it to a file, because the wide string encoding is platform dependent and, on some platforms, also locale dependent. And this function is *not* appropriate for copying a wide string into a bounded memory area, because you have no guarantee that the result will be null-terminated. Even if you add the null character at the end yourself, this function is inefficient (as it spends time clearing unused memory) and will allow silent truncation to occur, which is not a good behavior for GNU programs. 10.1267 ‘wcsnlen’ ================= POSIX specification: Gnulib module: wcsnlen Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1268 ‘wcsnrtombs’ ==================== POSIX specification: Gnulib module: wcsnrtombs Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. • This function cannot consume valid sequences of wide characters on some platforms: Solaris 11.4. • In C++ mode, the system’s ‘’ defines ‘std::wcsnrtombs’ but not ‘::wcsnrtombs’ on some platforms: Solaris 11 OpenIndiana. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32snrtombs’, provided by Gnulib module ‘c32snrtombs’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1269 ‘wcspbrk’ ================= POSIX specification: Gnulib module: wcspbrk Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1270 ‘wcsrchr’ ================= POSIX specification: Gnulib module: wcsrchr Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1271 ‘wcsrtombs’ =================== POSIX specification: Gnulib module: wcsrtombs Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. • This function does not ignore the length argument if the destination argument is NULL on some platforms: mingw. • This function updates the source pointer also if the destination argument is NULL on some platforms: HP-UX 11. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32srtombs’, provided by Gnulib module ‘c32srtombs’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1272 ‘wcsspn’ ================ POSIX specification: Gnulib module: wcsspn Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1273 ‘wcsstr’ ================ POSIX specification: Gnulib module: wcsstr or wcsstr-simple Portability problems fixed by either Gnulib module ‘wcsstr-simple’ or ‘wcsstr’: • This function is missing on some platforms: HP-UX 11.00. Portability problems fixed by Gnulib module ‘wcsstr’: • This function has quadratic instead of linear worst-case complexity on some platforms: glibc 2.39, macOS 12.5, FreeBSD 13.1, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1274 ‘wcstod’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1275 ‘wcstof’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1276 ‘wcstoimax’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1277 ‘wcstok’ ================ POSIX specification: Gnulib module: wcstok Portability problems fixed by Gnulib: • This function is missing on some platforms: Cygwin 1.5.x. • This function takes only two arguments on some platforms: mingw, older MSVC. • This function may use hidden state, ignoring the third argument, and thus exhibit a bug when two or more ‘wcstok’ iteration loops are being performed in the same thread, on some platforms: HP-UX 11.31. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1278 ‘wcstol’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1279 ‘wcstold’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1280 ‘wcstoll’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1281 ‘wcstombs’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32stombs’, provided by Gnulib module ‘c32stombs’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1282 ‘wcstoul’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1283 ‘wcstoull’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1284 ‘wcstoumax’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1285 ‘wcswidth’ ================== POSIX specification: Gnulib module: wcswidth Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32swidth’, provided by Gnulib module ‘c32swidth’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1286 ‘wcsxfrm’ ================= POSIX specification: Gnulib module: wcsxfrm Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1287 ‘wcsxfrm_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1288 ‘wctob’ =============== POSIX specification: Gnulib module: wctob Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. • This function clobbers caller-owned registers on some platforms: Cygwin 1.7.5. • This function does not work on some platforms: Solaris 9. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32tob’, provided by Gnulib module ‘c32tob’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1289 ‘wctomb’ ================ POSIX specification: Gnulib module: wctomb Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1290 ‘wctrans’ ================= POSIX specification: Gnulib module: wctrans Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw, MSVC 9, Android 7.1. • This function does not support the ‘"tolower"’ and ‘"toupper"’ mappings on some platforms: NetBSD 10.0. (It returns non-null values for the arguments ‘"towlower"’ and ‘"towupper"’, but with these values, the function ‘towctrans’ always crashes.) Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32_get_mapping’, provided by Gnulib module ‘c32_get_mapping’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1291 ‘wctrans_l’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1292 ‘wctype’ ================ POSIX specification: Gnulib module: wctype Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, MSVC 9. • This function is declared in ‘’, not in ‘’, on some platforms: HP-UX 11.00. • This function does not support the ‘"blank"’ character class on some platforms: mingw. • The object returned by this function for the ‘"blank"’ character class is inconsistent with the ‘iswblank’ and ‘isblank’ functions on some platforms: MSVC 14. • The object returned by this function for the ‘"punct"’ character class is inconsistent with the ‘ispunct’ function on some platforms: Android 11. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32_get_type_test’, provided by Gnulib module ‘c32_get_type_test’, operates on 32-bit wide characters and therefore does not have this limitation. 10.1293 ‘wctype_l’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1294 ‘wcwidth’ ================= POSIX specification: Gnulib module: wcwidth Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. • This function is not declared (without ‘-D_GNU_SOURCE’) on some platforms: glibc 2.8. • This function handles combining characters in UTF-8 locales incorrectly on some platforms: macOS 12.5, NetBSD 9.3, OpenBSD 5.8, MidnightBSD 1.1. • This function returns 2 for characters with ambiguous east asian width, even in Western locales, on some platforms: Solaris 11.4. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function ‘c32width’, provided by Gnulib module ‘c32width’, operates on 32-bit wide characters and therefore does not have this limitation. • This function treats zero-width spaces like control characters on some platforms: AIX 7.2. 10.1295 ‘wmemchr’ ================= POSIX specification: Gnulib module: wmemchr Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.00, MSVC 14. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1296 ‘wmemcmp’ ================= POSIX specification: Gnulib module: wmemcmp Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.00, MSVC 14. • This function compares the wide characters as if they were unsigned, although ‘wchar_t’ is signed, on some platforms: glibc 2.14.1 on x86 or x86_64, musl libc 1.2.3, NetBSD 10.0, OpenBSD 7.2, Solaris 11.4. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1297 ‘wmemcpy’ ================= POSIX specification: Gnulib module: wmemcpy Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.00, MSVC 9. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1298 ‘wmemmove’ ================== POSIX specification: Gnulib module: wmemmove Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.00, MSVC 9. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1299 ‘wmemset’ ================= POSIX specification: Gnulib module: wmemset Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11.00, MSVC 9. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1300 ‘wordexp’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.1301 ‘wordfree’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 10.1302 ‘wprintf’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00. • This function exists, but does not support wide arguments on some platforms: Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • This function does not support size specifiers as in C23 (‘w8’, ‘w16’, ‘w32’, ‘w64’, ‘wf8’, ‘wf16’, ‘wf32’, ‘wf64’) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. • In the C or POSIX locales, the ‘%c’ and ‘%s’ conversions may fail on some platforms: glibc 2.35. • When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. • On some platforms, this function does not set ‘errno’ or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. 10.1303 ‘write’ =============== POSIX specification: Gnulib module: write, nonblocking, sigpipe Portability problems fixed by Gnulib module ‘write’: • This function is declared in a different header file (namely, ‘’) on some platforms: mingw, MSVC 14. • This function crashes when invoked with invalid arguments on some platforms: MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘nonblocking’: • When writing to a non-blocking pipe whose buffer is full, this function fails with ‘errno’ being set to ‘ENOSPC’ instead of ‘EAGAIN’ on some platforms: mingw, MSVC 14. • When writing to a non-blocking pipe on which no reader is currently waiting an amount of bytes that exceeds the pipe buffer’s size, then—even if the pipe’s buffer is empty—this function fails, instead of performing a partial write into the pipe buffer, on some platforms: mingw, MSVC 14. Portability problems fixed by Gnulib module ‘stdio’, together with module ‘sigpipe’: • When writing to a pipe with no readers, this function fails with error ‘EINVAL’, instead of obeying the current ‘SIGPIPE’ handler, on some platforms: mingw, MSVC 14. Portability problems not fixed by Gnulib: • This function may fail with error ‘EINTR’, even in programs that don’t install any signal handlers, on some platforms: macOS 11.1. For handling ‘EINTR’, Gnulib provides a module ‘safe-write’ with a function ‘safe_write’. 10.1304 ‘writev’ ================ POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 10.1305 ‘wscanf’ ================ POSIX specification: LSB specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 10.1306 ‘y0’ ============ POSIX specification: Gnulib module: y0 Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. 10.1307 ‘y1’ ============ POSIX specification: Gnulib module: y1 Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. 10.1308 ‘yn’ ============ POSIX specification: Gnulib module: yn Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8. 11 Past POSIX Function Substitutes ********************************** This chapter describes which functions and function-like macros specified by older versions of POSIX are substituted by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. The notation “Gnulib module: —” means that Gnulib does not provide a module providing a substitute for the function. When the list “Portability problems not fixed by Gnulib” is empty, such a module is not needed: No portability problems are known. Otherwise, it indicates that such a module would be useful but is not available: No one so far found this function important enough to contribute a substitute for it. If you need this particular function, you may write to ‘’. 11.1 ‘bcmp’ =========== Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. • This function is removed in POSIX.1-2008. Better use ‘memcmp’ instead. 11.2 ‘bcopy’ ============ Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: bcopy Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: • This function is removed in POSIX.1-2008. Better use ‘memcpy’ or ‘memmove’ instead. 11.3 ‘bsd_signal’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 7.1, Cygwin 2.9, mingw, MSVC 14. 11.4 ‘bzero’ ============ Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. • This function is removed in POSIX.1-2008. Better use ‘memset’ instead. 11.5 ‘ecvt’ =========== Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 10.0, Android 9.0. • This function is not declared on some platforms: Cygwin 2.9. • This function is removed in POSIX.1-2008. Better use ‘sprintf’ instead. 11.6 ‘fcvt’ =========== Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, NetBSD 10.0, Android 9.0. • This function is not declared on some platforms: Cygwin 2.9. • This function is removed in POSIX.1-2008. Better use ‘sprintf’ instead. 11.7 ‘ftime’ ============ Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Android 9.0. • This function is not declared on some platforms: Android 13. • On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable ‘TZ’ has been set by Cygwin. • This function is removed in POSIX.1-2008. Better use ‘clock_gettime’ instead, and use ‘ftime’ only as a fallback for portability to Windows platforms. 11.8 ‘gcvt’ =========== Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, Android 9.0. • This function is not declared on some platforms: Cygwin 2.9. • This function is removed in POSIX.1-2008. Better use ‘sprintf’ instead. 11.9 ‘getcontext’ ================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. Note: A third-party implementation is available at . 11.10 ‘gethostbyaddr’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 11.11 ‘gethostbyname’ ===================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 11.12 ‘getwd’ ============= Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. • The size of the buffer required for this function is not a compile-time constant. Also, the function truncates a result that would be larger than the minimum buffer size. For these reasons, this function is removed in POSIX.1-2008. Better use the ‘getcwd’ function instead. 11.13 ‘h_errno’ =============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.34, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 11.14 ‘index’ ============= Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. • This function is not declared on some platforms: Android 13. • This function is removed in POSIX.1-2008. Better use ‘strchr’ instead. 11.15 ‘makecontext’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. Note: A third-party implementation is available at . 11.16 ‘mktemp’ ============== Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is not appropriate for creating temporary files. (It has security risks.) Therefore it is removed in POSIX.1-2008. Better use ‘mkstemp’ instead. 11.17 ‘pthread_attr_getstackaddr’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. • This function is not declared on some platforms: Android 13. 11.18 ‘pthread_attr_setstackaddr’ ================================= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. • This function is not declared on some platforms: Android 13. 11.19 ‘rindex’ ============== Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. • This function is removed in POSIX.1-2008. Better use ‘strrchr’ instead. 11.20 ‘scalb’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: 11.21 ‘setcontext’ ================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • The effects of this call are system and compiler optimization dependent, since it restores the contents of register-allocated variables but not the contents of stack-allocated variables. Note: A third-party implementation is available at . 11.22 ‘swapcontext’ =================== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. Note: A third-party implementation is available at . 11.23 ‘ualarm’ ============== POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. 11.24 ‘usleep’ ============== POSIX specification: Gnulib module: usleep Portability problems fixed by Gnulib: • On some systems, ‘usleep’ rejects attempts to sleep longer than 1 second, as allowed by POSIX: NetBSD 10.0, mingw. Portability problems not fixed by Gnulib: • According to POSIX, the ‘usleep’ function may interfere with the program’s use of the ‘SIGALRM’ signal. On Linux, it doesn’t; on other platforms, it may. 11.25 ‘vfork’ ============= POSIX specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 11.26 ‘wcswcs’ ============== Removed in POSIX.1-2008. POSIX.1-2004 specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is not declared on some platforms: Android 13. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. • This function is removed in POSIX.1-2008. Better use ‘wcsstr’ instead. 12 Glibc Header File Substitutes ******************************** This chapter describes which header files contained in GNU libc but not specified by ISO C or POSIX are substituted by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. The notation “Gnulib module: —” means that Gnulib does not provide a module providing a substitute for the header file. When the list “Portability problems not fixed by Gnulib” is empty, such a module is not needed: No portability problems are known. Otherwise, it indicates that such a module would be useful but is not available: No one so far found this header file important enough to contribute a substitute for it. If you need this particular header file, you may write to ‘’. 12.1 ‘a.out.h’ ============== Describes the structure of executables (and object files?) in the old ‘a.out’ format. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This header file is useless because most executables and object files are in ELF format on some platforms: glibc 2.3.6, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7. 12.2 ‘aliases.h’ ================ Defines the type ‘struct aliasent’ and declares the functions ‘setaliasent’, ‘endaliasent’, ‘getaliasent’, ‘getaliasent_r’, ‘getaliasbyname’, ‘getaliasbyname_r’. Documentation: • man setaliasent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. 12.3 ‘alloca.h’ =============== Declares the ‘alloca’ function of function-like macro. Documentation: • *note Automatic Storage with Variable Size: (libc)Variable Size Automatic, • man alloca. Gnulib module: alloca Portability problems fixed by Gnulib: • This header file is missing on some platforms: FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, mingw, MSVC 14. Portability problems not fixed by Gnulib: 12.4 ‘ar.h’ =========== Describes the structure of files produced by the ‘ar’ program. Defines the type ‘struct ar_hdr’ and the macros ‘ARMAG’, ‘SARMAG’, ‘ARFMAG’. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 12.5 ‘argp.h’ ============= Documentation: • *note Parsing Program Options with Argp: (libc)Argp, Gnulib module: argp Portability problems fixed by Gnulib: • This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 12.6 ‘argz.h’ ============= Documentation: • *note (libc)Argz Functions::, • man argz. Gnulib module: argz Portability problems fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • The argz functions do not work on some platforms: Cygwin. Portability problems not fixed by Gnulib: 12.7 ‘byteswap.h’ ================= Defines the functions or function-like macros ‘bswap_16’, ‘bswap_32’, ‘bswap_64’. Gnulib module: byteswap Portability problems fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14. Portability problems not fixed by Gnulib: 12.8 ‘crypt.h’ ============== Defines the type ‘struct crypt_data’ and declares the functions ‘crypt’, ‘crypt_r’, ‘setkey’, ‘setkey_r’, ‘encrypt’, ‘encrypt_r’. Documentation: • *note Encrypting Passwords: (libc)crypt, *note (libc)DES Encryption::, • man crypt, man encrypt. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. • The functions ‘crypt’, ‘setkey’, ‘encrypt’ are missing on some platforms: HP-UX 11. • The type ‘struct crypt_data’ and the functions ‘crypt_r’, ‘setkey_r’, ‘encrypt_r’ are missing on some platforms: Solaris 11.4, Cygwin. 12.9 ‘endian.h’ =============== LSB specification: Specified in POSIX.1-2024. Draft specification: Describes the platform’s endianness (byte ordering of words stored in memory). Defines the macros ‘BYTE_ORDER’, ‘LITTLE_ENDIAN’, ‘BIG_ENDIAN’, ‘PDP_ENDIAN’. Gnulib module: endian Portability problems fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, mingw, MSVC 14. Portability problems not fixed by Gnulib: 12.10 ‘envz.h’ ============== Documentation: • *note (libc)Envz Functions::, • man envz. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 12.11 ‘err.h’ ============= Declares the functions ‘warn’, ‘vwarn’, ‘warnx’, ‘vwarnx’, ‘err’, ‘verr’, ‘errx’, ‘verrx’. Documentation: • *note (libc)Error Messages::, • man err. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 12.12 ‘error.h’ =============== Declares the functions ‘error’, ‘error_at_line’ and the variables ‘error_print_progname’, ‘error_message_count’, ‘error_one_per_line’. Documentation: • *note (libc)Error Messages::, • man error. Gnulib module: error-h Portability problems fixed by Gnulib: • This header file is missing on many platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. Portability problems not fixed by Gnulib: 12.13 ‘execinfo.h’ ================== Declares the functions ‘backtrace’, ‘backtrace_symbols’, ‘backtrace_symbols_fd’. Documentation: • *note (libc)Backtraces::, • man backtrace. Gnulib module: execinfo Portability problems fixed by Gnulib: • This header file is missing on some platforms: musl libc, FreeBSD 9.3, NetBSD 6.1, OpenBSD 6.9, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: • On platforms where the header file is missing, the Gnulib substitute implementation is just a stub, and does nothing. 12.14 ‘fpu_control.h’ ===================== Handling of the FPU control word. Defines the ‘fpu_control_t’ type, declares the ‘__fpu_control’ variable, and defines the ‘_FPU_GETCW’, ‘_FPU_SETCW’ macros. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. 12.15 ‘fstab.h’ =============== Defines the type ‘struct fstab’, the macros ‘FSTAB_*’, ‘_PATH_FSTAB’, and declares the functions ‘setfsent’, ‘endfsent’, ‘getfsent’, ‘getfsspec’, ‘getfsfile’. Documentation: • *note The ‘fstab’ file: (libc)fstab, • man setfsent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. • The macro ‘_PATH_FSTAB’ is missing on some platforms: AIX 5.1, HP-UX 11. 12.16 ‘fts.h’ ============= Defines the types ‘FTS’, ‘FTSENT’ and the macros ‘FTS_*’, and declares the functions ‘fts_open’, ‘fts_read’, ‘fts_children’, ‘fts_set’, ‘fts_close’. Documentation: • man fts. Gnulib module: fts Portability problems fixed by Gnulib: • This header file is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, mingw, MSVC 14. Portability problems not fixed by Gnulib: 12.17 ‘getopt.h’ ================ Defines the type ‘struct option’ and declares the variables ‘optarg’, ‘optind’, ‘opterr’, ‘optopt’ and the functions ‘getopt’, ‘getopt_long’, ‘getopt_long_only’. Documentation: • *note Parsing program options using ‘getopt’: (libc)Getopt, • man getopt. Gnulib module: getopt-gnu Portability problems fixed by Gnulib: • This header file is missing on some platforms: AIX 7.2, HP-UX 11, MSVC 14. • The function ‘getopt_long’ is missing on some platforms: Solaris 9. • The function ‘getopt_long_only’ is missing on some platforms: FreeBSD 5.2.1, NetBSD 10.0, Solaris 9, mingw. • The method to reset options is incompatible on some platforms: FreeBSD 6.0, NetBSD 10.0(?), OpenBSD 6.7, Cygwin 1.5.x, mingw. • The function ‘getopt’ does not handle a leading ‘+’ character in the options string on some platforms: Solaris 11 2010-11. Portability problems not fixed by Gnulib: 12.18 ‘gshadow.h’ ================= Defines the type ‘struct sgrp’ and declares the functions ‘setsgent’, ‘endsgent’, ‘getsgent’, ‘getsgnam’, ‘sgetsgent’, ‘fgetsgent’, ‘putsgent’, ‘getsgent_r’, ‘getsgnam_r’, ‘sgetsgent_r’, ‘fgetsgent_r’. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. 12.19 ‘ieee754.h’ ================= Defines the types ‘union ieee754_float’, ‘union ieee754_double’, ‘union ieee854_long_double’. Gnulib module: — Portability problems fixed by Gnulib: • This header file is missing on all non-glibc platforms: glibc/sparc64 in 32-bit mode, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: • The substitute for this header file has not been tested for ‘long double’ and does not work on some platforms. • The substitute for this header file returns nonsense on (now-quite-rare) platforms that do not use IEEE floating point. 12.20 ‘ifaddrs.h’ ================= Defines the type ‘struct ifaddrs’ and declares the functions ‘getifaddrs’, ‘freeifaddrs’. Documentation: • . Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. 12.21 ‘libintl.h’ ================= Defines the macros ‘__USE_GNU_GETTEXT’, ‘__GNU_GETTEXT_SUPPORTED_REVISION’, and declares the functions ‘gettext’, ‘dgettext’, ‘dcgettext’, ‘ngettext’, ‘dngettext’, ‘dcngettext’, ‘textdomain’, ‘bindtextdomain’, ‘bind_textdomain_codeset’. Documentation: • *note The ‘gettext’ family of functions: (libc)Message catalogs with gettext, • *note (gettext)gettext::, Gnulib module: gettext Portability problems fixed by Gnulib, if GNU gettext is installed: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14, Android 9.0. • The functions cannot deal with GNU .mo files with system-dependent strings (of major version 1 or of minor version 1) on some non-glibc platforms: NetBSD 3.0, Solaris 10. Portability problems not fixed by Gnulib: 12.22 ‘link.h’ ============== Defines the type ‘struct dl_phdr_info’, and declares the function ‘dl_iterate_phdr’. Documentation: — Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, AIX 7.1, HP-UX 11.31, Cygwin 2.9.0, mingw, MSVC 14. 12.23 ‘malloc.h’ ================ Declares the function ‘memalign’ and functions for customizing the ‘malloc’ behavior. Documentation: • *note (libc)Unconstrained Allocation::, Gnulib module: malloc-h Portability problems fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, OpenBSD 6.7. Portability problems not fixed by Gnulib: 12.24 ‘mcheck.h’ ================ Defines the type ‘enum mcheck_status’ and declares the functions ‘mcheck’, ‘mcheck_pedantic’, ‘mcheck_check_all’, ‘mprobe’, ‘mtrace’, ‘muntrace’. Documentation: • *note (libc)Heap Consistency Checking::, Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. 12.25 ‘mntent.h’ ================ Defines the type ‘struct mntent’ and the macros ‘MNTTAB’, ‘MOUNTED’, ‘MNTTYPE_*’, ‘MNTOPT_*’, and declares the functions ‘setmntent’, ‘getmntent’, ‘getmntent_r’, ‘addmntent’, ‘endmntent’, ‘hasmntopt’. Documentation: • *note The ‘mtab’ file: (libc)mtab, • man setmntent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, mingw, MSVC 14. • The function ‘getmntent_r’ is missing on all non-glibc platforms: AIX 5.1, HP-UX 11, Cygwin, Android 9.0. Gnulib module ‘mountlist’ provides a higher-level abstraction. 12.26 ‘obstack.h’ ================= Documentation: • *note (libc)Obstacks::, Gnulib module: obstack Portability problems fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 12.27 ‘paths.h’ =============== Defines the macros ‘_PATH_*’. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11 2010-11, mingw, MSVC 14. • The set of ‘_PATH_*’ macros is platform dependent. 12.28 ‘printf.h’ ================ Defines the type ‘struct printf_info’ and the macros and enum values ‘PA_*’, and declares the functions ‘printf_function’, ‘printf_arginfo_function’, ‘register_printf_function’, ‘parse_printf_format’, ‘printf_size’, ‘printf_size_info’. Documentation: • *note (libc)Parsing a Template String::, Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. 12.29 ‘pty.h’ ============= Declares the functions ‘openpty’ and ‘forkpty’. Documentation: • *note Opening a Pseudo-Terminal Pair: (libc)Pseudo-Terminal Pairs, • man openpty. Gnulib module: pty Portability problems fixed by Gnulib: • This header file is missing on some platforms that declare the ‘forkpty’ and ‘openpty’ functions in ‘util.h’ or ‘libutil.h’ instead: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7. • This header file is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4. Portability problems not fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. 12.30 ‘resolv.h’ ================ Defines the types ‘res_sendhookact’, ‘res_send_qhook’, ‘res_send_rhook’, ‘res_state’, ‘struct res_sym’ and the macros ‘_PATH_RESCONF’, ‘RES_*’, and declares the functions ‘res_close’, ‘res_init’, ‘res_mkquery’, ‘res_query’, ‘res_querydomain’, ‘res_search’, ‘res_send’. Documentation: • man res_init. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. • The functions are missing on some platforms: HP-UX 11. 12.31 ‘shadow.h’ ================ Defines the type ‘struct spwd’ and declares the functions ‘setspent’, ‘endspent’, ‘getspent’, ‘getspent_r’, ‘getspnam’, ‘getspnam_r’, ‘sgetspent’, ‘sgetspent_r’, ‘fgetspent’, ‘fgetspent_r’, ‘putspent’, ‘lckpwdf’, ‘ulckpwdf’. Documentation: • man setspent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin, mingw, MSVC 14, Android 9.0. • The functions ‘getspent_r’, ‘getspnam_r’, ‘sgetspent_r’, ‘fgetspent’, ‘fgetspent_r’, ‘putspent’ are missing on some platforms: HP-UX 11. • The functions ‘sgetspent’, ‘sgetspent_r’ are missing on some platforms: HP-UX 11, Solaris 11.4. 12.32 ‘sys/file.h’ ================== Declares the function ‘flock’. Gnulib module: sys_file Portability problems fixed by Gnulib: • This header file is missing on some platforms: MSVC 14. Portability problems not fixed by Gnulib: • This header file does not declare the ‘flock’ function on some platforms: AIX 7.1, HP-UX 11.23, Solaris 11.4. 12.33 ‘sys/ioctl.h’ =================== Declares the function ‘ioctl’. Documentation: • *note (libc)IOCTLs::, • man ioctl. Gnulib module: sys_ioctl Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header file does not declare the ‘ioctl’ function on some platforms: AIX 5.1, Solaris 11.4, Haiku 2017. Portability problems not fixed by Gnulib: 12.34 ‘sys/random.h’ ==================== Declares the function ‘getrandom’ and the flags for it. Documentation: • *note Generating Unpredictable Bytes: (libc)Unpredictable Bytes, • man getrandom. Gnulib module: sys_random Portability problems fixed by Gnulib: • This header file is missing on some platforms: glibc 2.24, NetBSD 9.3, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.11, Cygwin 2.6.x, mingw, MSVC 14. • This header file is not self-contained on some platforms: uClibc, macOS 11.1. Portability problems not fixed by Gnulib: 12.35 ‘sysexits.h’ ================== Defines the ‘EX_*’ macros, including ‘EX_OK’. Gnulib module: sysexits Portability problems fixed by Gnulib: • This header file is missing on some platforms: mingw, MSVC 14. • This header file defines no ‘EX_*’ macros if ‘_BSD_SOURCE’ is not defined on some platforms: Haiku. • The macro ‘EX_CONFIG’ is missing on some platforms: HP-UX 11. Portability problems not fixed by Gnulib: 12.36 ‘ttyent.h’ ================ Defines the type ‘struct ttyent’ and declares the functions ‘setttyent’, ‘endttyent’, ‘getttyent’, ‘getttynam’. Documentation: • man setttyent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This header file is missing on some platforms: HP-UX 11, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. 12.37 ‘utmp.h’ ============== Defines functions for login and logout (to a tty session) and for examining the history of logins and logouts. Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man utmp. Gnulib module: utmp Portability problems fixed by Gnulib: • This header file is missing on some platforms: FreeBSD 14.0, mingw, MSVC 14. • ‘’ is a prerequisite of ‘’ on some platforms: FreeBSD 8.0, OpenBSD 7.2. Portability problems not fixed by Gnulib: • While some platforms have the ‘struct utmp’ field ‘ut_user’, older platforms have the field ‘ut_name’. • The ‘struct utmp’ fields ‘ut_id’, ‘ut_pid’, ‘ut_type’ do not exist on some platforms: macOS, old FreeBSD, NetBSD, OpenBSD, Minix. • The ‘struct utmp’ field ‘ut_host’ does not exist on some platforms: Solaris. • The ‘struct utmp’ field ‘ut_exit’ does not exist on some platforms: macOS, old FreeBSD, NetBSD, OpenBSD, Minix, Cygwin. • The ‘struct utmp’ field ‘ut_session’ does not exist on some platforms: macOS, old FreeBSD, NetBSD, OpenBSD, Minix, AIX, HP-UX, Solaris, Cygwin. • The ‘struct utmp’ field ‘ut_addr’ or ‘ut_addr_v6’ does not exist on some platforms: macOS, old FreeBSD, NetBSD, OpenBSD, Minix, AIX, Solaris. • On some platforms, this API does not support timestamps past the year 2038: glibc 2.38 on 32-bit platforms like x86 and ARM where ‘time_t’ was historically 32 bits. • On some platforms, this header misbehaves if the ‘year2038’ or ‘year2038-recommended’ modules are used and the program is configured without the ‘--disable-year2038’ option. The ‘readutmp’ module works around this problem: glibc 2.38 on 32-bit platforms like x86 and ARM where ‘time_t’ was historically 32 bits. *Note Avoiding the year 2038 problem::. 13 Glibc Function Substitutes ***************************** This chapter describes which functions and function-like macros provided as extensions by at least GNU libc are also supported by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. The notation “Gnulib module: —” means that Gnulib does not provide a module providing a substitute for the function. When the list “Portability problems not fixed by Gnulib” is empty, such a module is not needed: No portability problems are known. Otherwise, it indicates that such a module would be useful but is not available: No one so far found this function important enough to contribute a substitute for it. If you need this particular function, you may write to ‘’. This list of functions is sorted according to the header that declares them. 13.1 Glibc Extensions to ‘’ ================================== 13.1.1 ‘aio_init’ ----------------- Documentation: • *note How to optimize the AIO implementation: (libc)Configuration of AIO, • man aio_init. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.2 Glibc ‘’ ======================== 13.2.1 ‘endaliasent’ -------------------- Documentation: man endaliasent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.2.2 ‘getaliasbyname’ ----------------------- Documentation: man getaliasbyname Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.2.3 ‘getaliasbyname_r’ ------------------------- Documentation: man getaliasbyname_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.2.4 ‘getaliasent’ -------------------- Documentation: man getaliasent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.2.5 ‘getaliasent_r’ ---------------------- Documentation: man getaliasent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.2.6 ‘setaliasent’ -------------------- Documentation: man setaliasent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.3 Glibc ‘’ ===================== 13.3.1 ‘argp_err_exit_status’ ----------------------------- Documentation: *note Argp Global Variables: (libc)Argp Global Variables. Gnulib module: argp Portability problems fixed by Gnulib: • This variable is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.2 ‘argp_error’ ------------------- Documentation: *note Functions For Use in Argp Parsers: (libc)Argp Helper Functions. Gnulib module: argp Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.3 ‘argp_failure’ --------------------- Documentation: *note Functions For Use in Argp Parsers: (libc)Argp Helper Functions. Gnulib module: argp Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.4 ‘argp_help’ ------------------ Documentation: *note The argp_help Function: (libc)Argp Help. Gnulib module: argp Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.5 ‘argp_parse’ ------------------- Documentation: *note Parsing Program Options with Argp: (libc)Argp. Gnulib module: argp Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.6 ‘argp_program_bug_address’ --------------------------------- Documentation: *note Argp Global Variables: (libc)Argp Global Variables. Gnulib module: argp Portability problems fixed by Gnulib: • This variable is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.7 ‘argp_program_version’ ----------------------------- Documentation: *note Argp Global Variables: (libc)Argp Global Variables. Gnulib module: argp Portability problems fixed by Gnulib: • This variable is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.8 ‘argp_program_version_hook’ ---------------------------------- Documentation: *note Argp Global Variables: (libc)Argp Global Variables. Gnulib module: argp Portability problems fixed by Gnulib: • This variable is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.9 ‘argp_state_help’ ------------------------ Documentation: *note Functions For Use in Argp Parsers: (libc)Argp Helper Functions. Gnulib module: argp Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.3.10 ‘argp_usage’ -------------------- Documentation: *note Functions For Use in Argp Parsers: (libc)Argp Helper Functions. Gnulib module: argp Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.4 Glibc ‘’ ===================== 13.4.1 ‘argz_add’ ----------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_add. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.2 ‘argz_add_sep’ --------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_add_sep. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.3 ‘argz_append’ -------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_append. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.4 ‘argz_count’ ------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_count. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.5 ‘argz_create’ -------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_create. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.6 ‘argz_create_sep’ ------------------------ LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_create_sep. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.7 ‘argz_delete’ -------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_delete. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.8 ‘argz_extract’ --------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_extract. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.9 ‘argz_insert’ -------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_insert. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.10 ‘argz_next’ ------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_next. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.11 ‘argz_replace’ ---------------------- LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_replace. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.4.12 ‘argz_stringify’ ------------------------ LSB specification: Documentation: • *note Argz Functions: (libc)Argz Functions, • man argz_stringify. Gnulib module: argz Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. • This function is broken on some platforms: Cygwin 1.5.24. Portability problems not fixed by Gnulib: 13.5 Glibc Extensions to ‘’ ======================================== 13.5.1 ‘inet_aton’ ------------------ LSB specification: Documentation: • *note Host Address Functions: (libc)Host Address Functions, • man inet_aton. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 13.5.2 ‘inet_lnaof’ ------------------- Documentation: • *note Host Address Functions: (libc)Host Address Functions, • man inet_lnaof. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 4.4. 13.5.3 ‘inet_makeaddr’ ---------------------- Documentation: • *note Host Address Functions: (libc)Host Address Functions, • man inet_makeaddr. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.4. 13.5.4 ‘inet_net_ntop’ ---------------------- Documentation: man inet_net_ntop Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.5.5 ‘inet_net_pton’ ---------------------- Documentation: man inet_net_pton Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.5.6 ‘inet_netof’ ------------------- Documentation: • *note Host Address Functions: (libc)Host Address Functions, • man inet_netof. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.4. 13.5.7 ‘inet_network’ --------------------- Documentation: • *note Host Address Functions: (libc)Host Address Functions, • man inet_network. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 4.4. 13.5.8 ‘inet_nsap_addr’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, HP-UX 11.00, Cygwin 2.9, mingw, MSVC 14. 13.5.9 ‘inet_nsap_ntoa’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, HP-UX 11.00, Cygwin 2.9, mingw, MSVC 14. 13.6 Glibc ‘’ ========================= 13.6.1 ‘bswap_16’ ----------------- Documentation: man bswap_16 Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.6.2 ‘bswap_32’ ----------------- Documentation: man bswap_32 Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.6.3 ‘bswap_64’ ----------------- Documentation: man bswap_64 Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.7 Glibc Extensions to ‘’ ====================================== 13.7.1 ‘clog10’ --------------- LSB specification: Documentation: • *note Exponentiation and Logarithms: (libc)Exponents and Logarithms, • man clog10. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 9, Android 9.0. 13.7.2 ‘clog10f’ ---------------- LSB specification: Documentation: • *note Exponentiation and Logarithms: (libc)Exponents and Logarithms, • man clog10f. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 9, Android 9.0. 13.7.3 ‘clog10l’ ---------------- LSB specification: Documentation: • *note Exponentiation and Logarithms: (libc)Exponents and Logarithms, • man clog10l. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 9, Android 9.0. 13.8 Glibc Extensions to ‘’ ==================================== 13.8.1 ‘isctype’ ---------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.9 Glibc Extensions to ‘’ ===================================== 13.9.1 ‘getdirentries’ ---------------------- Documentation: man getdirentries Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB. The fix is to use the ‘AC_SYS_LARGEFILE’ macro. 13.9.2 ‘scandirat’ ------------------ Documentation: man scandirat Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.14, macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 1.7.10, mingw, MSVC 14, Android 6.0. 13.9.3 ‘versionsort’ -------------------- Documentation: • *note Scanning the Content of a Directory: (libc)Scanning Directory Content, • man versionsort. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 13.10 Glibc Extensions to ‘’ ===================================== 13.10.1 ‘dladdr’ ---------------- LSB specification: Documentation: man dladdr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 1.7.x, mingw, MSVC 14. 13.10.2 ‘dladdr1’ ----------------- Documentation: man dladdr1 Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.10.3 ‘dlinfo’ ---------------- Documentation: man dlinfo Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.10.4 ‘dlmopen’ ----------------- Documentation: man dlmopen Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.10.5 ‘dlvsym’ ---------------- LSB specification: Documentation: man dlvsym Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. 13.11 Glibc ‘’ ====================== 13.11.1 ‘envz_add’ ------------------ LSB specification: Documentation: • *note Envz Functions: (libc)Envz Functions, • man envz_add. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.11.2 ‘envz_entry’ -------------------- LSB specification: Documentation: • *note Envz Functions: (libc)Envz Functions, • man envz_entry. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.11.3 ‘envz_get’ ------------------ LSB specification: Documentation: • *note Envz Functions: (libc)Envz Functions, • man envz_get. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.11.4 ‘envz_merge’ -------------------- LSB specification: Documentation: • *note Envz Functions: (libc)Envz Functions, • man envz_merge. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.11.5 ‘envz_remove’ --------------------- LSB specification: Documentation: • *note Envz Functions: (libc)Envz Functions, • man envz_remove. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.11.6 ‘envz_strip’ -------------------- LSB specification: Documentation: • *note Envz Functions: (libc)Envz Functions, • man envz_strip. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.12 Glibc ‘’ ===================== 13.12.1 ‘err’ ------------- LSB specification: Documentation: • *note Error Messages: (libc)Error Messages, • man err. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 13.12.2 ‘errx’ -------------- LSB specification: Documentation: • *note Error Messages: (libc)Error Messages, • man errx. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 13.12.3 ‘verr’ -------------- Documentation: • *note Error Messages: (libc)Error Messages, • man verr. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 13.12.4 ‘verrx’ --------------- LSB specification: Documentation: • *note Error Messages: (libc)Error Messages, • man verrx. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 13.12.5 ‘vwarn’ --------------- Documentation: • *note Error Messages: (libc)Error Messages, • man vwarn. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 13.12.6 ‘vwarnx’ ---------------- Documentation: • *note Error Messages: (libc)Error Messages, • man vwarnx. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 13.12.7 ‘warn’ -------------- LSB specification: Documentation: • *note Error Messages: (libc)Error Messages, • man warn. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 13.12.8 ‘warnx’ --------------- LSB specification: Documentation: • *note Error Messages: (libc)Error Messages, • man warnx. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. 13.13 Glibc Extensions to ‘’ ===================================== 13.13.1 ‘program_invocation_name’ --------------------------------- Documentation: • *note Error Messages: (libc)Error Messages, • man program_invocation_name. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 9.0. 13.13.2 ‘program_invocation_short_name’ --------------------------------------- Documentation: • *note Error Messages: (libc)Error Messages, • man program_invocation_short_name. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 9.0. 13.14 Glibc ‘’ ======================= 13.14.1 ‘error’ --------------- LSB specification: Documentation: • *note Error Messages: (libc)Error Messages, • man error. Gnulib module: error Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. • This function outputs an extra space if ‘error_print_progname’ is set, on some platforms: Android 11. Portability problems not fixed by Gnulib: 13.14.2 ‘error_at_line’ ----------------------- Documentation: • *note Error Messages: (libc)Error Messages, • man error_at_line. Gnulib module: error Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. Portability problems not fixed by Gnulib: 13.14.3 ‘error_message_count’ ----------------------------- Documentation: • *note Error Messages: (libc)Error Messages, • man error_message_count. Gnulib module: error Portability problems fixed by Gnulib: • This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. Portability problems not fixed by Gnulib: 13.14.4 ‘error_one_per_line’ ---------------------------- Documentation: • *note Error Messages: (libc)Error Messages, • man error_one_per_line. Gnulib module: error Portability problems fixed by Gnulib: • This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. Portability problems not fixed by Gnulib: 13.14.5 ‘error_print_progname’ ------------------------------ Documentation: man error_print_progname Gnulib module: error Portability problems fixed by Gnulib: • This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. Portability problems not fixed by Gnulib: 13.15 Glibc ‘’ ========================== 13.15.1 ‘backtrace’ ------------------- LSB specification: Documentation: • *note Backtraces: (libc)Backtraces, • man backtrace. Gnulib module: execinfo Portability problems fixed by Gnulib: • This function is missing on many platforms: musl libc, FreeBSD 9.3, NetBSD 6.1, OpenBSD 6.9, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android API level 32. Portability problems not fixed by Gnulib: • The second argument is of type ‘size_t’, not ‘int’, on some platforms: FreeBSD, NetBSD, OpenBSD. • The return value may be ‘(size_t)(-1)’ instead of 0 on some platforms: FreeBSD 12.4/i386. • The returned stack trace is empty if it would not entirely fit into the provided buffer on some platforms: FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5. • The returned stack trace is always empty on some platforms: FreeBSD 11.0/i386, FreeBSD 12.2/sparc64. • On platforms where the function is missing, the Gnulib substitute implementation is just a stub, and does nothing. 13.15.2 ‘backtrace_symbols’ --------------------------- LSB specification: Documentation: • *note Backtraces: (libc)Backtraces, • man backtrace_symbols. Gnulib module: execinfo Portability problems fixed by Gnulib: • This function is missing on many platforms: musl libc, FreeBSD 9.3, NetBSD 6.1, OpenBSD 6.9, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android API level 32. Portability problems not fixed by Gnulib: • The second argument is of type ‘size_t’, not ‘int’, on some platforms: FreeBSD, NetBSD, OpenBSD. • On platforms where the function is missing, the Gnulib substitute implementation is just a stub, and does nothing. 13.15.3 ‘backtrace_symbols_fd’ ------------------------------ LSB specification: Documentation: • *note Backtraces: (libc)Backtraces, • man backtrace_symbols_fd. Gnulib module: execinfo Portability problems fixed by Gnulib: • This function is missing on many platforms: musl libc, FreeBSD 9.3, NetBSD 6.1, OpenBSD 6.9, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android API level 32. Portability problems not fixed by Gnulib: • The second argument is of type ‘size_t’, not ‘int’, on some platforms: FreeBSD, NetBSD, OpenBSD. • The strings printed by this function not the same as the strings returned by ‘backtrace_symbols’ on some platforms: glibc 2.39. • On platforms where the function is missing, the Gnulib substitute implementation is just a stub, and does nothing. 13.16 Glibc Extensions to ‘’ ===================================== 13.16.1 ‘fallocate’ ------------------- Documentation: man fallocate Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 3.4.6, mingw, MSVC 14, Android 4.4. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly across the entire data range of files larger than 2 GB. The fix is to use the ‘AC_SYS_LARGEFILE’ macro. 13.16.2 ‘name_to_handle_at’ --------------------------- Documentation: man name_to_handle_at Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.16.3 ‘readahead’ ------------------- Documentation: man readahead Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.0.4. 13.16.4 ‘open_by_handle_at’ --------------------------- Documentation: man open_by_handle_at Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.16.5 ‘sync_file_range’ ------------------------- Documentation: man sync_file_range Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.5, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.17 Glibc Extensions to ‘’ ==================================== 13.17.1 ‘fedisableexcept’ ------------------------- LSB specification: Documentation: • *note Floating-Point Control Functions: (libc)Control Functions, • man fedisableexcept. Gnulib module: fenv-exceptions-trapping Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, musl libc, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 4.4. Portability problems not fixed by Gnulib: 13.17.2 ‘feenableexcept’ ------------------------ LSB specification: Documentation: • *note Floating-Point Control Functions: (libc)Control Functions, • man feenableexcept. Gnulib module: fenv-exceptions-trapping Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, musl libc, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 4.4. • This function does not detect failures on glibc 2.19/aarch64, FreeBSD 12.2/arm, FreeBSD 12.2/arm64, NetBSD 10.0/arm64. Portability problems not fixed by Gnulib: • The resulting signal is ‘SIGILL’ instead of ‘SIGFPE’ on some platforms: Linux/hppa, macOS 12.5/arm64. 13.17.3 ‘fegetexcept’ --------------------- LSB specification: Documentation: • *note Floating-Point Control Functions: (libc)Control Functions, • man fegetexcept. Gnulib module: fenv-exceptions-trapping Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, musl libc, FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 4.4. Portability problems not fixed by Gnulib: 13.18 Glibc Extensions to ‘’ ====================================== 13.18.1 ‘addseverity’ --------------------- Documentation: • *note Adding Severity Classes: (libc)Adding Severity Classes, • man addseverity. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.19 Glibc ‘’ ======================= 13.19.1 ‘endfsent’ ------------------ Documentation: • *note The fstab file: (libc)fstab, • man endfsent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.19.2 ‘getfsent’ ------------------ Documentation: • *note The fstab file: (libc)fstab, • man getfsent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.19.3 ‘getfsfile’ ------------------- Documentation: • *note The fstab file: (libc)fstab, • man getfsfile. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.19.4 ‘getfsspec’ ------------------- Documentation: • *note The fstab file: (libc)fstab, • man getfsspec. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.19.5 ‘setfsent’ ------------------ Documentation: • *note The fstab file: (libc)fstab, • man setfsent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.20 Glibc ‘’ ===================== 13.20.1 ‘fts_children’ ---------------------- Documentation: man fts_children Gnulib module: fts Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, mingw, MSVC 14. Portability problems not fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not correctly report the size of files or block devices larger than 2 GB and may not work correctly on huge directories larger than 2 GB. Also, on platforms where ‘ino_t’ is a 32-bit type, this function may report inode numbers incorrectly. The fix is to use the ‘AC_SYS_LARGEFILE’ macro (only on Mac OS X systems). 13.20.2 ‘fts_close’ ------------------- Documentation: man fts_close Gnulib module: fts Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, mingw, MSVC 14. Portability problems not fixed by Gnulib: 13.20.3 ‘fts_open’ ------------------ Documentation: man fts_open Gnulib module: fts Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, mingw, MSVC 14. Portability problems not fixed by Gnulib: 13.20.4 ‘fts_read’ ------------------ Documentation: man fts_read Gnulib module: fts Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, mingw, MSVC 14. Portability problems not fixed by Gnulib: • On platforms where ‘off_t’ is a 32-bit type, this function may not correctly report the size of files or block devices larger than 2 GB and may not work correctly on huge directories larger than 2 GB. Also, on platforms where ‘ino_t’ is a 32-bit type, this function may report inode numbers incorrectly. The fix is to use the ‘AC_SYS_LARGEFILE’ macro (only on Mac OS X systems). 13.20.5 ‘fts_set’ ----------------- Documentation: man fts_set Gnulib module: fts Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, mingw, MSVC 14. Portability problems not fixed by Gnulib: 13.21 Glibc ‘’ ======================== 13.21.1 ‘getopt_long’ --------------------- LSB specification: Documentation: • *note Parsing Long Options with getopt_long: (libc)Getopt Long Options, • man getopt_long. Gnulib module: getopt-gnu Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, MSVC 14. • The function ‘getopt_long’ does not obey the combination of ‘+’ and ‘:’ flags in the options string on some platforms: glibc 2.11. • The use of ‘W;’ in the optstring argument to does not always allow ‘-W foo’ to behave synonymously with ‘--foo’: glibc 2.11. • The function ‘getopt_long’ does not support the ‘+’ flag in the options string on some platforms: macOS 11.1, AIX 5.2, Solaris 10. • The value of ‘optind’ after a missing required argument is wrong on some platforms: macOS 11.1. • The function ‘getopt_long’ does not obey the ‘-’ flag in the options string when ‘POSIXLY_CORRECT’ is set on some platforms: Cygwin 1.7.0. • Some implementations fail to reset state, including re-checking ‘POSIXLY_CORRECT’, when ‘optind’ is set to ‘0’: NetBSD, Cygwin 1.7.0. • The function ‘getopt_long’ does not support options with optional arguments on some platforms: macOS 11.1, OpenBSD 4.0, AIX 5.2, Solaris 11 2010-11, Cygwin 1.5.x. • This function crashes if the option string includes ‘W;’ but there are no long options, on some platforms: glibc 2.14. Portability problems not fixed by Gnulib: 13.21.2 ‘getopt_long_only’ -------------------------- LSB specification: Documentation: • *note Parsing Long Options with getopt_long: (libc)Getopt Long Options, • man getopt_long_only. Gnulib module: getopt-gnu Portability problems fixed by Gnulib: • The function ‘getopt_long_only’ does not obey the combination of ‘+’ and ‘:’ flags in the options string on some platforms: glibc 2.11. • The use of ‘W;’ in the optstring argument to does not always allow ‘-W foo’ to behave synonymously with ‘--foo’: glibc 2.11. • The function ‘getopt_long_only’ does not support the ‘+’ flag in the options string on some platforms: macOS 11.1, AIX 5.2, Solaris 10. • The value of ‘optind’ after a missing required argument is wrong on some platforms: macOS 11.1. • The function ‘getopt_long_only’ does not obey the ‘-’ flag in the options string when ‘POSIXLY_CORRECT’ is set on some platforms: Cygwin 1.7.0. • Some implementations fail to reset state, including re-checking ‘POSIXLY_CORRECT’, when ‘optind’ is set to ‘0’: NetBSD, Cygwin 1.7.0. • The function ‘getopt_long_only’ does not support options with optional arguments on some platforms: macOS 11.1, OpenBSD 4.0, AIX 5.2, Solaris 11 2010-11, Cygwin 1.5.x. • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 10.0, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. • This function crashes if the option string includes ‘W;’ but there are no long options, on some platforms: glibc 2.14. Portability problems not fixed by Gnulib: • Some implementations return success instead of reporting an ambiguity if user’s option is a prefix of two long options with the same outcome: FreeBSD. • The GNU Coding Standards discourage the use of ‘getopt_long_only’ in new programs. 13.22 Glibc Extensions to ‘’ ==================================== 13.22.1 ‘glob_pattern_p’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on most non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.23 Glibc Extensions to ‘’ ================================================ 13.23.1 ‘gnu_get_libc_release’ ------------------------------ LSB specification: Documentation: man gnu_get_libc_release Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.23.2 ‘gnu_get_libc_version’ ------------------------------ LSB specification: Documentation: man gnu_get_libc_version Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.24 Glibc Extensions to ‘’ =================================== 13.24.1 ‘fgetgrent’ ------------------- Documentation: • *note Scanning the List of All Groups: (libc)Scanning All Groups, • man fgetgrent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.24.2 ‘fgetgrent_r’ --------------------- Documentation: • *note Scanning the List of All Groups: (libc)Scanning All Groups, • man fgetgrent_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.24.3 ‘getgrent_r’ -------------------- LSB specification: Documentation: • *note Scanning the List of All Groups: (libc)Scanning All Groups, • man getgrent_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.24.4 ‘getgrouplist’ ---------------------- LSB specification: Documentation: • *note Setting the Group IDs: (libc)Setting Groups, • man getgrouplist. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function takes ‘int’ instead of ‘gid_t’ parameters on some platforms: OS X 10.11. • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.0, Cygwin 1.7.9, mingw, MSVC 14. The Gnulib module ‘getugroups’ provides a similar API. 13.24.5 ‘initgroups’ -------------------- LSB specification: Documentation: • *note Setting the Group IDs: (libc)Setting Groups, • man initgroups. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is unsafe to call between ‘fork’ and ‘exec’ if the parent process is multi-threaded. Instead, use ‘getgroups’ or ‘getgrouplist’ (or use the gnulib module ‘mgetgroups’) before forking, and ‘setgroups’ in the child. • This function is missing on some platforms: mingw, MSVC 14. 13.24.6 ‘putgrent’ ------------------ Documentation: man putgrent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.24.7 ‘setgroups’ ------------------- LSB specification: Documentation: • *note Setting the Group IDs: (libc)Setting Groups, • man setgroups. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, mingw, MSVC 14. • On very old systems, this function operated on an array of ‘int’, even though that was a different size than an array of ‘gid_t’; you can use autoconf’s AC_TYPE_GETGROUPS to set ‘GETGROUPS_T’ to the appropriate size (since ‘getgroups’ and ‘setgroups’ share the same bug). 13.25 Glibc ‘’ ========================= 13.25.1 ‘endsgent’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.2 ‘fgetsgent’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.3 ‘fgetsgent_r’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.4 ‘getsgent’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.5 ‘getsgent_r’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.6 ‘getsgnam’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.7 ‘getsgnam_r’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.8 ‘putsgent’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.9 ‘setsgent’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.10 ‘sgetsgent’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.25.11 ‘sgetsgent_r’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.26 Glibc ‘’ ========================= 13.26.1 ‘getifaddrs’ -------------------- LSB specification: Documentation: man getifaddrs Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. 13.26.2 ‘freeifaddrs’ --------------------- Documentation: man freeifaddrs Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. 13.27 Glibc ‘’ ========================= 13.27.1 ‘bind_textdomain_codeset’ --------------------------------- LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note How to specify the output character set gettext uses: (libc)Charset conversion in gettext, • man bind_textdomain_codeset. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.27.2 ‘bindtextdomain’ ------------------------ LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note How to determine which catalog to be used: (libc)Locating gettext catalog, • man bindtextdomain. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.27.3 ‘dcgettext’ ------------------- LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note What has to be done to translate a message?: (libc)Translation with gettext, • man dcgettext. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.27.4 ‘dcngettext’ -------------------- LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note Additional functions for more complicated situations: (libc)Advanced gettext functions, • man dcngettext. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.27.5 ‘dgettext’ ------------------ LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note What has to be done to translate a message?: (libc)Translation with gettext, • man dgettext. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.27.6 ‘dngettext’ ------------------- LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note Additional functions for more complicated situations: (libc)Advanced gettext functions, • man dngettext. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.27.7 ‘gettext’ ----------------- LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note What has to be done to translate a message?: (libc)Translation with gettext, • man gettext. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.27.8 ‘ngettext’ ------------------ LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note Additional functions for more complicated situations: (libc)Advanced gettext functions, • man ngettext. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.27.9 ‘textdomain’ -------------------- LSB specification: Specified in POSIX.1-2024. Draft specification: Documentation: • *note How to determine which catalog to be used: (libc)Locating gettext catalog, • man textdomain. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.28 Glibc ‘’ ====================== 13.28.1 ‘dl_iterate_phdr’ ------------------------- LSB specification: Documentation: man dl_iterate_phdr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 4.4. 13.29 Glibc ‘’ ======================== 13.29.1 ‘mallinfo’ ------------------ Documentation: • *note Statistics for Memory Allocation with malloc: (libc)Statistics of Malloc, • man mallinfo. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11 2010-11, mingw, MSVC 14. 13.29.2 ‘mallinfo2’ ------------------- Documentation: • *note Statistics for Memory Allocation with malloc: (libc)Statistics of Malloc, • man mallinfo2. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.32, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.29.3 ‘malloc_info’ --------------------- Documentation: man malloc_info Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. 13.29.4 ‘malloc_stats’ ---------------------- Documentation: man malloc_stats Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.29.5 ‘malloc_trim’ --------------------- Documentation: man malloc_trim Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.29.6 ‘malloc_usable_size’ ---------------------------- Documentation: man malloc_usable_size Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.00, Solaris 11.4, mingw, MSVC 14, Android 4.1. 13.29.7 ‘mallopt’ ----------------- Documentation: • *note Malloc Tunable Parameters: (libc)Malloc Tunable Parameters, • man mallopt. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11 2010-11, mingw, MSVC 14, Android 7.1. 13.29.8 ‘memalign’ ------------------ Documentation: • *note Allocating Aligned Memory Blocks: (libc)Aligned Memory Blocks, • man memalign. Gnulib module: memalign Portability problems fixed by Gnulib: • This function is declared in ‘’ instead of ‘’ on some platforms: Solaris 11. • This function doesn’t accept an alignment of 1 or 2 on some platforms: Solaris 11. Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.00, mingw, MSVC 14. The Gnulib module ‘aligned-malloc’ provides functions for allocating and freeing blocks of suitably aligned memory. 13.29.9 ‘pvalloc’ ----------------- Documentation: man pvalloc Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.30 Glibc Extensions to ‘’ ==================================== 13.30.1 ‘drem’ -------------- LSB specification: Documentation: • *note Remainder Functions: (libc)Remainder Functions, • man drem. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, mingw, MSVC 14. 13.30.2 ‘dremf’ --------------- LSB specification: Documentation: • *note Remainder Functions: (libc)Remainder Functions, • man dremf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14. 13.30.3 ‘dreml’ --------------- LSB specification: Documentation: • *note Remainder Functions: (libc)Remainder Functions, • man dreml. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 13.30.4 ‘exp10’ --------------- LSB specification: Documentation: • *note Exponentiation and Logarithms: (libc)Exponents and Logarithms, • man exp10. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.30.5 ‘exp10f’ ---------------- LSB specification: Documentation: • *note Exponentiation and Logarithms: (libc)Exponents and Logarithms, • man exp10f. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.30.6 ‘exp10l’ ---------------- LSB specification: Documentation: • *note Exponentiation and Logarithms: (libc)Exponents and Logarithms, • man exp10l. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 13.30.7 ‘finite’ ---------------- LSB specification: Documentation: • *note Floating-Point Number Classification Functions: (libc)Floating Point Classes, • man finite. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, MSVC 14. 13.30.8 ‘finitef’ ----------------- LSB specification: Documentation: • *note Floating-Point Number Classification Functions: (libc)Floating Point Classes, • man finitef. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14. 13.30.9 ‘finitel’ ----------------- LSB specification: Documentation: • *note Floating-Point Number Classification Functions: (libc)Floating Point Classes, • man finitel. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 13.30.10 ‘gamma’ ---------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man gamma. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 13.30.11 ‘gammaf’ ----------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man gammaf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.12 ‘gammal’ ----------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man gammal. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.30.13 ‘isinff’ ----------------- Documentation: • *note Floating-Point Number Classification Functions: (libc)Floating Point Classes, • man isinff. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 4.4. • This function is not declared on some platforms: Android 9.0. 13.30.14 ‘isinfl’ ----------------- Documentation: • *note Floating-Point Number Classification Functions: (libc)Floating Point Classes, • man isinfl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • This function is not declared on some platforms: Android 9.0. 13.30.15 ‘isnanf’ ----------------- Documentation: • *note Floating-Point Number Classification Functions: (libc)Floating Point Classes, • man isnanf. Gnulib module: isnanf Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, MSVC 14. Portability problems not fixed by Gnulib: 13.30.16 ‘isnanl’ ----------------- Documentation: • *note Floating-Point Number Classification Functions: (libc)Floating Point Classes, • man isnanl. Gnulib module: isnanl Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.x, MSVC 14, Android 4.4. • This function is not declared on some platforms: Android 9.0. Portability problems not fixed by Gnulib: 13.30.17 ‘j0f’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man j0f. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.18 ‘j0l’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man j0l. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.30.19 ‘j1f’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man j1f. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.20 ‘j1l’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man j1l. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.30.21 ‘jnf’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man jnf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.22 ‘jnl’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man jnl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.30.23 ‘lgamma_r’ ------------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man lgamma_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5 x86, Minix 3.1.8, mingw, MSVC 14. 13.30.24 ‘lgammaf_r’ -------------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man lgammaf_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.25 ‘lgammal_r’ -------------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man lgammal_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. 13.30.26 ‘matherr’ ------------------ LSB specification: Documentation: man matherr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14, Android 9.0. 13.30.27 ‘pow10’ ---------------- LSB specification: Documentation: man pow10 Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.30.28 ‘pow10f’ ----------------- LSB specification: Documentation: man pow10f Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.30.29 ‘pow10l’ ----------------- LSB specification: Documentation: man pow10l Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 13.30.30 ‘scalbf’ ----------------- LSB specification: Documentation: • *note Normalization Functions: (libc)Normalization Functions, • man scalbf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.31 ‘scalbl’ ----------------- LSB specification: Documentation: • *note Normalization Functions: (libc)Normalization Functions, • man scalbl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 13.30.32 ‘significand’ ---------------------- LSB specification: Documentation: • *note Normalization Functions: (libc)Normalization Functions, • man significand. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.33 ‘significandf’ ----------------------- LSB specification: Documentation: • *note Normalization Functions: (libc)Normalization Functions, • man significandf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.34 ‘significandl’ ----------------------- LSB specification: Documentation: • *note Normalization Functions: (libc)Normalization Functions, • man significandl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14. 13.30.35 ‘sincos’ ----------------- LSB specification: Documentation: • *note Trigonometric Functions: (libc)Trig Functions, • man sincos. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 11.0, NetBSD 9.3, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.36 ‘sincosf’ ------------------ LSB specification: Documentation: • *note Trigonometric Functions: (libc)Trig Functions, • man sincosf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 11.0, NetBSD 9.3, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.37 ‘sincosl’ ------------------ LSB specification: Documentation: • *note Trigonometric Functions: (libc)Trig Functions, • man sincosl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 11.0, NetBSD 9.3, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.x, mingw, MSVC 14. 13.30.38 ‘y0f’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man y0f. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.39 ‘y0l’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man y0l. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.30.40 ‘y1f’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man y1f. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.41 ‘y1l’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man y1l. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.30.42 ‘ynf’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man ynf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.30.43 ‘ynl’ -------------- LSB specification: Documentation: • *note Special Functions: (libc)Special Functions, • man ynl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.31 Glibc ‘’ ======================== 13.31.1 ‘mcheck’ ---------------- Documentation: • *note Heap Consistency Checking: (libc)Heap Consistency Checking, • man mcheck. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.31.2 ‘mcheck_check_all’ -------------------------- Documentation: man mcheck_check_all Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.31.3 ‘mcheck_pedantic’ ------------------------- Documentation: man mcheck_pedantic Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.31.4 ‘mprobe’ ---------------- Documentation: • *note Heap Consistency Checking: (libc)Heap Consistency Checking, • man mprobe. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.31.5 ‘mtrace’ ---------------- Documentation: • *note How to install the tracing functionality: (libc)Tracing malloc, • man mtrace. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.31.6 ‘muntrace’ ------------------ Documentation: • *note How to install the tracing functionality: (libc)Tracing malloc, • man muntrace. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.32 Glibc ‘’ ======================== 13.32.1 ‘addmntent’ ------------------- Documentation: • *note The mtab file: (libc)mtab, • man addmntent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.32.2 ‘endmntent’ ------------------- Documentation: • *note The mtab file: (libc)mtab, • man endmntent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, mingw, MSVC 14, Android 4.4. 13.32.3 ‘getmntent’ ------------------- Documentation: • *note The mtab file: (libc)mtab, • man getmntent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 13.32.4 ‘getmntent_r’ --------------------- Documentation: • *note The mtab file: (libc)mtab, • man getmntent_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 13.32.5 ‘hasmntopt’ ------------------- Documentation: • *note The mtab file: (libc)mtab, • man hasmntopt. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 7.1. 13.32.6 ‘setmntent’ ------------------- Documentation: • *note The mtab file: (libc)mtab, • man setmntent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, mingw, MSVC 14, Android 4.4. 13.33 Glibc Extensions to ‘’ ===================================== 13.33.1 ‘endnetgrent’ --------------------- Documentation: • *note Looking up one Netgroup: (libc)Lookup Netgroup, • man endnetgrent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.2 ‘gethostbyaddr_r’ ------------------------- LSB specification: Documentation: • *note Host Names: (libc)Host Names, • man gethostbyaddr_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 5.1. 13.33.3 ‘gethostbyname2’ ------------------------ LSB specification: Documentation: • *note Host Names: (libc)Host Names, • man gethostbyname2. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. 13.33.4 ‘gethostbyname2_r’ -------------------------- LSB specification: Documentation: • *note Host Names: (libc)Host Names, • man gethostbyname2_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. 13.33.5 ‘gethostbyname_r’ ------------------------- LSB specification: Documentation: • *note Host Names: (libc)Host Names, • man gethostbyname_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14. 13.33.6 ‘gethostent_r’ ---------------------- Documentation: man gethostent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.7 ‘getnetbyaddr_r’ ------------------------ Documentation: man getnetbyaddr_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.8 ‘getnetbyname_r’ ------------------------ Documentation: man getnetbyname_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.9 ‘getnetent_r’ --------------------- Documentation: man getnetent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.10 ‘getnetgrent’ ---------------------- Documentation: • *note Looking up one Netgroup: (libc)Lookup Netgroup, • man getnetgrent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.11 ‘getnetgrent_r’ ------------------------ Documentation: • *note Looking up one Netgroup: (libc)Lookup Netgroup, • man getnetgrent_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.12 ‘getprotobyname_r’ --------------------------- LSB specification: Documentation: man getprotobyname_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.13 ‘getprotobynumber_r’ ----------------------------- LSB specification: Documentation: man getprotobynumber_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.14 ‘getprotoent_r’ ------------------------ LSB specification: Documentation: man getprotoent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.15 ‘getservbyname_r’ -------------------------- LSB specification: Documentation: man getservbyname_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.16 ‘getservbyport_r’ -------------------------- LSB specification: Documentation: man getservbyport_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.17 ‘getservent_r’ ----------------------- LSB specification: Documentation: man getservent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.18 ‘herror’ ----------------- Documentation: man herror Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 13.33.19 ‘hstrerror’ -------------------- Documentation: man hstrerror Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, mingw, MSVC 14. 13.33.20 ‘innetgr’ ------------------ Documentation: • *note Testing for Netgroup Membership: (libc)Netgroup Membership, • man innetgr. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.21 ‘rcmd’ --------------- Documentation: man rcmd Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. 13.33.22 ‘rcmd_af’ ------------------ Documentation: man rcmd_af Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.11, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.33.23 ‘rexec’ ---------------- Documentation: man rexec Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 13.33.24 ‘rexec_af’ ------------------- Documentation: man rexec_af Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.25 ‘rresvport’ -------------------- Documentation: man rresvport Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. 13.33.26 ‘rresvport_af’ ----------------------- Documentation: man rresvport_af Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.11, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.33.27 ‘ruserok’ ------------------ Documentation: man ruserok Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. 13.33.28 ‘ruserok_af’ --------------------- Documentation: man ruserok_af Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.33.29 ‘setnetgrent’ ---------------------- Documentation: • *note Looking up one Netgroup: (libc)Lookup Netgroup, • man setnetgrent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.34 Glibc ‘’ =============================== 13.34.1 ‘ether_aton’ -------------------- Documentation: man ether_aton Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 2.3. 13.34.2 ‘ether_aton_r’ ---------------------- Documentation: man ether_aton_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 2.3. 13.34.3 ‘ether_hostton’ ----------------------- Documentation: man ether_hostton Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.34.4 ‘ether_line’ -------------------- Documentation: man ether_line Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.34.5 ‘ether_ntoa’ -------------------- Documentation: man ether_ntoa Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 2.3. 13.34.6 ‘ether_ntoa_r’ ---------------------- Documentation: man ether_ntoa_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 2.3. 13.34.7 ‘ether_ntohost’ ----------------------- Documentation: man ether_ntohost Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35 Glibc Extensions to ‘’ ========================================== 13.35.1 ‘bindresvport’ ---------------------- LSB specification: Documentation: man bindresvport Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. 13.35.2 ‘getipv4sourcefilter’ ----------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.3 ‘getsourcefilter’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.4 ‘in6addr_any’ --------------------- Documentation: *note Host Address Data Type: (libc)Host Address Data Type. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This constant is missing on some platforms: macOS 10.13, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. 13.35.5 ‘in6addr_loopback’ -------------------------- Documentation: *note Host Address Data Type: (libc)Host Address Data Type. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This constant is missing on some platforms: macOS 10.13, Minix 3.1.8, HP-UX 11.00, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. 13.35.6 ‘inet6_option_alloc’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.7 ‘inet6_option_append’ ----------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.8 ‘inet6_option_find’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.9 ‘inet6_option_init’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.10 ‘inet6_option_next’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.11 ‘inet6_option_space’ ----------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.12 ‘inet6_opt_append’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.13 ‘inet6_opt_find’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.14 ‘inet6_opt_finish’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.15 ‘inet6_opt_get_val’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.16 ‘inet6_opt_init’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.17 ‘inet6_opt_next’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.18 ‘inet6_opt_set_val’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.19 ‘inet6_rth_add’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.20 ‘inet6_rth_getaddr’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.21 ‘inet6_rth_init’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.22 ‘inet6_rth_reverse’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.23 ‘inet6_rth_segments’ ----------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.24 ‘inet6_rth_space’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.25 ‘setipv4sourcefilter’ ------------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.35.26 ‘setsourcefilter’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.36 Glibc ‘’ ========================= 13.36.1 ‘obstack_alloc_failed_handler’ -------------------------------------- Documentation: *note Preparing for Using Obstacks: (libc)Preparing for Obstacks. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.36.2 ‘obstack_exit_failure’ ------------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.36.3 ‘obstack_free’ ---------------------- Documentation: *note Freeing Objects in an Obstack: (libc)Freeing Obstack Objects. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.36.4 ‘obstack_printf’ ------------------------ Documentation: *note Dynamically Allocating Formatted Output: (libc)Dynamic Output. Gnulib module: obstack-printf or obstack-printf-posix or obstack-printf-gnu Portability problems fixed by either Gnulib module ‘obstack-printf’ or ‘obstack-printf-posix’ or ‘obstack-printf-gnu’: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems fixed by either Gnulib module ‘obstack-printf-posix’ or ‘obstack-printf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.0, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 6.1. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.0, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: Solaris 10/x86, mingw, MSVC/clang. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. Portability problems fixed by Gnulib module ‘obstack-printf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘obstack-printf-posix’ or ‘obstack-printf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: MSVC 14. • This function does not fully support the ‘n’ directive on some platforms: HP-UX 11, mingw, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. 13.36.5 ‘obstack_vprintf’ ------------------------- Documentation: *note Variable Arguments Output Functions: (libc)Variable Arguments Output. Gnulib module: obstack-printf or obstack-printf-posix or obstack-printf-gnu Portability problems fixed by either Gnulib module ‘obstack-printf’ or ‘obstack-printf-posix’ or ‘obstack-printf-gnu’: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems fixed by either Gnulib module ‘obstack-printf-posix’ or ‘obstack-printf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9. • printf of ‘long double’ numbers is unsupported on some platforms: mingw, MSVC 14. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.0, mingw, MSVC 14. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, NetBSD 10.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0, mingw, MSVC 14. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 6.1. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, Solaris 11.0, Cygwin 1.5.x, mingw, MSVC/clang. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: Solaris 10/x86, mingw, MSVC/clang. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. Portability problems fixed by Gnulib module ‘obstack-printf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems fixed by either Gnulib module ‘obstack-printf-posix’ or ‘obstack-printf-gnu’ and additionally the Gnulib module ‘printf-with-n-directive’: • This function does not support the ‘n’ directive on some platforms: MSVC 14. • This function does not fully support the ‘n’ directive on some platforms: HP-UX 11, mingw, MSVC 14. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. 13.37 Glibc Extensions to ‘’ ==================================== 13.37.1 ‘ppoll’ --------------- Documentation: man ppoll Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 6.4, NetBSD 9.3, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 10, Cygwin 1.7.x, mingw, MSVC 14, Android 4.3. 13.38 Glibc ‘’ ======================== 13.38.1 ‘parse_printf_format’ ----------------------------- Documentation: *note Parsing a Template String: (libc)Parsing a Template String. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.38.2 ‘printf_size’ --------------------- Documentation: *note Predefined printf Handlers: (libc)Predefined Printf Handlers. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.38.3 ‘printf_size_info’ -------------------------- Documentation: *note Predefined printf Handlers: (libc)Predefined Printf Handlers. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.38.4 ‘register_printf_function’ ---------------------------------- Documentation: *note Registering New Conversions: (libc)Registering New Conversions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.38.5 ‘register_printf_modifier’ ---------------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.38.6 ‘register_printf_specifier’ ----------------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.38.7 ‘register_printf_type’ ------------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.39 Glibc Extensions to ‘’ ======================================= 13.39.1 ‘pthread_attr_getaffinity_np’ ------------------------------------- Documentation: man pthread_attr_getaffinity_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.3.3. 13.39.2 ‘pthread_attr_setaffinity_np’ ------------------------------------- Documentation: man pthread_attr_setaffinity_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.3.3. 13.39.3 ‘pthread_attr_getsigmask_np’ ------------------------------------ Documentation: *note Controlling the Initial Signal Mask of a New Thread: (libc)Initial Thread Signal Mask. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.39.4 ‘pthread_attr_setsigmask_np’ ------------------------------------ Documentation: *note Controlling the Initial Signal Mask of a New Thread: (libc)Initial Thread Signal Mask. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.39.5 ‘pthread_clockjoin_np’ ------------------------------ Documentation: • *note Setting Process-wide defaults for thread attributes: (libc)Default Thread Attributes. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.39.6 ‘pthread_cond_clockwait’ -------------------------------- Specified in POSIX.1-2024. Draft specification: Documentation: • *note Non-POSIX Extensions: (libc)Non-POSIX Extensions, Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 29. 13.39.7 ‘pthread_getaffinity_np’ -------------------------------- Documentation: man pthread_getaffinity_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.3.3. • The third parameter has a different type on some platforms: FreeBSD 14.0, NetBSD 10.0. 13.39.8 ‘pthread_getattr_default_np’ ------------------------------------ Documentation: • *note Setting Process-wide defaults for thread attributes: (libc)Default Thread Attributes, • man pthread_getattr_default_np. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.17, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.39.9 ‘pthread_getattr_np’ ---------------------------- LSB specification: Documentation: man pthread_getattr_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.9, mingw, MSVC 14. 13.39.10 ‘pthread_getname_np’ ----------------------------- Documentation: man pthread_getname_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.11, Mac OS X 10.5, FreeBSD 12.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.0, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. 13.39.11 ‘pthread_kill_other_threads_np’ ---------------------------------------- Documentation: man pthread_kill_other_threads_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.39.12 ‘pthread_mutex_clocklock’ ---------------------------------- Documentation: — Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 29. 13.39.13 ‘pthread_rwlock_clockrdlock’ ------------------------------------- Specified in POSIX.1-2024. Draft specification: Documentation: • *note Non-POSIX Extensions: (libc)Non-POSIX Extensions, Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 29. 13.39.14 ‘pthread_rwlock_clockwrlock’ ------------------------------------- Specified in POSIX.1-2024. Draft specification: Documentation: • *note Non-POSIX Extensions: (libc)Non-POSIX Extensions, Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 29. 13.39.15 ‘pthread_rwlockattr_getkind_np’ ---------------------------------------- LSB specification: Documentation: man pthread_rwlockattr_getkind_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. 13.39.16 ‘pthread_rwlockattr_setkind_np’ ---------------------------------------- LSB specification: Documentation: man pthread_rwlockattr_setkind_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. 13.39.17 ‘pthread_setaffinity_np’ --------------------------------- Documentation: man pthread_setaffinity_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has a different signature on some platforms: glibc 2.3.3. • The third parameter has a different type on some platforms: FreeBSD 14.0, NetBSD 10.0. 13.39.18 ‘pthread_setattr_default_np’ ------------------------------------- Documentation: • *note Setting Process-wide defaults for thread attributes: (libc)Default Thread Attributes, • man pthread_setattr_default_np. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.17, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.39.19 ‘pthread_setname_np’ ----------------------------- Documentation: man pthread_setname_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.11, Mac OS X 10.5, FreeBSD 12.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.0, Cygwin 1.7.x, mingw, MSVC 14. • This function has a different signature on some platforms: NetBSD 10.0. On NetBSD the second argument is interpreted as a ‘printf’ format string, with the third argument as parameter. 13.39.20 ‘pthread_sigqueue’ --------------------------- Documentation: man pthread_sigqueue Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.10, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.0, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. 13.39.21 ‘pthread_timedjoin_np’ ------------------------------- Documentation: man pthread_timedjoin_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • FreeBSD 6.4 has a function of this name in ‘libthr’ but not in ‘libpthread’, and it also is missing a declaration. 13.39.22 ‘pthread_tryjoin_np’ ----------------------------- Documentation: man pthread_tryjoin_np Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.40 Glibc ‘’ ===================== 13.40.1 ‘forkpty’ ----------------- Documentation: • *note Opening a Pseudo-Terminal Pair: (libc)Pseudo-Terminal Pairs, • man forkpty. Gnulib module: forkpty Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Android 5.1. • One some systems (at least including Cygwin and Mac OS X) linking with ‘-lutil’ is not required. • On glibc, OpenBSD, NetBSD and FreeBSD linking with ‘-lutil’ is required. • The function is declared in pty.h on glibc and Cygwin. It is declared in util.h on Mac OS X, OpenBSD, and NetBSD. It is declared in libutil.h on FreeBSD. It is declared in termios.h on Solaris. • Some platforms declare the function without marking the last two parameters ‘const’. FreeBSD 14.0, Solaris 11.4, Cygwin 1.7.1. Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 13.40.2 ‘openpty’ ----------------- Documentation: • *note Opening a Pseudo-Terminal Pair: (libc)Pseudo-Terminal Pairs, • man openpty. Gnulib module: openpty Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, Android 5.1. • One some systems (at least including Cygwin and Mac OS X) linking with ‘-lutil’ is not required. • On glibc, OpenBSD, NetBSD and FreeBSD linking with ‘-lutil’ is required. • The function is declared in pty.h on glibc and Cygwin. It is declared in util.h on Mac OS X, OpenBSD, and NetBSD. It is declared in libutil.h on FreeBSD. It is declared in termios.h on Solaris. • Some platforms declare the function without marking the last two parameters ‘const’. FreeBSD 14.0, Solaris 11.4, Cygwin 1.7.1. Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 13.41 Glibc Extensions to ‘’ =================================== 13.41.1 ‘fgetpwent’ ------------------- Documentation: • *note Scanning the List of All Users: (libc)Scanning All Users, • man fgetpwent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.41.2 ‘fgetpwent_r’ --------------------- Documentation: • *note Scanning the List of All Users: (libc)Scanning All Users, • man fgetpwent_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.41.3 ‘getpw’ --------------- Documentation: man getpw Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.41.4 ‘getpwent_r’ -------------------- LSB specification: Documentation: • *note Scanning the List of All Users: (libc)Scanning All Users, • man getpwent_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.41.5 ‘putpwent’ ------------------ Documentation: • *note Writing a User Entry: (libc)Writing a User Entry, • man putpwent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42 Glibc Extensions to ‘’ ===================================== 13.42.1 ‘re_comp’ ----------------- Documentation: man re_comp Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.2 ‘re_compile_fastmap’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.3 ‘re_compile_pattern’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.4 ‘re_exec’ ----------------- Documentation: man re_exec Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.5 ‘re_match’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.6 ‘re_match_2’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.7 ‘re_search’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.8 ‘re_search_2’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.9 ‘re_set_registers’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.10 ‘re_set_syntax’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.42.11 ‘re_syntax_options’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.43 Glibc ‘’ ======================== 13.43.1 ‘advance’ ----------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.43.2 ‘loc1’ -------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.43.3 ‘loc2’ -------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.43.4 ‘locs’ -------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.43.5 ‘step’ -------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.44 Glibc ‘’ ======================== 13.44.1 ‘dn_comp’ ----------------- Documentation: man dn_comp Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.3.0, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.44.2 ‘dn_expand’ ------------------- Documentation: man dn_expand Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. 13.44.3 ‘dn_skipname’ --------------------- Documentation: man dn_skipname Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.44.4 ‘res_dnok’ ------------------ Documentation: man res_dnok Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.44.5 ‘res_hnok’ ------------------ Documentation: man res_hnok Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.44.6 ‘res_init’ ------------------ Documentation: man res_init Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. 13.44.7 ‘res_mailok’ -------------------- Documentation: man res_mailok Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.44.8 ‘res_mkquery’ --------------------- Documentation: man res_mkquery Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Cygwin 1.5.x, mingw, MSVC 14. 13.44.9 ‘res_nmkquery’ ---------------------- Documentation: man res_nmkquery Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.44.10 ‘res_nquery’ --------------------- Documentation: man res_nquery Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.44.11 ‘res_nquerydomain’ --------------------------- Documentation: man res_nquerydomain Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.44.12 ‘res_nsearch’ ---------------------- Documentation: man res_nsearch Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.44.13 ‘res_nsend’ -------------------- Documentation: man res_nsend Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.44.14 ‘res_ownok’ -------------------- Documentation: man res_ownok Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.44.15 ‘res_query’ -------------------- Documentation: man res_query Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. 13.44.16 ‘res_querydomain’ -------------------------- Documentation: man res_querydomain Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.3.0, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.44.17 ‘res_search’ --------------------- Documentation: man res_search Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. 13.44.18 ‘res_send’ ------------------- Documentation: man res_send Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.3.0, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.45 Glibc ‘’ ========================== 13.45.1 ‘authdes_create’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.2 ‘authdes_pk_create’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.3 ‘authnone_create’ ------------------------- Documentation: man authnone_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.4 ‘authunix_create’ ------------------------- Documentation: man authunix_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.5 ‘authunix_create_default’ --------------------------------- Documentation: man authunix_create_default Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.6 ‘getnetname’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.7 ‘host2netname’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.8 ‘key_decryptsession’ ---------------------------- Documentation: man key_decryptsession Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.9 ‘key_decryptsession_pk’ ------------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.10 ‘key_encryptsession’ ----------------------------- Documentation: man key_encryptsession Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.11 ‘key_encryptsession_pk’ -------------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.12 ‘key_gendes’ --------------------- Documentation: man key_gendes Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.13 ‘key_get_conv’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.14 ‘key_secretkey_is_set’ ------------------------------- Documentation: man key_secretkey_is_set Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.15 ‘key_setsecret’ ------------------------ Documentation: man key_setsecret Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.16 ‘netname2host’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.17 ‘netname2user’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.18 ‘user2netname’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.19 ‘xdr_des_block’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.45.20 ‘xdr_opaque_auth’ -------------------------- Documentation: man xdr_opaque_auth Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.46 Glibc ‘’ ============================== 13.46.1 ‘authdes_getucred’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.46.2 ‘getpublickey’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.46.3 ‘getsecretkey’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.46.4 ‘rtime’ --------------- Documentation: man rtime Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.47 Glibc ‘’ =============================== 13.47.1 ‘xdr_authunix_parms’ ---------------------------- Documentation: man xdr_authunix_parms Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48 Glibc ‘’ ========================== 13.48.1 ‘callrpc’ ----------------- Documentation: man callrpc Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.2 ‘clnt_create’ --------------------- Documentation: man clnt_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.3 ‘clnt_pcreateerror’ --------------------------- Documentation: man clnt_pcreateerror Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.4 ‘clnt_perrno’ --------------------- Documentation: man clnt_perrno Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.5 ‘clnt_perror’ --------------------- Documentation: man clnt_perror Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.6 ‘clnt_spcreateerror’ ---------------------------- Documentation: man clnt_spcreateerror Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.7 ‘clnt_sperrno’ ---------------------- Documentation: man clnt_sperrno Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.8 ‘clnt_sperror’ ---------------------- Documentation: man clnt_sperror Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.9 ‘clntraw_create’ ------------------------ Documentation: man clntraw_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.10 ‘clnttcp_create’ ------------------------- Documentation: man clnttcp_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.11 ‘clntudp_bufcreate’ ---------------------------- Documentation: man clntudp_bufcreate Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.12 ‘clntudp_create’ ------------------------- Documentation: man clntudp_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.13 ‘clntunix_create’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.14 ‘get_myaddress’ ------------------------ Documentation: man get_myaddress Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.15 ‘getrpcport’ --------------------- Documentation: man getrpcport Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.48.16 ‘rpc_createerr’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49 Glibc ‘’ ============================== 13.49.1 ‘xdr_cryptkeyarg’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.2 ‘xdr_cryptkeyarg2’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.3 ‘xdr_cryptkeyres’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.4 ‘xdr_getcredres’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.5 ‘xdr_key_netstarg’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.6 ‘xdr_key_netstres’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.7 ‘xdr_keybuf’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.8 ‘xdr_keystatus’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.9 ‘xdr_netnamestr’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.49.10 ‘xdr_unixcred’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.50 Glibc ‘’ =========================== 13.50.1 ‘endrpcent’ ------------------- Documentation: man endrpcent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.50.2 ‘getrpcbyname’ ---------------------- Documentation: man getrpcbyname Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.50.3 ‘getrpcbyname_r’ ------------------------ Documentation: man getrpcbyname_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.50.4 ‘getrpcbynumber’ ------------------------ Documentation: man getrpcbynumber Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.50.5 ‘getrpcbynumber_r’ -------------------------- Documentation: man getrpcbynumber_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.50.6 ‘getrpcent’ ------------------- Documentation: man getrpcent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.50.7 ‘getrpcent_r’ --------------------- Documentation: man getrpcent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.50.8 ‘setrpcent’ ------------------- Documentation: man setrpcent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.51 Glibc ‘’ =============================== 13.51.1 ‘clnt_broadcast’ ------------------------ Documentation: man clnt_broadcast Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.51.2 ‘pmap_getmaps’ ---------------------- Documentation: man pmap_getmaps Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.51.3 ‘pmap_getport’ ---------------------- LSB specification: Documentation: man pmap_getport Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.51.4 ‘pmap_rmtcall’ ---------------------- Documentation: man pmap_rmtcall Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.51.5 ‘pmap_set’ ------------------ LSB specification: Documentation: man pmap_set Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.51.6 ‘pmap_unset’ -------------------- LSB specification: Documentation: man pmap_unset Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.52 Glibc ‘’ =============================== 13.52.1 ‘xdr_pmap’ ------------------ Documentation: man xdr_pmap Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.52.2 ‘xdr_pmaplist’ ---------------------- Documentation: man xdr_pmaplist Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.53 Glibc ‘’ ============================== 13.53.1 ‘xdr_rmtcall_args’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.53.2 ‘xdr_rmtcallres’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.54 Glibc ‘’ ============================= 13.54.1 ‘xdr_callhdr’ --------------------- Documentation: man xdr_callhdr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.54.2 ‘xdr_callmsg’ --------------------- Documentation: man xdr_callmsg Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.54.3 ‘xdr_replymsg’ ---------------------- Documentation: man xdr_replymsg Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55 Glibc ‘’ ========================= 13.55.1 ‘svc_exit’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.2 ‘svc_fdset’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.3 ‘svc_getreq’ -------------------- Documentation: man svc_getreq Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.4 ‘svc_getreq_common’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.5 ‘svc_getreq_poll’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.6 ‘svc_getreqset’ ----------------------- Documentation: man svc_getreqset Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.7 ‘svc_max_pollfd’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.8 ‘svc_pollfd’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.9 ‘svc_register’ ---------------------- LSB specification: Documentation: man svc_register Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.10 ‘svc_run’ ------------------ LSB specification: Documentation: man svc_run Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.11 ‘svc_sendreply’ ------------------------ LSB specification: Documentation: man svc_sendreply Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.12 ‘svc_unregister’ ------------------------- Documentation: man svc_unregister Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.13 ‘svcerr_auth’ ---------------------- Documentation: man svcerr_auth Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.14 ‘svcerr_decode’ ------------------------ Documentation: man svcerr_decode Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.15 ‘svcerr_noproc’ ------------------------ Documentation: man svcerr_noproc Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.16 ‘svcerr_noprog’ ------------------------ Documentation: man svcerr_noprog Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.17 ‘svcerr_progvers’ -------------------------- Documentation: man svcerr_progvers Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.18 ‘svcerr_systemerr’ --------------------------- Documentation: man svcerr_systemerr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.19 ‘svcerr_weakauth’ -------------------------- Documentation: man svcerr_weakauth Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.20 ‘svcraw_create’ ------------------------ Documentation: man svcraw_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.21 ‘svctcp_create’ ------------------------ LSB specification: Documentation: man svctcp_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.22 ‘svcudp_bufcreate’ --------------------------- Documentation: man svcudp_bufcreate Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.23 ‘svcudp_create’ ------------------------ LSB specification: Documentation: man svcudp_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.24 ‘svcunix_create’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.25 ‘xprt_register’ ------------------------ Documentation: man xprt_register Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.55.26 ‘xprt_unregister’ -------------------------- Documentation: man xprt_unregister Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.56 Glibc ‘’ ========================= 13.56.1 ‘xdr_array’ ------------------- Documentation: man xdr_array Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.2 ‘xdr_bool’ ------------------ Documentation: man xdr_bool Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.3 ‘xdr_bytes’ ------------------- Documentation: man xdr_bytes Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.4 ‘xdr_char’ ------------------ Documentation: man xdr_char Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.5 ‘xdr_double’ -------------------- Documentation: man xdr_double Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.6 ‘xdr_enum’ ------------------ Documentation: man xdr_enum Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.7 ‘xdr_float’ ------------------- Documentation: man xdr_float Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.8 ‘xdr_free’ ------------------ Documentation: man xdr_free Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.9 ‘xdr_hyper’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.10 ‘xdr_int’ ------------------ Documentation: man xdr_int Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.11 ‘xdr_int16_t’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.12 ‘xdr_int32_t’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.13 ‘xdr_int64_t’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.14 ‘xdr_int8_t’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.15 ‘xdr_long’ ------------------- Documentation: man xdr_long Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.16 ‘xdr_longlong_t’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.17 ‘xdr_netobj’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.18 ‘xdr_opaque’ --------------------- Documentation: man xdr_opaque Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.19 ‘xdr_pointer’ ---------------------- Documentation: man xdr_pointer Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.20 ‘xdr_quad_t’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.56.21 ‘xdr_reference’ ------------------------ Documentation: man xdr_reference Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.22 ‘xdr_short’ -------------------- Documentation: man xdr_short Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.23 ‘xdr_sizeof’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.24 ‘xdr_string’ --------------------- Documentation: man xdr_string Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.25 ‘xdr_u_char’ --------------------- Documentation: man xdr_u_char Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.26 ‘xdr_u_hyper’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.27 ‘xdr_u_int’ -------------------- LSB specification: Documentation: man xdr_u_int Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.28 ‘xdr_u_long’ --------------------- Documentation: man xdr_u_long Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.29 ‘xdr_u_longlong_t’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.30 ‘xdr_u_quad_t’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.56.31 ‘xdr_u_short’ ---------------------- Documentation: man xdr_u_short Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.32 ‘xdr_uint16_t’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. • This function is not declared in the header on some platforms: Cygwin 1.7.5. 13.56.33 ‘xdr_uint32_t’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is not declared in the header on some platforms: Cygwin 1.7.5. 13.56.34 ‘xdr_uint64_t’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is not declared in the header on some platforms: Cygwin 1.7.5. 13.56.35 ‘xdr_uint8_t’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is not declared in the header on some platforms: Cygwin 1.7.5. 13.56.36 ‘xdr_union’ -------------------- Documentation: man xdr_union Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.37 ‘xdr_vector’ --------------------- Documentation: man xdr_vector Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.38 ‘xdr_void’ ------------------- Documentation: man xdr_void Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.39 ‘xdr_wrapstring’ ------------------------- Documentation: man xdr_wrapstring Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.40 ‘xdrmem_create’ ------------------------ Documentation: man xdrmem_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.41 ‘xdrrec_create’ ------------------------ Documentation: man xdrrec_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.42 ‘xdrrec_endofrecord’ ----------------------------- Documentation: man xdrrec_endofrecord Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.43 ‘xdrrec_eof’ --------------------- Documentation: man xdrrec_eof Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.44 ‘xdrrec_skiprecord’ ---------------------------- Documentation: man xdrrec_skiprecord Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.56.45 ‘xdrstdio_create’ -------------------------- LSB specification: Documentation: man xdrstdio_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. 13.57 Glibc ‘’ =============================== 13.57.1 ‘nis_add’ ----------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.2 ‘nis_add_entry’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.3 ‘nis_addmember’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.4 ‘nis_checkpoint’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.5 ‘nis_clone_object’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.6 ‘nis_creategroup’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.7 ‘nis_destroy_object’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.8 ‘nis_destroygroup’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.9 ‘nis_dir_cmp’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.10 ‘nis_domain_of’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.11 ‘nis_domain_of_r’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.12 ‘nis_first_entry’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.13 ‘nis_freenames’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.14 ‘nis_freeresult’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.15 ‘nis_freeservlist’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.16 ‘nis_freetags’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.17 ‘nis_getnames’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.18 ‘nis_getservlist’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.19 ‘nis_ismember’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.20 ‘nis_leaf_of’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.21 ‘nis_leaf_of_r’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.22 ‘nis_lerror’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.23 ‘nis_list’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.24 ‘nis_local_directory’ ------------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.25 ‘nis_local_group’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.26 ‘nis_local_host’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.27 ‘nis_local_principal’ ------------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.28 ‘nis_lookup’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.29 ‘nis_mkdir’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.30 ‘nis_modify’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.31 ‘nis_modify_entry’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.32 ‘nis_name_of’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.33 ‘nis_name_of_r’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.34 ‘nis_next_entry’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.35 ‘nis_perror’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.36 ‘nis_ping’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.37 ‘nis_print_directory’ ------------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.38 ‘nis_print_entry’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.39 ‘nis_print_group’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.40 ‘nis_print_group_entry’ -------------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.41 ‘nis_print_link’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.42 ‘nis_print_object’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.43 ‘nis_print_result’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.44 ‘nis_print_rights’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.45 ‘nis_print_table’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.46 ‘nis_remove’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.47 ‘nis_remove_entry’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.48 ‘nis_removemember’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.49 ‘nis_rmdir’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.50 ‘nis_servstate’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.51 ‘nis_sperrno’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.52 ‘nis_sperror’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.53 ‘nis_sperror_r’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.54 ‘nis_stats’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.57.55 ‘nis_verifygroup’ -------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.58 Glibc ‘’ ===================================== 13.58.1 ‘xdr_cback_data’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.58.2 ‘xdr_obj_p’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59 Glibc ‘’ =========================== 13.59.1 ‘xdr_domainname’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.2 ‘xdr_keydat’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.3 ‘xdr_valdat’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.4 ‘xdr_ypbind_resptype’ ----------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.5 ‘xdr_ypmap_parms’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 3.8, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.6 ‘xdr_ypmaplist’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.7 ‘xdr_yppushresp_xfr’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 3.8, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.8 ‘xdr_ypreq_key’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.9 ‘xdr_ypreq_nokey’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.10 ‘xdr_ypreq_xfr’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, OpenBSD 3.8, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.11 ‘xdr_ypresp_all’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.12 ‘xdr_ypresp_key_val’ ----------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.13 ‘xdr_ypresp_maplist’ ----------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.14 ‘xdr_ypresp_master’ ---------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.15 ‘xdr_ypresp_order’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.16 ‘xdr_ypresp_val’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.17 ‘xdr_ypresp_xfr’ ------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.18 ‘xdr_ypstat’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.59.19 ‘xdr_ypxfrstat’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60 Glibc ‘’ =============================== 13.60.1 ‘yp_all’ ---------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.2 ‘yp_bind’ ----------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.3 ‘yp_first’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.4 ‘yp_get_default_domain’ ------------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.5 ‘yp_master’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.6 ‘yp_match’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.7 ‘yp_next’ ----------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.8 ‘yp_order’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.9 ‘yp_unbind’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.10 ‘ypbinderr_string’ --------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.11 ‘yperr_string’ ----------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.60.12 ‘ypprot_err’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.61 Glibc Extensions to ‘’ ===================================== 13.61.1 ‘clone’ --------------- Documentation: man clone Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.61.2 ‘getcpu’ ---------------- Documentation: • *note Limiting execution to certain CPUs: (libc)CPU Affinity, • man getcpu. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.28, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.61.3 ‘sched_getaffinity’ --------------------------- LSB specification: Documentation: • *note Limiting execution to certain CPUs: (libc)CPU Affinity, • man sched_getaffinity. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 3.0. 13.61.4 ‘sched_getcpu’ ---------------------- Documentation: man sched_getcpu Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on most non-glibc platforms: glibc 2.5, macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.61.5 ‘sched_setaffinity’ --------------------------- LSB specification: Documentation: • *note Limiting execution to certain CPUs: (libc)CPU Affinity, • man sched_setaffinity. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 3.0. 13.61.6 ‘setns’ --------------- Documentation: man setns Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.4. 13.62 Glibc Extensions to ‘’ ====================================== 13.62.1 ‘hcreate_r’ ------------------- LSB specification: Documentation: • *note The hsearch function.: (libc)Hash Search Function, • man hcreate_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 8.1. 13.62.2 ‘hdestroy_r’ -------------------- LSB specification: Documentation: • *note The hsearch function.: (libc)Hash Search Function, • man hdestroy_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 8.1. 13.62.3 ‘hsearch_r’ ------------------- LSB specification: Documentation: • *note The hsearch function.: (libc)Hash Search Function, • man hsearch_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 8.1. 13.62.4 ‘tdestroy’ ------------------ Documentation: • *note The tsearch function.: (libc)Tree Search Function, • man tdestroy. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.0, mingw, MSVC 14, Android 4.0.4. 13.62.5 ‘twalk_r’ ----------------- Documentation: • *note The tsearch function: (libc)Tree Search Function, • man twalk_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.63 Glibc Extensions to ‘’ =============================================== 13.63.1 ‘fgetfilecon’ --------------------- Documentation: man fgetfilecon Gnulib module: selinux-h Portability problems fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. On those platforms, this module provides a stub that always sets ‘errno’ to ‘ENOTSUP’ and returns ‘-1’. • On systems with SELinux support, this module provides a wrapper for the ‘fgetfilecon’ function that insulates the caller from API-nonconforming behavior. Without this wrapper, ‘fgetfilecon’ can return ‘0’ and set the ‘context’ pointer to NULL, and in another scenario can return ‘10’ and set the ‘context’ pointer to ‘unlabeled’. This wrapper returns ‘-1’ in each case and sets ‘errno’ to ‘ENOTSUP’ and ‘ENODATA’ respectively. While the conditions that can provoke such behavior are rare, the average caller does not handle them because the possibility of such behavior is not documented. Portability problems not fixed by Gnulib: 13.63.2 ‘getfilecon’ -------------------- Documentation: man getfilecon Gnulib module: selinux-h Portability problems fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. On those platforms, this module provides a stub that always sets ‘errno’ to ‘ENOTSUP’ and returns ‘-1’. • On systems with SELinux support, this module provides a wrapper for the ‘getfilecon’ function that insulates the caller from API-nonconforming behavior. Without this wrapper, ‘getfilecon’ can return ‘0’ and set the ‘context’ pointer to NULL, and in another scenario can return ‘10’ and set the ‘context’ pointer to ‘unlabeled’. This wrapper returns ‘-1’ in each case and sets ‘errno’ to ‘ENOTSUP’ and ‘ENODATA’ respectively. While the conditions that can provoke such behavior are rare, the average caller does not handle them because the possibility of such behavior is not documented. Portability problems not fixed by Gnulib: 13.63.3 ‘lgetfilecon’ --------------------- Documentation: man lgetfilecon Gnulib module: selinux-h Portability problems fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. On those platforms, this module provides a stub that always sets ‘errno’ to ‘ENOTSUP’ and returns ‘-1’. • On systems with SELinux support, this module provides a wrapper for the ‘lgetfilecon’ function that insulates the caller from API-nonconforming behavior. Without this wrapper, ‘lgetfilecon’ can return ‘0’ and set the ‘context’ pointer to NULL, and in another scenario can return ‘10’ and set the ‘context’ pointer to ‘unlabeled’. This wrapper returns ‘-1’ in each case and sets ‘errno’ to ‘ENOTSUP’ and ‘ENODATA’ respectively. While the conditions that can provoke such behavior are rare, the average caller does not handle them because the possibility of such behavior is not documented. Portability problems not fixed by Gnulib: 13.64 Glibc Extensions to ‘’ ========================================= 13.64.1 ‘sem_clockwait’ ----------------------- Specified in POSIX.1-2024. Draft specification: Documentation: • *note Non-POSIX Extensions: (libc)Non-POSIX Extensions, Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 29. 13.65 Glibc ‘’ ======================== 13.65.1 ‘endspent’ ------------------ Documentation: man endspent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.2 ‘fgetspent’ ------------------- Documentation: man fgetspent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.3 ‘fgetspent_r’ --------------------- Documentation: man fgetspent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.4 ‘getspent’ ------------------ Documentation: man getspent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.5 ‘getspent_r’ -------------------- Documentation: man getspent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.6 ‘getspnam’ ------------------ Documentation: man getspnam Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.7 ‘getspnam_r’ -------------------- Documentation: man getspnam_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.8 ‘lckpwdf’ ----------------- Documentation: man lckpwdf Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.9 ‘putspent’ ------------------ Documentation: man putspent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.10 ‘setspent’ ------------------- Documentation: man setspent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.11 ‘sgetspent’ -------------------- Documentation: man sgetspent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.12 ‘sgetspent_r’ ---------------------- Documentation: man sgetspent_r Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.65.13 ‘ulckpwdf’ ------------------- Documentation: man ulckpwdf Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66 Glibc Extensions to ‘’ ====================================== 13.66.1 ‘gsignal’ ----------------- Documentation: • *note Signaling Yourself: (libc)Signaling Yourself, • man gsignal. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.2 ‘sigandset’ ------------------- LSB specification: Documentation: man sigandset Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.3 ‘sigblock’ ------------------ Documentation: • *note BSD Signal Handling: (libc)BSD Signal Handling, • man sigblock. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.66.4 ‘siggetmask’ -------------------- Documentation: man siggetmask Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.5 ‘sigisemptyset’ ----------------------- LSB specification: Documentation: man sigisemptyset Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.6 ‘sigorset’ ------------------ LSB specification: Documentation: man sigorset Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.7 ‘sigreturn’ ------------------- LSB specification: Documentation: man sigreturn Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.8 ‘sigsetmask’ -------------------- Documentation: • *note BSD Signal Handling: (libc)BSD Signal Handling, • man sigsetmask. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.66.9 ‘sigstack’ ------------------ Documentation: • *note Using a Separate Signal Stack: (libc)Signal Stack, • man sigstack. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.10 ‘sigvec’ ----------------- Documentation: man sigvec Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.11 ‘ssignal’ ------------------ Documentation: • *note Basic Signal Handling: (libc)Basic Signal Handling, • man ssignal. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.12 ‘sys_siglist’ ---------------------- Documentation: *note Signal Messages: (libc)Signal Messages. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This constant is missing on some platforms: macOS 10.13, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. 13.66.13 ‘sysv_signal’ ---------------------- Documentation: • *note Basic Signal Handling: (libc)Basic Signal Handling, • man sysv_signal. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.66.14 ‘tgkill’ ----------------- Documentation: • *note Signaling Another Process: (libc)Signaling Another Process, • man tgkill. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on most non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.67 Glibc Extensions to ‘’ ===================================== 13.67.1 ‘posix_spawn_file_actions_addchdir_np’ ---------------------------------------------- ‘posix_spawn_file_actions_addchdir’ is specified in POSIX.1-2024. Draft specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: glibc 2.28, macOS 10.13, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.0, Cygwin 3.4.6, mingw, MSVC 14, Android API level 33. Note: Gnulib has a module ‘posix_spawn_file_actions_addchdir’ that provides equivalent functionality, just without the suffix ‘_np’. 13.67.2 ‘posix_spawn_file_actions_addclosefrom_np’ -------------------------------------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.33, macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.67.3 ‘posix_spawn_file_actions_addfchdir_np’ ----------------------------------------------- ‘posix_spawn_file_actions_addfchdir’ is specified in POSIX.1-2024. Draft specification: Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: glibc 2.28, macOS 10.13, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.4.6, mingw, MSVC 14, Android API level 33. Note: Gnulib has a module ‘posix_spawn_file_actions_addfchdir’ that provides equivalent functionality, just without the suffix ‘_np’. 13.68 Glibc Extensions to ‘’ ===================================== 13.68.1 ‘asprintf’ ------------------ LSB specification: Documentation: • *note Dynamically Allocating Formatted Output: (libc)Dynamic Output, • man asprintf. Gnulib module: vasprintf or vasprintf-posix or vasprintf-gnu Portability problems fixed by either Gnulib module ‘vasprintf’ or ‘vasprintf-posix’ or ‘vasprintf-gnu’: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. Portability problems fixed by either Gnulib module ‘vasprintf-posix’ or ‘vasprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: Cygwin 1.5.24. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: Solaris 11.0. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, Solaris 11.4, Cygwin 1.5.x. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, Solaris 11.4, Cygwin 2.9.0. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, Cygwin 1.5.x. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, Solaris 11.0, Cygwin 1.5.x. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. Portability problems fixed by Gnulib module ‘vasprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. 13.68.2 ‘cuserid’ ----------------- Documentation: • *note Identifying Who Logged In: (libc)Who Logged In, • man cuserid. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, mingw, MSVC 14, Android 9.0. 13.68.3 ‘clearerr_unlocked’ --------------------------- LSB specification: Documentation: • *note Recovering from errors: (libc)Error Recovery, • man clearerr_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. 13.68.4 ‘fcloseall’ ------------------- Documentation: • *note Closing Streams: (libc)Closing Streams, • man fcloseall. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, mingw, Android 9.0. • This functions returns ‘void’ instead of ‘int’ on some platforms: FreeBSD 14.0. 13.68.5 ‘feof_unlocked’ ----------------------- LSB specification: Documentation: • *note End-Of-File and Errors: (libc)EOF and Errors, • man feof_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. 13.68.6 ‘ferror_unlocked’ ------------------------- LSB specification: Documentation: • *note End-Of-File and Errors: (libc)EOF and Errors, • man ferror_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. 13.68.7 ‘fflush_unlocked’ ------------------------- LSB specification: Documentation: • *note Flushing Buffers: (libc)Flushing Buffers, • man fflush_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. 13.68.8 ‘fgetc_unlocked’ ------------------------ LSB specification: Documentation: • *note Character Input: (libc)Character Input, • man fgetc_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. 13.68.9 ‘fgets_unlocked’ ------------------------ LSB specification: Documentation: • *note Line-Oriented Input: (libc)Line Input, • man fgets_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. 13.68.10 ‘fileno_unlocked’ -------------------------- LSB specification: Documentation: • *note Descriptors and Streams: (libc)Descriptors and Streams, • man fileno_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. 13.68.11 ‘fopencookie’ ---------------------- Documentation: • *note Custom Streams and Cookies: (libc)Streams and Cookies, • man fopencookie. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 10.4, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.3, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.68.12 ‘fputc_unlocked’ ------------------------- LSB specification: Documentation: • *note Simple Output by Characters or Lines: (libc)Simple Output, • man fputc_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. 13.68.13 ‘fputs_unlocked’ ------------------------- LSB specification: Documentation: • *note Simple Output by Characters or Lines: (libc)Simple Output, • man fputs_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. 13.68.14 ‘fread_unlocked’ ------------------------- LSB specification: Documentation: • *note Block Input/Output: (libc)Block Input/Output, • man fread_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. 13.68.15 ‘fwrite_unlocked’ -------------------------- LSB specification: Documentation: • *note Block Input/Output: (libc)Block Input/Output, • man fwrite_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. 13.68.16 ‘getw’ --------------- Documentation: • *note Character Input: (libc)Character Input, • man getw. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Android 9.0. 13.68.17 ‘putw’ --------------- Documentation: • *note Simple Output by Characters or Lines: (libc)Simple Output, • man putw. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is not declared on some platforms: Android 9.0. 13.68.18 ‘renameat2’ -------------------- Documentation: man renameat2 Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.8.x, mingw, MSVC 14, Android API level 29. • This function succeeds when the ‘RENAME_NOREPLACE’ flag is specified and the source and destination are the same file, on some platforms: Cygwin 3.4.6. The ‘renameatu’ module addresses some of these portability issues. 13.68.19 ‘setbuffer’ -------------------- LSB specification: Documentation: • *note Controlling Which Kind of Buffering: (libc)Controlling Buffering, • man setbuffer. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, mingw, MSVC 14. 13.68.20 ‘setlinebuf’ --------------------- Documentation: • *note Controlling Which Kind of Buffering: (libc)Controlling Buffering, • man setlinebuf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, mingw, MSVC 14. 13.68.21 ‘sys_errlist’ ---------------------- Documentation: man sys_errlist Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: Minix 3.1.8, macOS 10.13, Cygwin 2.9, mingw, Android 9.0. 13.68.22 ‘sys_nerr’ ------------------- Documentation: man sys_nerr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on some platforms: macOS 10.13, Minix 3.1.8, Cygwin 2.9, mingw, Android 9.0. 13.68.23 ‘tmpnam_r’ ------------------- Documentation: • *note Temporary Files: (libc)Temporary Files, • man tmpnam_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.68.24 ‘vasprintf’ -------------------- LSB specification: Documentation: • *note Variable Arguments Output Functions: (libc)Variable Arguments Output, • man vasprintf. Gnulib module: vasprintf or vasprintf-posix or vasprintf-gnu Portability problems fixed by either Gnulib module ‘vasprintf’ or ‘vasprintf-posix’ or ‘vasprintf-gnu’: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 10, mingw, MSVC 14. Portability problems fixed by either Gnulib module ‘vasprintf-posix’ or ‘vasprintf-gnu’: • This function does not support size specifiers as in C99 (‘hh’, ‘ll’, ‘j’, ‘t’, ‘z’) on some platforms: Cygwin 1.5.24. • printf ‘"%f"’, ‘"%e"’, ‘"%g"’ of Infinity and NaN yields an incorrect result on some platforms: Solaris 11.0. • This function does not support the ‘a’ and ‘A’ directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 10.0, OpenBSD 4.0, Solaris 11.4, Cygwin 1.5.x. • This function does not support the ‘b’ directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, AIX 7.2, Solaris 11.4, Cygwin 2.9.0. • This function does not support the ‘F’ directive on some platforms: NetBSD 3.0, Cygwin 1.5.x. • This function does not support the ‘ls’ directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. • This function does not support precisions in the ‘ls’ directive correctly on some platforms: Solaris 11.4. • This function does not support format directives that access arguments in an arbitrary order, such as ‘"%2$s"’, on some platforms: NetBSD 3.0. • This function doesn’t support the ‘'’ flag on some platforms: NetBSD 3.0, Cygwin 1.5.24. • This function does not round the argument of the ‘a’ directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0. • printf ‘"%010f"’ of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, Solaris 11.0, Cygwin 1.5.x. • printf ‘"%#.0x"’ or ‘"%#.0X"’ with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6. • This function produces wrong output for the ‘lc’ directive with a NUL wide character argument on some platforms: musl libc 1.2.4. • This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0. Portability problems fixed by Gnulib module ‘vasprintf-gnu’: • This function does not support the ‘B’ directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others. Portability problems not fixed by Gnulib: • The ‘%m’ directive is not portable, use ‘%s’ mapped to an argument of ‘strerror(errno)’ (or a version of ‘strerror_r’) instead. 13.69 Glibc Extensions to ‘’ ====================================== 13.69.1 ‘canonicalize_file_name’ -------------------------------- Documentation: • *note Symbolic Links: (libc)Symbolic Links, • man canonicalize_file_name. Gnulib module: canonicalize-lgpl Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. • This function fails to detect trailing slashes on non-directories on some platforms: glibc 2.3.5. Portability problems not fixed by Gnulib: 13.69.2 ‘cfree’ --------------- Documentation: man cfree Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.3 ‘clearenv’ ------------------ Documentation: • *note Environment Access: (libc)Environment Access, • man clearenv. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 13.2, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, Solaris 10, Cygwin 2.9, mingw, MSVC 14. 13.69.4 ‘drand48_r’ ------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man drand48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.5 ‘ecvt_r’ ---------------- Documentation: • *note Old-fashioned System V number-to-string functions: (libc)System V Number Conversion, • man ecvt_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.6 ‘erand48_r’ ------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man erand48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.7 ‘fcvt_r’ ---------------- Documentation: • *note Old-fashioned System V number-to-string functions: (libc)System V Number Conversion, • man fcvt_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.8 ‘getloadavg’ -------------------- LSB specification: Documentation: • *note Learn about the processors available: (libc)Processor Resources, • man getloadavg. Gnulib module: getloadavg Portability problems fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • This function is declared in ‘’, not ‘’, on some platforms: Solaris 11.4. Portability problems not fixed by Gnulib: 13.69.9 ‘getpt’ --------------- Documentation: • *note Allocating Pseudo-Terminals: (libc)Allocation, • man getpt. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. 13.69.10 ‘initstate_r’ ---------------------- LSB specification: Documentation: • *note BSD Random Number Functions: (libc)BSD Random, • man initstate_r. Gnulib module: random_r Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has an incompatible declaration on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: • This function crashes if the state buffer is unaligned on some platforms: glibc 2.36/sparc. • This function has a slightly different (but compatible) declaration on some platforms: Haiku 2017. 13.69.11 ‘jrand48_r’ -------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man jrand48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.12 ‘lcong48_r’ -------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man lcong48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.13 ‘lrand48_r’ -------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man lrand48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.14 ‘mkostemp’ ------------------- Documentation: man mkostemp Gnulib module: mkostemp Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.5, mingw, MSVC 14, Android 5.1. • This function is declared in ‘’ instead of ‘’ on some platforms: macOS 11.1. • On platforms where ‘off_t’ is a 32-bit type, ‘mkostemp’ may not work correctly to create files larger than 2 GB. (Cf. ‘AC_SYS_LARGEFILE’.) Portability problems not fixed by Gnulib: The gnulib module ‘clean-temp’ can create temporary files that will not be left behind after signals such as SIGINT. 13.69.15 ‘mkostemps’ -------------------- Documentation: man mkostemps Gnulib module: mkostemps Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.10, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.5, mingw, MSVC 14, Android 5.1. • This function is declared in ‘’ instead of ‘’ on some platforms: macOS 11.1. • On platforms where ‘off_t’ is a 32-bit type, ‘mkostemps’ may not work correctly to create files larger than 2 GB. (Cf. ‘AC_SYS_LARGEFILE’.) Portability problems not fixed by Gnulib: The gnulib module ‘clean-temp’ can create temporary files that will not be left behind after signals such as SIGINT. 13.69.16 ‘mkstemps’ ------------------- Documentation: man mkstemps Gnulib module: mkstemps Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.10, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. • This function is declared in ‘’ instead of ‘’ on some platforms: macOS 11.1. • On platforms where ‘off_t’ is a 32-bit type, ‘mkstemps’ may not work correctly to create files larger than 2 GB. (Cf. ‘AC_SYS_LARGEFILE’.) Portability problems not fixed by Gnulib: The gnulib module ‘clean-temp’ can create temporary files that will not be left behind after signals such as SIGINT. 13.69.17 ‘mrand48_r’ -------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man mrand48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.18 ‘nrand48_r’ -------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man nrand48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.19 ‘on_exit’ ------------------ Documentation: • *note Cleanups on Exit: (libc)Cleanups on Exit, • man on_exit. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.69.20 ‘ptsname_r’ -------------------- Specified in POSIX.1-2024. Draft specification: Documentation: • *note Allocating Pseudo-Terminals: (libc)Allocation, • man ptsname_r. Gnulib module: ptsname_r Portability problems fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.12, FreeBSD 12.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. • When this function fails, it returns -1 instead of the error code on some platforms: macOS 11.1, FreeBSD 14.0, Android 4.3. • When this function fails with ERANGE, it stores an empty string as result on some platforms: NetBSD 10.0. Portability problems not fixed by Gnulib: • When this function fails, it returns 0 and stores an empty string as result on some platforms: Cygwin 2.9. Note: Portable programs should expect to find the error code as the return value of this function, not as the value of ‘errno’. This is needed for compatibility with musl libc and with the forthcoming POSIX Issue 8. 13.69.21 ‘qecvt’ ---------------- Documentation: • *note Old-fashioned System V number-to-string functions: (libc)System V Number Conversion, • man qecvt. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.22 ‘qecvt_r’ ------------------ Documentation: • *note Old-fashioned System V number-to-string functions: (libc)System V Number Conversion, • man qecvt_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.23 ‘qfcvt’ ---------------- Documentation: • *note Old-fashioned System V number-to-string functions: (libc)System V Number Conversion, • man qfcvt. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.24 ‘qfcvt_r’ ------------------ Documentation: • *note Old-fashioned System V number-to-string functions: (libc)System V Number Conversion, • man qfcvt_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.25 ‘qgcvt’ ---------------- Documentation: • *note Old-fashioned System V number-to-string functions: (libc)System V Number Conversion, • man qgcvt. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.26 ‘qsort_r’ ------------------ Documentation: man qsort_r Gnulib module: — Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.7, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • This function has an incompatible API on some platforms: FreeBSD 13.2. Portability problems not fixed by Gnulib: 13.69.27 ‘random_r’ ------------------- LSB specification: Documentation: • *note BSD Random Number Functions: (libc)BSD Random, • man random_r. Gnulib module: random_r Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has an incompatible declaration on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: • This function has a slightly different (but compatible) declaration on some platforms: Haiku 2017. 13.69.28 ‘rpmatch’ ------------------ Documentation: • *note Yes-or-No Questions: (libc)Yes-orYes-or002dNo Questions, • man rpmatch. Gnulib module: rpmatch Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 10.13, FreeBSD 5.2.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.69.29 ‘secure_getenv’ ------------------------ Documentation: • *note Environment Access: (libc)Environment Access, • man secure_getenv. Gnulib module: secure_getenv Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.16, OS X 10.8, FreeBSD 13.2, NetBSD 10.0, OpenBSD 5.2, Minix 3.2.0, AIX 7.1, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.69.30 ‘seed48_r’ ------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man seed48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.31 ‘setstate_r’ --------------------- LSB specification: Documentation: • *note BSD Random Number Functions: (libc)BSD Random, • man setstate_r. Gnulib module: random_r Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function has an incompatible declaration on some platforms: AIX 7.1. Portability problems not fixed by Gnulib: • This function has a slightly different (but compatible) declaration on some platforms: Haiku 2017. 13.69.32 ‘srand48_r’ -------------------- LSB specification: Documentation: • *note SVID Random Number Function: (libc)SVID Random, • man srand48_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.69.33 ‘srandom_r’ -------------------- LSB specification: Documentation: • *note BSD Random Number Functions: (libc)BSD Random, • man srandom_r. Gnulib module: random_r Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.69.34 ‘strtod_l’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. 13.69.35 ‘strtof_l’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. 13.69.36 ‘strtol_l’ ------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. 13.69.37 ‘strtold_l’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 13.69.38 ‘strtoll_l’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 13.69.39 ‘strtoq’ ----------------- LSB specification: Documentation: • *note Parsing of Integers: (libc)Parsing of Integers, • man strtoq. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. • This function is not declared on some platforms: Android 9.0. 13.69.40 ‘strtoul_l’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. 13.69.41 ‘strtoull_l’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 13.69.42 ‘strtouq’ ------------------ LSB specification: Documentation: • *note Parsing of Integers: (libc)Parsing of Integers, • man strtouq. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. • This function is not declared on some platforms: Android 9.0. 13.69.43 ‘valloc’ ----------------- Documentation: • *note Allocating Aligned Memory Blocks: (libc)Aligned Memory Blocks, • man valloc. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. 13.70 Glibc Extensions to ‘’ ====================================== 13.70.1 ‘explicit_bzero’ ------------------------ Documentation: • *note Erasing Sensitive Data: (libc)Erasing Sensitive Data, • man explicit_bzero. Gnulib module: explicit_bzero The ‘explicit_bzero’ function is an approximation to what is needed, and does not suffice in general to erase information. Although calling ‘explicit_bzero’ should clear the memory in question, the information that was in memory may still be available elsewhere on the machine. Proper implementation of information erasure requires support from levels below C code. C23 specifies the function ‘memset_explicit’, which should be preferred to ‘explicit_bzero’ in new code. *Note memset_explicit::. Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.24, FreeBSD 10, NetBSD 7.1, OpenBSD 5.4, macOS 10.12, Solaris 11.4, Android 9.0, and many other systems. Portability problems not fixed by Gnulib: • Although the module’s implementation should clear the memory on platforms compatible with GCC and on platforms using traditional linkers, it may not clear the memory on non-GCC platforms that use whole-program optimization. 13.70.2 ‘ffsl’ -------------- Documentation: man ffsl Gnulib module: ffsl Portability problems fixed by Gnulib: • This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • This function is declared in ‘’ instead of ‘’ on some platforms: AIX 7.2, Android 13. Portability problems not fixed by Gnulib: • This function is only defined as an inline function on some platforms: Android 13. 13.70.3 ‘ffsll’ --------------- Documentation: man ffsll Gnulib module: ffsll Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • This function is declared in ‘’ instead of ‘’ on some platforms: AIX 7.2, Android 13. • This function returns completely wrong values on some platforms: AIX 7.2 in 32-bit mode. Portability problems not fixed by Gnulib: • This function is only defined as an inline function on some platforms: Android 13. 13.70.4 ‘memfrob’ ----------------- Documentation: • *note Obfuscating Data: (libc)Obfuscating Data, • man memfrob. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.70.5 ‘memmem’ ---------------- LSB specification: Documentation: • *note Search Functions: (libc)Search Functions, • man memmem. Gnulib module: memmem or memmem-simple Both modules implement the same replacement for the ‘memmem’ function with the ‘memmem’ module providing a replacement on more platforms where the existing ‘memmem’ function has a quadratic worst-case complexity. Portability problems fixed by either Gnulib module ‘memmem-simple’ or ‘memmem’: • This function is missing on some platforms: Mac OS X 10.5, FreeBSD 5.2.1, OpenBSD 4.0, Minix 3.1.8, HP-UX 11, Solaris 10, mingw, MSVC 14. • This function has reversed arguments on some older platforms: Linux libc 5.0.9 • This function can trigger false positives for long periodic needles on some platforms: glibc 2.12, Cygwin 1.7.7. • This function returns incorrect values in some cases, such as when given an empty needle: glibc <= 2.0, macOS 12.5, AIX 7.2, Solaris 11.3, Cygwin 1.5.x. Performance problems fixed by Gnulib module ‘memmem’: • This function has quadratic instead of linear worst-case complexity on some platforms: glibc 2.8, macOS 12.5, FreeBSD 11.4, NetBSD 8.2, OpenBSD 6.6, AIX 7.2, Solaris 11.4, Cygwin 1.5.x. Note for small needles the replacement may be slower. Portability problems not fixed by Gnulib: 13.70.6 ‘mempcpy’ ----------------- Documentation: • *note Copying Strings and Arrays: (libc)Copying Strings and Arrays, • man mempcpy. Gnulib module: mempcpy Portability problems fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 5.1. Portability problems not fixed by Gnulib: 13.70.7 ‘memrchr’ ----------------- LSB specification: Documentation: • *note Search Functions: (libc)Search Functions, • man memrchr. Gnulib module: memrchr Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14. Portability problems not fixed by Gnulib: 13.70.8 ‘rawmemchr’ ------------------- Documentation: • *note Search Functions: (libc)Search Functions, • man rawmemchr. Gnulib module: rawmemchr Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.70.9 ‘sigabbrev_np’ ---------------------- Documentation: *note Signal Messages: (libc)Signal Messages. Gnulib module: sigabbrev_np Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: Note: Gnulib has a module ‘sig2str’ that contains an equivalent function and also one that does the opposite conversion, from an abbreviated signal name to a signal number. 13.70.10 ‘sigdescr_np’ ---------------------- Documentation: *note Signal Messages: (libc)Signal Messages. Gnulib module: sigdescr_np Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: • The description of SIGCHLD is wrong on some platforms: glibc. • The description of SIGEMT is completely unintelligible on some platforms: glibc. Note: This function is hardly useful, because it returns English strings, not internationalized strings. Better use the function ‘strsignal’, which returns internationalized strings. 13.70.11 ‘strcasestr’ --------------------- LSB specification: Documentation: • *note Search Functions: (libc)Search Functions, • man strcasestr. Gnulib module: strcasestr or strcasestr-simple Portability problems fixed by either Gnulib module ‘strcasestr-simple’ or ‘strcasestr’: • This function is missing on some platforms: AIX 7.2, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. • This function can trigger memchr bugs on some platforms: glibc 2.10. • This function can trigger false positives for long periodic needles on some platforms: glibc 2.12, Cygwin 1.7.7. • This function may fail to find matches on some platforms: glibc 2.28. Portability problems fixed by Gnulib module ‘strcasestr’: • This function has quadratic instead of linear worst-case complexity on some platforms: glibc 2.8, musl libc 1.2.3, macOS 12.5, FreeBSD 13.1, NetBSD 10.0, OpenBSD 7.2, Solaris 11.4. Portability problems not fixed by Gnulib: 13.70.12 ‘strchrnul’ -------------------- Documentation: • *note Search Functions: (libc)Search Functions, • man strchrnul. Gnulib module: strchrnul Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.7.8, mingw, MSVC 14, Android 6.0. • This function crashes when no occurrence is found on some platforms: Cygwin 1.7.9. Portability problems not fixed by Gnulib: 13.70.13 ‘strerrordesc_np’ -------------------------- Documentation: *note Error Messages: (libc)Error Messages. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.70.14 ‘strerrorname_np’ -------------------------- Documentation: *note Error Messages: (libc)Error Messages. Gnulib module: strerrorname_np Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function returns wrong values on some platforms: glibc 2.37. Portability problems not fixed by Gnulib: 13.70.15 ‘strfry’ ----------------- Documentation: • *note Shuffling Bytes: (libc)Shuffling Bytes, • man strfry. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.70.16 ‘strsep’ ----------------- LSB specification: Documentation: • *note Finding Tokens in a String: (libc)Finding Tokens in a String, • man strsep. Gnulib module: strsep Portability problems fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Solaris 10, mingw, MSVC 14. Portability problems not fixed by Gnulib: 13.70.17 ‘strverscmp’ --------------------- Documentation: • *note String/Array Comparison: (libc)String/Array Comparison, • man strverscmp. Gnulib module: strverscmp Portability problems fixed by Gnulib: • This function is missing on many platforms: macOS 11.1, FreeBSD 13.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • This function treats ASCII letters as smaller than a digit sequence on some platforms: musl libc 1.2.3, Cygwin 3.4.6. Portability problems not fixed by Gnulib: • On older glibc platforms, this function does not always properly treat digit strings with leading zeros as fractions (for example, ‘strverscmp ("B0075022800016.gbp.corp.com", "B007502357019.GBP.CORP.COM")’ does not yield a negative number as it should): glibc 2.9 13.71 Glibc ‘’ ========================== 13.71.1 ‘getauxval’ ------------------- Documentation: • *note Auxiliary Vector: (libc)Auxiliary Vector, • man getauxval. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.72 Glibc ‘’ ================================ 13.72.1 ‘capget’ ---------------- Documentation: man capget Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.72.2 ‘capset’ ---------------- Documentation: man capset Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.73 Glibc ‘’ =========================== 13.73.1 ‘epoll_create’ ---------------------- LSB specification: Documentation: man epoll_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.73.2 ‘epoll_create1’ ----------------------- Documentation: man epoll_create1 Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.8, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.73.3 ‘epoll_ctl’ ------------------- LSB specification: Documentation: man epoll_ctl Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.73.4 ‘epoll_pwait’ --------------------- Documentation: man epoll_pwait Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.5, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.73.5 ‘epoll_wait’ -------------------- LSB specification: Documentation: man epoll_wait Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.74 Glibc ‘’ ============================= 13.74.1 ‘eventfd’ ----------------- Documentation: man eventfd Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux, FreeBSD, NetBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.6, macOS 11.1, FreeBSD 12.0, NetBSD 9.3, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.74.2 ‘eventfd_read’ ---------------------- Documentation: man eventfd_read Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux, FreeBSD, NetBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.6, macOS 11.1, FreeBSD 12.0, NetBSD 9.3, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.74.3 ‘eventfd_write’ ----------------------- Documentation: man eventfd_write Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux, FreeBSD, NetBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.6, macOS 11.1, FreeBSD 12.0, NetBSD 9.3, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.75 Glibc ‘’ ============================== 13.75.1 ‘fanotify_init’ ----------------------- Documentation: man fanotify_init Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.12, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.75.2 ‘fanotify_mark’ ----------------------- Documentation: man fanotify_mark Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.12, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.76 Glibc ‘’ ========================== 13.76.1 ‘flock’ --------------- LSB specification: Documentation: man flock Gnulib module: flock Portability problems fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14 • This function is missing on some platforms: AIX 7.1, HP-UX 11.23, Solaris 11.4. But the replacement function does not really work; it exhibits test failures. Portability problems not fixed by Gnulib: 13.77 Glibc ‘’ =========================== 13.77.1 ‘setfsgid’ ------------------ Documentation: man setfsgid Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.4. 13.77.2 ‘setfsuid’ ------------------ Documentation: man setfsuid Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.4. 13.78 Glibc ‘’ ========================== 13.78.1 ‘monstartup’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.79 Glibc ‘’ ============================= 13.79.1 ‘inotify_add_watch’ --------------------------- LSB specification: Documentation: man inotify_add_watch Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on most non-glibc platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.79.2 ‘inotify_init’ ---------------------- LSB specification: Documentation: man inotify_init Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on most non-glibc platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.79.3 ‘inotify_init1’ ----------------------- Documentation: man inotify_init1 Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on most non-glibc platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.79.4 ‘inotify_rm_watch’ -------------------------- LSB specification: Documentation: man inotify_rm_watch Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on most non-glibc platforms: glibc 2.3.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.80 Glibc ‘’, ‘’ ======================================== 13.80.1 ‘ioperm’ ---------------- Documentation: man ioperm Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.80.2 ‘iopl’ -------------- Documentation: man iopl Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.81 Glibc ‘’ ============================= 13.81.1 ‘bdflush’ ----------------- Documentation: man bdflush Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.82 Glibc ‘’ ========================== 13.82.1 ‘klogctl’ ----------------- Documentation: man klogctl Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.83 Glibc Extensions to ‘’ ======================================== 13.83.1 ‘madvise’ ----------------- Documentation: • *note Memory-mapped I/O: (libc)Memory-mapped I/O, • man madvise. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 1.7.7, mingw, MSVC 14. 13.83.2 ‘memfd_create’ ---------------------- Documentation: • *note Memory-mapped I/O: (libc)Memory-mapped I/O, • man memfd_create. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and FreeBSD and is therefore missing on many non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 29. 13.83.3 ‘mincore’ ----------------- Documentation: man mincore Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14. 13.83.4 ‘mlock2’ ---------------- Documentation: • *note Functions To Lock And Unlock Pages: (libc)Page Lock Functions, • man mlock2. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many platforms: glibc 2.26, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 29. 13.83.5 ‘mremap’ ---------------- LSB specification: Documentation: • *note Memory-mapped I/O: (libc)Memory-mapped I/O, • man mremap. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: macOS 11.1, FreeBSD 14.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.83.6 ‘pkey_alloc’ -------------------- Documentation: • *note Memory Protection: (libc)Memory Protection, • man pkey_alloc. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.83.7 ‘pkey_free’ ------------------- Documentation: • *note Memory Protection: (libc)Memory Protection, • man pkey_free. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.83.8 ‘pkey_get’ ------------------ Documentation: *note Memory Protection: (libc)Memory Protection. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.83.9 ‘pkey_mprotect’ ----------------------- Documentation: • *note Memory Protection: (libc)Memory Protection, • man pkey_mprotect. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.83.10 ‘pkey_set’ ------------------- Documentation: *note Memory Protection: (libc)Memory Protection. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.83.11 ‘remap_file_pages’ --------------------------- Documentation: man remap_file_pages Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.84 Glibc ‘’ =========================== 13.84.1 ‘mount’ --------------- Documentation: • *note Mount Unmount Remount: (libc)Mount-Unmount-Remount, • man mount. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 13.84.2 ‘umount’ ---------------- Documentation: • *note Mount Unmount Remount: (libc)Mount-Unmount-Remount, • man umount. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, AIX 5.1, mingw, MSVC 14. 13.84.3 ‘umount2’ ----------------- Documentation: • *note Mount Unmount Remount: (libc)Mount-Unmount-Remount, • man umount2. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, Cygwin 2.9, mingw, MSVC 14. 13.85 Glibc ‘’ ================================= 13.85.1 ‘personality’ --------------------- Documentation: man personality Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.0.2. 13.86 Glibc ‘’ =========================== 13.86.1 ‘prctl’ --------------- Documentation: man prctl Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.87 Glibc ‘’ ============================ 13.87.1 ‘sprofil’ ----------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.88 Glibc ‘’ ============================ 13.88.1 ‘ptrace’ ---------------- LSB specification: Documentation: man ptrace Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, Cygwin 2.9, mingw, MSVC 14. 13.89 Glibc ‘’ =========================== 13.89.1 ‘quotactl’ ------------------ Documentation: man quotactl Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. 13.90 Glibc ‘’ ============================ 13.90.1 ‘getentropy’ -------------------- Specified in POSIX.1-2024. Draft specification: Documentation: • *note Generating Unpredictable Bytes: (libc)Unpredictable Bytes, • man getentropy. Gnulib module: getentropy Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.24, Mac OS X 10.11, FreeBSD 11.0, NetBSD 9.3, OpenBSD 5.5, Minix 3.3, AIX 7.1, HP-UX 11.31, Solaris 11.0, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • This function is declared in ‘’, not in ‘’, on some platforms: macOS 11.1, Solaris 11.4, Android 9.0. Portability problems not fixed by Gnulib: Although this function is intended to produce random data, the data’s security properties may not be appropriate for your application. For example, identical “random” data streams might be produced by rebooted virtual machines. If this is of concern you may need to use additional techniques such as hedging.(1) Related modules include ‘getrandom’, which has a more-flexible but more-complex API, and ‘crypto/gc-random’, which is likely a better match for code already using the other ‘crypto’ APIs. ---------- Footnotes ---------- (1) Ristenpart T, Yilek S. When good randomness goes bad: virtual machine vulnerabilities and hedging deployed cryptography (http://pages.cs.wisc.edu/~rist/papers/sslhedge.pdf). NDSS 2010. 13.90.2 ‘getrandom’ ------------------- Documentation: • *note Generating Unpredictable Bytes: (libc)Unpredictable Bytes, • man getrandom. Gnulib module: getrandom Portability problems fixed by Gnulib: • This function is missing on some platforms: glibc 2.24, macOS 11.1, FreeBSD 11.0, NetBSD 9.3, OpenBSD 6.7, Minix 3.3, AIX 7.1, HP-UX 11.31, Solaris 11.0, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • This function has a different return type on some platforms: Solaris 11.4. Portability problems not fixed by Gnulib: • The ‘GRND_INSECURE’ flag is missing on some platforms: glibc 2.34, macOS 10.15, GNU/kFreeBSD, FreeBSD 12.0, OpenBSD 6.7, Minix 3.3, Haiku. • The ‘GRND_RANDOM’ flag has different effects on different platforms. Some platforms ignore the flag, or yield data that can fail to be random in some cases. Although this function is intended to produce random data, the data’s security properties may not be appropriate for your application. For example, identical “random” data streams might be produced by rebooted virtual machines. If this is of concern you may need to use additional techniques such as hedging.(1) Related modules include ‘getentropy’, which has a simpler but more-limited API, and ‘crypto/gc-random’, which is likely a better match for code already using the other ‘crypto’ APIs. ---------- Footnotes ---------- (1) Ristenpart T, Yilek S. When good randomness goes bad: virtual machine vulnerabilities and hedging deployed cryptography (http://pages.cs.wisc.edu/~rist/papers/sslhedge.pdf). NDSS 2010. 13.91 Glibc ‘’ ============================ 13.91.1 ‘reboot’ ---------------- Documentation: man reboot Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, Cygwin 2.9, mingw, MSVC 14. 13.92 Glibc Extensions to ‘’ ============================================ 13.92.1 ‘prlimit’ ----------------- Documentation: man prlimit Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.12, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. 13.93 Glibc Extensions to ‘’ ======================================= 13.93.1 ‘semtimedop’ -------------------- Documentation: • *note Semaphores: (libc)Semaphores, • man semtimedop. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 7.1. 13.94 Glibc ‘’ ============================== 13.94.1 ‘sendfile’ ------------------ LSB specification: Documentation: man sendfile Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11 2010-11, Cygwin 2.9, mingw, MSVC 14, Android 4.4. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files larger than 2 GB. The fix is to use the ‘AC_SYS_LARGEFILE’ macro. 13.95 Glibc ‘’ ============================== 13.95.1 ‘signalfd’ ------------------ Documentation: man signalfd Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.6, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.96 Glibc ‘’ ===================================== 13.96.1 ‘__libc_single_threaded’ -------------------------------- Documentation: *note Detecting Single-Threaded Execution: (libc)Single Threaded. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This variable is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.97 Glibc Extensions to ‘’ ========================================== 13.97.1 ‘accept4’ ----------------- Documentation: man accept4 Gnulib module: accept4 Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.1, mingw, MSVC 14, Android 4.4. But the replacement function is not atomic; this matters in multi-threaded programs that spawn child processes. Portability problems not fixed by Gnulib: • SOCK_CLOEXEC and SOCK_NONBLOCK may not be defined as they’re also significant to the socket() function. 13.97.2 ‘isfdtype’ ------------------ Documentation: man isfdtype Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.97.3 ‘recvmmsg’ ------------------ Documentation: man recvmmsg Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.11, macOS 11.1, FreeBSD 6.4, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 4.4. 13.97.4 ‘sendmmsg’ ------------------ Documentation: man sendmmsg Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 6.4, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 4.4. 13.98 Glibc Extensions to ‘’ ======================================== 13.98.1 ‘getumask’ ------------------ Documentation: • *note Assigning File Permissions: (libc)Setting Permissions, • man getumask. Gnulib module: getumask Portability problems fixed by Gnulib: • This function exists only on Hurd and is therefore missing on all non-glibc platforms: glibc/Linux, glibc/kFreeBSD, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3, AIX 7.2, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.98.2 ‘lchmod’ ---------------- Gnulib module: lchmod Portability problems fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • This function is not declared on some platforms: HP-UX 11.31. • This function always fails with ‘errno’ set to ‘ENOSYS’, even when the file is not a symbolic link: GNU/Linux with glibc 2.31. • This function does not fail when the file name argument ends in a slash and (without the slash) names a non-directory, on some platforms: AIX 7.2. Portability problems not fixed by Gnulib: • Some platforms do not allow changing the access bits on symbolic links. • This function can fail with ‘errno’ set to ‘EMFILE’ or ‘ENFILE’, and it fails with ‘errno’ set to ‘EOPNOTSUPP’ if the ‘/proc’ file system is not mounted: GNU/Linux with glibc 2.34. 13.98.3 ‘statx’ --------------- Documentation: man statx Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 29. • There is an incompatible function of the same name on some platforms: AIX 5.2 or newer. 13.99 Glibc ‘’ ============================ 13.99.1 ‘fstatfs’ ----------------- LSB specification: Documentation: man fstatfs Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, mingw, MSVC 14. • On platforms where ‘f_blocks’ in ‘struct statfs’ is a 32-bit value, this function may not work correctly on files systems larger than 4 TiB. The fix is to use the ‘AC_SYS_LARGEFILE’ macro. This affects Mac OS X. 13.99.2 ‘statfs’ ---------------- LSB specification: Documentation: man statfs Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, mingw, MSVC 14. • On platforms where ‘f_blocks’ in ‘struct statfs’ is a 32-bit value, this function may not work correctly on files systems larger than 4 TiB. The fix is to use the ‘AC_SYS_LARGEFILE’ macro. This affects Mac OS X. 13.100 Glibc ‘’ =========================== 13.100.1 ‘swapoff’ ------------------ Documentation: man swapoff Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.100.2 ‘swapon’ ----------------- Documentation: man swapon Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.101 Glibc ‘’ ============================= 13.101.1 ‘sysctl’ ----------------- Documentation: • *note System Parameters: (libc)System Parameters, • man sysctl. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.34, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.102 Glibc ‘’ ============================== 13.102.1 ‘get_avphys_pages’ --------------------------- Documentation: • *note How to get information about the memory subsystem?: (libc)Query Memory Parameters, • man get_avphys_pages. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.1, mingw, MSVC 14, Android 5.1. 13.102.2 ‘get_nprocs’ --------------------- Documentation: • *note Learn about the processors available: (libc)Processor Resources, • man get_nprocs. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.7.1, mingw, MSVC 14, Android 5.1. Gnulib provides the module ‘nproc’ that performs a similar function but is portable to more systems. 13.102.3 ‘get_nprocs_conf’ -------------------------- Documentation: • *note Learn about the processors available: (libc)Processor Resources, • man get_nprocs_conf. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.7.1, mingw, MSVC 14, Android 5.1. 13.102.4 ‘get_phys_pages’ ------------------------- Documentation: • *note How to get information about the memory subsystem?: (libc)Query Memory Parameters, • man get_phys_pages. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.1, mingw, MSVC 14, Android 5.1. 13.102.5 ‘sysinfo’ ------------------ LSB specification: Documentation: man sysinfo Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 1.7.9, mingw, MSVC 14. • This function is not declared and thus not part of the Android API for Android API levels < 9. 13.103 Glibc ‘’ ============================= 13.103.1 ‘vsyslog’ ------------------ LSB specification: Documentation: • *note syslog: (vsyslog)syslog; vsyslog, • man vsyslog. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.104 Glibc ‘’ ================================ 13.104.1 ‘gnu_dev_major’ ------------------------ Documentation: man gnu_dev_major Gnulib module: — Portability problems fixed by Gnulib: • The ‘AC_HEADER_MAJOR’ macro in Autoconf 2.69 and earlier fails to set ‘MAJOR_IN_SYSMACROS’ when it detects namespace pollution in ‘sys/types.h’; which in turn provokes deprecation warnings in glibc 2.25. Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.104.2 ‘gnu_dev_makedev’ -------------------------- Documentation: man gnu_dev_makedev Gnulib module: — Portability problems fixed by Gnulib: • The ‘AC_HEADER_MAJOR’ macro in Autoconf 2.69 and earlier fails to set ‘MAJOR_IN_SYSMACROS’ when it detects namespace pollution in ‘sys/types.h’; which in turn provokes deprecation warnings in glibc 2.25. Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.104.3 ‘gnu_dev_minor’ ------------------------ Documentation: man gnu_dev_minor Gnulib module: — Portability problems fixed by Gnulib: • The ‘AC_HEADER_MAJOR’ macro in Autoconf 2.69 and earlier fails to set ‘MAJOR_IN_SYSMACROS’ when it detects namespace pollution in ‘sys/types.h’; which in turn provokes deprecation warnings in glibc 2.25. Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.105 Glibc Extensions to ‘’ ========================================= 13.105.1 ‘adjtime’ ------------------ LSB specification: Documentation: • *note High-Resolution Calendar: (libc)High-Resolution Calendar, • man adjtime. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.105.2 ‘futimes’ ------------------ LSB specification: Documentation: • *note File Times: (libc)File Times, • man futimes. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 7.1. • This function cannot set full timestamp resolution. Use ‘futimens(fd,times)’ instead. 13.105.3 ‘futimesat’ -------------------- Documentation: man futimesat Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 6.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14, Android 7.1. • On some platforms, this function mis-handles a trailing slash: Solaris 9. • This function cannot set full timestamp resolution. Use file ? utimensat(fd, file, times, 0) : futimens(fd, times) or the gnulib module ‘fdutimensat’, instead. 13.105.4 ‘lutimes’ ------------------ Documentation: • *note File Times: (libc)File Times, • man lutimes. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 7.1. • This function cannot set full timestamp resolution. Use ‘utimensat(AT_FDCWD,file,times,AT_SYMLINK_NOFOLLOW)’, or the gnulib module ‘utimens’, instead. • The mere act of using ‘lstat’ modifies the access time of symlinks on some platforms, so ‘lutimes’ can only effectively change modification time: Cygwin. 13.105.5 ‘settimeofday’ ----------------------- Documentation: • *note High-Resolution Calendar: (libc)High-Resolution Calendar, • man settimeofday. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 13.106 Glibc ‘’ ============================== 13.106.1 ‘timerfd_create’ ------------------------- Documentation: man timerfd_create Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux, FreeBSD, NetBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.7, macOS 11.1, FreeBSD 13.2, NetBSD 9.3, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.106.2 ‘timerfd_gettime’ -------------------------- Documentation: man timerfd_gettime Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux, FreeBSD, NetBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.7, macOS 11.1, FreeBSD 13.2, NetBSD 9.3, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.106.3 ‘timerfd_settime’ -------------------------- Documentation: man timerfd_settime Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux, FreeBSD, NetBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.7, macOS 11.1, FreeBSD 13.2, NetBSD 9.3, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. 13.107 Glibc ‘’ ============================ 13.107.1 ‘adjtimex’ ------------------- Documentation: • *note High-Resolution Calendar: (libc)High-Resolution Calendar, • man adjtimex. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. 13.107.2 ‘ntp_adjtime’ ---------------------- Documentation: • *note High Accuracy Clock: (libc)High Accuracy Clock, • man ntp_adjtime. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.107.3 ‘ntp_gettime’ ---------------------- Documentation: • *note High Accuracy Clock: (libc)High Accuracy Clock, • man ntp_gettime. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Mac OS X 10.5, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.107.4 ‘ntp_gettimex’ ----------------------- Documentation: man ntp_gettimex Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.11, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.108 Glibc Extensions to ‘’ ======================================== 13.108.1 ‘preadv’ ----------------- Documentation: • *note Fast Scatter-Gather I/O: (libc)Scatter-Gather, • man preadv. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.9, macOS 10.13, FreeBSD 5.2.1, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files larger than 2 GB. The fix is to use the ‘AC_SYS_LARGEFILE’ macro. 13.108.2 ‘preadv2’ ------------------ Documentation: • *note Fast Scatter-Gather I/O: (libc)Scatter-Gather, • man preadv2. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many platforms: glibc 2.25, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 32. 13.108.3 ‘process_vm_readv’ --------------------------- Documentation: man process_vm_readv Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.14, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. 13.108.4 ‘process_vm_writev’ ---------------------------- Documentation: man process_vm_writev Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.14, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. 13.108.5 ‘pwritev’ ------------------ Documentation: • *note Fast Scatter-Gather I/O: (libc)Scatter-Gather, • man pwritev. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.9, macOS 10.13, FreeBSD 5.2.1, Minix 3.1.8, AIX 5.2, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. • On platforms where ‘off_t’ is a 32-bit type, this function may not work correctly on files larger than 2 GB. The fix is to use the ‘AC_SYS_LARGEFILE’ macro. 13.108.6 ‘pwritev2’ ------------------- Documentation: • *note Fast Scatter-Gather I/O: (libc)Scatter-Gather, • man pwritev2. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many platforms: glibc 2.25, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 32. 13.109 Glibc ‘’ ============================ 13.109.1 ‘ustat’ ---------------- Documentation: man ustat Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.110 Glibc ‘’ ============================= 13.110.1 ‘vlimit’ ----------------- Documentation: • *note Limiting Resource Usage: (libc)Limits on Resources, • man vlimit. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.111 Glibc Extensions to ‘’ ========================================= 13.111.1 ‘wait3’ ---------------- Documentation: • *note BSD Process Wait Function: (libc)BSD Wait Functions, • man wait3. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. • This function is not declared on some platforms: Android 13. 13.111.2 ‘wait4’ ---------------- LSB specification: Documentation: • *note Process Completion: (libc)Process Completion, • man wait4. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11.11, mingw, MSVC 14, Android 4.2. 13.112 Glibc ‘’ ============================ 13.112.1 ‘fgetxattr’ -------------------- Documentation: man fgetxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. • This function has extra ‘offset’ and ‘options’ parameters: macOS 11.1. 13.112.2 ‘flistxattr’ --------------------- Documentation: man flistxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.3 ‘fremovexattr’ ----------------------- Documentation: man fremovexattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.4 ‘fsetxattr’ -------------------- Documentation: man fsetxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.5 ‘getxattr’ ------------------- Documentation: man getxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. • This function has extra ‘offset’ and ‘options’ parameters: macOS 11.1. 13.112.6 ‘lgetxattr’ -------------------- Documentation: man lgetxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.7 ‘listxattr’ -------------------- Documentation: man listxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.8 ‘llistxattr’ --------------------- Documentation: man llistxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.9 ‘lremovexattr’ ----------------------- Documentation: man lremovexattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.10 ‘lsetxattr’ --------------------- Documentation: man lsetxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.11 ‘removexattr’ ----------------------- Documentation: man removexattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.112.12 ‘setxattr’ -------------------- Documentation: man setxattr Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. 13.113 Glibc Extensions to ‘’ ======================================== 13.113.1 ‘cfmakeraw’ -------------------- LSB specification: Documentation: • *note Noncanonical Input: (libc)Noncanonical Input, • man cfmakeraw. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. 13.113.2 ‘cfsetspeed’ --------------------- LSB specification: Documentation: • *note Line Speed: (libc)Line Speed, • man cfsetspeed. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. 13.114 Glibc Extensions to ‘’ ===================================== 13.114.1 ‘clock_adjtime’ ------------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. 13.114.2 ‘dysize’ ----------------- Documentation: man dysize Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.114.3 ‘getdate_r’ -------------------- Documentation: • *note A More User-friendly Way to Parse Times and Dates: (libc)General Time String Parsing, • man getdate_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.114.4 ‘stime’ ---------------- LSB specification: Documentation: • *note Simple Calendar Time: (libc)Simple Calendar Time, • man stime. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. 13.114.5 ‘strptime_l’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. 13.114.6 ‘timelocal’ -------------------- Documentation: • *note Broken-down Time: (libc)Broken-down Time, • man timelocal. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, HP-UX 11, Solaris 11.3, mingw, MSVC 14, Android 3.0. 13.114.7 ‘timespec_get’ ----------------------- ISO C23 specification: section 7.29.2.6 Gnulib module: timespec_get Portability problems fixed by Gnulib: • This function is missing on many platforms: glibc 2.15, macOS 10.13, FreeBSD 11.0, NetBSD 7.1, OpenBSD 6.0, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.115 Glibc ‘’ ========================= 13.115.1 ‘endttyent’ -------------------- Documentation: man endttyent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.115.2 ‘getttyent’ -------------------- Documentation: man getttyent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.115.3 ‘getttynam’ -------------------- Documentation: man getttynam Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.115.4 ‘setttyent’ -------------------- Documentation: man setttyent Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.116 Glibc Extensions to ‘’ ======================================= 13.116.1 ‘_Fork’ ---------------- Documentation: *note Creating a Process: (libc)Creating a Process. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.33, macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.116.2 ‘acct’ --------------- LSB specification: Documentation: man acct Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14. 13.116.3 ‘brk’ -------------- Documentation: • *note Resizing the Data Segment: (libc)Resizing the Data Segment, • man brk. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 12.2/arm64, AIX 5.1, Cygwin 2.9, mingw, MSVC 14. 13.116.4 ‘chroot’ ----------------- Documentation: man chroot Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: AIX 5.1, mingw, MSVC 14. 13.116.5 ‘closefrom’ -------------------- Documentation: *note Opening and Closing Files: (libc)Opening and Closing Files. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.33, macOS 11.1, FreeBSD 7.2, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Note (quoted from man close): “The [POSIX] standard developers rejected a proposal to add ‘closefrom()’ to the [POSIX] standard. Because the standard permits implementations to use inherited file descriptors as a means of providing a conforming environment for the child process, it is not possible to standardize an interface that closes arbitrary file descriptors above a certain value while still guaranteeing a conforming environment.” 13.116.6 ‘copy_file_range’ -------------------------- Documentation: • *note Copying data between two files: (libc)Copying File Data, • man copy_file_range. Gnulib module: copy-file-range Portability problems fixed by Gnulib: • This function exists only on Linux and FreeBSD and is therefore missing on many platforms: glibc 2.26, macOS 11.1, FreeBSD 12.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 33. But the replacement function is only a stub: It always fails with error ENOSYS. • This function has many problems on Linux kernel versions before 5.3. On these kernel versions, the replacement function always fails with error ENOSYS. Portability problems not fixed by Gnulib: 13.116.7 ‘daemon’ ----------------- LSB specification: Documentation: man daemon Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. 13.116.8 ‘dup3’ --------------- Documentation: man dup3 Gnulib module: dup3 Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.8, macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.1, mingw, MSVC 14, Android 4.4. • This function can crash on some platforms: Cygwin 1.7.25. • This function mistakenly succeeds when given two equal file descriptors on some platforms: NetBSD 10.0. Portability problems not fixed by Gnulib: 13.116.9 ‘eaccess’ ------------------ Documentation: man eaccess This function is an alias of ‘euidaccess’. See *note euidaccess::. 13.116.10 ‘endusershell’ ------------------------ Documentation: man endusershell Gnulib module: getusershell Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. • This function is missing a declaration on some platforms: Solaris 9. Portability problems not fixed by Gnulib: 13.116.11 ‘euidaccess’ ---------------------- Documentation: man euidaccess Gnulib module: euidaccess Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: Other problems of this function: • There is an inherent race between calling this function and performing some action based on the results; you should think twice before trusting this function, especially in a set-uid or set-gid program. • This function does not have an option for not following symbolic links (like ‘stat’ versus ‘lstat’). If you need this option, use the Gnulib module ‘faccessat’ with the ‘AT_EACCESS’ flag. • On Solaris, for the root user, any file is ‘X_OK’ even if the file does not have the ‘x’ permission bit set. 13.116.12 ‘execveat’ -------------------- Documentation: man execveat. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: glibc 2.33/Linux, glibc 2.34/Hurd, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.116.13 ‘execvpe’ ------------------- Documentation: man execvpe Gnulib module: execvpe Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.10, macOS 11.1, FreeBSD 14.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.5.x, mingw, Android 4.4. • This function is not declared on some platforms: AIX 7.1. • On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. • On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child’s exit status. • On Windows platforms (excluding Cygwin), the return type of this function is ‘intptr_t’, not ‘int’. Portability problems not fixed by Gnulib: 13.116.14 ‘get_current_dir_name’ -------------------------------- Documentation: • *note Working Directory: (libc)Working Directory, • man get_current_dir_name. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. 13.116.15 ‘getdomainname’ ------------------------- LSB specification: Documentation: • *note Host Identification: (libc)Host Identification, • man getdomainname. Gnulib module: getdomainname Portability problems fixed by Gnulib: • This function is missing on some platforms: Solaris 11.3, mingw, MSVC 14, Android 7.1. • This function is declared in ‘netdb.h’, not in ‘unistd.h’, on some platforms: AIX 7.1. • The second argument is of type ‘int’, not ‘size_t’, on some platforms: macOS 11.1, FreeBSD 14.0, AIX 7.1. Portability problems not fixed by Gnulib: 13.116.16 ‘getdtablesize’ ------------------------- SUSv2 specification: LSB specification: Documentation: man getdtablesize Gnulib module: getdtablesize Portability problems fixed by Gnulib: • This function is missing on some platforms: Android LP64, mingw, MSVC 14, Android 9.0. • This function is not declared on some platforms: Android 13 (LP32?). • This function does not represent the true ‘RLIMIT_NOFILE’ soft limit on some platforms: Android 13 (LP32?), Cygwin 1.7.25. Portability problems not fixed by Gnulib: • On OpenVMS, this function returns the maximum number of open file descriptors in a process. The possible values of file descriptors are not constrained by this function. 13.116.17 ‘getpagesize’ ----------------------- LSB specification: Documentation: • *note How to get information about the memory subsystem?: (libc)Query Memory Parameters, • man getpagesize. Gnulib module: getpagesize Portability problems fixed by Gnulib: • This function is missing on some platforms: MSVC 14, Android 4.4. • This function is not declared on some platforms: HP-UX 11 with compiler option ‘-D_XOPEN_SOURCE=600’. • This function is broken on some platforms: mingw. Portability problems not fixed by Gnulib: 13.116.18 ‘getpass’ ------------------- Documentation: • *note Reading Passphrases: (libc)getpass, • man getpass. Gnulib module: getpass or getpass-gnu Portability problems fixed by either Gnulib module ‘getpass’ or ‘getpass-gnu’: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. • This function cannot be called from plain inline or extern inline functions on some platforms: Android 13. Portability problems fixed by Gnulib module ‘getpass-gnu’: • The returned password is truncated to PASS_MAX characters on some platforms: uClibc (256), musl (128), macOS 11.1 (128), FreeBSD 14.0 (128), NetBSD 3.0 (128), OpenBSD 4.0 (128), AIX 5.1 (32), HP-UX 11 (8), Solaris 11 2010-11 (8, even less than PASS_MAX), Cygwin (128). The gnulib implementation returns the password untruncated. Portability problems not fixed by Gnulib: 13.116.19 ‘getresgid’ --------------------- Specified in POSIX.1-2024. Draft specification: Documentation: man getresgid Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, Minix 3.1.8, AIX 5.1, HP-UX 11.00, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.116.20 ‘getresuid’ --------------------- Specified in POSIX.1-2024. Draft specification: Documentation: man getresuid Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, Minix 3.1.8, AIX 5.1, HP-UX 11.00, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.116.21 ‘gettid’ ------------------ Documentation: • *note Process Identification: (libc)Process Identification, • man gettid. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function exists only on Linux and is therefore missing on most non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.116.22 ‘getusershell’ ------------------------ Documentation: man getusershell Gnulib module: getusershell Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. • This function is missing a declaration on some platforms: Solaris 9. • This function mistakenly returns comments and empty lines on some platforms: musl libc 1.2.4 Portability problems not fixed by Gnulib: 13.116.23 ‘group_member’ ------------------------ Documentation: man group_member Gnulib module: group-member Portability problems fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. Portability problems not fixed by Gnulib: 13.116.24 ‘pipe2’ ----------------- Documentation: man pipe2 Gnulib module: pipe2 Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: glibc 2.8, macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Cygwin 1.7.1, mingw, MSVC 14, Android 2.2. But the replacement function is not atomic; this matters in multi-threaded programs that spawn child processes. Portability problems not fixed by Gnulib: • This function crashes rather than failing with ‘EMFILE’ if no resources are left on some platforms: Cygwin 1.7.9. Note: This function portably supports the ‘O_NONBLOCK’ flag only if the gnulib module ‘nonblocking’ is also used. 13.116.25 ‘profil’ ------------------ Documentation: man profil Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.116.26 ‘revoke’ ------------------ Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.116.27 ‘sbrk’ ---------------- Documentation: man sbrk Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 12.2/arm64, AIX 5.1, mingw, MSVC 14. 13.116.28 ‘setlogin’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.116.29 ‘setdomainname’ ------------------------- Documentation: • *note Host Identification: (libc)Host Identification, • man setdomainname. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 7.1. 13.116.30 ‘sethostid’ --------------------- Documentation: • *note Host Identification: (libc)Host Identification, • man sethostid. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.116.31 ‘sethostname’ ----------------------- LSB specification: Documentation: • *note Host Identification: (libc)Host Identification, • man sethostname. Gnulib module: sethostname Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. Note that the Gnulib replacement may fail with ENOSYS on some platforms. • This function is not declared on some platforms: AIX 7.1, Solaris 10. Portability problems not fixed by Gnulib: • The first parameter is ‘char *’ instead of ‘const char *’ on some platforms: Solaris 11 2010-11. • The second parameter is ‘int’ instead of ‘size_t’ on some platforms: macOS 12.5, FreeBSD 14.0, MidnightBSD 3.0, Solaris 11 2010-11, Solaris 11 OpenIndiana, Solaris 11 OmniOS. • This function does not reject a too long host name on some platforms: Cygwin 3.5.3. 13.116.32 ‘setresgid’ --------------------- Specified in POSIX.1-2024. Draft specification: Documentation: man setresgid Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.116.33 ‘setresuid’ --------------------- Specified in POSIX.1-2024. Draft specification: Documentation: man setresuid Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, NetBSD 10.0, Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. 13.116.34 ‘setusershell’ ------------------------ Documentation: man setusershell Gnulib module: getusershell Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. • This function is missing a declaration on some platforms: Solaris 9. Portability problems not fixed by Gnulib: 13.116.35 ‘syncfs’ ------------------ Documentation: man syncfs Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 8.1. 13.116.36 ‘syscall’ ------------------- Documentation: • *note System Calls: (libc)System Calls, • man syscall. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14. 13.116.37 ‘ttyslot’ ------------------- Documentation: man ttyslot Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14, Android 9.0. 13.116.38 ‘vhangup’ ------------------- Documentation: man vhangup Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, mingw, MSVC 14, Android 9.0. 13.117 Glibc ‘’ ======================= 13.117.1 ‘endutent’ ------------------- LSB specification: Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man endutent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. • This function is not declared on some platforms: Android before ca. 2015. 13.117.2 ‘getutent’ ------------------- LSB specification: Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man getutent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 13.117.3 ‘getutent_r’ --------------------- LSB specification: Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man getutent_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.117.4 ‘getutid’ ------------------ Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man getutid. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 13.117.5 ‘getutid_r’ -------------------- Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man getutid_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.117.6 ‘getutline’ -------------------- Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man getutline. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. 13.117.7 ‘getutline_r’ ---------------------- Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man getutline_r. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. 13.117.8 ‘pututline’ -------------------- Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man pututline. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 13.117.9 ‘setutent’ ------------------- LSB specification: Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man setutent. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 13.117.10 ‘updwtmp’ ------------------- Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man updwtmp. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, mingw, MSVC 14, Android 9.0. 13.117.11 ‘utmpname’ -------------------- LSB specification: Documentation: • *note Manipulating the User Accounting Database: (libc)Manipulating the Database, • man utmpname. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. 13.117.12 ‘login’ ----------------- Documentation: • *note Logging In and Out: (libc)Logging In and Out, • man login. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, mingw, MSVC 14, Android 9.0. 13.117.13 ‘login_tty’ --------------------- Documentation: • *note Logging In and Out: (libc)Logging In and Out, • man login_tty. Gnulib module: login_tty Portability problems fixed by Gnulib: • This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.3, Android 5.1. • This function is declared in ‘’ on glibc, Cygwin, Android, in ‘’ on macOS 11.1, NetBSD 5.0, OpenBSD 3.8, in ‘’ on FreeBSD 14.0, Haiku, and in ‘’ on Solaris 11.4. • This function requires linking with ‘-lutil’ on some platforms: glibc 2.3.6, FreeBSD 14.0, NetBSD 5.0, OpenBSD 3.8. It is available without link options on other platforms: macOS 11.1, Cygwin. Portability problems not fixed by Gnulib: • This function is missing on some platforms: mingw, MSVC 14. 13.118 Glibc Extensions to ‘’ ====================================== 13.118.1 ‘getutmp’ ------------------ Documentation: • *note XPG User Accounting Database Functions: (libc)XPG Functions, • man getutmp. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • On some platforms, this function does not support timestamps past the year 2038: glibc 2.38 on 32-bit platforms like x86 and ARM where ‘time_t’ was historically 32 bits. • On some platforms, this function misbehaves if the ‘year2038’ or ‘year2038-recommended’ modules are used and the program is configured without the ‘--disable-year2038’ option. The ‘readutmp’ module works around this problem: glibc 2.38 on 32-bit platforms like x86 and ARM where ‘time_t’ was historically 32 bits. *Note Avoiding the year 2038 problem::. 13.118.2 ‘getutmpx’ ------------------- Documentation: • *note XPG User Accounting Database Functions: (libc)XPG Functions, • man getutmpx. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • On some platforms, this function does not support timestamps past the year 2038: glibc 2.38 on 32-bit platforms like x86 and ARM where ‘time_t’ was historically 32 bits. • On some platforms, this function misbehaves if the ‘year2038’ or ‘year2038-recommended’ modules are used and the program is configured without the ‘--disable-year2038’ option. The ‘readutmp’ module works around this problem: glibc 2.38 on 32-bit platforms like x86 and ARM where ‘time_t’ was historically 32 bits. *Note Avoiding the year 2038 problem::. 13.118.3 ‘updwtmpx’ ------------------- Documentation: man updwtmpx Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. 13.118.4 ‘utmpxname’ -------------------- Documentation: • *note XPG User Accounting Database Functions: (libc)XPG Functions, • man utmpxname. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: FreeBSD 14.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14, Android 9.0. 13.119 Glibc Extensions to ‘’ ====================================== 13.119.1 ‘fgetwc_unlocked’ -------------------------- LSB specification: Documentation: • *note Character Input: (libc)Character Input, • man fgetwc_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.2 ‘fgetws_unlocked’ -------------------------- LSB specification: Documentation: • *note Line-Oriented Input: (libc)Line Input, • man fgetws_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.3 ‘fputwc_unlocked’ -------------------------- LSB specification: Documentation: • *note Simple Output by Characters or Lines: (libc)Simple Output, • man fputwc_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.4 ‘fputws_unlocked’ -------------------------- LSB specification: Documentation: • *note Simple Output by Characters or Lines: (libc)Simple Output, • man fputws_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.5 ‘getwc_unlocked’ ------------------------- LSB specification: Documentation: • *note Character Input: (libc)Character Input, • man getwc_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.6 ‘getwchar_unlocked’ ---------------------------- LSB specification: Documentation: • *note Character Input: (libc)Character Input, • man getwchar_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.7 ‘putwc_unlocked’ ------------------------- LSB specification: Documentation: • *note Simple Output by Characters or Lines: (libc)Simple Output, • man putwc_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on some platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.8 ‘putwchar_unlocked’ ---------------------------- LSB specification: Documentation: • *note Simple Output by Characters or Lines: (libc)Simple Output, • man putwchar_unlocked. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.9 ‘wcschrnul’ -------------------- Documentation: *note Search Functions: (libc)Search Functions. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.10 ‘wcsftime_l’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.11 ‘wcstod_l’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.12 ‘wcstof_l’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.13 ‘wcstol_l’ -------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.14 ‘wcstold_l’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.15 ‘wcstoll_l’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.16 ‘wcstoq’ ------------------ LSB specification: Documentation: *note Parsing of Integers: (libc)Parsing of Integers. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.17 ‘wcstoul_l’ --------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.18 ‘wcstoull_l’ ---------------------- Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.19 ‘wcstouq’ ------------------- LSB specification: Documentation: *note Parsing of Integers: (libc)Parsing of Integers. Gnulib module: — Portability problems fixed by Gnulib: Portability problems not fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 14.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 13.119.20 ‘wmempcpy’ -------------------- Documentation: • *note Copying Strings and Arrays: (libc)Copying Strings and Arrays, • man wmempcpy. Gnulib module: wmempcpy Portability problems fixed by Gnulib: • This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 10.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. Portability problems not fixed by Gnulib: • On Windows and 32-bit AIX platforms, ‘wchar_t’ is a 16-bit type and therefore cannot accommodate all Unicode characters. 14 Native Windows Support ************************* There are three ways to create binaries that run on Microsoft Windows: • Native binaries, built using the MinGW tool chain. • Native binaries, built using the MSVC (MS Visual C/C++) tool chain. • Binaries for the Cygwin environment. This chapter deals with the MinGW and MSVC platforms, commonly called “native Windows” platforms. Cygwin, on the other hand, is close enough to POSIX that it can be treated like any other Unix-like platform. 14.1 Libtool and Windows ======================== If you want it to be possible to compile your program for a native Windows platform and you use Libtool, you need to use the ‘win32-dll’ option of ‘LT_INIT’. In other words, put: LT_INIT([win32-dll]) in your ‘configure.ac’. This sets the correct names for the ‘OBJDUMP’, ‘DLLTOOL’, and ‘AS’ tools for the build. If you are building a library, you will also need to pass ‘-no-undefined’ to make sure Libtool produces a DLL for your library. From a ‘Makefile.am’: libgsasl_la_LDFLAGS += -no-undefined 14.2 Large File Support ======================= This module provides support for files 2 GiB and larger, or with device or inode numbers exceeding 32 bits. To this effect, it attempts to ensure that types like ‘off_t’ and ‘ino_t’ are 64-bit, at least on the following platforms: glibc, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, Solaris, Cygwin, mingw, MSVC. If the types cannot be made 64-bit, ‘configure’ issues a warning and proceeds. This module gives ‘configure’ an option ‘--disable-largefile’ that suppresses support for large files. This may be useful if the package links to other libraries whose user-facing ABIs still require ‘off_t’ or most other file-related types to be 32-bit on your platform. This module also adds to ‘configure’ an option ‘--enable-year2038’, needed on some platforms to access files with timestamps past the year 2038. *Note Avoiding the year 2038 problem::. 14.3 Inode numbers on Windows ============================= The module ‘windows-stat-inodes’ ensures that, on native Windows platforms, ‘struct stat’ contains ‘st_dev’, ‘st_ino’ fields that are able to distinguish different inodes. Note: Such values can only be provided for most files on the file system. For a few files (such as inaccessible files), ‘st_dev’ and ‘st_ino’ are set to 0. Therefore, you should test whether ‘st_dev != 0 && st_ino != 0’, before going to make inferences based on the file identity based on ‘st_dev’ and ‘st_ino’. 14.4 Precise file timestamps on Windows ======================================= The module ‘windows-stat-timespec’ ensures that, on native Windows platforms, ‘struct stat’ contains ‘st_atim’, ‘st_mtim’, ‘st_ctim’ fields of type ‘struct timespec’, providing 100 ns resolution for the timestamps of files. Note: On some types of file systems, the timestamp resolution is limited by the file system. For example, on FAT file systems, ‘st_mtim’ only has a resolution of 2 seconds. For more details, see . 14.5 Avoiding the year 2038 problem =================================== The “year 2038 problem” denotes unpredictable behaviour that will likely occur in the year 2038, for programs that use a 32-bit signed integer ‘time_t’ type that cannot represent timestamps on or after 2038-01-19 03:14:08 UTC. See Year 2038 problem (https://en.wikipedia.org/wiki/Year_2038_problem) for details. The Gnulib module ‘year2038’ fixes this problem on some platforms, by making ‘time_t’ wide enough to represent timestamps after 2038. This has no effect on most current platforms, which have timestamps that are already wide enough. However, ‘year2038’ by default arranges for builds on legacy 32-bit Linux kernels running glibc 2.34 and later to compile with ‘_TIME_BITS=64’ to get wider timestamps. On older platforms that do not support timestamps after the year 2038, ‘year2038’ causes ‘configure’ to issue a warning but still proceed. On platforms that appear to support post-2038 timestamps but where something prevents this from working, ‘configure’ fails. The default behavior of ‘year2038’ can be overridden by using the ‘configure’ option ‘--disable-year2038’, which suppresses support for post-2038 timestamps. This may be useful if the package links to other libraries whose user-facing ABIs still require ‘time_t’ to be 32-bit on your platform. The Gnulib module ‘year2038-recommended’ is like ‘year2038’, except it by default rejects platforms where ‘time_t’ cannot represent timestamps after 2038. If this module is used and a 32-platform cannot support 64-bit ‘time_t’, one can still fix the year-2038 problem by using a 64-bit instead of a 32-bit build, as noted in the architecture list below. If all else fails one can configure with ‘--disable-year2038’; however, the resulting programs will mishandle timestamps after 2038. The Gnulib module ‘year2038-recommended’ is designed for packages intended for use on 32-bit platforms after the year 2038. If your package is commonly built on 32-bit platforms that will not be used after the year 2038, you can use the ‘year2038’ module instead, to save builders the trouble of configuring with ‘--disable-year2038’. If the Gnulib module ‘largefile’ is used but neither ‘year2038’ nor ‘year2038-recommended’ is used, ‘configure’ will have an option ‘--enable-year2038’ that causes ‘configure’ to behave as if ‘year2038’ was used. This is for packages that have long used ‘largefile’ but have not gotten around to upgrading their Gnulib module list to include ‘year2038’ or ‘year2038-recommended’. *Note Large File Support::. With the ‘year2038-recommended’ module, ‘configure’ by default should work on the following 32-bit platforms (or 32-bit ABIs in bi-arch systems): • Linux kernel 5.1 (2019) and later with glibc 2.34 (2021) and later on x86, arm, mips (o32 or n32 ABI), powerpc32, sparc32, s390, hppa, m68k, sh, csky, microblaze, nios2, • Linux kernel 5.1 (2019) and later with musl libc 1.2 (2020) and later on x86, • Linux on arc, loong32, ork1, riscv32 and x86_64-x32, • NetBSD 6.0 (2012) and later on x86 and sparc, • OpenBSD 5.5 (2014) and later on x86, • FreeBSD/arm, • Minix 3.3 (2014). Whereas with ‘year2038-recommended’, ‘configure’ should by default fail on earlier versions of the abovementioned platforms if a version is listed, and it should also by default fail on all versions of the following older 32-bit platforms or ABIs: • Android on ARMv7 or x86, • Mac OS X 10.6 (2009) and earlier on x86 and powerpc, • GNU/Hurd/x86, • GNU/kFreeBSD/x86, • FreeBSD/x86 (this port demoted to Tier 2 in FreeBSD 13 [2021] and planned to never have 64-bit ‘time_t’), • MidnightBSD/x86, • AIX/powerpc (to fix, configure with ‘CC='gcc -maix64' AR='ar -X64'’), • Solaris 11.4 (2018) and earlier on x86 and sparc (to fix, configure with ‘CC='gcc -m64'’), • Cygwin 3.3.6 (2022) and earlier on x86, • Haiku/x86. If you use the ‘year2038’ or ‘year2038-recommended’ modules, and configure to support timestamps after the year 2038, your code should not include ‘’ or ‘’ directly, because these include files do not work with 64-bit timestamps if the platform’s ‘time_t’ was traditionally 32 bits. Your code can instead use the ‘readutmp’ module, which works around this problem. 14.6 Windows sockets ==================== One of the portability problems for native Windows are sockets and networking functions. 14.6.1 Getaddrinfo and WINVER ----------------------------- This was written for the ‘getaddrinfo’ module, but may be applicable to other functions too. The ‘getaddrinfo’ function exists in ‘ws2tcpip.h’ and ‘-lws2_32’ on Windows XP. The function declaration is present if ‘WINVER >= 0x0501’. Windows 2000 does not have ‘getaddrinfo’ in its ‘WS2_32.DLL’. Thus, if you want to assume Windows XP or later, you can add ‘AC_DEFINE([WINVER], [0x0501])’ to avoid compiling the (partial) ‘getaddrinfo’ implementation. If you want to support Windows 2000, don’t do anything. The replacement function will open ‘WS2_32.DLL’ during run-time to see if there is a ‘getaddrinfo’ function available, and use it when available. 14.7 Native Windows Support without MSVC Support ================================================ If your package does not desire to have MSVC support, that is, if MinGW shall be the only native Windows platform that you wish to get support for from Gnulib, and you wish to minimize the number of files imported from Gnulib accordingly, you can do so by passing the options ‘--avoid=msvc-inval --avoid=msvc-nothrow’ to ‘gnulib-tool’. 14.8 Visual Studio Compatibility ================================ The ‘lib-msvc-compat’ module detects whether the linker supports ‘--output-def’ when building a library. That parameter is used to generate a DEF file for a shared library (DLL). DEF files are useful for developers that use Visual Studio to develop programs that links to your library. See the GNU LD manual for more information. There are other ways to create a DEF file, but we believe they are all sub-optimal to using ‘--output-def’ during the build process. The variants we have considered include: • Use DUMPBIN /EXPORTS. This is explained in . The tool does not generate DEF files directly, so its output needs to be post processed manually: $ { echo EXPORTS; \ dumpbin /EXPORTS libfoo-0.dll | tail -n+20 | awk '{ print $4 }'; \ } > libfoo-0.def $ lib /def:libfoo-0.def • Use IMPDEF. There is a tool called IMPDEF that can generate DEF files. However, it is not part of a standard Visual Studio installation. Further, it is documented as being an unreliable process. • Use DLLTOOL. The dlltool is part of the MinGW suite, and thus not part of a standard Visual Studio installation. The documentation for the IMPDEF tool claims that DLLTOOL is the wrong tool for this job. Finally, DLLTOOL does not generate DEF files directly, so it requires post-processing of the output. If you are using libtool to build your shared library, here is how to use this module. Import ‘lib-msvc-compat’ to your project, and then add the following lines to the ‘Makefile.am’ that builds the library: if HAVE_LD_OUTPUT_DEF libfoo_la_LDFLAGS += -Wl,--output-def,libfoo-$(DLL_VERSION).def libfoo-$(DLL_VERSION).def: libfoo.la defexecdir = $(libdir) defexec_DATA = libfoo-$(DLL_VERSION).def DISTCLEANFILES += $(defexec_DATA) endif The ‘DLL_VERSION’ variable needs to be defined. It should be the shared library version number used in the DLL filename. For Windows targets you compute this value from the values you pass to Libtool’s ‘-version-info’. Assuming you have variables ‘LT_CURRENT’ and ‘LT_AGE’ defined for the ‘CURRENT’ and ‘AGE’ libtool version integers, you compute ‘DLL_VERSION’ as follows: DLL_VERSION=`expr ${LT_CURRENT} - ${LT_AGE}` AC_SUBST(DLL_VERSION) 15 Multithreading ***************** Multithreading is a programming paradigm. In a multithreaded program, multiple threads execute concurrently (or quasi concurrently) at different places in the program. There are three motivations for using multithreading in a program: • Exploiting CPU hardware with multiple execution units. Nowadays, many CPUs have 2 to 8 execution cores in a single chip. Additionally, often multiple CPU chips are combined in a single package. Thus, some CPU packages support 64 or 96 simultaneous threads of execution. • Simplifying program architecture. When a program has to read from different file descriptors, network sockets, or event channels at the same time, the classical single-threaded architecture is to have a main loop which uses ‘select’ or ‘poll’ on all the descriptors and then dispatches according to from which descriptor input arrived. In a multi-threaded program, you allocate one thread for each descriptor, and these threads can be programmed and managed independently. • Offloading work from signal handlers. A signal handler is not allowed to call ‘malloc’; therefore you are very limited in what you can do in a signal handler. But a signal handler can notify a thread, and the thread can then do the appropriate processing, as complex as it needs to be. A multithreading API offers • Primitives for creating threads, for waiting until threads are terminated, and for reaping their results. • Primitives through which different threads can operate on the same data or use some data structures for communicating between the threads. These are called “mutexes” or “locks”. • Primitives for executing a certain (initialization) code at most once. • Primitives for notifying one or more other threads. These are called wait queues or “condition variables”. • Primitives for allowing different threads to have different values for a variable. Such a variable is said to reside in “thread-local storage” or “thread-specific storage”. • Primitives for relinquishing control for some time and letting other threads go. Note: Programs that achieve multithreading through OpenMP (cf. the gnulib module ‘openmp’) don’t create and manage their threads themselves. Nevertheless, they need to use mutexes/locks in many cases. 15.1 The three multithreading APIs ================================== Three multithreading APIs are available to Gnulib users: • POSIX multithreading, • ISO C multithreading, • Gnulib multithreading. They are supported on all platforms that have multithreading in one form or the other. Currently, these are all platforms supported by Gnulib, except for Minix. The main differences are: • The exit code of a thread is a pointer in the POSIX and Gnulib APIs, but only an ‘int’ in the ISO C API. • The POSIX API has additional facilities for detaching threads, setting the priority of a thread, assigning a thread to a certain set of processors, and much more. • In the POSIX and ISO C APIs, most functions have a return code, and you are supposed to check the return code; even locking and unlocking a lock can fail. In the Gnulib API, many functions don’t have a return code; if they cannot complete, the program aborts. This sounds harsh, but such aborts have not been reported in 12 years. • In the ISO C API, the initialization of a statically allocated lock is clumsy: You have to initialize it through a once-only function. 15.2 Choosing the right multithreading API ========================================== Here are guidelines for determining which multithreading API is best for your code. In programs that use advanced POSIX APIs, such as spin locks, detached threads (‘pthread_detach’), signal blocking (‘pthread_sigmask’), priorities (‘pthread_setschedparam’), processor affinity (‘pthread_setaffinity_np’), it is best to use the POSIX API. This is because you cannot convert an ISO C ‘thrd_t’ or a Gnulib ‘gl_thread_t’ to a POSIX ‘pthread_t’. In code that is shared with glibc, it is best to use the POSIX API as well. In libraries, it is best to use the Gnulib API. This is because it gives the person who builds the library an option ‘--enable-threads={isoc,posix,windows}’, that determines on which native multithreading API of the platform to rely. In other words, with this choice, you can minimize the amount of glue code that your library needs to contain. In the other cases, the POSIX API and the Gnulib API are equally well suited. The ISO C API is never the best choice, as of this writing (2020). 15.3 The POSIX multithreading API ================================= The POSIX multithreading API is documented in POSIX . To make use of POSIX multithreading, even on platforms that don’t support it natively (most prominently, native Windows), use the following Gnulib modules: Purpose Module -------------------------------------------------------------------------- For thread creation and management: ‘pthread-thread’ For simple and recursive locks: ‘pthread-mutex’ For read-write locks: ‘pthread-rwlock’ For once-only execution: ‘pthread-once’ For “condition variables” (wait queues): ‘pthread-cond’ For thread-local storage: ‘pthread-tss’ For relinquishing control: ‘sched_yield’ For spin locks: ‘pthread-spin’ There is also a convenience module named ‘pthread’ which depends on all of these (except ‘sched_yield’); so you don’t need to enumerate these modules one by one. 15.4 The ISO C multithreading API ================================= The ISO C multithreading API is documented in ISO C 11 . To make use of ISO C multithreading, even on platforms that don’t support it or have severe bugs, use the following Gnulib modules: Purpose Module -------------------------------------------------------------------------- For thread creation and management: ‘thrd’ For simple locks, recursive locks, and read-write locks: ‘mtx’ For once-only execution: ‘mtx’ For “condition variables” (wait queues): ‘cnd’ For thread-local storage: ‘tss’ There is also a convenience module named ‘threads’ which depends on all of these; so you don’t need to enumerate these modules one by one. 15.5 The Gnulib multithreading API ================================== The Gnulib multithreading API is documented in the respective include files: • ‘’ • ‘’ • ‘’ • ‘’ • ‘’ To make use of Gnulib multithreading, use the following Gnulib modules: Purpose Module -------------------------------------------------------------------------- For thread creation and management: ‘thread’ For simple locks, recursive locks, and read-write locks: ‘lock’ For once-only execution: ‘lock’ For “condition variables” (wait queues): ‘cond’ For thread-local storage: ‘tls’ For relinquishing control: ‘yield’ The Gnulib multithreading supports a configure option ‘--enable-threads={isoc,posix,windows}’, that chooses the underlying thread implementation. Currently (2020): • ‘--enable-threads=posix’ is supported and is the best choice on all platforms except for native Windows. It may also work, to a limited extent, on mingw with the ‘winpthreads’ library, but is not recommended there. • ‘--enable-threads=windows’ is supported and is the best choice on native Windows platforms (mingw and MSVC). • ‘--enable-threads=isoc’ is supported on all platforms that have the ISO C multithreading API. However, ‘--enable-threads=posix’ is always a better choice. 15.6 Optimizations of multithreaded code ======================================== Despite all the optimizations of multithreading primitives that have been implemented over the years – from atomic operations in hardware (https://en.wikipedia.org/wiki/Compare-and-swap), over futexes (https://en.wikipedia.org/wiki/Futex) and restartable sequences (https://www.efficios.com/blog/2019/02/08/linux-restartable-sequences/) in the Linux kernel, to lock elision [1] (https://lwn.net/Articles/534758/) [2] (https://www.gnu.org/software/libc/manual/html_node/Elision-Tunables.html)) – single-threaded programs can still profit performance-wise from the assertion that they are single-threaded. Gnulib defines four facilities that help optimizing for the single-threaded case. • The Gnulib multithreading API, when used on glibc ≤ 2.32 and *BSD systems, uses weak symbols to detect whether the program is linked with ‘libpthread’. If not, the program has no way to create additional threads and must therefore be single-threaded. This optimization applies to all the Gnulib multithreading API (locks, thread-local storage, and more). • The ‘thread-optim’ module, on glibc ≥ 2.32 systems, allows your code to skip locking between threads (regardless which of the three multithreading APIs you use). You need extra code for this: include the ‘"thread-optim.h"’ header file, and use the macro ‘gl_multithreaded’ like this: bool mt = gl_multithreaded (); if (mt) gl_lock_lock (some_lock); ... if (mt) gl_lock_unlock (some_lock); • You may use the ‘unlocked-io’ module if you want the ‘FILE’ stream functions ‘getc’, ‘putc’, etc. to use unlocked I/O if available, throughout the package. Unlocked I/O can improve performance, sometimes dramatically. But unlocked I/O is safe only in single-threaded programs, as well as in multithreaded programs for which you can guarantee that every ‘FILE’ stream, including ‘stdin’, ‘stdout’, ‘stderr’, is used only in a single thread. You need extra code for this optimization to be effective: include the ‘"unlocked-io.h"’ header file. Some Gnulib modules that do operations on ‘FILE’ streams have these preparations already included. • You may define the C macro ‘GNULIB_REGEX_SINGLE_THREAD’, if all the programs in your package invoke the functions of the ‘regex’ module only from a single thread. • You may define the C macro ‘GNULIB_MBRTOWC_SINGLE_THREAD’, if all the programs in your package invoke the functions ‘mbrtowc’, ‘mbrtoc32’, and the functions of the ‘regex’ module only from a single thread. (The ‘regex’ module uses ‘mbrtowc’ under the hood.) • You may define the C macro ‘GNULIB_WCHAR_SINGLE_LOCALE’, if all the programs in your package set the locale early and • don’t change the locale after it has been initialized, and • don’t call locale sensitive functions (‘mbrtowc’, ‘wcwidth’, etc.) before the locale has been initialized. This macro optimizes the functions ‘mbrtowc’, ‘mbrtoc32’, and ‘wcwidth’. You can get this macro defined by including the Gnulib module ‘wchar-single’. • You may define the C macro ‘GNULIB_EXCLUDE_SINGLE_THREAD’, if all the programs in your package invoke the functions of the ‘exclude’ module only from a single thread. 16 Strings and Characters ************************* This chapter describes the APIs for strings and characters, provided by Gnulib. 16.1 Strings ============ Several possible representations exist for the representation of strings in memory of a running C program. 16.1.1 The C string representation ---------------------------------- The classical representation of a string in C is a sequence of characters, where each character takes up one or more bytes, followed by a terminating NUL byte. This representation is used for strings that are passed by the operating system (in the ‘argv’ argument of ‘main’, for example) and for strings that are passed to the operating system (in system calls such as ‘open’). The C type to hold such strings is ‘char *’ or, in places where the string shall not be modified, ‘const char *’. There are many C library functions, standardized by ISO C and POSIX, that assume this representation of strings. A _character encoding_, or _encoding_ for short, describes how the elements of a character set are represented as a sequence of bytes. For example, in the ‘ASCII’ encoding, the UNDERSCORE character is represented by a single byte, with value 0x5F. As another example, the COPYRIGHT SIGN character is represented: • in the ‘ISO-8859-1’ encoding, by the single byte 0xA9, • in the ‘UTF-8’ encoding, by the two bytes 0xC2 0xA9, • in the ‘GB18030’ encoding, by the four bytes 0x81 0x30 0x84 0x38. Note: The ‘char’ type may be signed or unsigned, depending on the platform. When we talk about the "byte 0xA9" we actually mean the ‘char’ object whose value is ‘(char) 0xA9’; we omit the cast to ‘char’ in this documentation, for brevity. In POSIX, the character encoding is determined by the locale. The locale is some environmental attribute that the user can choose. Depending on the encoding, in general, every character is represented by one or more bytes (up to 4 bytes in practice – but use ‘MB_LEN_MAX’ instead of the number 4 in the code). When every character is represented by only 1 byte, we speak of an “unibyte locale”, otherwise of a “multibyte locale”. It is important to realize that the majority of Unix installations nowadays use UTF-8 as locale encoding; therefore, the majority of users are using multibyte locales. Three important facts to remember are: _A ‘char’ is a byte, not a character._ As a consequence: • The ‘’ API, that was designed only with unibyte encodings in mind, is useless nowadays for general text processing; it does not work in multibyte locales. • The ‘strlen’ function does not return the number of characters in a string. Nor does it return the number of screen columns occupied by a string after it is output. It merely returns the number of _bytes_ occupied by a string. • Truncating a string, for example, with ‘strncpy’, can have the effect of truncating it in the middle of a multibyte character. Such a string will, when output, have a garbled character at its end, often represented by a hollow box. _Multibyte does not imply UTF-8 encoding._ While UTF-8 is the most common multibyte encoding, GB18030 is also a supported locale encoding on GNU systems (mostly because it is a Chinese government standard, last revised in 2022). _Searching for a character in a string is not the same as searching for a byte in the string._ Take the above example of COPYRIGHT SIGN in the ‘GB18030’ encoding: A byte search will find the bytes ‘'0'’ and ‘'8'’ in this string. But a search for the _character_ "0" or "8" in the string "©" must, of course, report “not found”. As a consequence: • ‘strchr’ and ‘strrchr’ do not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. • ‘strstr’ does not work with multibyte strings if the locale encoding is different from UTF-8. • ‘strcspn’, ‘strpbrk’, ‘strspn’ cannot work correctly in multibyte locales: they assume the second argument is a list of single-byte characters. Even in this simple case, they do not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. • ‘strsep’ and ‘strtok_r’ do not work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. • The ‘strcasecmp’, ‘strncasecmp’, and ‘strcasestr’ functions do not work with multibyte strings. Workarounds can be found in Gnulib, in the form of ‘mbs*’ API functions: • Gnulib has functions ‘mbslen’ and ‘mbswidth’ that can be used instead of ‘strlen’ when the number of characters or the number of screen columns of a string is requested. • Gnulib has functions ‘mbschr’ and ‘mbsrrchr’ that are like ‘strchr’ and ‘strrchr’, but work in multibyte locales. • Gnulib has a function ‘mbsstr’ that is like ‘strstr’, but works in multibyte locales. • Gnulib has functions ‘mbscspn’, ‘mbspbrk’, ‘mbsspn’ that are like ‘strcspn’, ‘strpbrk’, ‘strspn’, but work in multibyte locales. • Gnulib has functions ‘mbssep’ and ‘mbstok_r’ that are like ‘strsep’ and ‘strtok_r’ but work in multibyte locales. • Gnulib has functions ‘mbscasecmp’, ‘mbsncasecmp’, ‘mbspcasecmp’, and ‘mbscasestr’ that are like ‘strcasecmp’, ‘strncasecmp’, and ‘strcasestr’, but work in multibyte locales. Still, the function ‘ulc_casecmp’ is preferable to these functions. _A C string can contain encoding errors._ Not every NUL-terminated byte sequence represents a valid multibyte string. Byte sequences can contain encoding errors, that is, bytes or byte sequences that are invalid and do not represent characters. String functions like ‘mbscasecmp’ and ‘strcoll’ whose behavior depends on encoding have unspecified behavior on strings containing encoding errors, unless the behavior is specifically documented. If an application needs a particular behavior on these strings it can iterate through them itself, as described in the next subsection. 16.1.2 Iterating through strings -------------------------------- For complex string processing, string functions may not be enough, and you need to iterate through a string while processing each (possibly multibyte) character or encoding error in turn. Gnulib has several modules for iterating forward through a string in this way. Backward iteration, that is, from the string’s end to start, is not provided, as it is too hairy in general. • The ‘mbiter’ module iterates through a string whose length is already known. The string can contain NULs and encoding errors. • The ‘mbiterf’ module is like ‘mbiter’ except it is more complex and typically faster. • The ‘mbuiter’ module iterates through a C string whose length is not a-priori known. The string can contain encoding errors and is terminated by the first NUL. • The ‘mbuiterf’ module is like ‘mbuiter’ except it is more complex and typically faster. • The ‘mcel’ module is simpler than ‘mbiter’ and ‘mbuiter’ and can be faster than even ‘mbiterf’ and ‘mbuiterf’. It can iterate through either strings whose length is known, or C strings, or strings terminated by other ASCII characters < 0x30. • The ‘mcel-prefer’ module is like ‘mcel’ except that it causes some other modules to be based on ‘mcel’ instead of on the ‘mbiter’ family. The choice of modules depends on the application’s needs. The ‘mbiter’ module family is more suitable for applications that treat some sequences of two or more bytes as a single encoding error, and for applications that need to support obsolescent encodings on non-GNU platforms, such as CP864, EBCDIC, Johab, and Shift JIS. In this module family, ‘mbuiter’ and ‘mbuiterf’ are more suitable than ‘mbiter’ and ‘mbiterf’ when arguments are C strings, lengths are not already known, and it is highly likely that only the first few multibyte characters need to be inspected. The ‘mcel’ module is simpler and can be faster than the ‘mbiter’ family, and is more suitable for applications that do not need the ‘mbiter’ family’s special features. The ‘mcel-prefer’ module is like ‘mcel’ except that it also causes some other modules, such as ‘mbscasecmp’, to use ‘mcel’ rather than the ‘mbiter’ family. This can be simpler and faster. However, it does not support the obsolescent encodings, and it may behave differently on data containing encoding errors where behavior is unspecified or undefined, because in ‘mcel’ each encoding error is a single byte whereas in the ‘mbiter’ family a single encoding error can contain two or more bytes. If a package uses ‘mcel-prefer’, it may also want to give ‘gnulib-tool’ one or more of the options ‘--avoid=mbiter’, ‘--avoid=mbiterf’, ‘--avoid=mbuiter’ and ‘--avoid=mbuiterf’, to avoid packaging modules that are not needed. 16.1.3 Strings with NUL characters ---------------------------------- The GNU Coding Standards, section *note Writing Robust Programs: (standards)Semantics, specifies: Utilities reading files should not drop NUL characters, or any other nonprinting characters. When it is a requirement to store NUL characters in strings, a variant of the C strings is needed. Gnulib offers a “string descriptor” type for this purpose. See *note Handling strings with NUL characters::. All remarks regarding encodings and multibyte characters in the previous section apply to string descriptors as well. 16.1.4 Character and String Functions in C Locale ------------------------------------------------- The functions in this section are similar to the generic string functions from the standard C library, except that • They behave as if the locale was set to the "C" locale, even when the locale is different, and/or • They are specially optimized for the case where all characters are plain ASCII characters. The functions are provided by the following modules. 16.1.4.1 c-ctype ................ The ‘c-ctype’ module contains functions operating on single-byte characters, like the functions in ‘’, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The functions are: extern bool c_isascii (int c); extern bool c_isalnum (int c); extern bool c_isalpha (int c); extern bool c_isblank (int c); extern bool c_iscntrl (int c); extern bool c_isdigit (int c); extern bool c_islower (int c); extern bool c_isgraph (int c); extern bool c_isprint (int c); extern bool c_ispunct (int c); extern bool c_isspace (int c); extern bool c_isupper (int c); extern bool c_isxdigit (int c); extern int c_tolower (int c); extern int c_toupper (int c); These functions assign properties only to ASCII characters. The C argument can be a ‘char’ or ‘unsigned char’ value, whereas the corresponding functions in ‘’ take an argument that is actually an ‘unsigned char’ value. The ‘c_is*’ functions return ‘bool’, where the corresponding functions in ‘’ return ‘int’ for historical reasons. Note: The ‘’ functions support only unibyte locales. 16.1.4.2 c-strcase .................. The ‘c-strcase’ module contains case-insensitive string comparison functions operating on single-byte character strings, like the functions in ‘’, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The functions are: extern int c_strcasecmp (const char *s1, const char *s2); extern int c_strncasecmp (const char *s1, const char *s2, size_t n); For case conversion here, only ASCII characters are considered to be upper case or lower case. Note: The functions ‘strcasecmp’, ‘strncasecmp’ from ‘’ support only unibyte locales; for multibyte locales, you need the functions ‘mbscasecmp’, ‘mbsncasecmp’, ‘mbspcasecmp’. 16.1.4.3 c-strcaseeq .................... The ‘c-strcaseeq’ module contains an optimized case-insensitive string comparison function operating on single-byte character strings, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The functions is actually implemented as a macro: extern int STRCASEEQ (const char *s1, const char *s2, int s20, int s21, int s22, int s23, int s24, int s25, int s26, int s27, int s28); S2 should be a short literal ASCII string, and S20, S21, ... the individual characters of S2. For case conversion here, only ASCII characters are considered to be upper case or lower case. 16.1.4.4 c-strcasestr ..................... The ‘c-strcasestr’ module contains a case-insensitive string search function operating on single-byte character strings, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The function is: extern char *c_strcasestr (const char *haystack, const char *needle); For case conversion here, only ASCII characters are considered to be upper case or lower case. Note: The function ‘strcasestr’ from ‘’ supports only unibyte locales; for multibyte locales, you need the function ‘mbscasestr’. 16.1.4.5 c-strstr ................. The ‘c-strstr’ module contains a substring search function operating on single-byte character strings, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The function is: extern char *c_strstr (const char *haystack, const char *needle); Note: The function ‘strstr’ from ‘’ supports only unibyte locales; for multibyte locales, you need the function ‘mbsstr’. 16.1.4.6 c-strtod ................. The ‘c-strtod’ module contains a string to number (‘double’) conversion function operating on single-byte character strings, that operates as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The function is: extern double c_strtod (const char *string, char **endp); In particular, only a period ‘.’ is accepted as decimal point, even when the current locale’s notion of decimal point is a comma ‘,’, and no characters outside the basic character set are accepted. On platforms without ‘strtod_l’, this function is not safe for use in multi-threaded applications since it calls ‘setlocale’. 16.1.4.7 c-strtold .................. The ‘c-strtold’ module contains a string to number (‘long double’) conversion function operating on single-byte character strings, that operates as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The function is: extern long double c_strtold (const char *string, char **endp); In particular, only a period ‘.’ is accepted as decimal point, even when the current locale’s notion of decimal point is a comma ‘,’. 16.1.5 Comparison of string APIs -------------------------------- This table summarizes the API functions available for strings, in POSIX and in Gnulib. unibyte assume C multibyte multibyte wide 32-bit strings locale strings strings character wide only with NULs strings character strings ------------------------------------------------------------------------------ ‘strlen’ ‘strlen’ ‘mbslen’ ‘string_desc_length’‘wcslen’‘u32_strlen’ ‘strnlen’ ‘strnlen’ ‘mbsnlen’ – ‘wcsnlen’ ‘u32_strnlen’, ‘u32_mbsnlen’ ‘strcmp’ ‘strcmp’ ‘strcmp’ ‘string_desc_cmp’‘wcscmp’ ‘u32_strcmp’ ‘strncmp’ ‘strncmp’ ‘strncmp’ – ‘wcsncmp’ ‘u32_strncmp’ ‘strcasecmp’ ‘strcasecmp’ ‘mbscasecmp’ – ‘wcscasecmp’ ‘u32_casecmp’ ‘strncasecmp’‘strncasecmp’‘mbsncasecmp’,– ‘wcsncasecmp’‘u32_casecmp’ ‘mbspcasecmp’ ‘strcoll’ ‘strcmp’ ‘strcoll’ – ‘wcscoll’ ‘u32_strcoll’ ‘strxfrm’ – ‘strxfrm’ – ‘wcsxfrm’ – ‘strchr’ ‘strchr’ ‘mbschr’ ‘string_desc_index’‘wcschr’‘u32_strchr’ ‘strrchr’ ‘strrchr’ ‘mbsrchr’ ‘string_desc_last_index’‘wcsrchr’‘u32_strrchr’ ‘strstr’ ‘strstr’ ‘mbsstr’ ‘string_desc_contains’‘wcsstr’‘u32_strstr’ ‘strcasestr’ ‘strcasestr’ ‘mbscasestr’ – – – ‘strspn’ ‘strspn’ ‘mbsspn’ – ‘wcsspn’ ‘u32_strspn’ ‘strcspn’ ‘strcspn’ ‘mbscspn’ – ‘wcscspn’ ‘u32_strcspn’ ‘strpbrk’ ‘strpbrk’ ‘mbspbrk’ – ‘wcspbrk’ ‘u32_strpbrk’ ‘strtok_r’ ‘strtok_r’ ‘mbstok_r’ – ‘wcstok’ ‘u32_strtok’ ‘strsep’ ‘strsep’ ‘mbssep’ – – – ‘strcpy’ ‘strcpy’ ‘strcpy’ ‘string_desc_copy’‘wcscpy’‘u32_strcpy’ ‘stpcpy’ ‘stpcpy’ ‘stpcpy’ – ‘wcpcpy’ ‘u32_stpcpy’ ‘strncpy’ ‘strncpy’ ‘strncpy’ – ‘wcsncpy’ ‘u32_strncpy’ ‘stpncpy’ ‘stpncpy’ ‘stpncpy’ – ‘wcpncpy’ ‘u32_stpncpy’ ‘strcat’ ‘strcat’ ‘strcat’ ‘string_desc_concat’‘wcscat’‘u32_strcat’ ‘strncat’ ‘strncat’ ‘strncat’ – ‘wcsncat’ ‘u32_strncat’ ‘free’ ‘free’ ‘free’ ‘string_desc_free’‘free’ ‘free’ ‘strdup’ ‘strdup’ ‘strdup’ ‘string_desc_copy’‘wcsdup’‘u32_strdup’ ‘strndup’ ‘strndup’ ‘strndup’ – – – ‘mbswidth’ ‘mbswidth’ ‘mbswidth’ – ‘wcswidth’ ‘c32swidth’, ‘u32_strwidth’ ‘strtol’ ‘strtol’ ‘strtol’ – – – ‘strtoul’ ‘strtoul’ ‘strtoul’ – – – ‘strtoll’ ‘strtoll’ ‘strtoll’ – – – ‘strtoull’ ‘strtoull’ ‘strtoull’ – – – ‘strtoimax’ ‘strtoimax’ ‘strtoimax’ – ‘wcstoimax’ – ‘strtoumax’ ‘strtoumax’ ‘strtoumax’ – ‘wcstoumax’ – ‘strtof’ – ‘strtof’ – – – ‘strtod’ ‘c_strtod’ ‘strtod’ – – – ‘strtold’ ‘c_strtold’ ‘strtold’ – – – ‘strfromf’ – ‘strfromf’ – – – ‘strfromd’ – ‘strfromd’ – – – ‘strfroml’ – ‘strfroml’ – – – – – – – ‘mbstowcs’ ‘mbstoc32s’ – – – – ‘mbsrtowcs’ ‘mbsrtoc32s’ – – – – ‘mbsnrtowcs’ ‘mbsnrtoc32s’ – – – – ‘wcstombs’ ‘c32stombs’ – – – – ‘wcsrtombs’ ‘c32srtombs’ – – – – ‘wcsnrtombs’ ‘c32snrtombs’ 16.2 Characters =============== A _character_ is the elementary unit that strings are made of. What is a character? “A character is an element of a character set” is sort of a circular definition, but it highlights the fact that it is not merely a number. Although many characters are visually represented by a single glyph, there are characters that, for example, have a different glyph when used at the end of a word than when used inside a word. A character is also not the minimal rendered text processing unit; that is a grapheme cluster and in general consists of one or more characters. If you want to know more about the concept of character and various concepts associated with characters, refer to the Unicode standard. For the representation in memory of a character, various types have been in use, and some of them were failures: ‘char’ and ‘wchar_t’ were invented for this purpose, but are not the right types. ‘char32_t’ is the right type (successor of ‘wchar_t’); and ‘mbchar_t’ (defined by Gnulib) is an alternative for specific kinds of processing. 16.2.1 The ‘char’ type ---------------------- The ‘char’ type is in the C language since the beginning in the 1970ies, but – due to its limitation of 256 possible values – is no longer the adequate type for storing a character. Technically, it is still adequate in unibyte locales. But since most locales nowadays are multibyte locales, it makes no sense to write a program that runs only in unibyte locales. ISO C and POSIX standardized an API for characters of type ‘char’, in ‘’. This API is nowadays useless and obsolete, when it comes to general text processing. The important lessons to remember are: _A ‘char’ is just the elementary storage unit for a string, not a character._ _Never use ‘’!_ 16.2.2 The ‘wchar_t’ type ------------------------- The ISO C and POSIX standard creators made an attempt to overcome the dead end regarding the ‘char’ type. They introduced • a type ‘wchar_t’, designed to encapsulate a character, • a “wide string” type ‘wchar_t *’, with some API functions declared in ‘’, and • functions declared in ‘’ that were meant to supplant the ones in ‘’. Unfortunately, this API and its implementation has numerous problems: • On Windows platforms and on AIX in 32-bit mode, ‘wchar_t’ is a 16-bit type. This means that it can never accommodate an entire Unicode character. Either the ‘wchar_t *’ strings are limited to characters in UCS-2 (the “Basic Multilingual Plane” of Unicode), or – if ‘wchar_t *’ strings are encoded in UTF-16 – a ‘wchar_t’ represents only half of a character in the worst case, making the ‘’ functions pointless. • On Solaris and FreeBSD, the ‘wchar_t’ encoding is locale dependent and undocumented. This means, if you want to know any property of a ‘wchar_t’ character, other than the properties defined by ‘’ – such as whether it’s a dash, currency symbol, paragraph separator, or similar –, you have to convert it to ‘char *’ encoding first, by use of the function ‘wctomb’. • When you read a stream of wide characters, through the functions ‘fgetwc’ and ‘fgetws’, and when the input stream/file is not in the expected encoding, you have no way to determine the invalid byte sequence and do some corrective action. If you use these functions, your program becomes “garbage in - more garbage out” or “garbage in - abort”. As a consequence, it is better to use multibyte strings. Such multibyte strings can bypass limitations of the ‘wchar_t’ type, if you use functions defined in Gnulib and GNU libunistring for text processing. They can also faithfully transport malformed characters that were present in the input, without requiring the program to produce garbage or abort. 16.2.3 The ‘char32_t’ type -------------------------- The ISO C and POSIX standard creators then introduced the ‘char32_t’ type. In ISO C 11, it was conceptually a “32-bit wide character” type. In ISO C 23, its semantics has been further specified: A ‘char32_t’ value is a Unicode code point. Thus, the ‘char32_t’ type is not affected the problems that plague the ‘wchar_t’ type. The ‘char32_t’ type and its API are defined in the ‘’ header file. ISO C and POSIX specify only the basic functions for the ‘char32_t’ type, namely conversion of a single character (‘mbrtoc32’ and ‘c32rtomb’). For convenience, Gnulib adds API for classification and case conversion of characters. GNU libunistring can also be used on ‘char32_t’ values. Since ‘char32_t’ is the same as ‘uint32_t’, all ‘u32_*’ functions of GNU libunistring are applicable to arrays of ‘char32_t’ values. On glibc systems, use of the 32-bit wide strings (‘char32_t[]’) is exactly as efficient as the use of the older wide strings (‘wchar_t[]’). This is possible because on glibc, ‘wchar_t’ values already always were 32-bit and Unicode code points. ‘mbrtoc32’ is just an alias of ‘mbrtowc’. The Gnulib ‘*c32*’ functions are optimized so that on glibc systems they immediately redirect to the corresponding ‘*wc*’ functions. Gnulib implements the ISO C 23 semantics of ‘char32_t’ when you import the ‘uchar-c23’ module. Without this module, it implements only the ISO C 11 semantics; the effect is that on some platforms (macOS, FreeBSD, NetBSD, Solaris) a ‘char32_t’ value is the same as a ‘wchar_t’ value, not a Unicode code point. Thus, when you want to pass ‘char32_t’ values to GNU libunistring or to some Unicode centric Gnulib functions, you need the ‘uchar-c23’ module in order to do so without portability problems. 16.2.4 The ‘mbchar_t’ type -------------------------- Gnulib defines an alternate way to encode a multibyte character: ‘mbchar_t’. Its main feature is the ability to process a string or stream with some malformed characters without reporting an error. The type ‘mbchar_t’, defined in ‘"mbchar.h"’, holds a character in both the multibyte and the 32-bit wide character representation. In case of a malformed character only the multibyte representation is used. 16.2.4.1 Reading multibyte strings .................................. If you want to process (possibly multibyte) characters while reading them from a ‘FILE *’ stream, without reading them into a string first, the ‘mbfile’ module is made for this purpose. 16.2.5 Comparison of character APIs ----------------------------------- This table summarizes the API functions available for characters, in POSIX and in Gnulib. unibyte assume C wide 32-bit wide mbchar_t character locale character character character --------------------------------------------------------------------------- ‘== '\0'’ ‘== '\0'’ ‘== L'\0'’ ‘== 0’ ‘mb_isnul’ ‘==’ ‘==’ ‘==’ ‘==’ ‘mb_equal’ ‘isalnum’ ‘c_isalnum’ ‘iswalnum’ ‘c32isalnum’ ‘mb_isalnum’ ‘isalpha’ ‘c_isalpha’ ‘iswalpha’ ‘c32isalpha’ ‘mb_isalpha’ ‘isblank’ ‘c_isblank’ ‘iswblank’ ‘c32isblank’ ‘mb_isblank’ ‘iscntrl’ ‘c_iscntrl’ ‘iswcntrl’ ‘c32iscntrl’ ‘mb_iscntrl’ ‘isdigit’ ‘c_isdigit’ ‘iswdigit’ ‘c32isdigit’ ‘mb_isdigit’ ‘isgraph’ ‘c_isgraph’ ‘iswgraph’ ‘c32isgraph’ ‘mb_isgraph’ ‘islower’ ‘c_islower’ ‘iswlower’ ‘c32islower’ ‘mb_islower’ ‘isprint’ ‘c_isprint’ ‘iswprint’ ‘c32isprint’ ‘mb_isprint’ ‘ispunct’ ‘c_ispunct’ ‘iswpunct’ ‘c32ispunct’ ‘mb_ispunct’ ‘isspace’ ‘c_isspace’ ‘iswspace’ ‘c32isspace’ ‘mb_isspace’ ‘isupper’ ‘c_isupper’ ‘iswupper’ ‘c32isupper’ ‘mb_isupper’ ‘isxdigit’ ‘c_isxdigit’ ‘iswxdigit’ ‘c32isxdigit’ ‘mb_isxdigit’ – – ‘wctype’ ‘c32_get_type_test’– – – ‘iswctype’ ‘c32_apply_type_test’– ‘tolower’ ‘c_tolower’ ‘towlower’ ‘c32tolower’ – ‘toupper’ ‘c_toupper’ ‘towupper’ ‘c32toupper’ – – – ‘wctrans’ ‘c32_get_mapping’– – – ‘towctrans’ ‘c32_apply_mapping’– – – ‘wcwidth’ ‘c32width’ ‘mb_width’ 17 Particular Modules ********************* 17.1 alloca =========== The ‘alloca’ module provides for a function ‘alloca’ which allocates memory on the stack, where the system allows it. A memory block allocated with ‘alloca’ exists only until the function that calls ‘alloca’ returns or exits abruptly. There are a few systems where this is not possible: HP-UX systems, and some other platforms when the C++ compiler is used. On these platforms the alloca module provides a ‘malloc’ based emulation. This emulation will not free a memory block immediately when the calling function returns, but rather will wait until the next ‘alloca’ call from a function with the same or a shorter stack length. Thus, in some cases, a few memory blocks will be kept although they are not needed any more. The user can ‘#include ’ and use ‘alloca’ on all platforms. Note that the ‘#include ’ must be the first one after the autoconf-generated ‘config.h’, for AIX 3 compatibility. Thanks to IBM for this nice restriction! Note that GCC 3.1 and 3.2 can _inline_ functions that call ‘alloca’. When this happens, the memory blocks allocated with ‘alloca’ will not be freed until _the end of the calling function_. If this calling function runs a loop calling the function that uses ‘alloca’, the program easily gets a stack overflow and crashes. To protect against this compiler behaviour, you can mark the function that uses ‘alloca’ with the following attribute: #ifdef __GNUC__ __attribute__ ((__noinline__)) #endif An alternative to this module is the ‘alloca-opt’ module. 17.2 alloca-opt =============== The ‘alloca-opt’ module provides for a function ‘alloca’ which allocates memory on the stack, where the system allows it. A memory block allocated with ‘alloca’ exists only until the function that calls ‘alloca’ returns or exits abruptly. There are a few systems where this is not possible: HP-UX systems, and some other platforms when the C++ compiler is used. On these platforms the ‘alloca-opt’ module provides no replacement, just a preprocessor macro HAVE_ALLOCA. The user can ‘#include ’ on all platforms, and use ‘alloca’ on those platforms where the preprocessor macro HAVE_ALLOCA evaluates to true. If HAVE_ALLOCA is false, the code should use a heap-based memory allocation based on ‘malloc’ or (in C++) ‘new’. Note that the ‘#include ’ must be the first one after the autoconf-generated ‘config.h’, for AIX 3 compatibility. Thanks to IBM for this nice restriction! Note that GCC 3.1 and 3.2 can _inline_ functions that call ‘alloca’. When this happens, the memory blocks allocated with ‘alloca’ will not be freed until _the end of the calling function_. If this calling function runs a loop calling the function that uses ‘alloca’, the program easily gets a stack overflow and crashes. To protect against this compiler behaviour, you can mark the function that uses ‘alloca’ with the following attribute: #ifdef __GNUC__ __attribute__ ((__noinline__)) #endif 17.3 Safe Allocation Macros =========================== The standard C library malloc/realloc/calloc/free APIs are prone to a number of common coding errors. The ‘safe-alloc’ module provides macros that make it easier to avoid many of them. It still uses the standard C allocation functions behind the scenes. Some of the memory allocation mistakes that are commonly made are • passing the incorrect number of bytes to ‘malloc’, especially when allocating an array, • unchecked integer overflow when calculating array sizes, • fail to check the return value of ‘malloc’ and ‘realloc’ for errors, • forget to fully initialize memory just allocated with ‘malloc’, • duplicate calls to ‘free’ by forgetting to set the pointer variable to ‘NULL’, • leaking memory in calls to ‘realloc’ when that call fails. The ‘safe-alloc’ module addresses these problems in the following way: • It defines macros that wrap around the standard C allocation functions. That makes it possible to use the compiler’s knowledge of the size of objects for allocation; it also allows setting pointers passed in as arguments when appropriate. • It uses return values only for a success/failure error condition flag, and annotates them with GCC’s ‘__warn_unused_result__’ attribute. • When allocating a fresh array, it uses ‘calloc’ instead of ‘malloc’ so that the array’s contents are zeroed. However, memory added to an already-existing array is uninitialized. -- Macro: int ALLOC (ptr) Allocate ‘sizeof *ptr’ bytes of memory and store the address of allocated memory in ‘ptr’. Fill the newly allocated memory with zeros. Returns −1 on failure, 0 on success. -- Macro: int ALLOC_N (ptr, count) Allocate an array of ‘count’ elements, each ‘sizeof *ptr’ bytes long, and store the address of allocated memory in ‘ptr’. Fill the newly allocated memory with zeros. Returns −1 on failure, 0 on success. -- Macro: int ALLOC_N_UNINITIALIZED (ptr, count) Allocate an array of ‘count’ elements, each ‘sizeof *ptr’ bytes long, and store the address of allocated memory in ‘ptr’. The allocated memory is not initialized. Returns −1 on failure, 0 on success. -- Macro: int REALLOC_N (ptr, count) Reallocate the memory pointed to by ‘ptr’ to be big enough to hold at least ‘count’ elements, each ‘sizeof *ptr’ bytes long, and store the address of allocated memory in ‘ptr’. If reallocation fails, the ‘ptr’ variable is not modified. If the new array is smaller than the old one, discard excess contents; if larger, the newly added storage is not initialized. Returns −1 on failure, 0 on success. -- Macro: void FREE (ptr) Free the memory stored in ‘ptr’ and set ‘ptr’ to ‘NULL’. 17.4 Attributes =============== This module provides a header file ‘attribute.h’ that defines macros related to C and C++ attributes and the GCC ‘__attribute__’ keyword. Here is an example of its use: #include NODISCARD extern char *crypt (char const *, char const *) ATTRIBUTE_NOTHROW ATTRIBUTE_LEAF ATTRIBUTE_NONNULL ((1, 2)); ‘NODISCARD’ expands to ‘[[nodiscard]]’ if the compiler supports this C23 syntax, otherwise to ‘__attribute__ ((__warn_unused_result__))’ if the compiler is a recent-enough GCC or GCC-like compiler, otherwise to nothing. ‘ATTRIBUTE_NOTHROW’ expands to ‘__attribute__ ((__nothrow__))’ if the compiler is a recent-enough GCC or GCC-like compiler, and to nothing otherwise. Similarly for ‘ATTRIBUTE_LEAF’. ‘ATTRIBUTE_NONNULL ((1, 2))’ expands to ‘__attribute__ ((__nonnull__ (1, 2)))’ if the compiler is recent-enough GCC, and to nothing otherwise. Most of these attribute names begin with ‘ATTRIBUTE_’. A few do not, because they are part of C23 and their names are not likely to clash with other macro names. These macros are ‘DEPRECATED’, ‘FALLTHROUGH’, ‘MAYBE_UNUSED’, and ‘NODISCARD’, which can be defined to ‘[[deprecated]]’ etc. on C23 platforms. Also, these exceptional macros should be placed at the start of function declarations, whereas the ‘ATTRIBUTE_*’ macros can be placed at the end. 17.5 Compile-time Assertions ============================ This module provides a header file ‘verify.h’ that defines macros related to compile-time verification. Two of these macros are ‘verify (V)’ and ‘verify_expr (V, EXPR)’. Both accept an integer constant expression argument V and verify that it is nonzero. If not, a compile-time error results. These two macros implement compile-time tests, as opposed to the standard ‘assert’ macro which supports only runtime tests. Since the tests occur at compile-time, they are more reliable, and they require no runtime overhead. ‘verify (V);’ is a declaration; it can occur outside of functions. In contrast, ‘verify_expr (V, EXPR)’ is an expression that returns the value of EXPR; it can be used in macros that expand to expressions. If EXPR is an integer constant expression, then ‘verify_expr (V, EXPR)’ is also an integer constant expression. Although EXPR and ‘verify_expr (V, EXPR)’ are guaranteed to have the same side effects and value and type (after integer promotion), they need not have the same type if EXPR’s type is an integer that is narrower than ‘int’ or ‘unsigned int’. V should be an integer constant expression in the sense of the C standard. Its leaf operands should be integer, enumeration, or character constants; or ‘sizeof’ expressions that return constants; or floating constants that are the immediate operands of casts. Outside a ‘sizeof’ subexpression, V should not contain any assignments, function calls, comma operators, casts to non-integer types, or subexpressions whose values are outside the representable ranges for their types. If V is not an integer constant expression, then a compiler might reject a usage like ‘verify (V);’ even when V is nonzero. Although the standard ‘assert’ macro is a runtime test, C23 and C++17 specify a builtin ‘static_assert (V)’, which differs from ‘verify’ in two major ways. First, it can also be used within a ‘struct’ or ‘union’ specifier, in place of an ordinary member declaration. Second, it allows the programmer to specify, as an optional second argument, a compile-time diagnostic as a string literal. If your program is not intended to be portable to compilers that lack C23 or C++17 ‘static_assert’, the only advantage of ‘verify’ is that its name is a bit shorter. The ‘verify.h’ header defines one more macro, ‘assume (E)’, which expands to an expression of type ‘void’ that causes the compiler to assume that E yields a nonzero value. E should be a scalar expression, and should not have side effects; it may or may not be evaluated. The behavior is undefined if E would yield zero. The main use of ‘assume’ is optimization, as the compiler may be able to generate better code if it assumes E. For best results, E should be simple enough that a compiler can determine that it has no side effects: if E calls an external function or accesses volatile storage the compiler may not be able to optimize E away and ‘assume (E)’ may therefore slow down the program. Here are some example uses of these macros. #include #include #include /* Verify that time_t is an integer type. */ verify ((time_t) 1.5 == 1); /* Verify that time_t is no smaller than int. */ verify (sizeof (int) <= sizeof (time_t)); /* Verify that time_t is signed. */ verify ((time_t) -1 < 0); /* Verify that time_t uses two's complement representation. */ verify (~ (time_t) -1 == 0); /* Return the maximum value of the integer type T, verifying that T is an unsigned integer type. The cast to (T) is outside the call to verify_expr so that the result is of type T even when T is narrower than unsigned int. */ #define MAX_UNSIGNED_VAL(t) \ ((T) verify_expr (0 < (T) -1, -1)) /* Return T divided by CHAR_MAX + 1, where behavior is undefined if T < 0. In the common case where CHAR_MAX is 127 the compiler can therefore implement the division by shifting T right 7 bits, an optimization that would not be valid if T were negative. */ time_t time_index (time_t t) { assume (0 <= t); return t / (CHAR_MAX + 1); } 17.6 Non-returning Functions ============================ A "non-returning" function is a function which cannot return normally. Instead of returning, it can loop forever, or it can transfer control via ‘abort’, ‘execvp’, ‘exit’, ‘longjmp’, ‘throw’ (in C++), or similar mechanisms. Non-returning functions are declared with a ‘void’ return type. It helps the compiler’s ability to emit sensible warnings, following data-flow analysis, to declare which functions are non-returning. It can also help generate more-efficient code, as there is no need to save a return address when calling a non-returning function. Gnulib has multiple ways to support such a declaration: • The ‘_Noreturn’ keyword. No modules are needed, as Gnulib arranges for ‘’ to define ‘_Noreturn’ to an appropriate replacement on platforms lacking it. Unfortunately, although this approach works for all current C versions, the ‘_Noreturn’ keyword is obsolescent in C23. • The ‘noreturn’ module. It provides a way to put this declaration at function declarations, at function definitions, and in function pointer types. The identifiers to use are: - ‘_GL_NORETURN_FUNC’ for use in function declarations and function definitions. - ‘_GL_NORETURN_FUNCPTR’ for use on function pointers. The include file is ‘’. Which of the approaches to use? If the non-returning functions you have to declare are unlikely to be accessed through function pointers, you should use ‘_Noreturn’; otherwise the module ‘noreturn’ provides for better data-flow analysis and thus for better warnings. There is also an obsolete ‘stdnoreturn’ module, but its use is no longer recommended. 17.7 Integer Properties ======================= The ‘intprops’ module consists of an include file ‘’ that defines several macros useful for testing properties of integer types. Integer overflow is a common source of problems in programs written in C and other languages. In some cases, such as signed integer arithmetic in C programs, the resulting behavior is undefined, and practical platforms do not always behave as if integers wrap around reliably. In other cases, such as unsigned integer arithmetic in C, the resulting behavior is well-defined, but programs may still misbehave badly after overflow occurs. Many techniques have been proposed to attack these problems. These include precondition testing, wraparound behavior where signed integer arithmetic is guaranteed to be modular, saturation semantics where overflow reliably yields an extreme value, undefined behavior sanitizers where overflow is guaranteed to trap, and various static analysis techniques. Gnulib supports wraparound arithmetic and precondition testing, as these are relatively easy to support portably and efficiently. There are two families of precondition tests: the first, for integer types, is easier to use, while the second, for integer ranges, has a simple and straightforward portable implementation. Like other Gnulib modules, the implementation of the ‘intprops’ module assumes that integers use a two’s complement representation, but it does not assume that signed integer arithmetic wraps around. *Note Other portability assumptions::. 17.7.1 Arithmetic Type Properties --------------------------------- ‘TYPE_IS_INTEGER (T)’ is an arithmetic constant expression that yields 1 if the arithmetic type T is an integer type, 0 otherwise. ‘bool’ counts as an integer type. ‘TYPE_SIGNED (T)’ is an arithmetic constant expression that yields 1 if the real type T is a signed integer type or a floating type, 0 otherwise. If T is an integer type, ‘TYPE_SIGNED (T)’ is an integer constant expression. ‘EXPR_SIGNED (E)’ yields 1 if the real expression E has a signed integer type or a floating type, 0 otherwise. If E is an integer constant expression or an arithmetic constant expression, ‘EXPR_SIGNED (E)’ is likewise. The expression E is not evaluated, and ‘EXPR_SIGNED (E)’ is typically optimized to a constant. Example usage: #include #include enum { clock_t_is_integer = TYPE_IS_INTEGER (clock_t), uid_t_is_signed = TYPE_SIGNED (uid_t) }; int CLOCKS_PER_SEC_is_signed (void) { return EXPR_SIGNED (CLOCKS_PER_SEC); } 17.7.2 Integer Bounds --------------------- ‘INT_BUFSIZE_BOUND (T)’ is an integer constant expression that is a bound on the size of the string representing an integer type or expression T in decimal notation, including the terminating null character and any leading ‘-’ character. For example, if ‘INT_BUFSIZE_BOUND (int)’ is 12, any value of type ‘int’ can be represented in 12 bytes or less, including the terminating null. The bound is not necessarily tight. Example usage: #include #include int int_strlen (int i) { char buf[INT_BUFSIZE_BOUND (int)]; return sprintf (buf, "%d", i); } ‘INT_STRLEN_BOUND (T)’ is an integer constant expression that is a bound on the length of the string representing an integer type or expression T in decimal notation, including any leading ‘-’ character. This is one less than ‘INT_BUFSIZE_BOUND (T)’. ‘TYPE_MINIMUM (T)’ and ‘TYPE_MAXIMUM (T)’ are integer constant expressions equal to the minimum and maximum values of the integer type T. These expressions are of the type T. Example usage: #include #include bool in_off_t_range (long long int a) { return TYPE_MINIMUM (off_t) <= a && a <= TYPE_MAXIMUM (off_t); } 17.7.3 Checking Integer Overflow -------------------------------- Signed integer arithmetic has undefined behavior on overflow in C. Although almost all modern computers use two’s complement signed arithmetic that is well-defined to wrap around, C compilers routinely optimize assuming that signed integer overflow cannot occur, which means that a C program cannot easily get at the underlying machine arithmetic. For example: if ((a + b < b) == (a < 0)) a += b; else printf ("overflow\n"); might not work as expected if ‘a’ and ‘b’ are signed, because a compiler can assume that signed overflow cannot occur and treat the entire ‘if’ expression as if it were true. And even if ‘a’ is unsigned, the expression might not work as expected if ‘b’ is negative or is wider than ‘a’. The following macros work around this problem by yielding an overflow indication while computing the sum, difference, or product of two integers. For example, if ‘i’ is of type ‘int’, ‘INT_ADD_OK (INT_MAX - 1, 1, &i)’ sets ‘i’ to ‘INT_MAX’ and yields 1, whereas ‘INT_ADD_OK (INT_MAX, 1, &i)’ yields 0. Example usage: #include #include /* Compute A * B, reporting whether overflow occurred. */ void print_product (long int a, long int b) { long int r; if (INT_MULTIPLY_OK (a, b, &r)) printf ("result is %ld\n", r); else printf ("overflow\n"); } These macros work for both signed and unsigned integers, so they can be used with integer types like ‘time_t’ that may or may not be signed, depending on the platform. These macros have the following restrictions: • Their first two arguments must be integer expressions. • Their last argument must be a non-null pointer to an integer. • They may evaluate their arguments zero or multiple times, so the arguments should not have side effects. • They are not necessarily constant expressions, even if all their arguments are constant expressions. ‘INT_ADD_OK (A, B, R)’ Compute the sum of A and B. If it fits into ‘*R’, store it there and yield 1. Otherwise yield 0, possibly modifying ‘*R’ to an unspecified value. See above for restrictions. ‘INT_SUBTRACT_OK (A, B, R)’ Compute the difference between A and B. If it fits into ‘*R’, store it there and yield 1. Otherwise yield 0, possibly modifying ‘*R’ to an unspecified value. See above for restrictions. ‘INT_MULTIPLY_OK (A, B, R)’ Compute the product of A and B. If it fits into ‘*R’, store it there and yield 1. Otherwise yield 0, possibly modifying ‘*R’ to an unspecified value. See above for restrictions. Other macros are available if you need wrapped-around results when overflow occurs (*note Wraparound Arithmetic::), or if you need to check for overflow in operations other than addition, subtraction, and multiplication (*note Integer Type Overflow::). 17.7.4 Wraparound Arithmetic with Integers ------------------------------------------ Signed integer arithmetic has undefined behavior on overflow in C. Although almost all modern computers use two’s complement signed arithmetic that is well-defined to wrap around, C compilers routinely optimize assuming that signed integer overflow cannot occur, which means that a C program cannot easily get at the underlying machine arithmetic. For example, on a typical machine with 32-bit two’s complement ‘int’ the expression ‘INT_MAX + 1’ does not necessarily yield ‘INT_MIN’, because the compiler may do calculations with a 64-bit register, or may generate code that traps on signed integer overflow. The following macros work around this problem by storing the wraparound value, i.e., the low-order bits of the correct answer, and by yielding an overflow indication. For example, if ‘i’ is of type ‘int’, ‘INT_ADD_WRAPV (INT_MAX, 1, &i)’ sets ‘i’ to ‘INT_MIN’ and yields 1 on a two’s complement machine. *Note Integer Type Overflow::. Example usage: #include #include /* Print the low order bits of A * B, reporting whether overflow occurred. */ void print_product (long int a, long int b) { long int r; int overflow = INT_MULTIPLY_WRAPV (a, b, &r); printf ("result is %ld (%s)\n", r, (overflow ? "after overflow" : "no overflow")); } These macros work for both signed and unsigned integers, so they can be used with integer types like ‘time_t’ that may or may not be signed, depending on the platform. These macros have the following restrictions: • Their first two arguments must be integer expressions. • Their last argument must be a non-null pointer to an integer. • They may evaluate their arguments zero or multiple times, so the arguments should not have side effects. • They are not necessarily constant expressions, even if all their arguments are constant expressions. ‘INT_ADD_WRAPV (A, B, R)’ Store the low-order bits of the sum of A and B into ‘*R’. Yield 1 if overflow occurred, 0 if the low-order bits are the mathematically-correct sum. See above for restrictions. ‘INT_SUBTRACT_WRAPV (A, B, R)’ Store the low-order bits of the difference between A and B into ‘*R’. Yield 1 if overflow occurred, 0 if the low-order bits are the mathematically-correct difference. See above for restrictions. ‘INT_MULTIPLY_WRAPV (A, B, R)’ Store the low-order bits of the product of A and B into ‘*R’. Yield 1 if overflow occurred, 0 if the low-order bits are the mathematically-correct product. See above for restrictions. If your code includes ‘’ only for these ‘_WRAPV’ macros, you may prefer to use Gnulib’s ‘stdckdint’ module instead, as it supports similar macros that were standardized in C23 and are therefore independent of Gnulib if your code can assume C23 or later. *Note stdckdint.h::. Other macros are available if you do not need wrapped-around results when overflow occurs (*note Checking Integer Overflow::), or if you need to check for overflow in operations other than addition, subtraction, and multiplication (*note Integer Type Overflow::). 17.7.5 Integer Type Overflow ---------------------------- Although unsigned integer arithmetic wraps around modulo a power of two, signed integer arithmetic has undefined behavior on overflow in C. Almost all modern computers use two’s complement signed arithmetic that is well-defined to wrap around, but C compilers routinely optimize based on the assumption that signed integer overflow cannot occur, which means that a C program cannot easily get at the underlying machine behavior. For example, the signed integer expression ‘(a + b < b) != (a < 0)’ is not a reliable test for whether ‘a + b’ overflows, because a compiler can assume that signed overflow cannot occur and treat the entire expression as if it were false. These macros yield 1 if the corresponding C operators overflow, 0 otherwise. They work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. They are integer constant expressions if their arguments are. They are typically easier to use than the integer range overflow macros (*note Integer Range Overflow::), and they support more operations and evaluation contexts than the integer overflow checking macros (*note Checking Integer Overflow::) or the wraparound macros (*note Wraparound Arithmetic::). These macros can be tricky to use with arguments narrower than ‘int’. For example, in the common case with 16-bit ‘short int’ and 32-bit ‘int’, if ‘a’ and ‘b’ are of type ‘short int’ then ‘INT_MULTIPLY_OVERFLOW (a, b)’ always yields 0, as ‘a * b’ cannot overflow due to C’s rule that ‘a’ and ‘b’ are widened to ‘int’ before multiplying. For this reason, often it is better to use the integer overflow checking macros (*note Checking Integer Overflow::) or the wraparound macros (*note Wraparound Arithmetic::) when checking for overflow in addition, subtraction, or multiplication. Example usage: #include #include #include /* Print A * B if in range, an overflow indicator otherwise. */ void print_product (long int a, long int b) { if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("multiply would overflow"); else printf ("product is %ld", a * b); } /* Does the product of two ints always fit in a long int? */ enum { INT_PRODUCTS_FIT_IN_LONG = ! (INT_MULTIPLY_OVERFLOW ((long int) INT_MIN, INT_MIN)) }; These macros have the following restrictions: • Their arguments must be integer expressions. • They may evaluate their arguments zero or multiple times, so the arguments should not have side effects. These macros are tuned for their last argument being a constant. ‘INT_ADD_OVERFLOW (A, B)’ Yield 1 if ‘A + B’ would overflow, 0 otherwise. See above for restrictions. ‘INT_SUBTRACT_OVERFLOW (A, B)’ Yield 1 if ‘A - B’ would overflow, 0 otherwise. See above for restrictions. ‘INT_NEGATE_OVERFLOW (A)’ Yields 1 if ‘-A’ would overflow, 0 otherwise. See above for restrictions. ‘INT_MULTIPLY_OVERFLOW (A, B)’ Yield 1 if ‘A * B’ would overflow, 0 otherwise. See above for restrictions. ‘INT_DIVIDE_OVERFLOW (A, B)’ Yield 1 if ‘A / B’ would overflow, 0 otherwise. See above for restrictions. Division overflow can happen on two’s complement hosts when dividing the most negative integer by −1. This macro does not check for division by zero. ‘INT_REMAINDER_OVERFLOW (A, B)’ Yield 1 if ‘A % B’ would overflow, 0 otherwise. See above for restrictions. Remainder overflow can happen on two’s complement hosts when dividing the most negative integer by −1; although the mathematical result is always 0, in practice some implementations trap, so this counts as an overflow. This macro does not check for division by zero. ‘INT_LEFT_SHIFT_OVERFLOW (A, B)’ Yield 1 if ‘A << B’ would overflow, 0 otherwise. See above for restrictions. The C standard says that behavior is undefined for shifts unless 0≤B #include #include void print_product (long int a, long int b) { if (INT_MULTIPLY_RANGE_OVERFLOW (a, b, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", a * b); } /* Does the product of two ints always fit in a long int? */ enum { INT_PRODUCTS_FIT_IN_LONG = ! (INT_MULTIPLY_RANGE_OVERFLOW ((long int) INT_MIN, (long int) INT_MIN, LONG_MIN, LONG_MAX)) }; These macros have the following restrictions: • Their arguments must be integer expressions. • They may evaluate their arguments zero or multiple times, so the arguments should not have side effects. • The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned values should use a zero MIN of the proper type, for example, ‘(unsigned int) 0’. These macros are tuned for constant MIN and MAX. For commutative operations such as ‘A + B’, they are also tuned for constant B. ‘INT_ADD_RANGE_OVERFLOW (A, B, MIN, MAX)’ Yield 1 if ‘A + B’ would overflow in [MIN,MAX] integer arithmetic, 0 otherwise. See above for restrictions. ‘INT_SUBTRACT_RANGE_OVERFLOW (A, B, MIN, MAX)’ Yield 1 if ‘A - B’ would overflow in [MIN,MAX] integer arithmetic, 0 otherwise. See above for restrictions. ‘INT_NEGATE_RANGE_OVERFLOW (A, MIN, MAX)’ Yield 1 if ‘-A’ would overflow in [MIN,MAX] integer arithmetic, 0 otherwise. See above for restrictions. ‘INT_MULTIPLY_RANGE_OVERFLOW (A, B, MIN, MAX)’ Yield 1 if ‘A * B’ would overflow in [MIN,MAX] integer arithmetic, 0 otherwise. See above for restrictions. ‘INT_DIVIDE_RANGE_OVERFLOW (A, B, MIN, MAX)’ Yield 1 if ‘A / B’ would overflow in [MIN,MAX] integer arithmetic, 0 otherwise. See above for restrictions. Division overflow can happen on two’s complement hosts when dividing the most negative integer by −1. This macro does not check for division by zero. ‘INT_REMAINDER_RANGE_OVERFLOW (A, B, MIN, MAX)’ Yield 1 if ‘A % B’ would overflow in [MIN,MAX] integer arithmetic, 0 otherwise. See above for restrictions. Remainder overflow can happen on two’s complement hosts when dividing the most negative integer by −1; although the mathematical result is always 0, in practice some implementations trap, so this counts as an overflow. This macro does not check for division by zero. ‘INT_LEFT_SHIFT_RANGE_OVERFLOW (A, B, MIN, MAX)’ Yield 1 if ‘A << B’ would overflow in [MIN,MAX] integer arithmetic, 0 otherwise. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0≤B #define AAA_INLINE _GL_EXTERN_INLINE #include whereas ‘bbb.c’ and ‘ccc.c’ can include ‘aaa.h’ in the usual way. C99 compilers expand ‘AAA_INLINE’ to C99-style ‘inline’ usage, where ‘aaa_fun’ is declared ‘extern inline’ in ‘aaa.c’ and plain ‘inline’ in other modules. Non-C99 compilers that are compatible with GCC use GCC-specific syntax to accomplish the same ends. Other non-C99 compilers use ‘static inline’ so they suffer from code bloat, but they are not mainline platforms and will die out eventually. ‘_GL_INLINE’ is a portable alternative to C99 plain ‘inline’. ‘_GL_EXTERN_INLINE’ is a portable alternative to C99 ‘extern inline’. Invoke ‘_GL_INLINE_HEADER_BEGIN’ before all uses of ‘_GL_INLINE’ in an include file. This suppresses some bogus warnings in GCC versions before 5.1. If an include file includes other files, it is better to invoke this macro after including the other files. Invoke ‘_GL_INLINE_HEADER_END’ after all uses of ‘_GL_INLINE’ in an include file. 17.10 Handling closed standard file descriptors =============================================== Usually, when a program gets invoked, its file descriptors 0 (for standard input), 1 (for standard output), and 2 (for standard error) are open. But there are situations when some of these file descriptors are closed. These situations can arise when • The invoking process invokes ‘close()’ on the file descriptor before ‘exec’, or • The invoking process invokes ‘posix_spawn_file_actions_addclose()’ for the file descriptor before ‘posix_spawn’ or ‘posix_spawnp’, or • The invoking process is a Bourne shell, and the shell script uses the POSIX syntax for closing the file descriptor: ‘<&-’ for closing standard input, ‘>&-’ for closing standard output, or ‘2>&-’ for closing standard error. When a closed file descriptor is accessed through a system call, such as ‘fcntl()’, ‘fstat()’, ‘read()’, or ‘write()’, the system calls fails with error ‘EBADF’ ("Bad file descriptor"). When a new file descriptor is allocated, the operating system chooses the smallest non-negative integer that does not yet correspond to an open file descriptor. So, when a given fd (0, 1, or 2) is closed, opening a new file descriptor may assign the new file descriptor to this fd. This can have unintended effects, because now standard input/output/error of your process is referring to a file that was not meant to be used in that role. This situation is a security risk because the behaviour of the program in this situation was surely never tested, therefore anything can happen then – from overwriting precious files of the user to endless loops. To deal with this situation, you first need to determine whether your program is affected by the problem. • Does your program invoke functions that allocate new file descriptors? These are the system calls • ‘open()’, ‘openat()’, ‘creat()’ • ‘dup()’ • ‘fopen()’, ‘freopen()’ • ‘pipe()’, ‘pipe2()’, ‘popen()’ • ‘opendir()’ • ‘tmpfile()’, ‘mkstemp()’, ‘mkstemps()’, ‘mkostemp()’, ‘mkostemps()’ Note that you also have to consider the libraries that your program uses. • If your program may open two or more file descriptors or FILE streams for reading at the same time, and some of them may reference standard input, your program _is affected_. • If your program may open two or more file descriptors or FILE streams for writing at the same time, and some of them may reference standard output or standard error, your program _is affected_. • If your program does not open new file descriptors or FILE streams, it is _not affected_. • If your program opens only one new file descriptor or FILE stream at a time, it is _not affected_. This is often the case for programs that are structured in simple phases: first a phase where input is read from a file into memory, then a phase of processing in memory, finally a phase where the result is written to a file. • If your program opens only two new file descriptors or FILE streams at a time, out of which one is for reading and the one is for writing, it is _not affected_. This is because if the first file descriptor is allocated and the second file descriptor is picked as 0, 1, or 2, and both happen to be the same, writing to the one opened in ‘O_RDONLY’ mode will produce an error ‘EBADF’, as desired. If your program is affected, what is the mitigation? Some operating systems install open file descriptors in place of the closed ones, either in the ‘exec’ system call or during program startup. When such a file descriptor is accessed through a system call, it behaves like an open file descriptor opened for the “wrong” direction: the system calls ‘fcntl()’ and ‘fstat()’ succeed, whereas ‘read()’ from fd 0 and ‘write()’ to fd 1 or 2 fail with error ‘EBADF’ ("Bad file descriptor"). The important point here is that when your program allocates a new file descriptor, it will have a value greater than 2. This mitigation is enabled on HP-UX, for all programs, and on glibc, FreeBSD, NetBSD, OpenBSD, but only for setuid or setgid programs. Since it is operating system dependent, it is not a complete mitigation. For a complete mitigation, Gnulib provides two alternative sets of modules: • The ‘xstdopen’ module. • The ‘*-safer’ modules: ‘fcntl-safer’, ‘openat-safer’, ‘unistd-safer’, ‘fopen-safer’, ‘freopen-safer’, ‘pipe2-safer’, ‘popen-safer’, ‘dirent-safer’, ‘tmpfile-safer’, ‘stdlib-safer’. The approach with the ‘xstdopen’ module is simpler, but it adds three system calls to program startup. Whereas the approach with the ‘*-safer’ modules is more complex, but adds no overhead (no additional system calls) in the normal case. To use the approach with the ‘xstdopen’ module: 1. Import the module ‘xstdopen’ from Gnulib. 2. In the compilation unit that contains the ‘main’ function, include ‘"xstdopen.h"’. 3. In the ‘main’ function, near the beginning, namely right after the i18n related initializations (‘setlocale’, ‘bindtextdomain’, ‘textdomain’ invocations, if any) and the ‘closeout’ initialization (if any), insert the invocation: /* Ensure that stdin, stdout, stderr are open. */ xstdopen (); To use the approach with the ‘*-safer’ modules: 1. Import the relevant modules from Gnulib. 2. In the compilation units that contain these function calls, include the replacement header file. Do so according to this table: Function Module Header file --------------------------------------------------------------------------- ‘open()’ ‘fcntl-safer’ ‘"fcntl--.h"’ ‘openat()’ ‘openat-safer’ ‘"fcntl--.h"’ ‘creat()’ ‘fcntl-safer’ ‘"fcntl--.h"’ ‘dup()’ ‘unistd-safer’ ‘"unistd--.h"’ ‘fopen()’ ‘fopen-safer’ ‘"stdio--.h"’ ‘freopen()’ ‘freopen-safer’ ‘"stdio--.h"’ ‘pipe()’ ‘unistd-safer’ ‘"unistd--.h"’ ‘pipe2()’ ‘pipe2-safer’ ‘"unistd--.h"’ ‘popen()’ ‘popen-safer’ ‘"stdio--.h"’ ‘opendir()’ ‘dirent-safer’ ‘"dirent--.h"’ ‘tmpfile()’ ‘tmpfile-safer’ ‘"stdio--.h"’ ‘mkstemp()’ ‘stdlib-safer’ ‘"stdlib--.h"’ ‘mkstemps()’ ‘stdlib-safer’ ‘"stdlib--.h"’ ‘mkostemp()’ ‘stdlib-safer’ ‘"stdlib--.h"’ ‘mkostemps()’ ‘stdlib-safer’ ‘"stdlib--.h"’ 17.11 Handling strings with NUL characters ========================================== Strings in C are usually represented by a character sequence with a terminating NUL character. A ‘char *’, pointer to the first byte of this character sequence, is what gets passed around as function argument or return value. The major restriction of this string representation is that it cannot handle strings that contain NUL characters: such strings will appear shorter than they were meant to be. In most application areas, this is not a problem, and the ‘char *’ type is well usable. In areas where strings with embedded NUL characters need to be handled, the common approach is to use a ‘char *ptr’ pointer variable together with a ‘size_t nbytes’ variable (or an ‘idx_t nbytes’ variable, if you want to avoid problems due to integer overflow). This works fine in code that constructs or manipulates strings with embedded NUL characters. But when it comes to _storing_ them, for example in an array or as key or value of a hash table, one needs a type that combines these two fields. The Gnulib modules ‘string-desc’, ‘xstring-desc’, and ‘string-desc-quotearg’ provide such a type. We call it a “string descriptor” and name it ‘string_desc_t’. The type ‘string_desc_t’ is a struct that contains a pointer to the first byte and the number of bytes of the memory region that make up the string. An additional terminating NUL byte, that may be present in memory, is not included in this byte count. This type implements the same concept as ‘std::string_view’ in C++, or the ‘String’ type in Java. A ‘string_desc_t’ can be passed to a function as an argument, or can be the return value of a function. This is type-safe: If, by mistake, a programmer passes a ‘string_desc_t’ to a function that expects a ‘char *’ argument, or vice versa, or assigns a ‘string_desc_t’ value to a variable of type ‘char *’, or vice versa, the compiler will report an error. Functions related to string descriptors are provided: • Side-effect-free operations in ‘"string-desc.h"’, • Memory-allocating operations in ‘"string-desc.h"’, • Memory-allocating operations with out-of-memory checking in ‘"xstring-desc.h"’, • Operations with side effects in ‘"string-desc.h"’. For outputting a string descriptor, the ‘*printf’ family of functions cannot be used directly. A format string directive such as ‘"%.*s"’ would not work: • it would stop the output at the first encountered NUL character, • it would require to cast the number of bytes to ‘int’, and thus would not work for strings longer than ‘INT_MAX’ bytes. Therefore Gnulib offers • a function ‘string_desc_fwrite’ that outputs a string descriptor to a ‘FILE’ stream, • a function ‘string_desc_write’ that outputs a string descriptor to a file descriptor, • and for those applications where the NUL characters should become visible as ‘\0’, a family of ‘quotearg’ based functions, that allow to specify the escaping rules in detail. The functionality is thus split across three modules as follows: • The module ‘string-desc’, under LGPL, defines the type and elementary functions. • The module ‘xstring-desc’, under GPL, defines the memory-allocating functions with out-of-memory checking. • The module ‘string-desc-quotearg’, under GPL, defines the ‘quotearg’ based functions. 17.12 Container data types ========================== Gnulib provides several generic container data types. They can be used to organize collections of application-defined objects. 17.12.1 Ordinary container data types ------------------------------------- Data type Details Module Main Include include file for file operations with out-of-memory checking ----------------------------------------------------------------------------- Sequential Can contain any number of objects ‘list’ ‘"gl_list.h"’‘"gl_xlist.h"’ list in any given order. Duplicates are allowed, but can optionally be forbidden. Set Can contain any number of objects; ‘set’ ‘"gl_set.h"’‘"gl_xset.h"’ the order does not matter. Duplicates (in the sense of the comparator) are forbidden. Ordered Can contain any number of objects ‘oset’ ‘"gl_oset.h"’‘"gl_xoset.h"’ set in the order of a given comparator function. Duplicates (in the sense of the comparator) are forbidden. Map Can contain any number of (key, ‘map’ ‘"gl_map.h"’‘"gl_xmap.h"’ value) pairs, where keys and values are objects; there are no (key, value1) and (key, value2) pairs with the same key (in the sense of a given comparator function). Ordered Can contain any number of (key, ‘omap’ ‘"gl_omap.h"’‘"gl_xomap.h"’ map value) pairs, where keys and values are objects; the (key, value) pairs are ordered by the key, in the order of a given comparator function; there are no (key, value1) and (key, value2) pairs with the same key (in the sense of the comparator function). Operations without out-of-memory checking (suitable for use in libraries) are declared in the “main include file”. Whereas operations with out-of-memory checking (suitable only in programs) are declared in the “include file for operations with out-of-memory checking”. For each of the data types, several implementations are available, with different performance profiles with respect to the available operations. This enables you to start with the simplest implementation (ARRAY) initially, and switch to a more suitable implementation after profiling your application. The implementation of each container instance is specified in a single place only: in the invocation of the function ‘gl_*_create_empty’ that creates the instance. The implementations and the guaranteed average performance for the operations for the “sequential list” data type are: Operation ARRAY CARRAY LINKED TREE LINKEDHASHLINKEDHASHTREEHASHTREEHASH with without with without duplicatesduplicatesduplicatesduplicates ------------------------------------------------------------------------------- ‘gl_list_size’ O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) ‘gl_list_node_value’O(1)O(1) O(1) O(1) O(1) O(1) O(1) O(1) ‘gl_list_node_set_value’O(1)O(1)O(1) O(1) O(1) O(1) O((log O(1) n)^2) ‘gl_list_next_node’O(1)O(1) O(1) O(log O(1) O(1) O(log O(log n) n) n) ‘gl_list_previous_node’O(1)O(1)O(1) O(log O(1) O(1) O(log O(log n) n) n) ‘gl_list_first_node’O(1)O(1) O(1) O(log O(1) O(1) O(log O(log n) n) n) ‘gl_list_last_node’O(1)O(1) O(1) O(log O(1) O(1) O(log O(log n) n) n) ‘gl_list_get_at’O(1) O(1) O(n) O(log O(n) O(n) O(log O(log n) n) n) ‘gl_list_get_first’O(1)O(1) O(1) O(log O(1) O(1) O(log O(log n) n) n) ‘gl_list_get_last’O(1) O(1) O(1) O(log O(1) O(1) O(log O(log n) n) n) ‘gl_list_set_at’O(1) O(1) O(n) O(log O(n) O(n) O((log O(log n) n)^2) n) ‘gl_list_set_first’O(1)O(1) O(1) O(log O(n) O(1) O((log O(log n) n)^2) n) ‘gl_list_set_last’O(1) O(1) O(1) O(log O(n) O(1) O((log O(log n) n)^2) n) ‘gl_list_search’O(n) O(n) O(n) O(n) O(n) O(1) O(log O(1) n) ‘gl_list_search_from’O(n)O(n) O(n) O(n) O(n) O(1) O((log O(log n)^2) n) ‘gl_list_search_from_to’O(n)O(n)O(n) O(n) O(n) O(1) O((log O(log n)^2) n) ‘gl_list_indexof’O(n) O(n) O(n) O(n) O(n) O(n) O(log O(log n) n) ‘gl_list_indexof_from’O(n)O(n) O(n) O(n) O(n) O(n) O((log O(log n)^2) n) ‘gl_list_indexof_from_to’O(n)O(n)O(n) O(n) O(n) O(n) O((log O(log n)^2) n) ‘gl_list_add_first’O(n)O(1) O(1) O(log O(1) O(1) O((log O(log n) n)^2) n) ‘gl_list_add_last’O(1) O(1) O(1) O(log O(1) O(1) O((log O(log n) n)^2) n) ‘gl_list_add_before’O(n)O(n) O(1) O(log O(1) O(1) O((log O(log n) n)^2) n) ‘gl_list_add_after’O(n)O(n) O(1) O(log O(1) O(1) O((log O(log n) n)^2) n) ‘gl_list_add_at’O(n) O(n) O(n) O(log O(n) O(n) O((log O(log n) n)^2) n) ‘gl_list_remove_node’O(n)O(n) O(1) O(log O(n) O(1) O((log O(log n) n)^2) n) ‘gl_list_remove_at’O(n)O(n) O(n) O(log O(n) O(n) O((log O(log n) n)^2) n) ‘gl_list_remove_first’O(n)O(1) O(1) O(log O(n) O(1) O((log O(log n) n)^2) n) ‘gl_list_remove_last’O(1)O(1) O(1) O(log O(n) O(1) O((log O(log n) n)^2) n) ‘gl_list_remove’O(n) O(n) O(n) O(n) O(n) O(1) O((log O(log n)^2) n) ‘gl_list_iterator’O(1) O(1) O(1) O(log O(1) O(1) O(log O(log n) n) n) ‘gl_list_iterator_from_to’O(1)O(1)O(n) O(log O(n) O(n) O(log O(log n) n) n) ‘gl_list_iterator_next’O(1)O(1)O(1) O(log O(1) O(1) O(log O(log n) n) n) ‘gl_sortedlist_search’O(logO(logO(n) O(log O(n) O(n) O(log O(log n) n) n) n) n) ‘gl_sortedlist_search_from’O(logO(logO(n)O(log O(n) O(n) O(log O(log n) n) n) n) n) ‘gl_sortedlist_indexof’O(logO(logO(n) O(log O(n) O(n) O(log O(log n) n) n) n) n) ‘gl_sortedlist_indexof_from’O(logO(logO(n)O(logO(n) O(n) O(log O(log n) n) n) n) n) ‘gl_sortedlist_add’O(n)O(n) O(n) O(log O(n) O(n) O((log O(log n) n)^2) n) ‘gl_sortedlist_remove’O(n)O(n) O(n) O(log O(n) O(n) O((log O(log n) n)^2) n) The implementations and the guaranteed average performance for the operations for the “set” data type are: Operation ARRAY LINKEDHASH, HASH --------------------------------------------------------------------------- ‘gl_set_size’ O(1) O(1) ‘gl_set_add’ O(n) O(1) ‘gl_set_remove’ O(n) O(1) ‘gl_set_search’ O(n) O(1) ‘gl_set_iterator’ O(1) O(1) ‘gl_set_iterator_next’ O(1) O(1) The implementations and the guaranteed average performance for the operations for the “ordered set” data type are: Operation ARRAY TREE --------------------------------------------------------------------------- ‘gl_oset_size’ O(1) O(1) ‘gl_oset_add’ O(n) O(log n) ‘gl_oset_remove’ O(n) O(log n) ‘gl_oset_search’ O(log n) O(log n) ‘gl_oset_search_atleast’ O(log n) O(log n) ‘gl_oset_iterator’ O(1) O(log n) ‘gl_oset_iterator_next’ O(1) O(log n) The implementations and the guaranteed average performance for the operations for the “map” data type are: Operation ARRAY LINKEDHASH, HASH --------------------------------------------------------------------------- ‘gl_map_size’ O(1) O(1) ‘gl_map_get’ O(n) O(1) ‘gl_map_put’ O(n) O(1) ‘gl_map_remove’ O(n) O(1) ‘gl_map_search’ O(n) O(1) ‘gl_map_iterator’ O(1) O(1) ‘gl_map_iterator_next’ O(1) O(1) The implementations and the guaranteed average performance for the operations for the “ordered map” data type are: Operation ARRAY TREE --------------------------------------------------------------------------- ‘gl_omap_size’ O(1) O(1) ‘gl_omap_get’ O(log n) O(log n) ‘gl_omap_put’ O(n) O(log n) ‘gl_omap_remove’ O(n) O(log n) ‘gl_omap_search’ O(log n) O(log n) ‘gl_omap_search_atleast’ O(log n) O(log n) ‘gl_omap_iterator’ O(1) O(log n) ‘gl_omap_iterator_next’ O(1) O(log n) For C++, Gnulib provides a C++ template class for each of these container data types. Data type C++ class Module Include file ---------------------------------------------------------------------------- Sequential list ‘gl_List’ ‘list-c++’ ‘"gl_list.hh"’ Set ‘gl_Set’ ‘set-c++’ ‘"gl_set.hh"’ Ordered set ‘gl_OSet’ ‘oset-c++’ ‘"gl_oset.hh"’ Map ‘gl_Map’ ‘map-c++’ ‘"gl_map.hh"’ Ordered map ‘gl_OMap’ ‘omap-c++’ ‘"gl_omap.hh"’ 17.12.2 Specialized container data types ---------------------------------------- The ‘hamt’ module implements the hash array mapped trie (HAMT) data structure. This is a data structure that contains (key, value) pairs. Lookup of a (key, value) pair given the key is on average an O(1) operation, assuming a good hash function for the keys is employed. The HAMT data structure is useful when you want modifications (additions of pairs, removal, value changes) to be visible only to some part of your program, whereas other parts of the program continue to use the unmodified HAMT. The HAMT makes this possible in a space-efficient manner: the modified and the unmodified HAMT share most of their allocated memory. It is also time-efficient: Every such modification is O(1) on average, again assuming a good hash function for the keys. A HAMT can be used whenever an ordinary hash table would be used. It does however, provide non-destructive updating operations without the need to copy the whole container. On the other hand, a hash table is simpler so that its performance may be better when non-destructive update operations are not needed. For example, a HAMT can be used to model the dynamic environment in a LISP interpreter. Updating a value in the dynamic environment of one continuation frame would not modify values in earlier frames. To use the module, include ‘hamt.h’ in your code. The public interface is documented in that header file. You have to provide a hash function and an equivalence relation, which defines key equality. The module includes a test file ‘test-hamt.c’, which demonstrates how the API can be used. In the current implementation, each inner node of the HAMT can store up to 32 = 2^5 entries and subtries. Whenever a collision between the initial bits of the hash values of two entries would happen, the next 5 bits of the hash values are examined and the two entries pushed down one level in the trie. HAMTs have the same average access times as hash tables but grow and shrink dynamically, so they use memory more economically and do not have to be periodically resized. They were described and analyzed in ‘Phil Bagwell (2000). Ideal Hash Trees (Report). Infoscience Department, École Polytechnique Fédérale de Lausanne.’ The persistence aspect of the HAMT data structure, which means that each updating operation (like inserting, replacing, or removing an entry) returns a new HAMT while leaving the original one intact, is achieved through structure sharing, which is even safe in the presence of multiple threads when the used C compiler supports atomics. 17.13 Recognizing Option Arguments ================================== The module ‘argmatch’ provides a simple textual user interface to a finite choice. It is for example well suited to recognize arguments of options or values of environment variables that accept a fixed set of valid choices. These choices may be denoted by synonyms, such as ‘none’ and ‘off’ below. $ my_cp --backup=none foo bar $ my_cp --backup=non foo bar $ my_cp --backup=no foo bar $ my_cp --backup=n foo bar my_cp: ambiguous argument 'n' for 'backup type' Valid arguments are: - 'no', 'none', 'off' - 'numbered', 't', 'newstyle' - 'existing', 'nil', 'numbered-existing' - 'simple', 'never', 'single' Try 'my_cp --help' for more information. $ my_cp --backup=num foo bar $ my_cp --backup=true foo bar my_cp: invalid argument 'true' for 'backup type' Valid arguments are: - 'no', 'none', 'off' - 'numbered', 't', 'newstyle' - 'existing', 'nil', 'numbered-existing' - 'simple', 'never', 'single' Try 'my_cp --help' for more information. To set up ‘argmatch’, first call ‘ARGMATCH_DEFINE_GROUP (NAME, TYPE)’ with the name of the argmatch group name, and the value type. For instance: enum backup_type { no_backups, simple_backups, numbered_existing_backups, numbered_backups }; ARGMATCH_DEFINE_GROUP (backup, enum backup_type); This defines a few types and functions named ‘argmatch_NAME_*’. Introduce the array that defines the mapping from user-input to actual value, with a terminator: static const argmatch_backup_arg argmatch_backup_args[] = { { "no", no_backups }, { "none", no_backups }, { "off", no_backups }, { "simple", simple_backups }, { "never", simple_backups }, { "single", simple_backups }, { "existing", numbered_existing_backups }, { "nil", numbered_existing_backups }, { "numbered-existing", numbered_existing_backups }, { "numbered", numbered_backups }, { "t", numbered_backups }, { "newstyle", numbered_backups }, { NULL, no_backups } }; Then introduce the array that defines the values, also with a terminator. Document only once per group of synonyms: static const argmatch_backup_doc argmatch_backup_docs[] = { { "no", N_("never make backups (even if --backup is given)") }, { "numbered", N_("make numbered backups") }, { "existing", N_("numbered if numbered backups exist, simple otherwise") }, { "simple", N_("always make simple backups") }, { NULL, NULL } }; Finally, define the argmatch group: const argmatch_backup_group_type argmatch_backup_group = { argmatch_backup_args, argmatch_backup_docs, N_("\ The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n\ The version control method may be selected via the --backup option or through\n\ the VERSION_CONTROL environment variable. Here are the values:\n"), NULL }; To use the argmatch group: ptrdiff_t i = argmatch_backup_choice ("--backup", "none"); // argmatch_backup_group.args[i].arg is "none", so its value // is argmatch_backup_group.args[i].val. // Return -1 on invalid argument, and -2 on ambiguity. enum backup_type val = *argmatch_backup_value ("--backup", "none"); // Returns a pointer to the value, and exit on errors. // So argmatch_backup_group.args[i].val == val. const char *arg = argmatch_backup_argument (&no_backups); // arg is "no". // Print the documentation on stdout. argmatch_backup_usage (stdout); // Gives: // // The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX. // The version control method may be selected via the --backup option or through // the VERSION_CONTROL environment variable. Here are the values: // // no, none, off never make backups (even if --backup is given) // numbered, t, newstyle // make numbered backups // existing, nil, numbered-existing // numbered if numbered backups exist, simple otherwise // simple, never, single // always make simple backups 17.14 Quoting ============= Gnulib provides ‘quote’ and ‘quotearg’ modules to help with quoting text, such as file names, in messages to the user. Here’s an example of using ‘quote’: #include ... error (0, errno, _("cannot change owner of %s"), quote (fname)); This differs from error (0, errno, _("cannot change owner of '%s'"), fname); in that ‘quote’ escapes unusual characters in ‘fname’, e.g., ‘'’ and control characters like ‘\n’. However, a caveat: ‘quote’ reuses the storage that it returns. Hence if you need more than one thing quoted at the same time, you need to use ‘quote_n’. Also, the ‘quote’ module is not suited for multithreaded applications. In that case, you have to use ‘quotearg_alloc’, defined in the ‘quotearg’ module, which is decidedly less convenient. 17.15 progname and getprogname ============================== Gnulib has two modules for retrieving the name of the currently executing program: ‘progname’ and ‘getprogname’. The ‘progname’ module defines a variable ‘program_name’. It contains the name of the currently executing program, on all platforms. But it cannot be used implicitly: It requires that every ‘main’ function be modified to invoke ‘set_program_name (argv[0])’ as one of its first actions. The ‘getprogname’ module defines a function ‘getprogname()’. It returns the name of the currently executing program, on most platforms. The advantage of this module is that it can be used without prior initializations. But it has limitations: In some rare situations, it cannot determine the name; then it returns ‘"?"’ instead. And on some platforms, it returns a truncated program name. The ‘error’ function uses the ‘getprogname’ module. 17.16 gcd: greatest common divisor ================================== The ‘gcd’ function returns the greatest common divisor of two numbers ‘a > 0’ and ‘b > 0’. It is the caller’s responsibility to ensure that the arguments are non-zero. If you need a gcd function for an integer type larger than ‘unsigned long’, you can include the ‘gcd.c’ implementation file with parametrization. The parameters are: • WORD_T Define this to the unsigned integer type that you need this function for. • GCD Define this to the name of the function to be created. The created function has the prototype WORD_T GCD (WORD_T a, WORD_T b); If you need the least common multiple of two numbers, it can be computed like this: ‘lcm(a,b) = (a / gcd(a,b)) * b’ or ‘lcm(a,b) = a * (b / gcd(a,b))’. Avoid the formula ‘lcm(a,b) = (a * b) / gcd(a,b)’ because—although mathematically correct—it can yield a wrong result, due to integer overflow. In some applications it is useful to have a function taking the gcd of two signed numbers. In this case, the gcd function result is usually normalized to be non-negative (so that two gcd results can be compared in magnitude or compared against 1, etc.). Note that in this case the prototype of the function has to be unsigned long gcd (long a, long b); and not long gcd (long a, long b); because ‘gcd(LONG_MIN,LONG_MIN) = -LONG_MIN = LONG_MAX + 1’ does not fit into a signed ‘long’. 17.17 Profiling of program phases ================================= The module ‘timevar’ provides a simple self-profiling facility, based on timers. Execution times (seconds) read : 0.09 (19%) usr 0.08 (80%) sys 0.09 (18%) wall read: scan : 0.04 ( 9%) usr 0.08 (80%) sys 0.12 (26%) wall read: parse : 0.05 (10%) usr 0.00 ( 0%) sys 0.05 (10%) wall work : 0.33 (70%) usr 0.00 ( 0%) sys 0.35 (71%) wall work: phase 1 : 0.30 (64%) usr 0.00 ( 0%) sys 0.30 (64%) wall work: phase 2 : 0.13 (28%) usr 0.00 ( 0%) sys 0.14 (29%) wall output : 0.04 ( 9%) usr 0.02 (20%) sys 0.04 ( 8%) wall total time : 0.47 0.10 0.49 To set up ‘timevar’, copy the stub file ‘gnulib/lib/timevar.def’ next to where ‘timevar.h’ and ‘timevar.c’ were imported in your project, and define your timers there. For instance: /* The total execution time. Mandatory. */ DEFTIMEVAR (tv_total, "total time") /* Examples. */ DEFTIMEVAR (tv_read, "read") DEFTIMEVAR (tv_work, "work") DEFTIMEVAR (tv_work_1, "work: phase 1") DEFTIMEVAR (tv_work_2, "work: phase 2") DEFTIMEVAR (tv_output, "output") Do not remove ‘tv_total’, it is mandatory. You may change its associated string. Use ‘timevar_push’/‘timevar_pop’ to start/stop timers, as in the following example. #include #include "timevar.h" #include #include "read.h" #include "work.h" #include "output.h" int main (void) { timevar_enabled = true; timevar_init (); timevar_start (tv_total); timevar_push (tv_read); reader (); timevar_pop (tv_read); timevar_push (tv_work); work (); timevar_pop (tv_work); timevar_push (tv_output); output (); timevar_pop (tv_output); timevar_stop (tv_total); timevar_print (stderr); } with, for instance, in ‘work.c’ #include #include "work.h" void work (void) { timevar_push (tv_work_phase1); work1 (); timevar_pop (tv_work_phase1); timevar_push (tv_work_phase2); work2 (); timevar_pop (tv_work_phase2); } 17.18 Library version handling ============================== The module ‘check-version’ can be useful when your gnulib application is a system library. You will typically wrap the call to the ‘check_version’ function through a library API, your library header file may contain: #define STRINGPREP_VERSION "0.5.18" ... extern const char *stringprep_check_version (const char *req_version); To avoid ELF symbol collisions with other libraries that use the ‘check-version’ module, add to ‘config.h’ through a AC_DEFINE something like: AC_DEFINE(check_version, stringprep_check_version, [Rename check_version.]) The ‘stringprep_check_version’ function will thus be implemented by the ‘check_version’ module. There are two uses of the interface. The first is a way to provide for applications to find out the version number of the library it uses. The application may contain diagnostic code such as: printf ("Stringprep version: header %s library %s", STRINGPREP_VERSION, stringprep_check_version (NULL)); Separating the library and header file version can be useful when searching for version mismatch related problems. The second uses is as a rudimentary test of proper library version, by making sure the application get a library version that is the same, or newer, than the header file used when building the application. This doesn’t catch all problems, libraries may change backwards incompatibly in later versions, but enable applications to require a certain minimum version before it may proceed. Typical uses look like: /* Check version of libgcrypt. */ if (!gcry_check_version (GCRYPT_VERSION)) die ("version mismatch\n"); 17.19 Supporting Relocation =========================== It has been a pain for many users of GNU packages for a long time that packages are not relocatable. It means a user cannot copy a program, installed by another user on the same machine, to his home directory, and have it work correctly (including i18n). So many users need to go through ‘configure; make; make install’ with all its dependencies, options, and hurdles. Red Hat, Debian, and other binary distributions solve the “ease of installation” problem, but they hardwire path names, usually to ‘/usr’ or ‘/usr/local’. This means that users need root privileges to install a binary package, and prevents installing two different versions of the same binary package. A relocatable program can be moved or copied to a different location on the file system. It is possible to make symlinks to the installed and moved programs, and invoke them through the symlink. It is possible to do the same thing with a hard link _only_ if the hard link file is in the same directory as the real program. The ‘relocatable-prog’ module aims to ease the process of making a GNU program relocatable. It helps overcome two obstacles. First, it aids with relocating the hard-coded references to absolute file names that GNU programs often contain. These references must be fixed up at runtime if a program is to be successfully relocated. The ‘relocatable-prog’ module provides a function ‘relocate’ that does this job. Second, the loader must be able to find shared libraries linked to relocatable executables or referenced by other shared libraries linked to relocatable executables. The ‘relocatable-prog’ module helps out here in a platform-specific way: • On most operating systems, it adds a linker option (‘-rpath’) that causes the dynamic linker to search for libraries in a directory relative to the location of the invoked executable. This works on GNU/Linux and modern versions of GNU/Hurd, GNU/kFreeBSD, macOS, FreeBSD, NetBSD, OpenBSD, Solaris, Haiku. • On other Unix systems, it installs a trampoline executable. The trampoline sets the environment variable that controls shared library searching (usually ‘LD_LIBRARY_PATH’) and then invokes the real executable. This applies to operating systems such as AIX, HP-UX, or Minix. • On Windows, the executable’s own directory is searched for libraries, so installing shared libraries into the executable’s directory is sufficient. You can make your program relocatable by following these steps: 1. Import the ‘relocatable-prog’ module. For libraries, use the ‘relocatable-lib’ or ‘relocatable-lib-lgpl’ module, if the libraries are independent. For installing multiple libraries, at least one of which depends on another one, use the ‘relocatable-prog’ module. If you need more than one module, or you need to use them with different settings, you will need multiple copies of gnulib (*note Multiple instances::). 2. In every program, add to ‘main’ as the first statement (even before setting the locale or doing anything related to libintl): set_program_name (argv[0]); The prototype for this function is in ‘progname.h’. 3. If you want your code to be portable to platforms that do not support automatic initialization, call ‘set_relocation_prefix’. 4. Everywhere where you use a constant pathname from installation-time, wrap it in ‘relocate’ so it gets translated to the run-time situation. Example: bindtextdomain (PACKAGE, LOCALEDIR); becomes: bindtextdomain (PACKAGE, relocate (LOCALEDIR)); The prototype for this function is in ‘relocatable.h’. There is also a variant of this function, named ‘relocate2’, that makes it easy to reclaim the memory allocated by the call. 5. The ‘set_program_name’ function can also configure some additional libraries to relocate files that they access, by defining corresponding C preprocessor symbols to 1. The libraries for which this is supported and the corresponding preprocessor symbols are: libcharset ‘DEPENDS_ON_LIBCHARSET’ libiconv ‘DEPENDS_ON_LIBICONV’ libintl ‘DEPENDS_ON_LIBINTL’ Defining the symbol for a library makes every program in the package depend on that library, whether the program really uses the library or not, so this feature should be used with some caution. 6. If your package installs shell scripts, also import the ‘relocatable-script’ module. Then, near the beginning of each shell script that your package installs, add the following: @relocatable_sh@ prefix="@prefix@" exec_prefix="@exec_prefix@" # usually needs $prefix. datarootdir="@datarootdir@" # usually needs $prefix. if test "@RELOCATABLE@" = yes; then bindir="@bindir@" orig_installdir="$bindir" # see Makefile.am's *_SCRIPTS variables func_find_curr_installdir # determine curr_installdir func_find_prefixes relocate () { echo "$1/" \ | sed -e "s%^${orig_installprefix}/%${curr_installprefix}/%" \ | sed -e 's,/$,,' } else relocate () { echo "$1" } fi # Get some relocated directory names. sysconfdir=`relocate "@sysconfdir@"` # usually needs $prefix. some_datadir=`relocate "@datadir@/something"` # usually needs $datarootdir. bindir=`relocate "@bindir@"` # usually needs $exec_prefix, hence $prefix. You must adapt the definition of ‘orig_installdir’, depending on where the script gets installed. Also, at the end, instead of ‘sysconfdir’ and ‘some_datadir’, transform those variables that you need. 7. If your package installs Perl scripts, also import the ‘relocatable-perl’ module. Then, near the beginning of each Perl script that your package installs, add the following: @relocatable_pl@ if ("@RELOCATABLE@" eq "yes") { my $exec_prefix = "@exec_prefix@"; my $orig_installdir = "@bindir@"; # see Makefile.am's *_SCRIPTS variables my ($orig_installprefix, $curr_installprefix) = find_prefixes($orig_installdir, find_curr_installdir()); # the subroutine is defined whether or not the enclosing block is executed sub relocate { my ($dir) = @_; if ("@RELOCATABLE@" eq "yes") { $dir =~ s%^$orig_installprefix/%$curr_installprefix/%; $dir =~ s,/$,,; } return $dir; } } # Get some relocated directory names. # (The gnulib module 'configmake' can help with this.) $sysconfdir = relocate("@sysconfdir@"); $some_datadir = relocate(@datadir@/something"); You must adapt the definition of ‘$orig_installdir’, depending on where the script gets installed. Also, at the end, instead of ‘sysconfdir’ and ‘some_datadir’, transform those variables that you need. 8. In your ‘Makefile.am’, for every program ‘foo’ that gets installed in, say, ‘$(bindir)’, you add: foo_CPPFLAGS = -DINSTALLDIR=\"$(bindir)\" if RELOCATABLE_VIA_LD foo_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(bindir)` endif When building gnulib to use with a relocatable library, you need to define the preprocessor symbol ‘IN_LIBRARY’. You may also want to build with ‘ENABLE_COSTLY_RELOCATABLE’, in which case you will also need to define ‘INSTALLDIR’. The following fragment can be added to an override ‘Makefile.am’ used to build gnulib (*note Modified build rules::). AM_CPPFLAGS += -DIN_LIBRARY -DENABLE_COSTLY_RELOCATABLE if SHLIBS_IN_BINDIR AM_CPPFLAGS += -DINSTALLDIR=\"$(bindir)\" else AM_CPPFLAGS += -DINSTALLDIR=\"$(libdir)\" endif ‘SHLIBS_IN_BINDIR’ is defined in ‘configure.ac’ as follows: AM_CONDITIONAL([SHLIBS_IN_BINDIR], [case "$host_os" in mingw* | cygwin*) true;; *) false;; esac]) 9. In your ‘Makefile.am’, for every library ‘libfoo’ that gets installed in, say, ‘$(libdir)’, you add: if RELOCATABLE_VIA_LD libfoo_la_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(libdir)` endif 10. Add a couple of variable assignments to your ‘Makefile.am’. If your package (or any package you rely on, e.g. gettext-runtime) will be relocated together with a set of installed shared libraries, then set ‘RELOCATABLE_LIBRARY_PATH’ to a colon-separated list of those libraries’ directories, e.g. RELOCATABLE_LIBRARY_PATH = $(libdir) If your ‘config.h’ is not in ‘$(top_builddir)’, then set ‘RELOCATABLE_CONFIG_H_DIR’ to its directory, e.g. RELOCATABLE_CONFIG_H_DIR = $(top_builddir)/src 17.20 func ========== The ‘func’ module makes sure that you can use the predefined identifier ‘__func__’ as defined by C99 in your code. A small example is: #include #include /* for printf */ int main (void) { printf ("%s: hello world\n", __func__); } Note that ‘sizeof’ cannot be applied to ‘__func__’: On SunPRO C compiler, ‘sizeof __func__’ evaluates to 0. 17.21 stat-size =============== The ‘stat-size’ module provides a small number of macros intended for interpreting the file size information in an instance of ‘struct stat’. On POSIX systems, the ‘st_blocks’ member of ‘struct stat’ contains the number of disk blocks occupied by a file. The ‘ST_NBLOCKS’ and ‘STP_NBLOCKS’ macros estimate this quantity on systems which don’t actually have ‘st_blocks’. Each of these blocks contains ‘ST_NBLOCKSIZE’ bytes. The value of ‘ST_NBLOCKSIZE’ is often quite small, small enough that performing I/O in chunks that size would be inefficient. The ‘ST_BLKSIZE’ and ‘STP_BLKSIZE’ macros give the I/O block size recommended for I/O to this file. This is not guaranteed to give optimum performance, but it should be reasonably efficient. 18 Regular expressions ********************** 18.1 Overview ============= A “regular expression” (or “regexp”, or “pattern”) is a text string that describes some (mathematical) set of strings. A regexp R “matches” a string S if S is in the set of strings described by R. Using the Regex library, you can: • see if a string matches a specified pattern as a whole, and • search within a string for a substring matching a specified pattern. Some regular expressions match only one string, i.e., the set they describe has only one member. For example, the regular expression ‘foo’ matches the string ‘foo’ and no others. Other regular expressions match more than one string, i.e., the set they describe has more than one member. For example, the regular expression ‘f*’ matches the set of strings made up of any number (including zero) of ‘f’s. As you can see, some characters in regular expressions match themselves (such as ‘f’) and some don’t (such as ‘*’); the ones that don’t match themselves instead let you specify patterns that describe many different strings. To either match or search for a regular expression with the Regex library functions, you must first compile it with a Regex pattern compiling function. A “compiled pattern” is a regular expression converted to the internal format used by the library functions. Once you’ve compiled a pattern, you can use it for matching or searching any number of times. The Regex library is used by including ‘regex.h’. Regex provides three groups of functions with which you can operate on regular expressions. One group—the GNU group—is more powerful but not completely compatible with the other two, namely the POSIX and Berkeley Unix groups; its interface was designed specifically for GNU. We wrote this chapter with programmers in mind, not users of programs—such as Emacs—that use Regex. We describe the Regex library in its entirety, not how to write regular expressions that a particular program understands. 18.2 Regular Expression Syntax ============================== “Characters” are things you can type. “Operators” are things in a regular expression that match one or more characters. You compose regular expressions from operators, which in turn you specify using one or more characters. Most characters represent what we call the match-self operator, i.e., they match themselves; we call these characters “ordinary”. Other characters represent either all or parts of fancier operators; e.g., ‘.’ represents what we call the match-any-character operator (which, no surprise, matches (almost) any character); we call these characters “special”. Two different things determine what characters represent what operators: 1. the regular expression syntax your program has told the Regex library to recognize, and 2. the context of the character in the regular expression. In the following sections, we describe these things in more detail. 18.2.1 Syntax Bits ------------------ In any particular syntax for regular expressions, some characters are always special, others are sometimes special, and others are never special. The particular syntax that Regex recognizes for a given regular expression depends on the current syntax (as set by ‘re_set_syntax’) when the pattern buffer of that regular expression was compiled. You get a pattern buffer by compiling a regular expression. *Note GNU Pattern Buffers::, for more information on pattern buffers. *Note GNU Regular Expression Compiling::, and *note BSD Regular Expression Compiling::, for more information on compiling. Regex considers the current syntax to be a collection of bits; we refer to these bits as “syntax bits”. In most cases, they affect what characters represent what operators. We describe the meanings of the operators to which we refer in *note Common Operators:: and *note GNU Operators::. For reference, here is the complete list of syntax bits, in alphabetical order: ‘RE_BACKSLASH_ESCAPE_IN_LISTS’ If this bit is set, then ‘\’ inside a list (*note List Operators::) quotes (makes ordinary, if it’s special) the following character; if this bit isn’t set, then ‘\’ is an ordinary character inside lists. (*Note The Backslash Character::, for what ‘\’ does outside of lists.) ‘RE_BK_PLUS_QM’ If this bit is set, then ‘\+’ represents the match-one-or-more operator and ‘\?’ represents the match-zero-or-more operator; if this bit isn’t set, then ‘+’ represents the match-one-or-more operator and ‘?’ represents the match-zero-or-one operator. This bit is irrelevant if ‘RE_LIMITED_OPS’ is set. ‘RE_CHAR_CLASSES’ If this bit is set, then you can use character classes in lists; if this bit isn’t set, then you can’t. ‘RE_CONTEXT_INDEP_ANCHORS’ If this bit is set, then ‘^’ and ‘$’ are special anywhere outside a list; if this bit isn’t set, then these characters are special only in certain contexts. *Note Match-beginning-of-line Operator::, and *note Match-end-of-line Operator::. ‘RE_CONTEXT_INDEP_OPS’ If this bit is set, then certain characters are special anywhere outside a list; if this bit isn’t set, then those characters are special only in some contexts and are ordinary elsewhere. Specifically, if this bit isn’t set then ‘*’, and (if the syntax bit ‘RE_LIMITED_OPS’ isn’t set) ‘+’ and ‘?’ (or ‘\+’ and ‘\?’, depending on the syntax bit ‘RE_BK_PLUS_QM’) represent repetition operators only if they’re not first in a regular expression or just after an open-group or alternation operator. The same holds for ‘{’ (or ‘\{’, depending on the syntax bit ‘RE_NO_BK_BRACES’) if it is the beginning of a valid interval and the syntax bit ‘RE_INTERVALS’ is set. ‘RE_CONTEXT_INVALID_DUP’ If this bit is set, then an open-interval operator cannot occur at the start of a regular expression, or immediately after an alternation, open-group or close-interval operator. ‘RE_CONTEXT_INVALID_OPS’ If this bit is set, then repetition and alternation operators can’t be in certain positions within a regular expression. Specifically, the regular expression is invalid if it has: • a repetition operator first in the regular expression or just after a match-beginning-of-line, open-group, or alternation operator; or • an alternation operator first or last in the regular expression, just before a match-end-of-line operator, or just after an alternation or open-group operator. If this bit isn’t set, then you can put the characters representing the repetition and alternation characters anywhere in a regular expression. Whether or not they will in fact be operators in certain positions depends on other syntax bits. ‘RE_DEBUG’ If this bit is set, and the regex library was compiled with ‘-DDEBUG’, then internal debugging is turned on; if unset, then it is turned off. ‘RE_DOT_NEWLINE’ If this bit is set, then the match-any-character operator matches a newline; if this bit isn’t set, then it doesn’t. ‘RE_DOT_NOT_NULL’ If this bit is set, then the match-any-character operator doesn’t match a null character; if this bit isn’t set, then it does. ‘RE_HAT_LISTS_NOT_NEWLINE’ If this bit is set, nonmatching lists ‘[^...]’ do not match newline; if not set, they do. ‘RE_ICASE’ If this bit is set, then ignore case when matching; otherwise, case is significant. ‘RE_INTERVALS’ If this bit is set, then Regex recognizes interval operators; if this bit isn’t set, then it doesn’t. ‘RE_INVALID_INTERVAL_ORD’ If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the extended regular expression ‘a{1’ is treated as ‘a\{1’. ‘RE_LIMITED_OPS’ If this bit is set, then Regex doesn’t recognize the match-one-or-more, match-zero-or-one or alternation operators; if this bit isn’t set, then it does. ‘RE_NEWLINE_ALT’ If this bit is set, then newline represents the alternation operator; if this bit isn’t set, then newline is ordinary. ‘RE_NO_BK_BRACES’ If this bit is set, then ‘{’ represents the open-interval operator and ‘}’ represents the close-interval operator; if this bit isn’t set, then ‘\{’ represents the open-interval operator and ‘\}’ represents the close-interval operator. This bit is relevant only if ‘RE_INTERVALS’ is set. ‘RE_NO_BK_PARENS’ If this bit is set, then ‘(’ represents the open-group operator and ‘)’ represents the close-group operator; if this bit isn’t set, then ‘\(’ represents the open-group operator and ‘\)’ represents the close-group operator. ‘RE_NO_BK_REFS’ If this bit is set, then Regex doesn’t recognize ‘\’DIGIT as the back-reference operator; if this bit isn’t set, then it does. ‘RE_NO_BK_VBAR’ If this bit is set, then ‘|’ represents the alternation operator; if this bit isn’t set, then ‘\|’ represents the alternation operator. This bit is irrelevant if ‘RE_LIMITED_OPS’ is set. ‘RE_NO_EMPTY_RANGES’ If this bit is set, then a regular expression with a range whose ending point collates lower than its starting point is invalid; if this bit isn’t set, then Regex considers such a range to be empty. ‘RE_NO_GNU_OPS’ If this bit is set, GNU regex operators are not recognized; otherwise, they are. ‘RE_NO_POSIX_BACKTRACKING’ If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. This means that a match may not be the leftmost longest; *note What Gets Matched?:: for what this means. ‘RE_NO_SUB’ If this bit is set, then ‘no_sub’ will be set to one during ‘re_compile_pattern’. This causes matching and searching routines not to record substring match information. ‘RE_UNMATCHED_RIGHT_PAREN_ORD’ If this bit is set and the regular expression has no matching open-group operator, then Regex considers what would otherwise be a close-group operator (based on how ‘RE_NO_BK_PARENS’ is set) to match ‘)’. 18.2.2 Predefined Syntaxes -------------------------- If you’re programming with Regex, you can set a pattern buffer’s (*note GNU Pattern Buffers::) syntax either to an arbitrary combination of syntax bits (*note Syntax Bits::) or else to the configurations defined by Regex. These configurations define the syntaxes used by certain programs—GNU Emacs, POSIX Awk, traditional Awk, Grep, Egrep—in addition to syntaxes for POSIX basic and extended regular expressions. The predefined syntaxes—taken directly from ‘regex.h’—are: #define RE_SYNTAX_EMACS 0 #define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_UNMATCHED_RIGHT_PAREN_ORD) #define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS) #define RE_SYNTAX_GREP \ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ | RE_NEWLINE_ALT) #define RE_SYNTAX_EGREP \ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ #define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) #define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) #define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */ #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) 18.2.3 Collating Elements vs. Characters ---------------------------------------- POSIX generalizes the notion of a character to that of a collating element. It defines a “collating element” to be “a sequence of one or more bytes defined in the current collating sequence as a unit of collation.” This generalizes the notion of a character in two ways. First, a single character can map into two or more collating elements. For example, the German “ß” collates as the collating element ‘s’ followed by another collating element ‘s’. Second, two or more characters can map into one collating element. For example, the Czech ‘ch’ collates after ‘h’ and before ‘i’. Since POSIX’s “collating element” preserves the essential idea of a “character,” we use the latter, more familiar, term in this document. 18.2.4 The Backslash Character ------------------------------ The ‘\’ character has one of four different meanings, depending on the context in which you use it and what syntax bits are set (*note Syntax Bits::). It can: 1) stand for itself, 2) quote the next character, 3) introduce an operator, or 4) do nothing. 1. It stands for itself inside a list (*note List Operators::) if the syntax bit ‘RE_BACKSLASH_ESCAPE_IN_LISTS’ is not set. For example, ‘[\]’ would match ‘\’. 2. It quotes (makes ordinary, if it’s special) the next character when you use it either: • outside a list,(1) or • inside a list and the syntax bit ‘RE_BACKSLASH_ESCAPE_IN_LISTS’ is set. 3. It introduces an operator when followed by certain ordinary characters—sometimes only when certain syntax bits are set. See the cases ‘RE_BK_PLUS_QM’, ‘RE_NO_BK_BRACES’, ‘RE_NO_BK_VAR’, ‘RE_NO_BK_PARENS’, ‘RE_NO_BK_REF’ in *note Syntax Bits::. Also: • ‘\b’ represents the match-word-boundary operator (*note Match-word-boundary Operator::). • ‘\B’ represents the match-within-word operator (*note Match-within-word Operator::). • ‘\<’ represents the match-beginning-of-word operator (*note Match-beginning-of-word Operator::). • ‘\>’ represents the match-end-of-word operator (*note Match-end-of-word Operator::). • ‘\w’ represents the match-word-constituent operator (*note Match-word-constituent Operator::). • ‘\W’ represents the match-non-word-constituent operator (*note Match-non-word-constituent Operator::). • ‘\sCLASS’ is equivalent to ‘[[:space:]]’ (*note Match-space Operator::). • ‘\SCLASS’ is equivalent to ‘[^[:space]]’ (*note Match-non-space Operator::). • ‘\`’ represents the match-beginning-of-string operator and ‘\'’ represents the match-end-of-string operator (*note Whole-string Operators::). 4. In all other cases, Regex ignores ‘\’. For example, ‘\n’ matches ‘n’. ---------- Footnotes ---------- (1) Sometimes you don’t have to explicitly quote special characters to make them ordinary. For instance, most characters lose any special meaning inside a list (*note List Operators::). In addition, if the syntax bits ‘RE_CONTEXT_INVALID_OPS’ and ‘RE_CONTEXT_INDEP_OPS’ aren’t set, then (for historical reasons) the matcher considers special characters ordinary if they are in contexts where the operations they represent make no sense; for example, then the match-zero-or-more operator (represented by ‘*’) matches itself in the regular expression ‘*foo’ because there is no preceding expression on which it can operate. It is poor practice, however, to depend on this behavior; if you want a special character to be ordinary outside a list, it’s better to always quote it, regardless. 18.3 Common Operators ===================== You compose regular expressions from operators. In the following sections, we describe the regular expression operators specified by POSIX; GNU also uses these. Most operators have more than one representation as characters. *Note Regular Expression Syntax::, for what characters represent what operators under what circumstances. For most operators that can be represented in two ways, one representation is a single character and the other is that character preceded by ‘\’. For example, either ‘(’ or ‘\(’ represents the open-group operator. Which one does depends on the setting of a syntax bit, in this case ‘RE_NO_BK_PARENS’. Why is this so? Historical reasons dictate some of the varying representations, while POSIX dictates others. Finally, almost all characters lose any special meaning inside a list (*note List Operators::). 18.3.1 The Match-self Operator (ORDINARY CHARACTER) --------------------------------------------------- This operator matches the character itself. All ordinary characters (*note Regular Expression Syntax::) represent this operator. For example, ‘f’ is always an ordinary character, so the regular expression ‘f’ matches only the string ‘f’. In particular, it does _not_ match the string ‘ff’. 18.3.2 The Match-any-character Operator (‘.’) --------------------------------------------- This operator matches any single printing or nonprinting character except it won’t match a: newline if the syntax bit ‘RE_DOT_NEWLINE’ isn’t set. null if the syntax bit ‘RE_DOT_NOT_NULL’ is set. The ‘.’ (period) character represents this operator. For example, ‘a.b’ matches any three-character string beginning with ‘a’ and ending with ‘b’. 18.3.3 The Concatenation Operator --------------------------------- This operator concatenates two regular expressions A and B. No character represents this operator; you simply put B after A. The result is a regular expression that will match a string if A matches its first part and B matches the rest. For example, ‘xy’ (two match-self operators) matches ‘xy’. 18.3.4 Repetition Operators --------------------------- Repetition operators repeat the preceding regular expression a specified number of times. 18.3.4.1 The Match-zero-or-more Operator (‘*’) .............................................. This operator repeats the smallest possible preceding regular expression as many times as necessary (including zero) to match the pattern. ‘*’ represents this operator. For example, ‘o*’ matches any string made up of zero or more ‘o’s. Since this operator operates on the smallest preceding regular expression, ‘fo*’ has a repeating ‘o’, not a repeating ‘fo’. So, ‘fo*’ matches ‘f’, ‘fo’, ‘foo’, and so on. Since the match-zero-or-more operator is a suffix operator, it may be useless as such when no regular expression precedes it. This is the case when it: • is first in a regular expression, or • follows a match-beginning-of-line, open-group, or alternation operator. Three different things can happen in these cases: 1. If the syntax bit ‘RE_CONTEXT_INVALID_OPS’ is set, then the regular expression is invalid. 2. If ‘RE_CONTEXT_INVALID_OPS’ isn’t set, but ‘RE_CONTEXT_INDEP_OPS’ is, then ‘*’ represents the match-zero-or-more operator (which then operates on the empty string). 3. Otherwise, ‘*’ is ordinary. The matcher processes a match-zero-or-more operator by first matching as many repetitions of the smallest preceding regular expression as it can. Then it continues to match the rest of the pattern. If it can’t match the rest of the pattern, it backtracks (as many times as necessary), each time discarding one of the matches until it can either match the entire pattern or be certain that it cannot get a match. For example, when matching ‘ca*ar’ against ‘caaar’, the matcher first matches all three ‘a’s of the string with the ‘a*’ of the regular expression. However, it cannot then match the final ‘ar’ of the regular expression against the final ‘r’ of the string. So it backtracks, discarding the match of the last ‘a’ in the string. It can then match the remaining ‘ar’. 18.3.4.2 The Match-one-or-more Operator (‘+’ or ‘\+’) ..................................................... If the syntax bit ‘RE_LIMITED_OPS’ is set, then Regex doesn’t recognize this operator. Otherwise, if the syntax bit ‘RE_BK_PLUS_QM’ isn’t set, then ‘+’ represents this operator; if it is, then ‘\+’ does. This operator is similar to the match-zero-or-more operator except that it repeats the preceding regular expression at least once; *note Match-zero-or-more Operator::, for what it operates on, how some syntax bits affect it, and how Regex backtracks to match it. For example, supposing that ‘+’ represents the match-one-or-more operator; then ‘ca+r’ matches, e.g., ‘car’ and ‘caaaar’, but not ‘cr’. 18.3.4.3 The Match-zero-or-one Operator (‘?’ or ‘\?’) ..................................................... If the syntax bit ‘RE_LIMITED_OPS’ is set, then Regex doesn’t recognize this operator. Otherwise, if the syntax bit ‘RE_BK_PLUS_QM’ isn’t set, then ‘?’ represents this operator; if it is, then ‘\?’ does. This operator is similar to the match-zero-or-more operator except that it repeats the preceding regular expression once or not at all; *note Match-zero-or-more Operator::, to see what it operates on, how some syntax bits affect it, and how Regex backtracks to match it. For example, supposing that ‘?’ represents the match-zero-or-one operator; then ‘ca?r’ matches both ‘car’ and ‘cr’, but nothing else. 18.3.4.4 Interval Operators (‘{’ ... ‘}’ or ‘\{’ ... ‘\}’) .......................................................... If the syntax bit ‘RE_INTERVALS’ is set, then Regex recognizes “interval expressions”. They repeat the smallest possible preceding regular expression a specified number of times. If the syntax bit ‘RE_NO_BK_BRACES’ is set, ‘{’ represents the “open-interval operator” and ‘}’ represents the “close-interval operator” ; otherwise, ‘\{’ and ‘\}’ do. Specifically, supposing that ‘{’ and ‘}’ represent the open-interval and close-interval operators; then: ‘{COUNT}’ matches exactly COUNT occurrences of the preceding regular expression. ‘{MIN,}’ matches MIN or more occurrences of the preceding regular expression. ‘{MIN, MAX}’ matches at least MIN but no more than MAX occurrences of the preceding regular expression. The interval expression (but not necessarily the regular expression that contains it) is invalid if: • MIN is greater than MAX, or • any of COUNT, MIN, or MAX are outside the range zero to ‘RE_DUP_MAX’ (which symbol ‘regex.h’ defines). If the interval expression is invalid and the syntax bit ‘RE_NO_BK_BRACES’ is set, then Regex considers all the characters in the would-be interval to be ordinary. If that bit isn’t set, then the regular expression is invalid. If the interval expression is valid but there is no preceding regular expression on which to operate, then if the syntax bit ‘RE_CONTEXT_INVALID_OPS’ is set, the regular expression is invalid. If that bit isn’t set, then Regex considers all the characters—other than backslashes, which it ignores—in the would-be interval to be ordinary. 18.3.5 The Alternation Operator (‘|’ or ‘\|’) --------------------------------------------- If the syntax bit ‘RE_LIMITED_OPS’ is set, then Regex doesn’t recognize this operator. Otherwise, if the syntax bit ‘RE_NO_BK_VBAR’ is set, then ‘|’ represents this operator; otherwise, ‘\|’ does. Alternatives match one of a choice of regular expressions: if you put the character(s) representing the alternation operator between any two regular expressions A and B, the result matches the union of the strings that A and B match. For example, supposing that ‘|’ is the alternation operator, then ‘foo|bar|quux’ would match any of ‘foo’, ‘bar’ or ‘quux’. The alternation operator operates on the _largest_ possible surrounding regular expressions. (Put another way, it has the lowest precedence of any regular expression operator.) Thus, the only way you can delimit its arguments is to use grouping. For example, if ‘(’ and ‘)’ are the open and close-group operators, then ‘fo(o|b)ar’ would match either ‘fooar’ or ‘fobar’. (‘foo|bar’ would match ‘foo’ or ‘bar’.) The matcher usually tries all combinations of alternatives so as to match the longest possible string. For example, when matching ‘(fooq|foo)*(qbarquux|bar)’ against ‘fooqbarquux’, it cannot take, say, the first (“depth-first”) combination it could match, since then it would be content to match just ‘fooqbar’. Note that since the default behavior is to return the leftmost longest match, when more than one of a series of alternatives matches the actual match will be the longest matching alternative, not necessarily the first in the list. 18.3.6 List Operators (‘[’ ... ‘]’ and ‘[^’ ... ‘]’) ---------------------------------------------------- “Lists”, also called “bracket expressions”, are a set of one or more items. An “item” is a character, a collating symbol, an equivalence class expression, a character class expression, or a range expression. The syntax bits affect which kinds of items you can put in a list. We explain the last four items in subsections below. Empty lists are invalid. A “matching list” matches a single character represented by one of the list items. You form a matching list by enclosing one or more items within an “open-matching-list operator” (represented by ‘[’) and a “close-list operator” (represented by ‘]’). For example, ‘[ab]’ matches either ‘a’ or ‘b’. ‘[ad]*’ matches the empty string and any string composed of just ‘a’s and ‘d’s in any order. Regex considers invalid a regular expression with a ‘[’ but no matching ‘]’. “Nonmatching lists” are similar to matching lists except that they match a single character _not_ represented by one of the list items. You use an “open-nonmatching-list operator” (represented by ‘[^’(1)) instead of an open-matching-list operator to start a nonmatching list. For example, ‘[^ab]’ matches any character except ‘a’ or ‘b’. If the syntax bit ‘RE_HAT_LISTS_NOT_NEWLINE’ is set, then nonmatching lists do not match a newline. Most characters lose any special meaning inside a list. The special characters inside a list follow. ‘]’ ends the list if it’s not the first list item. So, if you want to make the ‘]’ character a list item, you must put it first. ‘\’ quotes the next character if the syntax bit ‘RE_BACKSLASH_ESCAPE_IN_LISTS’ is set. ‘[.’ represents the open-collating-symbol operator (*note Collating Symbol Operators::). ‘.]’ represents the close-collating-symbol operator. ‘[=’ represents the open-equivalence-class operator (*note Equivalence Class Operators::). ‘=]’ represents the close-equivalence-class operator. ‘[:’ represents the open-character-class operator (*note Character Class Operators::) if the syntax bit ‘RE_CHAR_CLASSES’ is set and what follows is a valid character class expression. ‘:]’ represents the close-character-class operator if the syntax bit ‘RE_CHAR_CLASSES’ is set and what precedes it is an open-character-class operator followed by a valid character class name. ‘-’ represents the range operator (*note Range Operator::) if it’s not first or last in a list or the ending point of a range. All other characters are ordinary. For example, ‘[.*]’ matches ‘.’ and ‘*’. ---------- Footnotes ---------- (1) Regex therefore doesn’t consider the ‘^’ to be the first character in the list. If you put a ‘^’ character first in (what you think is) a matching list, you’ll turn it into a nonmatching list. 18.3.6.1 Collating Symbol Operators (‘[.’ ... ‘.]’) ................................................... Collating symbols can be represented inside lists. You form a “collating symbol” by putting a collating element between an “open-collating-symbol operator” and a “close-collating-symbol operator”. ‘[.’ represents the open-collating-symbol operator and ‘.]’ represents the close-collating-symbol operator. For example, if ‘ll’ is a collating element, then ‘[[.ll.]]’ would match ‘ll’. 18.3.6.2 Equivalence Class Operators (‘[=’ ... ‘=]’) .................................................... Regex recognizes equivalence class expressions inside lists. A “equivalence class expression” is a set of collating elements which all belong to the same equivalence class. You form an equivalence class expression by putting a collating element between an “open-equivalence-class operator” and a “close-equivalence-class operator”. ‘[=’ represents the open-equivalence-class operator and ‘=]’ represents the close-equivalence-class operator. For example, if ‘a’ and ‘A’ were an equivalence class, then both ‘[[=a=]]’ and ‘[[=A=]]’ would match both ‘a’ and ‘A’. If the collating element in an equivalence class expression isn’t part of an equivalence class, then the matcher considers the equivalence class expression to be a collating symbol. 18.3.6.3 Character Class Operators (‘[:’ ... ‘:]’) .................................................. If the syntax bit ‘RE_CHAR_CLASSES’ is set, then Regex recognizes character class expressions inside lists. A “character class expression” matches one character from a given class. You form a character class expression by putting a character class name between an “open-character-class operator” (represented by ‘[:’) and a “close-character-class operator” (represented by ‘:]’). The character class names and their meanings are: ‘alnum’ letters and digits ‘alpha’ letters ‘blank’ system-dependent; for GNU, a space or tab ‘cntrl’ control characters (in the ASCII encoding, code 0177 and codes less than 040) ‘digit’ digits ‘graph’ same as ‘print’ except omits space ‘lower’ lowercase letters ‘print’ printable characters (in the ASCII encoding, space tilde—codes 040 through 0176) ‘punct’ neither control nor alphanumeric characters ‘space’ space, carriage return, newline, vertical tab, and form feed ‘upper’ uppercase letters ‘xdigit’ hexadecimal digits: ‘0’–‘9’, ‘a’–‘f’, ‘A’–‘F’ These correspond to the definitions in the C library’s ‘’ facility. For example, ‘[:alpha:]’ corresponds to the standard facility ‘isalpha’. Regex recognizes character class expressions only inside of lists; so ‘[[:alpha:]]’ matches any letter, but ‘[:alpha:]’ outside of a bracket expression and not followed by a repetition operator matches just itself. 18.3.6.4 The Range Operator (‘-’) ................................. Regex recognizes “range expressions” inside a list. They represent those characters that fall between two elements in the current collating sequence. You form a range expression by putting a “range operator” between two of any of the following: characters, collating elements, collating symbols, and equivalence class expressions. The starting point of the range and the ending point of the range don’t have to be the same kind of item, e.g., the starting point could be a collating element and the ending point could be an equivalence class expression. If a range’s ending point is an equivalence class, then all the collating elements in that class will be in the range.(1) ‘-’ represents the range operator. For example, ‘a-f’ within a list represents all the characters from ‘a’ through ‘f’ inclusively. If the syntax bit ‘RE_NO_EMPTY_RANGES’ is set, then if the range’s ending point collates less than its starting point, the range (and the regular expression containing it) is invalid. For example, the regular expression ‘[z-a]’ would be invalid. If this bit isn’t set, then Regex considers such a range to be empty. Since ‘-’ represents the range operator, if you want to make a ‘-’ character itself a list item, you must do one of the following: • Put the ‘-’ either first or last in the list. • Include a range whose starting point collates strictly lower than ‘-’ and whose ending point collates equal or higher. Unless a range is the first item in a list, a ‘-’ can’t be its starting point, but _can_ be its ending point. That is because Regex considers ‘-’ to be the range operator unless it is preceded by another ‘-’. For example, in the ASCII encoding, ‘)’, ‘*’, ‘+’, ‘,’, ‘-’, ‘.’, and ‘/’ are contiguous characters in the collating sequence. You might think that ‘[)-+--/]’ has two ranges: ‘)-+’ and ‘--/’. Rather, it has the ranges ‘)-+’ and ‘+--’, plus the character ‘/’, so it matches, e.g., ‘,’, not ‘.’. • Put a range whose starting point is ‘-’ first in the list. For example, ‘[-a-z]’ matches a lowercase letter or a hyphen (in English, in ASCII). ---------- Footnotes ---------- (1) You can’t use a character class for the starting or ending point of a range, since a character class is not a single character. 18.3.7 Grouping Operators (‘(’ ... ‘)’ or ‘\(’ ... ‘\)’) -------------------------------------------------------- A “group”, also known as a “subexpression”, consists of an “open-group operator”, any number of other operators, and a “close-group operator”. Regex treats this sequence as a unit, just as mathematics and programming languages treat a parenthesized expression as a unit. Therefore, using “groups”, you can: • delimit the argument(s) to an alternation operator (*note Alternation Operator::) or a repetition operator (*note Repetition Operators::). • keep track of the indices of the substring that matched a given group. *Note Using Registers::, for a precise explanation. This lets you: • use the back-reference operator (*note Back-reference Operator::). • use registers (*note Using Registers::). If the syntax bit ‘RE_NO_BK_PARENS’ is set, then ‘(’ represents the open-group operator and ‘)’ represents the close-group operator; otherwise, ‘\(’ and ‘\)’ do. If the syntax bit ‘RE_UNMATCHED_RIGHT_PAREN_ORD’ is set and a close-group operator has no matching open-group operator, then Regex considers it to match ‘)’. 18.3.8 The Back-reference Operator (“\”DIGIT) --------------------------------------------- If the syntax bit ‘RE_NO_BK_REF’ isn’t set, then Regex recognizes back-references. A back-reference matches a specified preceding group. The back-reference operator is represented by ‘\DIGIT’ anywhere after the end of a regular expression’s DIGIT-th group (*note Grouping Operators::). DIGIT must be between ‘1’ and ‘9’. The matcher assigns numbers 1 through 9 to the first nine groups it encounters. By using one of ‘\1’ through ‘\9’ after the corresponding group’s close-group operator, you can match a substring identical to the one that the group does. Back-references match according to the following (in all examples below, ‘(’ represents the open-group, ‘)’ the close-group, ‘{’ the open-interval and ‘}’ the close-interval operator): • If the group matches a substring, the back-reference matches an identical substring. For example, ‘(a)\1’ matches ‘aa’ and ‘(bana)na\1bo\1’ matches ‘bananabanabobana’. Likewise, ‘(.*)\1’ matches any (newline-free if the syntax bit ‘RE_DOT_NEWLINE’ isn’t set) string that is composed of two identical halves; the ‘(.*)’ matches the first half and the ‘\1’ matches the second half. • If the group matches more than once (as it might if followed by, e.g., a repetition operator), then the back-reference matches the substring the group _last_ matched. For example, ‘((a*)b)*\1\2’ matches ‘aabababa’; first group 1 (the outer one) matches ‘aab’ and group 2 (the inner one) matches ‘aa’. Then group 1 matches ‘ab’ and group 2 matches ‘a’. So, ‘\1’ matches ‘ab’ and ‘\2’ matches ‘a’. • If the group doesn’t participate in a match, i.e., it is part of an alternative not taken or a repetition operator allows zero repetitions of it, then the back-reference makes the whole match fail. For example, ‘(one()|two())-and-(three\2|four\3)’ matches ‘one-and-three’ and ‘two-and-four’, but not ‘one-and-four’ or ‘two-and-three’. For example, if the pattern matches ‘one-and-’, then its group 2 matches the empty string and its group 3 doesn’t participate in the match. So, if it then matches ‘four’, then when it tries to back-reference group 3—which it will attempt to do because ‘\3’ follows the ‘four’—the match will fail because group 3 didn’t participate in the match. You can use a back-reference as an argument to a repetition operator. For example, ‘(a(b))\2*’ matches ‘a’ followed by two or more ‘b’s. Similarly, ‘(a(b))\2{3}’ matches ‘abbbb’. If there is no preceding DIGIT-th subexpression, the regular expression is invalid. Back-references can greatly slow down matching, as they can generate exponentially many matching possibilities that can consume both time and memory to explore. Also, the POSIX specification for back-references is at times unclear. Furthermore, many regular expression implementations have back-reference bugs that can cause programs to return incorrect answers or even crash, and fixing these bugs has often been low-priority: for example, as of 2020 the GNU C library bug database (https://sourceware.org/bugzilla/) contained back-reference bugs 52, 10844, 11053, 24269 and 25322, with little sign of forthcoming fixes. Luckily, back-references are rarely useful and it should be little trouble to avoid them in practical applications. 18.3.9 Anchoring Operators -------------------------- These operators can constrain a pattern to match only at the beginning or end of the entire string or at the beginning or end of a line. 18.3.9.1 The Match-beginning-of-line Operator (‘^’) ................................................... This operator can match the empty string either at the beginning of the string or after a newline character. Thus, it is said to “anchor” the pattern to the beginning of a line. In the cases following, ‘^’ represents this operator. (Otherwise, ‘^’ is ordinary.) • It (the ‘^’) is first in the pattern, as in ‘^foo’. • The syntax bit ‘RE_CONTEXT_INDEP_ANCHORS’ is set, and it is outside a bracket expression. • It follows an open-group or alternation operator, as in ‘a\(^b\)’ and ‘a\|^b’. *Note Grouping Operators::, and *note Alternation Operator::. These rules imply that some valid patterns containing ‘^’ cannot be matched; for example, ‘foo^bar’ if ‘RE_CONTEXT_INDEP_ANCHORS’ is set. If the ‘not_bol’ field is set in the pattern buffer (*note GNU Pattern Buffers::), then ‘^’ fails to match at the beginning of the string. This lets you match against pieces of a line, as you would need to if, say, searching for repeated instances of a given pattern in a line; it would work correctly for patterns both with and without match-beginning-of-line operators. 18.3.9.2 The Match-end-of-line Operator (‘$’) ............................................. This operator can match the empty string either at the end of the string or before a newline character in the string. Thus, it is said to “anchor” the pattern to the end of a line. It is always represented by ‘$’. For example, ‘foo$’ usually matches, e.g., ‘foo’ and, e.g., the first three characters of ‘foo\nbar’. Its interaction with the syntax bits and pattern buffer fields is exactly the dual of ‘^’’s; see the previous section. (That is, “‘^’” becomes “‘$’”, “beginning” becomes “end”, “next” becomes “previous”, “after” becomes “before”, and “‘not_bol’” becomes “‘not_eol’”.) 18.4 GNU Operators ================== The following are operators that GNU defines (and POSIX doesn’t) that you can use unless the syntax bit ‘RE_NO_GNU_OPS’ is set. 18.4.1 Word Operators --------------------- The operators in this section require Regex to recognize parts of words. Characters that are part of words, which are called “word-constituent”, are letters, digits, and the underscore (‘_’); more precisely, any character in the POSIX class ‘alnum’ in the current locale, or underscore. 18.4.1.1 The Match-word-boundary Operator (‘\b’) ................................................ This operator (represented by ‘\b’) matches the empty string at either the beginning or the end of a word. For example, ‘\brat\b’ matches the separate word ‘rat’. 18.4.1.2 The Match-within-word Operator (‘\B’) .............................................. This operator (represented by ‘\B’) matches the empty string within a word. For example, ‘c\Brat\Be’ matches ‘crate’, but ‘dirty \Brat’ doesn’t match ‘dirty rat’. 18.4.1.3 The Match-beginning-of-word Operator (‘\<’) .................................................... This operator (represented by ‘\<’) matches the empty string at the beginning of a word. 18.4.1.4 The Match-end-of-word Operator (‘\>’) .............................................. This operator (represented by ‘\>’) matches the empty string at the end of a word. 18.4.1.5 The Match-word-constituent Operator (‘\w’) ................................................... This operator (represented by ‘\w’) matches any word-constituent character. 18.4.1.6 The Match-non-word-constituent Operator (‘\W’) ....................................................... This operator (represented by ‘\W’) matches any character that is not word-constituent. 18.4.2 Space Operators ---------------------- 18.4.2.1 The Match-space Operator (‘\s’) ........................................ This operator (represented by ‘\s’) matches any space character (that is, in the POSIX class ‘[:space:]’). 18.4.2.2 The Match-non-space Operator (‘\S’) ............................................ This operator (represented by ‘\S’) matches any character that is not a space (that is, in the POSIX class ‘[:space:]’). 18.4.3 Whole-string Operators ----------------------------- Following are operators which work on the whole string. 18.4.3.1 The Match-beginning-of-string Operator (‘\`’) ...................................................... This operator (represented by ‘\`’) matches the empty string at the beginning of the string. 18.4.3.2 The Match-end-of-string Operator (‘\'’) ................................................ This operator (represented by ‘\'’) matches the empty string at the end of the string. 18.5 What Gets Matched? ======================= Regex usually matches strings according to the “leftmost longest” rule; that is, it chooses the longest of the leftmost matches. This does not mean that for a regular expression containing subexpressions that it simply chooses the longest match for each subexpression, left to right; the overall match must also be the longest possible one. For example, ‘(ac*)(c*d[ac]*)\1’ matches ‘acdacaaa’, not ‘acdac’, as it would if it were to choose the longest match for the first subexpression. 18.6 Programming with Regex =========================== Here we describe how you use the Regex data structures and functions in C programs. Regex has three interfaces: one designed for GNU, one compatible with POSIX (as specified by POSIX, draft 1003.2/D11.2), and one compatible with Berkeley Unix. The POSIX interface is not documented here; see the documentation of GNU libc, or the POSIX man pages. The Berkeley Unix interface is documented here for convenience, since its documentation is not otherwise readily available on GNU systems. 18.6.1 GNU Regex Functions -------------------------- If you’re writing code that doesn’t need to be compatible with either POSIX or Berkeley Unix, you can use these functions. They provide more options than the other interfaces. 18.6.1.1 GNU Pattern Buffers ............................ To compile, match, or search for a given regular expression, you must supply a pattern buffer. A “pattern buffer” holds one compiled regular expression.(1) You can have several different pattern buffers simultaneously, each holding a compiled pattern for a different regular expression. ‘regex.h’ defines the pattern buffer ‘struct’ with the following public fields: unsigned char *buffer; unsigned long allocated; char *fastmap; char *translate; size_t re_nsub; unsigned no_sub : 1; unsigned not_bol : 1; unsigned not_eol : 1; ---------- Footnotes ---------- (1) Regular expressions are also referred to as “patterns,” hence the name “pattern buffer.” 18.6.1.2 GNU Regular Expression Compiling ......................................... In GNU, you can both match and search for a given regular expression. To do either, you must first compile it in a pattern buffer (*note GNU Pattern Buffers::). Regular expressions match according to the syntax with which they were compiled; with GNU, you indicate what syntax you want by setting the variable ‘re_syntax_options’ (declared in ‘regex.h’) before calling the compiling function, ‘re_compile_pattern’ (see below). *Note Syntax Bits::, and *note Predefined Syntaxes::. You can change the value of ‘re_syntax_options’ at any time. Usually, however, you set its value once and then never change it. ‘re_compile_pattern’ takes a pattern buffer as an argument. You must initialize the following fields: ‘translate initialization’ ‘translate’ Initialize this to point to a translate table if you want one, or to zero if you don’t. We explain translate tables in *note GNU Translate Tables::. ‘fastmap’ Initialize this to nonzero if you want a fastmap, or to zero if you don’t. ‘buffer’ ‘allocated’ If you want ‘re_compile_pattern’ to allocate memory for the compiled pattern, set both of these to zero. If you have an existing block of memory (allocated with ‘malloc’) you want Regex to use, set ‘buffer’ to its address and ‘allocated’ to its size (in bytes). ‘re_compile_pattern’ uses ‘realloc’ to extend the space for the compiled pattern as necessary. To compile a pattern buffer, use: char * re_compile_pattern (const char *REGEX, const int REGEX_SIZE, struct re_pattern_buffer *PATTERN_BUFFER) REGEX is the regular expression’s address, REGEX_SIZE is its length, and PATTERN_BUFFER is the pattern buffer’s address. If ‘re_compile_pattern’ successfully compiles the regular expression, it returns zero and sets ‘*PATTERN_BUFFER’ to the compiled pattern. It sets the pattern buffer’s fields as follows: ‘buffer’ to the compiled pattern. ‘syntax’ to the current value of ‘re_syntax_options’. ‘re_nsub’ to the number of subexpressions in REGEX. If ‘re_compile_pattern’ can’t compile REGEX, it returns an error string corresponding to a POSIX error code. 18.6.1.3 GNU Matching ..................... Matching the GNU way means trying to match as much of a string as possible starting at a position within it you specify. Once you’ve compiled a pattern into a pattern buffer (*note GNU Regular Expression Compiling::), you can ask the matcher to match that pattern against a string using: int re_match (struct re_pattern_buffer *PATTERN_BUFFER, const char *STRING, const int SIZE, const int START, struct re_registers *REGS) PATTERN_BUFFER is the address of a pattern buffer containing a compiled pattern. STRING is the string you want to match; it can contain newline and null characters. SIZE is the length of that string. START is the string index at which you want to begin matching; the first character of STRING is at index zero. *Note Using Registers::, for an explanation of REGS; you can safely pass zero. ‘re_match’ matches the regular expression in PATTERN_BUFFER against the string STRING according to the syntax of PATTERN_BUFFER. (*Note GNU Regular Expression Compiling::, for how to set it.) The function returns -1 if the compiled pattern does not match any part of STRING and -2 if an internal error happens; otherwise, it returns how many (possibly zero) characters of STRING the pattern matched. An example: suppose PATTERN_BUFFER points to a pattern buffer containing the compiled pattern for ‘a*’, and STRING points to ‘aaaaab’ (whereupon SIZE should be 6). Then if START is 2, ‘re_match’ returns 3, i.e., ‘a*’ would have matched the last three ‘a’s in STRING. If START is 0, ‘re_match’ returns 5, i.e., ‘a*’ would have matched all the ‘a’s in STRING. If START is either 5 or 6, it returns zero. If START is not between zero and SIZE, then ‘re_match’ returns -1. 18.6.1.4 GNU Searching ...................... “Searching” means trying to match starting at successive positions within a string. The function ‘re_search’ does this. Before calling ‘re_search’, you must compile your regular expression. *Note GNU Regular Expression Compiling::. Here is the function declaration: int re_search (struct re_pattern_buffer *PATTERN_BUFFER, const char *STRING, const int SIZE, const int START, const int RANGE, struct re_registers *REGS) whose arguments are the same as those to ‘re_match’ (*note GNU Matching::) except that the two arguments START and RANGE replace ‘re_match’’s argument START. If RANGE is positive, then ‘re_search’ attempts a match starting first at index START, then at START + 1 if that fails, and so on, up to START + RANGE; if RANGE is negative, then it attempts a match starting first at index START, then at START -1 if that fails, and so on. If START is not between zero and SIZE, then ‘re_search’ returns -1. When RANGE is positive, ‘re_search’ adjusts RANGE so that START + RANGE - 1 is between zero and SIZE, if necessary; that way it won’t search outside of STRING. Similarly, when RANGE is negative, ‘re_search’ adjusts RANGE so that START + RANGE + 1 is between zero and SIZE, if necessary. If the ‘fastmap’ field of PATTERN_BUFFER is zero, ‘re_search’ matches starting at consecutive positions; otherwise, it uses ‘fastmap’ to make the search more efficient. *Note Searching with Fastmaps::. If no match is found, ‘re_search’ returns -1. If a match is found, it returns the index where the match began. If an internal error happens, it returns -2. 18.6.1.5 Matching and Searching with Split Data ............................................... Using the functions ‘re_match_2’ and ‘re_search_2’, you can match or search in data that is divided into two strings. The function: int re_match_2 (struct re_pattern_buffer *BUFFER, const char *STRING1, const int SIZE1, const char *STRING2, const int SIZE2, const int START, struct re_registers *REGS, const int STOP) is similar to ‘re_match’ (*note GNU Matching::) except that you pass _two_ data strings and sizes, and an index STOP beyond which you don’t want the matcher to try matching. As with ‘re_match’, if it succeeds, ‘re_match_2’ returns how many characters of STRING it matched. Regard STRING1 and STRING2 as concatenated when you set the arguments START and STOP and use the contents of REGS; ‘re_match_2’ never returns a value larger than SIZE1 + SIZE2. The function: int re_search_2 (struct re_pattern_buffer *BUFFER, const char *STRING1, const int SIZE1, const char *STRING2, const int SIZE2, const int START, const int RANGE, struct re_registers *REGS, const int STOP) is similarly related to ‘re_search’. 18.6.1.6 Searching with Fastmaps ................................ If you’re searching through a long string, you should use a fastmap. Without one, the searcher tries to match at consecutive positions in the string. Generally, most of the characters in the string could not start a match. It takes much longer to try matching at a given position in the string than it does to check in a table whether or not the character at that position could start a match. A “fastmap” is such a table. More specifically, a fastmap is an array indexed by the characters in your character set. Under the ASCII encoding, therefore, a fastmap has 256 elements. If you want the searcher to use a fastmap with a given pattern buffer, you must allocate the array and assign the array’s address to the pattern buffer’s ‘fastmap’ field. You either can compile the fastmap yourself or have ‘re_search’ do it for you; when ‘fastmap’ is nonzero, it automatically compiles a fastmap the first time you search using a particular compiled pattern. By setting the buffer’s ‘fastmap’ field before calling ‘re_compile_pattern’, you can reuse a buffer data structure across multiple searches with different patterns, and allocate the fastmap only once. Nonetheless, the fastmap must be recompiled each time the buffer has a new pattern compiled into it. To compile a fastmap yourself, use: int re_compile_fastmap (struct re_pattern_buffer *PATTERN_BUFFER) PATTERN_BUFFER is the address of a pattern buffer. If the character C could start a match for the pattern, ‘re_compile_fastmap’ makes ‘PATTERN_BUFFER->fastmap[C]’ nonzero. It returns 0 if it can compile a fastmap and -2 if there is an internal error. For example, if ‘|’ is the alternation operator and PATTERN_BUFFER holds the compiled pattern for ‘a|b’, then ‘re_compile_fastmap’ sets ‘fastmap['a']’ and ‘fastmap['b']’ (and no others). ‘re_search’ uses a fastmap as it moves along in the string: it checks the string’s characters until it finds one that’s in the fastmap. Then it tries matching at that character. If the match fails, it repeats the process. So, by using a fastmap, ‘re_search’ doesn’t waste time trying to match at positions in the string that couldn’t start a match. If you don’t want ‘re_search’ to use a fastmap, store zero in the ‘fastmap’ field of the pattern buffer before calling ‘re_search’. Once you’ve initialized a pattern buffer’s ‘fastmap’ field, you need never do so again—even if you compile a new pattern in it—provided the way the field is set still reflects whether or not you want a fastmap. ‘re_search’ will still either do nothing if ‘fastmap’ is null or, if it isn’t, compile a new fastmap for the new pattern. 18.6.1.7 GNU Translate Tables ............................. If you set the ‘translate’ field of a pattern buffer to a translate table, then the GNU Regex functions to which you’ve passed that pattern buffer use it to apply a simple transformation to all the regular expression and string characters at which they look. A “translate table” is an array indexed by the characters in your character set. Under the ASCII encoding, therefore, a translate table has 256 elements. The array’s elements are also characters in your character set. When the Regex functions see a character C, they use ‘translate[C]’ in its place, with one exception: the character after a ‘\’ is not translated. (This ensures that, the operators, e.g., ‘\B’ and ‘\b’, are always distinguishable.) For example, a table that maps all lowercase letters to the corresponding uppercase ones would cause the matcher to ignore differences in case.(1) Such a table would map all characters except lowercase letters to themselves, and lowercase letters to the corresponding uppercase ones. Under the ASCII encoding, here’s how you could initialize such a table (we’ll call it ‘case_fold’): for (i = 0; i < 256; i++) case_fold[i] = i; for (i = 'a'; i <= 'z'; i++) case_fold[i] = i - ('a' - 'A'); You tell Regex to use a translate table on a given pattern buffer by assigning that table’s address to the ‘translate’ field of that buffer. If you don’t want Regex to do any translation, put zero into this field. You’ll get weird results if you change the table’s contents anytime between compiling the pattern buffer, compiling its fastmap, and matching or searching with the pattern buffer. ---------- Footnotes ---------- (1) A table that maps all uppercase letters to the corresponding lowercase ones would work just as well for this purpose. 18.6.1.8 Using Registers ........................ A group in a regular expression can match a (possibly empty) substring of the string that regular expression as a whole matched. The matcher remembers the beginning and end of the substring matched by each group. To find out what they matched, pass a nonzero REGS argument to a GNU matching or searching function (*note GNU Matching:: and *note GNU Searching::), i.e., the address of a structure of this type, as defined in ‘regex.h’: struct re_registers { unsigned num_regs; regoff_t *start; regoff_t *end; }; Except for (possibly) the NUM_REGS’th element (see below), the Ith element of the ‘start’ and ‘end’ arrays records information about the Ith group in the pattern. (They’re declared as C pointers, but this is only because not all C compilers accept zero-length arrays; conceptually, it is simplest to think of them as arrays.) The ‘start’ and ‘end’ arrays are allocated in one of two ways. The simplest and perhaps most useful is to let the matcher (re)allocate enough space to record information for all the groups in the regular expression. If ‘re_set_registers’ is not called before searching or matching, then the matcher allocates two arrays each of 1 + RE_NSUB elements (RE_NSUB is another field in the pattern buffer; *note GNU Pattern Buffers::). The extra element is set to -1. Then on subsequent calls with the same pattern buffer and REGS arguments, the matcher reallocates more space if necessary. The function: void re_set_registers (struct re_pattern_buffer *BUFFER, struct re_registers *REGS, size_t NUM_REGS, regoff_t *STARTS, regoff_t *ENDS) sets REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least NUM_REGS * ‘sizeof (regoff_t)’ bytes long. If NUM_REGS is zero, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using BUFFER will allocate its own register data, without freeing the old data. The following examples illustrate the information recorded in the ‘re_registers’ structure. (In all of them, ‘(’ represents the open-group and ‘)’ the close-group operator. The first character in the string STRING is at index 0.) • If the regular expression has an I-th group that matches a substring of STRING, then the function sets ‘REGS->start[I]’ to the index in STRING where the substring matched by the I-th group begins, and ‘REGS->end[I]’ to the index just beyond that substring’s end. The function sets ‘REGS->start[0]’ and ‘REGS->end[0]’ to analogous information about the entire pattern. For example, when you match ‘((a)(b))’ against ‘ab’, you get: • 0 in ‘REGS->start[0]’ and 2 in ‘REGS->end[0]’ • 0 in ‘REGS->start[1]’ and 2 in ‘REGS->end[1]’ • 0 in ‘REGS->start[2]’ and 1 in ‘REGS->end[2]’ • 1 in ‘REGS->start[3]’ and 2 in ‘REGS->end[3]’ • If a group matches more than once (as it might if followed by, e.g., a repetition operator), then the function reports the information about what the group _last_ matched. For example, when you match the pattern ‘(a)*’ against the string ‘aa’, you get: • 0 in ‘REGS->start[0]’ and 2 in ‘REGS->end[0]’ • 1 in ‘REGS->start[1]’ and 2 in ‘REGS->end[1]’ • If the I-th group does not participate in a successful match, e.g., it is an alternative not taken or a repetition operator allows zero repetitions of it, then the function sets ‘REGS->start[I]’ and ‘REGS->end[I]’ to -1. For example, when you match the pattern ‘(a)*b’ against the string ‘b’, you get: • 0 in ‘REGS->start[0]’ and 1 in ‘REGS->end[0]’ • -1 in ‘REGS->start[1]’ and -1 in ‘REGS->end[1]’ • If the I-th group matches a zero-length string, then the function sets ‘REGS->start[I]’ and ‘REGS->end[I]’ to the index just beyond that zero-length string. For example, when you match the pattern ‘(a*)b’ against the string ‘b’, you get: • 0 in ‘REGS->start[0]’ and 1 in ‘REGS->end[0]’ • 0 in ‘REGS->start[1]’ and 0 in ‘REGS->end[1]’ • If an I-th group contains a J-th group in turn not contained within any other group within group I and the function reports a match of the I-th group, then it records in ‘REGS->start[J]’ and ‘REGS->end[J]’ the last match (if it matched) of the J-th group. For example, when you match the pattern ‘((a*)b)*’ against the string ‘abb’, group 2 last matches the empty string, so you get what it previously matched: • 0 in ‘REGS->start[0]’ and 3 in ‘REGS->end[0]’ • 2 in ‘REGS->start[1]’ and 3 in ‘REGS->end[1]’ • 2 in ‘REGS->start[2]’ and 2 in ‘REGS->end[2]’ When you match the pattern ‘((a)*b)*’ against the string ‘abb’, group 2 doesn’t participate in the last match, so you get: • 0 in ‘REGS->start[0]’ and 3 in ‘REGS->end[0]’ • 2 in ‘REGS->start[1]’ and 3 in ‘REGS->end[1]’ • 0 in ‘REGS->start[2]’ and 1 in ‘REGS->end[2]’ • If an I-th group contains a J-th group in turn not contained within any other group within group I and the function sets ‘REGS->start[I]’ and ‘REGS->end[I]’ to -1, then it also sets ‘REGS->start[J]’ and ‘REGS->end[J]’ to -1. For example, when you match the pattern ‘((a)*b)*c’ against the string ‘c’, you get: • 0 in ‘REGS->start[0]’ and 1 in ‘REGS->end[0]’ • -1 in ‘REGS->start[1]’ and -1 in ‘REGS->end[1]’ • -1 in ‘REGS->start[2]’ and -1 in ‘REGS->end[2]’ 18.6.1.9 Freeing GNU Pattern Buffers .................................... To free any allocated fields of a pattern buffer, use the POSIX function ‘regfree’: void regfree (regex_t *PREG) PREG is the pattern buffer whose allocated fields you want freed; this works because since the type ‘regex_t’—the type for POSIX pattern buffers—is equivalent to the type ‘re_pattern_buffer’. ‘regfree’ also sets PREG’s ‘allocated’ field to zero. After a buffer has been freed, it must have a regular expression compiled in it before passing it to a matching or searching function. 18.6.2 BSD Regex Functions -------------------------- If you’re writing code that has to be Berkeley Unix compatible, you’ll need to use these functions whose interfaces are the same as those in Berkeley Unix. 18.6.2.1 BSD Regular Expression Compiling ......................................... With Berkeley Unix, you can only search for a given regular expression; you can’t match one. To search for it, you must first compile it. Before you compile it, you must indicate the regular expression syntax you want it compiled according to by setting the variable ‘re_syntax_options’ (declared in ‘regex.h’) to some syntax (*note Regular Expression Syntax::). To compile a regular expression use: char * re_comp (char *REGEX) REGEX is the address of a null-terminated regular expression. ‘re_comp’ uses an internal pattern buffer, so you can use only the most recently compiled pattern buffer. This means that if you want to use a given regular expression that you’ve already compiled—but it isn’t the latest one you’ve compiled—you’ll have to recompile it. If you call ‘re_comp’ with the null string (_not_ the empty string) as the argument, it doesn’t change the contents of the pattern buffer. If ‘re_comp’ successfully compiles the regular expression, it returns zero. If it can’t compile the regular expression, it returns an error string. ‘re_comp’’s error messages are identical to those of ‘re_compile_pattern’ (*note GNU Regular Expression Compiling::). 18.6.2.2 BSD Searching ...................... Searching the Berkeley Unix way means searching in a string starting at its first character and trying successive positions within it to find a match. Once you’ve compiled a pattern using ‘re_comp’ (*note BSD Regular Expression Compiling::), you can ask Regex to search for that pattern in a string using: int re_exec (char *STRING) STRING is the address of the null-terminated string in which you want to search. ‘re_exec’ returns either 1 for success or 0 for failure. It automatically uses a GNU fastmap (*note Searching with Fastmaps::). 18.7 Regular expression syntaxes ================================ Gnulib supports many different types of regular expressions; although the underlying features are the same or identical, the syntax used varies. The descriptions given here for the different types are generated automatically. 18.7.1 ‘awk’ regular expression syntax -------------------------------------- The character ‘.’ matches any single character except the null character. ‘+’ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. ‘?’ indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. ‘\+’ matches a ‘+’ ‘\?’ matches a ‘?’. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are invalid. Within square brackets, ‘\’ can be used to quote the following character. Character classes are supported; for example ‘[[:digit:]]’ will match a single decimal digit. GNU extensions are not supported and so ‘\w’, ‘\W’, ‘\<’, ‘\>’, ‘\b’, ‘\B’, ‘\`’, and ‘\'’ match ‘w’, ‘W’, ‘<’, ‘>’, ‘b’, ‘B’, ‘`’, and ‘'’ respectively. Grouping is performed with parentheses ‘()’. An unmatched ‘)’ matches just itself. A backslash followed by a digit matches that digit. The alternation operator is ‘|’. The characters ‘^’ and ‘$’ always represent the beginning and end of a string respectively, except within square brackets. Within brackets, ‘^’ can be used to invert the membership of the character class being specified. ‘*’, ‘+’ and ‘?’ are special at any point in a regular expression except: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘(’ 3. After the alternation operator ‘|’ The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.2 ‘egrep’ regular expression syntax ---------------------------------------- The character ‘.’ matches any single character. ‘+’ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. ‘?’ indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. ‘\+’ matches a ‘+’ ‘\?’ matches a ‘?’. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are invalid. Within square brackets, ‘\’ is taken literally. Character classes are supported; for example ‘[[:digit:]]’ will match a single decimal digit. GNU extensions are supported: 1. ‘\w’ matches a character within a word 2. ‘\W’ matches a character which is not within a word 3. ‘\<’ matches the beginning of a word 4. ‘\>’ matches the end of a word 5. ‘\b’ matches a word boundary 6. ‘\B’ matches characters which are not a word boundary 7. ‘\`’ matches the beginning of the whole input 8. ‘\'’ matches the end of the whole input Grouping is performed with parentheses ‘()’. An unmatched ‘)’ matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example ‘\2’ matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis ‘(’. The alternation operator is ‘|’. The characters ‘^’ and ‘$’ always represent the beginning and end of a string respectively, except within square brackets. Within brackets, ‘^’ can be used to invert the membership of the character class being specified. The characters ‘*’, ‘+’ and ‘?’ are special anywhere in a regular expression. Intervals are specified by ‘{’ and ‘}’. Invalid intervals are treated as literals, for example ‘a{1’ is treated as ‘a\{1’ The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.3 ‘ed’ regular expression syntax ------------------------------------- The character ‘.’ matches any single character except the null character. ‘\+’ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. ‘\?’ indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. ‘+ and ?’ match themselves. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are invalid. Within square brackets, ‘\’ is taken literally. Character classes are supported; for example ‘[[:digit:]]’ will match a single decimal digit. GNU extensions are supported: 1. ‘\w’ matches a character within a word 2. ‘\W’ matches a character which is not within a word 3. ‘\<’ matches the beginning of a word 4. ‘\>’ matches the end of a word 5. ‘\b’ matches a word boundary 6. ‘\B’ matches characters which are not a word boundary 7. ‘\`’ matches the beginning of the whole input 8. ‘\'’ matches the end of the whole input Grouping is performed with backslashes followed by parentheses ‘\(’, ‘\)’. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example ‘\2’ matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis ‘\(’. The alternation operator is ‘\|’. The character ‘^’ only represents the beginning of a string when it appears: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘\(’ 3. After the alternation operator ‘\|’ The character ‘$’ only represents the end of a string when it appears: 1. At the end of a regular expression 2. Before a close-group, signified by ‘\)’ 3. Before the alternation operator ‘\|’ ‘\*’, ‘\+’ and ‘\?’ are special at any point in a regular expression except: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘\(’ 3. After the alternation operator ‘\|’ Intervals are specified by ‘\{’ and ‘\}’. Invalid intervals such as ‘a\{1z’ are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.4 ‘emacs’ regular expression syntax ---------------------------------------- The character ‘.’ matches any single character except newline. ‘+’ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. ‘?’ indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. ‘\+’ matches a ‘+’ ‘\?’ matches a ‘?’. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are ignored. Within square brackets, ‘\’ is taken literally. Character classes are not supported, so for example you would need to use ‘[0-9]’ instead of ‘[[:digit:]]’. GNU extensions are supported: 1. ‘\w’ matches a character within a word 2. ‘\W’ matches a character which is not within a word 3. ‘\<’ matches the beginning of a word 4. ‘\>’ matches the end of a word 5. ‘\b’ matches a word boundary 6. ‘\B’ matches characters which are not a word boundary 7. ‘\`’ matches the beginning of the whole input 8. ‘\'’ matches the end of the whole input Grouping is performed with backslashes followed by parentheses ‘\(’, ‘\)’. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example ‘\2’ matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis ‘\(’. The alternation operator is ‘\|’. The character ‘^’ only represents the beginning of a string when it appears: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘\(’ 3. After the alternation operator ‘\|’ The character ‘$’ only represents the end of a string when it appears: 1. At the end of a regular expression 2. Before a close-group, signified by ‘\)’ 3. Before the alternation operator ‘\|’ ‘*’, ‘+’ and ‘?’ are special at any point in a regular expression except: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘\(’ 3. After the alternation operator ‘\|’ The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.5 ‘gnu-awk’ regular expression syntax ------------------------------------------ The character ‘.’ matches any single character. ‘+’ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. ‘?’ indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. ‘\+’ matches a ‘+’ ‘\?’ matches a ‘?’. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are invalid. Within square brackets, ‘\’ can be used to quote the following character. Character classes are supported; for example ‘[[:digit:]]’ will match a single decimal digit. GNU extensions are supported: 1. ‘\w’ matches a character within a word 2. ‘\W’ matches a character which is not within a word 3. ‘\<’ matches the beginning of a word 4. ‘\>’ matches the end of a word 5. ‘\b’ matches a word boundary 6. ‘\B’ matches characters which are not a word boundary 7. ‘\`’ matches the beginning of the whole input 8. ‘\'’ matches the end of the whole input Grouping is performed with parentheses ‘()’. An unmatched ‘)’ matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example ‘\2’ matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis ‘(’. The alternation operator is ‘|’. The characters ‘^’ and ‘$’ always represent the beginning and end of a string respectively, except within square brackets. Within brackets, ‘^’ can be used to invert the membership of the character class being specified. ‘*’, ‘+’ and ‘?’ are special at any point in a regular expression except: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘(’ 3. After the alternation operator ‘|’ Intervals are specified by ‘{’ and ‘}’. Invalid intervals are treated as literals, for example ‘a{1’ is treated as ‘a\{1’ The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.6 ‘grep’ regular expression syntax --------------------------------------- The character ‘.’ matches any single character. ‘\+’ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. ‘\?’ indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. ‘+ and ?’ match themselves. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are invalid. Within square brackets, ‘\’ is taken literally. Character classes are supported; for example ‘[[:digit:]]’ will match a single decimal digit. GNU extensions are supported: 1. ‘\w’ matches a character within a word 2. ‘\W’ matches a character which is not within a word 3. ‘\<’ matches the beginning of a word 4. ‘\>’ matches the end of a word 5. ‘\b’ matches a word boundary 6. ‘\B’ matches characters which are not a word boundary 7. ‘\`’ matches the beginning of the whole input 8. ‘\'’ matches the end of the whole input Grouping is performed with backslashes followed by parentheses ‘\(’, ‘\)’. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example ‘\2’ matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis ‘\(’. The alternation operator is ‘\|’. The character ‘^’ only represents the beginning of a string when it appears: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘\(’ 3. After a newline 4. After the alternation operator ‘\|’ The character ‘$’ only represents the end of a string when it appears: 1. At the end of a regular expression 2. Before a close-group, signified by ‘\)’ 3. Before a newline 4. Before the alternation operator ‘\|’ ‘\*’, ‘\+’ and ‘\?’ are special at any point in a regular expression except: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘\(’ 3. After a newline 4. After the alternation operator ‘\|’ Intervals are specified by ‘\{’ and ‘\}’. Invalid intervals such as ‘a\{1z’ are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.7 ‘posix-awk’ regular expression syntax -------------------------------------------- The character ‘.’ matches any single character except the null character. ‘+’ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. ‘?’ indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. ‘\+’ matches a ‘+’ ‘\?’ matches a ‘?’. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are invalid. Within square brackets, ‘\’ can be used to quote the following character. Character classes are supported; for example ‘[[:digit:]]’ will match a single decimal digit. GNU extensions are not supported and so ‘\w’, ‘\W’, ‘\<’, ‘\>’, ‘\b’, ‘\B’, ‘\`’, and ‘\'’ match ‘w’, ‘W’, ‘<’, ‘>’, ‘b’, ‘B’, ‘`’, and ‘'’ respectively. Grouping is performed with parentheses ‘()’. An unmatched ‘)’ matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example ‘\2’ matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis ‘(’. The alternation operator is ‘|’. The characters ‘^’ and ‘$’ always represent the beginning and end of a string respectively, except within square brackets. Within brackets, ‘^’ can be used to invert the membership of the character class being specified. ‘*’, ‘+’ and ‘?’ are special at any point in a regular expression except the following places, where they are not allowed: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘(’ 3. After the alternation operator ‘|’ Intervals are specified by ‘{’ and ‘}’. Invalid intervals are treated as literals, for example ‘a{1’ is treated as ‘a\{1’ The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.8 ‘posix-basic’ regular expression syntax ---------------------------------------------- This is a synonym for ed. 18.7.9 ‘posix-egrep’ regular expression syntax ---------------------------------------------- This is a synonym for egrep. 18.7.10 ‘posix-extended’ regular expression syntax -------------------------------------------------- The character ‘.’ matches any single character except the null character. ‘+’ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. ‘?’ indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. ‘\+’ matches a ‘+’ ‘\?’ matches a ‘?’. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are invalid. Within square brackets, ‘\’ is taken literally. Character classes are supported; for example ‘[[:digit:]]’ will match a single decimal digit. GNU extensions are supported: 1. ‘\w’ matches a character within a word 2. ‘\W’ matches a character which is not within a word 3. ‘\<’ matches the beginning of a word 4. ‘\>’ matches the end of a word 5. ‘\b’ matches a word boundary 6. ‘\B’ matches characters which are not a word boundary 7. ‘\`’ matches the beginning of the whole input 8. ‘\'’ matches the end of the whole input Grouping is performed with parentheses ‘()’. An unmatched ‘)’ matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example ‘\2’ matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis ‘(’. The alternation operator is ‘|’. The characters ‘^’ and ‘$’ always represent the beginning and end of a string respectively, except within square brackets. Within brackets, ‘^’ can be used to invert the membership of the character class being specified. ‘*’, ‘+’ and ‘?’ are special at any point in a regular expression except the following places, where they are not allowed: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘(’ 3. After the alternation operator ‘|’ Intervals are specified by ‘{’ and ‘}’. Invalid intervals such as ‘a{1z’ are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.11 ‘posix-minimal-basic’ regular expression syntax ------------------------------------------------------- The character ‘.’ matches any single character except the null character. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example ‘[z-a]’, are invalid. Within square brackets, ‘\’ is taken literally. Character classes are supported; for example ‘[[:digit:]]’ will match a single decimal digit. GNU extensions are supported: 1. ‘\w’ matches a character within a word 2. ‘\W’ matches a character which is not within a word 3. ‘\<’ matches the beginning of a word 4. ‘\>’ matches the end of a word 5. ‘\b’ matches a word boundary 6. ‘\B’ matches characters which are not a word boundary 7. ‘\`’ matches the beginning of the whole input 8. ‘\'’ matches the end of the whole input Grouping is performed with backslashes followed by parentheses ‘\(’, ‘\)’. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example ‘\2’ matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis ‘\(’. The character ‘^’ only represents the beginning of a string when it appears: 1. At the beginning of a regular expression 2. After an open-group, signified by ‘\(’ The character ‘$’ only represents the end of a string when it appears: 1. At the end of a regular expression 2. Before a close-group, signified by ‘\)’ Intervals are specified by ‘\{’ and ‘\}’. Invalid intervals such as ‘a\{1z’ are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. 18.7.12 ‘sed’ regular expression syntax --------------------------------------- This is a synonym for ed. 19 Build Infrastructure Modules ******************************* Gnulib has a couple of modules that don’t provide code, but rather extend the GNU Build System. That is, they are convenience facilities for use with GNU Automake (in particular). 19.1 Searching for Libraries ============================ The following macros check for the presence or location of certain C, C++, or Fortran library archive files. Simple Library Tests -------------------- The macros ‘AC_CHECK_LIB’, ‘AC_SEARCH_LIBS’ from GNU Autoconf check for the presence of certain C, C++, or Fortran library archive files. The libraries are looked up in the default linker path—a system dependent list of directories, that usually contains the ‘/usr/lib’ directory—and those directories given by ‘-L’ options in the ‘LDFLAGS’ variable. Locating Libraries ------------------ The following macros, defined in the Gnulib module ‘havelib’, search for the location of certain C, C++, or Fortran library archive files and make the found location available to the compilation process and to further Autoconf tests. -- Macro: AC_LIB_LINKFLAGS(NAME, [DEPENDENCIES]) Searches for ‘lib’ and the libraries corresponding to explicit and implicit dependencies. Sets and AC_SUBSTs the ‘LIB’ and ‘LTLIB’ variables (with ‘’ in upper case) and augments the ‘CPPFLAGS’ variable by ‘-I’ options. This macro should be used when ‘lib’ is expected to be found. -- Macro: AC_LIB_HAVE_LINKFLAGS(NAME, [DEPENDENCIES], [INCLUDES], [TESTCODE], [MISSING-MESSAGE]) Searches for ‘lib’ and the libraries corresponding to explicit and implicit dependencies, together with the specified include files and the ability to compile and link the specified TESTCODE. The MISSING-MESSAGE defaults to ‘no’ and may contain additional hints for the user. If found, it sets and AC_SUBSTs ‘HAVE_LIB=yes’ and the ‘LIB’ and ‘LTLIB’ variables (with ‘’ in upper case) and augments the ‘CPPFLAGS’ variable by ‘-I’ options, and #defines ‘HAVE_LIB’ to 1. Otherwise, it sets and AC_SUBSTs ‘HAVE_LIB=no’ and ‘LIB’ and ‘LTLIB’ to empty. These macros assume that when a library is installed in ‘SOME_DIRECTORY/lib’, its include files are installed in ‘SOME_DIRECTORY/include’. The complexities that ‘AC_LIB_LINKFLAGS’ and ‘AC_LIB_HAVE_LINKFLAGS’ deal with are the following: • The library is not necessarily already in the search path (‘CPPFLAGS’ for the include file search path, ‘LDFLAGS’ for the library search path). The macro provides a ‘--with-lib’ option. The user of the ‘configure’ script can use this option to indicate the location of the library and its include files. If not provided, the ‘--prefix’ directory is searched as well. • The library is not necessarily already in the run time library search path. To avoid the need for setting an environment variable like ‘LD_LIBRARY_PATH’, the macro adds the appropriate run time search path options to the ‘LIB’ variable. This works on most systems. It can also be inhibited: The user of ‘configure’ can use the ‘--disable-rpath’ option to force an installation that doesn’t contain hardcoded library search paths but instead may require the use of an environment variable like ‘LD_LIBRARY_PATH’. The macros also set a variable ‘LTLIB’, that should be used when linking with libtool. Both ‘LTLIB’ and ‘LIB’ contain essentially the same option, but where ‘LIB’ contains platform dependent flags like ‘-Wl,-rpath’, ‘LTLIB’ contains platform independent flags like ‘-R’. If you, by mistake, use ‘LIB’ instead of ‘LTLIB’ when linking with libtool, you will observe that the binaries created in the build dir will prefer the shared libraries in the installation directories over the shared libraries in the build dir; this can lead to all sorts of build failures, test failures, or crashes! If you, on the other hand, by mistake, use ‘LTLIB’ instead of ‘LIB’ when linking _without_ libtool, you will observe build failures, because the ‘-R’ options contained in ‘LTLIB’ are not valid options to compilers such as GCC. Example of using ‘AC_LIB_LINKFLAGS’ ................................... Suppose you want to use ‘libz’, the compression library. 1. In configure.ac you add the line AC_CONFIG_AUX_DIR([build-aux]) AC_LIB_LINKFLAGS([z]) Note that since the ‘AC_LIB_LINKFLAGS’ invocation modifies the CPPFLAGS, it should precede all tests that check for header files, declarations, structures or types. 2. To the package’s ‘build-aux’ directory you add the file ‘config.rpath’, also part of the Gnulib ‘havelib’ module. (‘gnulib-tool’ will usually do this for you automatically.) 3. In ‘Makefile.in’ you add ‘@LIBZ@’ to the link command line of your program. Or, if you are using Automake, you add ‘$(LIBZ)’ to the ‘LDADD’ variable that corresponds to your program. Dependencies ............ The dependencies list is a space separated list of library names that ‘libNAME’ is known to depend upon. Example: If ‘libfooy’ depends on ‘libfoox’, and ‘libfooz’ depends on ‘libfoox’ and ‘libfooy’, you can write: AC_LIB_LINKFLAGS([foox]) AC_LIB_LINKFLAGS([fooy], [foox]) AC_LIB_LINKFLAGS([fooz], [foox fooy]) Explicit dependencies are necessary if you cannot assume that a ‘.la’ file, created by libtool, is installed. If you can assume that ‘libfooy.la’ is installed by libtool (and has not been omitted by the package distributor!), you can omit the explicit dependency and just write AC_LIB_LINKFLAGS([fooy]) This way, you don’t need to know in advance which libraries the needed library depends upon. Static vs. shared ................. The macros find the libraries regardless whether they are installed as shared or static libraries. ‘CPPFLAGS’ vs. ‘LDFLAGS’ ........................ The macros determine the directories that should be added to the compiler preprocessor’s search path and to the linker’s search path. For the compiler preprocessor, ‘-I’ options with the necessary directories are added to the ‘CPPFLAGS’ variable, for use by the whole package. For the linker, appropriate options are added to the ‘LIB’ and ‘LTLIB’ variables, for use during linking by those programs and libraries that need the dependency on ‘lib’. You need to use the value of ‘LIB’ or ‘LTLIB’ in the Makefiles. ‘LTLIB’ is for use with libtool, whereas ‘LIB’ is for when libtool is not involved in linking. The macros do not check whether the include files and the library found match. If you want to verify this at configure time, one technique is to have a version number in the include files and a version number in the library, like this: #define LIBNAME_VERSION 10203 extern int libNAME_version; /* initialized to LIBNAME_VERSION */ and use a test like AC_TRY_RUN([int main () { return libNAME_version != LIBNAME_VERSION; }]) Bi-arch systems ............... A bi-arch system is one where • the processor has a 32-bit execution mode and a 64-bit execution mode (for example, x86_64, ia64, sparc64, powerpc64), and • 32-bit mode libraries and executables and 64-bit mode libraries are both installed, and • 32-bit mode libraries and object files cannot be mixed with 64-bit mode ones. On several types of such systems, for historical reasons, the 32-bit libraries are installed in ‘PREFIX/lib’, whereas the 64-bit libraries are installed in • ‘PREFIX/lib64’ on many glibc systems, • ‘PREFIX/lib/64’ on Solaris systems. On such systems, in 64-bit mode, ‘configure’ will search for the libraries in ‘PREFIX/lib64’ or ‘PREFIX/lib/64’, respectively, not in ‘PREFIX/lib’. A user can adhere to these system-wide conventions by using the ‘--libdir’ option when installing packages. When a user has already installed packages in 64-bit mode using the GNU default ‘--libdir=PREFIX/lib’, he can make this directory adhere to the system-wide convention by placing a symbolic link: On glibc systems: ‘ln -s lib PREFIX/lib64’ On Solaris systems: ‘ln -s . PREFIX/lib/64’ 19.2 Controlling the Exported Symbols of Shared Libraries ========================================================= The ‘lib-symbol-visibility’ module allows precise control of the symbols exported by a shared library. This is useful because • It prevents abuse of undocumented APIs of your library. Symbols that are not exported from the library cannot be used. This eliminates the problem that when the maintainer of the library changes internals of the library, maintainers of other projects cry “breakage”. Instead, these maintainers are forced to negotiate the desired API from the maintainer of the library. • It reduces the risk of symbol collision between your library and other libraries. For example, the symbol ‘readline’ is defined in several libraries, most of which don’t have the same semantics and the same calling convention as the GNU readline library. • It reduces the startup time of programs linked to the library. This is because the dynamic loader has less symbols to process. • It allows the compiler to generate better code. Within a shared library, a call to a function that is a global symbol costs a “call” instruction to a code location in the so-called PLT (procedure linkage table) which contains a “jump” instruction to the actual function’s code. (This is needed so that the function can be overridden, for example by a function with the same name in the executable or in a shared library interposed with ‘LD_PRELOAD’.) Whereas a call to a function for which the compiler can assume that it is in the same shared library is just a direct “call” instructions. Similarly for variables: A reference to a global variable fetches a pointer in the so-called GOT (global offset table); this is a pointer to the variable’s memory. So the code to access it is two memory load instructions. Whereas for a variable which is known to reside in the same shared library, it is just a direct memory access: one memory load instruction. There are traditionally three ways to specify the exported symbols of a shared library. • The programmer specifies the list of symbols to be exported when the shared library is created. Usually a command-line option is passed to the linker, with the name of a file containing the symbols. The upside of this approach is flexibility: it allows the same code to be used in different libraries with different export lists. The downsides are: 1. it’s a lot of maintenance overhead when the symbol list is platform dependent, 2. it doesn’t work well with C++, due to name mangling. • The programmer specifies a “hidden” attribute for every variable and function that shall not be exported. The drawbacks of this approach are: Symbols are still exported from the library by default. It’s a lot of maintenance work to mark every non- exported variable and function. But usually the exported API is quite small, compared to the internal API of the library. And it’s the wrong paradigm: It doesn’t force thinking when introducing new exported API. • The programmer specifies a “hidden” attribute for all files that make up the shared library, and an “exported” attribute for those symbols in these files that shall be exported. This is perfect: It burdens the maintainer only for exported API, not for library-internal API. And it keeps the annotations in the source code. GNU libtool’s ‘-export-symbols’ option implements the first approach. The script ‘declared.sh’ from Gnulib can help to produce the list of symbols. This gnulib module implements the third approach. For this it relies on GNU GCC 4.0 or newer, namely on its ‘-fvisibility=hidden’ command-line option and the “visibility” attribute. (The “visibility” attribute was already supported in GCC 3.4, but without the command line option, introduced in GCC 4.0, the third approach could not be used.) More explanations on this subject can be found in , which contains more details on the GCC features and additional advice for C++ libraries, and in Ulrich Drepper’s paper , which also explains other tricks for reducing the startup time impact of shared libraries. The gnulib autoconf macro ‘gl_VISIBILITY’ tests for GCC 4.0 or newer. It defines a Makefile variable ‘@CFLAG_VISIBILITY@’ containing ‘-fvisibility=hidden’ or nothing. It also defines as a C macro and as a substituted variable: @HAVE_VISIBILITY@. Its value is 1 when symbol visibility control is supported, and 0 otherwise. As of 2022, symbol visibility control is supported on • ELF platforms (glibc, Linux, *BSD, Solaris) with GCC or clang, • macOS, • AIX with gcc or xlclang. It is not supported on • Other compilers on ELF platforms or AIX, • Windows. To use this module in a library, say libfoo, you will do these steps: 1. Add ‘@CFLAG_VISIBILITY@’ or (in a Makefile.am) ‘$(CFLAG_VISIBILITY)’ to the CFLAGS for the compilation of the sources that make up the library. 2. Add a C macro definition, say ‘-DBUILDING_LIBFOO’, to the CPPFLAGS for the compilation of the sources that make up the library. 3. Define a macro specific to your library like this. #if HAVE_VISIBILITY && BUILDING_LIBFOO # define LIBFOO_SHLIB_EXPORTED __attribute__((__visibility__("default"))) #else # define LIBFOO_SHLIB_EXPORTED #endif This macro should be enabled in all public header files of your library. 4. Annotate all variable, function and class declarations in all public header files of your library with ‘LIBFOO_SHLIB_EXPORTED’. This annotation can occur at different locations: between the ‘extern’ and the type or return type, or just before the entity being declared, or after the entire declarator. My preference is to put it right after ‘extern’, so that the declarations in the header files remain halfway readable. Note that the precise control of the exported symbols will not work with other compilers than GCC >= 4.0, and will not work on systems where the assembler or linker lack the support of “hidden” visibility. Therefore, it’s good if, in order to reduce the risk of collisions with symbols in other libraries, you continue to use a prefix specific to your library for all non-static variables and functions and for all C++ classes in your library. Note about other compilers: MSVC support can be added easily, by extending the definition of the macro mentioned above, to something like this: #if HAVE_VISIBILITY && BUILDING_LIBFOO # define LIBFOO_SHLIB_EXPORTED __attribute__((__visibility__("default"))) #elif (defined _WIN32 && !defined __CYGWIN__) && @BUILDING_SHARED@ && BUILDING_LIBFOO # if defined DLL_EXPORT # define LIBFOO_SHLIB_EXPORTED __declspec(dllexport) # else # define LIBFOO_SHLIB_EXPORTED # endif #elif (defined _WIN32 && !defined __CYGWIN__) && @BUILDING_SHARED@ # define LIBFOO_SHLIB_EXPORTED __declspec(dllimport) #else # define LIBFOO_SHLIB_EXPORTED #endif Here ‘BUILDING_SHARED’ is an Autoconf variable that you have to define. It ought to evaluate to 1 in a build configured with ‘--enable-shared’, or to 0 in a build configured with ‘--disable-shared’. You may use the following ‘configure.ac’ snippet: if test "$enable_shared" = yes; then BUILDING_SHARED=1 else BUILDING_SHARED=0 fi AC_SUBST([BUILDING_SHARED]) And ‘DLL_EXPORT’ is defined by Libtool, on Windows platforms, when compiling for a shared library (called DLL under Windows). It is not defined when Libtool compiles an object file meant to be linked statically into some executable. 19.3 LD Version Scripts ======================= The ‘lib-symbol-versions’ module can be used to add shared library versioning support. Currently, only GNU LD and the Solaris linker supports this. Version scripts provides information that can be used by GNU/Linux distribution packaging tools. For example, Debian has a tool ‘dpkg-shlibdeps’ that can determine the minimal required version of each dependency (by looking at the symbol list) and stuff the information into the Debian specific packaging files. For more information and other uses of version scripts, see Ulrich Drepper’s paper You use the module by importing it to your library, and then add the following lines to the ‘Makefile.am’ that builds the library: if HAVE_LD_VERSION_SCRIPT libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map endif The version script file format is documented in the GNU LD manual, but a small example would be: LIBFOO_1.0 { global: libfoo_init; libfoo_doit; libfoo_done; local: *; }; If you target platforms that do not support linker scripts (i.e., all platforms that doesn’t use GNU LD) you may want to consider a more portable but less powerful alternative: libtool ‘-export-symbols’. It will hide internal symbols from your library, but will not add ELF versioning symbols. Your usage would then be something like: if HAVE_LD_VERSION_SCRIPT libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map else libfoo_la_LDFLAGS += -export-symbols $(srcdir)/libfoo.sym endif See the Libtool manual for the file syntax, but a small example would be: libfoo_init libfoo_doit libfoo_done To avoid the need for a ‘*.sym’ file if your symbols are easily expressed using a regular expression, you may use ‘-export-symbols-regex’: if HAVE_LD_VERSION_SCRIPT libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map else libfoo_la_LDFLAGS += -export-symbols-regex '^libfoo_.*' endif For more discussions about symbol visibility, rather than shared library versioning, see the ‘lib-symbol-visibility’ module (*note Exported Symbols of Shared Libraries::). 19.4 configmake =============== The ‘configmake’ module builds a C include file named ‘configmake.h’ containing the usual installation directory values; for example, those specified by ‘--prefix’ or ‘--libdir’ to configure. Each variable is given a ‘#define’ with an all-uppercase macro name, such as ‘PREFIX’ and ‘LIBDIR’. (Automake cannot create this file directly because the user might override directory values at ‘make’ time.) Specifically, the module retrieves values of the variables through ‘configure’ followed by ‘make’, not directly through ‘configure’, so that a user who sets some of these variables consistently on the ‘make’ command line gets correct results. One advantage of this approach, compared to the classical approach of adding ‘-DLIBDIR=\"$(libdir)\"’ etc. to ‘AM_CPPFLAGS’, is that it protects against the use of undefined variables. That is, if, say, ‘$(libdir)’ is not set in the Makefile, ‘LIBDIR’ is not defined by this module, and code using ‘LIBDIR’ gives a compilation error. Another advantage is that ‘make’ output is shorter. For the complete list of variables which are ‘#define’d this way, see the file ‘gnulib/modules/configmake’, or inspect your resulting gnulib Makefile. 19.5 warnings ============= The ‘warnings’ module allows to regularly build a package with more GCC warnings than the default warnings emitted by GCC. It is often used indirectly through the ‘manywarnings’ module (*note manywarnings::). It provides the following functionality: • You can select some warning options, such as ‘-Wall’, to be enabled whenever building with a GCC version that supports these options. The user can choose to override these warning options by providing the opposite options in the ‘CFLAGS’ variable at configuration time. • You can make these warnings apply to selected directories only. In projects where subprojects are maintained by different people, or where parts of the source code are imported from external sources (for example from gnulib), it is useful to apply different warning options to different directories. • It lets you use ‘-Werror’ at ‘make distcheck’ time, to verify that on the maintainer’s system, no warnings remain. (Note that use of ‘-Werror’ in ‘CFLAGS’ does not work in general, because it may break autoconfiguration.) • Similarly, it lets you use ‘-Werror’ when the builder runs ‘configure’ with an option such as ‘--enable-gcc-warnings’. To use this module, you need the following: 1. In ‘configure.ac’, use for example gl_WARN_ADD([-Wall], [WARN_CFLAGS]) gl_WARN_ADD([-Wpointer-arith], [WARN_CFLAGS]) 2. In the directories which shall use ‘WARN_CFLAGS’, use it in the definition of ‘AM_CFLAGS’, like this: AM_CFLAGS = $(WARN_CFLAGS) Note that the ‘AM_CFLAGS’ is used in combination with ‘CFLAGS’ and before ‘CFLAGS’ in build rules emitted by Automake. This allows the user to provide ‘CFLAGS’ that override the ‘WARN_CFLAGS’. ‘gl_WARN_ADD([-Werror])’ is intended for developers, and should be avoided in contexts where it would affect ordinary installation builds. The warnings emitted by GCC depend, to some extent, on the contents of the system header files, on the size and signedness of built-in types, etc. Use of ‘-Werror’ would cause frustration to all users on platforms that the maintainer has not tested before the release. It is better if ‘-Werror’ is off by default, and is enabled only by developers. For example, ‘-Werror’ could affect ‘make distcheck’ or ‘configure --enable-gcc-warnings’ as mentioned above. 19.6 manywarnings ================= The ‘manywarnings’ module enables many GCC warnings for your package. Here is an example use: AC_ARG_ENABLE([gcc-warnings], [AS_HELP_STRING([[--enable-gcc-warnings[=TYPE]]], [control generation of GCC warnings. The TYPE 'no' disables warnings; 'yes' (default) generates cheap warnings; 'expensive' in addition generates expensive warnings.])]) AS_IF([test "$enable_gcc_warnings" != no], [ # Set up the list of unwanted warning options. nw= if test "$enable_gcc_warnings" != expensive; then nw="$nw -fanalyzer" fi nw="$nw -Wbad-function-cast" # Casting a function's result is not more # dangerous than casting any other value. nw="$nw -Winline" # It's OK to not inline. nw="$nw -Wsign-compare" # Too many false alarms. nw="$nw -Wstrict-overflow" # It's OK to optimize strictly. nw="$nw -Wsystem-headers" # Don't warn in system headers. # Setup the list of meaningful warning options for the C compiler. # The list comes from manywarnings.m4. Warning options that are not # generally meaningful have already been filtered out (cf. # build-aux/gcc-warning.spec). gl_MANYWARN_ALL_GCC([possible_warning_options]) # Compute the list of warning options that are desired. gl_MANYWARN_COMPLEMENT([desired_warning_options], [$possible_warning_options], [$nw]) # Compute the list of remaining undesired warning options. # Namely those, that were not in manywarnings.m4 because they were # already listed in build-aux/gcc-warning.spec; this includes those # that are implied by -Wall. gl_MANYWARN_COMPLEMENT([remaining_undesired_warning_options], [$nw], [$possible_warning_options]) # Add the desired warning options to WARN_CFLAGS. for w in $desired_warning_options; do gl_WARN_ADD([$w]) done # Add the opposites of the remaining undesired warning options to # WARN_CFLAGS. for w in `echo "$remaining_undesired_warning_options" | sed -e 's/-W/-Wno-/g'`; do gl_WARN_ADD([$w]) done ]) This module sets up many GCC warning options. When you use it for the first time, it is common practice to do it as follows: • Start with the newest major release of GCC. This will save you time, because some warning options produce many false alarms with older versions of GCC (such as ‘-Wstrict-overflow’ or ‘-Wunsafe-loop-optimizations’). • Consider the platforms commonly used when enabling GCC warnings. This includes not only target architectures and operating systems, but also optimization options, which can greatly affect the warnings generated. Makefiles generated by ‘configure’ default to ‘-O2’ optimization. If you also commonly build with ‘-O0’ or other optimization options, you can compile again with those options. Using more optimizations catches more bugs, because the compiler does a better static analysis of the program when optimizing more. Also, some warning options that diagnose suboptimal code generation, such as ‘-Winline’, are not effective when not optimizing. On the other hand, if it’s frequent to build the package with warnings but without optimizations, for debugging purposes, then you don’t want to see undesired warnings in these phases of development either. • Compile the package with an empty ‘nw’ value, that is, with all possible warnings enabled. • Then you will go through the list of warnings. Since there are likely many warnings, the first time, it’s a good idea to sort them by warning option first: $ grep warning: make-output.log \ | sed -e 's/^\(.*\) \[\(-W.*\)\]$/\2 \1/' | sort -k1 • You will likely deactivate warnings that occur often and don’t point to mistakes in the code, by adding them to the ‘nw’ variable, then reconfiguring and recompiling. When warnings point to real mistakes and bugs in the code, you will of course not disable them but fix your code to silence the warning instead. Many GCC warning options usually don’t point to mistakes in the code; these warnings enforce a certain programming style. It is a project management decision whether you want your code to follow any of these styles. Note that some of these programming styles are conflicting. You cannot have them all; you have to choose among them. When a warning option pinpoints real bugs occasionally, but it also whines about a few code locations which are fine, we recommend to leave the warning option enabled. Whether you then live with the remaining few warnings, or choose to disable them one-by-one through ‘#pragma GCC diagnostic ignored "OPTION"’ (*note (gcc)Diagnostic Pragmas::, ), is again a project management decision. When a new major version of GCC is released, the Gnulib maintainers add the newly available warning options into the ‘gl_MANYWARN_ALL_GCC’ macro. You will then enjoy the benefits of the new warnings, simply by updating to the newest Gnulib. If some of the new warnings are undesired, you can add them to the ‘nw’ variable, as described above. Comments on particular warning flags: ‘-fanalyzer’ The ‘manywarnings’ module by default uses GCC’s ‘-fanalyzer’ option, as this issues some useful warnings. (It can also help GCC generate better code.) However, ‘-fanalyzer’ can greatly slow down compilation, and in programs with large modules it can be so slow as to be unusable, so it is common for ‘configure’ to disable it unless ‘configure’ is given an option like ‘--enable-gcc-warnings=expensive’. ‘-fstrict-aliasing’ Although the ‘manywarnings’ module does not enable GCC’s ‘-fstrict-aliasing’ option, it is enabled by default if you compile with ‘-O2’ or higher optimization, and can help GCC generate better warnings. ‘-Wanalyzer-malloc-leak’ The ‘-fanalyzer’ option generates many false alarms about ‘malloc’ leaks, which ‘manywarnings’ suppresses by also using ‘-Wno-analyzer-malloc-leak’. ‘-fstrict-flex-arrays’ The ‘manywarnings’ module by default uses GCC’s ‘-fstrict-flex-arrays’ option if available, so that GCC can warn about nonportable usage of flexible array members. In a few cases this can help GCC generate better code, so it is not strictly a warning option. ‘-Wsign-compare’ GCC and Clang generate too many false alarms with ‘-Wsign-compare’, and we don’t recommend that warning. You can disable it by using ‘gl_WARN_ADD([-Wno-sign-compare])’ as illustrated above. Programs using Gnulib generally don’t enable that warning when compiling Gnulib code. If you happen to find a real bug with that warning we’d like to know it. 19.7 Running self-tests under valgrind ====================================== For projects written in C or similar languages, running the self-tests under Valgrind can reveal hard to find memory issues. Gnulib supports two ways to make use of Valgrind: one that enables use of Valgrind at configure time, when ‘configure’ found it to be present; and one at the discretion of the developer. 19.7.1 Using valgrind without developer intervention ---------------------------------------------------- The ‘valgrind-tests’ module searches for Valgrind at configure time and declares the ‘LOG_VALGRIND’ automake variable for use with automake’s ‘LOG_COMPILER’. After importing the ‘valgrind-tests’ module to your project, you use it by adding the following to the ‘Makefile.am’ that runs the self-tests: LOG_COMPILER = $(LOG_VALGRIND) This will run all self-checks under valgrind. Replace ‘LOG_COMPILER’ with ‘TESTS_ENVIRONMENT’ if you are using the old serial test harness. The parallel test harness has been the default in automake since version 1.11.3, but if you are using an older automake, or put ‘serial-tests’ in ‘AM_INIT_AUTOMAKE’/‘AUTOMAKE_OPTIONS’ you would still be using the serial test harness. If you desire a project-wide decision that valgrind is not enabled by default, but still allow users to enable it with ‘--enable-valgrind-tests’ you may put the following in configure.ac before gl_INIT. gl_VALGRIND_TESTS_DEFAULT_NO 19.7.2 Valgrind options ----------------------- The ‘VALGRIND’ variable holds the name of the valgrind binary and some options passed to valgrind. You may provide additional options that are passed to valgrind using the ‘VALGRINDFLAGS’ variable, for example: ./configure VALGRINDFLAGS="--suppressions=~/local.supp" Alternatively during build phase: make check VALGRINDFLAGS="--suppressions=~/local.supp" This is useful if you have a valgrind suppression files that are needed to avoid triggering errors for known errors, typically in system libraries. The ‘VALGRIND’ variable include options that are useful when valgrind is run non-interactively through the test harness. The default parameters are ‘-q’ to silence the output, ‘--error-exitcode=1’ to cause valgrind errors to be treated as fatal errors, and ‘--leak-check=full’ to check for memory leaks. These options can be controlled through the ‘DEFAULT_VALGRINDFLAGS’ variable. For example, when configuring the package: ./configure DEFAULT_VALGRINDFLAGS="--quiet" Alternatively, during the build phase: make check DEFAULT_VALGRINDFLAGS="--quiet" That would have the effect of removing ‘--error-exitcode=1’ and ‘--leak-check=full’ from the default options, thus causing any valgrind errors to be silently ignored, instead of causing fatal test failures. As a developer you may use the variables in ‘configure.ac’ before calling ‘gl_INIT’, like this if your program has deeply-nested call chains: gl_EARLY ... VALGRINDFLAGS="$VALGRINDFLAGS --num-callers=42" ... gl_INIT Note that any user-supplied ‘VALGRINDFLAGS’ value is preserved, which is usually what you want. Finally, as a developer you may want to provide additional per-directory options to valgrind and the ‘AM_VALGRINDFLAGS’ variable can be used for this. For example: AM_VALGRINDFLAGS = --suppressions=$(srcdir)/local-valgrind.supp LOG_COMPILER = $(LOG_VALGRIND) 19.7.3 Using valgrind at the developer’s discretion --------------------------------------------------- In this approach, you define a ‘Makefile.am’ variable ‘VALGRIND’ (or, more abstractly, ‘CHECKER’), that is usually set to empty. When you have configured and built the package and you decide that you want to run the tests with valgrind, you do so by modifying the definition of ‘VALGRIND’ in the Makefile. 19.7.4 How to use Valgrind with shell scripts --------------------------------------------- It is not desirable to apply valgrind to shell scripts or other non-binaries, because • It is wasteful, and you usually don’t want to look for memory leaks in bash. • On a bi-arch system, you may get an error message such as "valgrind: wrong executable class (eg. 32-bit instead of 64-bit)". There are two ways to avoid this: • Using the Automake parallel-tests feature, you can use the following instead: TEST_EXTENSIONS = .pl .sh LOG_COMPILER = $(LOG_VALGRIND) Then valgrind will only be used for the non-.sh and non-.pl tests. For old automake (before 1.11.3), you will need ‘AUTOMAKE_OPTIONS = parallel-tests’ to enable the parallel test harness. • You can make use of the ‘build-aux/run-test’ script from Gnulib. Add these lines to your ‘Makefile.am’: LOG_COMPILER += $(SHELL) $(top_srcdir)/build-aux/run-test '$(LOG_VALGRIND)' Replace ‘LOG_COMPILER’ with ‘TESTS_ENVIRONMENT’ if you use the old serial test harness. However, with this measure in place, binaries invoked through scripts will not be invoked under valgrind. This can be solved by defining environment variables in the ‘TESTS_ENVIRONMENT’ variable that are then used by the shell scripts. For example, add the following: TESTS_ENVIRONMENT = VALGRIND='$(LOG_VALGRIND)' And then modify the shell scripts to invoke the binary prefixed with ‘$VALGRIND’. 19.8 VCS To ChangeLog ===================== Gnulib provides the ‘vcs-to-changelog’ module to generate an output similar to the GNU ChangeLog format from metadata of source control software such as git. Here’s an example of using ‘vcs-to-changelog’: build-aux/vcs-to-changelog.py where ‘’ and ‘’ refer to the range of commits to generate the output. VCS To ChangeLog currently recognises changes in C source code and can traverse commits in git. Additional source frontends and source control backends may be added to the module. ‘vcs-to-changelog’ takes the following optional arguments: • ‘-d’: Run the parser debugger, used for debugging ‘vcs-to-changelog’ • ‘-q filename’: Load FILENAME as the quirks file for the project. The quirks file is a python module that must minimally implement a ‘get_project_quirks’ function that returns an object of type ‘ProjectQuirks’ or its subclass. The subclass may override the following members of ‘ProjectQuirks’: • ‘repo’: Specify the project repo source control. The default value is ‘git’. • ‘IGNORE_LIST’: A list of files to ignore in the changesets, either because they are not needed (such as the ChangeLog) or because they are not parseable. For example, the GNU C Library has a header file that is only assembly code, which breaks the C parser. • ‘MACRO_QUIRKS’: A list of dictionary entries with indexes as ‘orig’ and ‘sub’ where ‘orig’ is a Python regular expression pattern to match and ‘sub’ is the substitution. These substitutions are used to work around C/C++ macros that are known to break parsing of C programs. • ‘C_MACROS’: This is a list of C preprocessor macro definitions that are extensively used and are known to break parsing due to some characteristic, mainly the lack of a semicolon at the end. 19.9 gitlog-to-changelog ======================== Gnulib have a module ‘gitlog-to-changelog’ to parse ‘git log’ output and generate ‘ChangeLog’ files, see *note (standards)Change Logs::. You would typically use it by extending the ‘dist-hook’ in the top-level ‘Makefile.am’ like this: dist-hook: gen-ChangeLog ... .PHONY: gen-ChangeLog gen-ChangeLog: $(AM_V_GEN)if test -e .git; then \ $(top_srcdir)/build-aux/gitlog-to-changelog > \ $(distdir)/cl-t && \ { rm -f $(distdir)/ChangeLog && \ mv $(distdir)/cl-t $(distdir)/ChangeLog; } \ fi See ‘gitlog-to-changelog --help’ for complete documentation. The tool prints timestamps using ‘localtime’, so its output may be different depending on what locale the developer that runs the tool is using. If your project desire reproducible ChangeLog files that doesn’t depend on locale settings, use something like the following. gen-ChangeLog: $(AM_V_GEN)if test -e .git; then \ env LC_ALL=en_US.UTF-8 TZ=UTC=0 \ $(top_srcdir)/build-aux/gitlog-to-changelog > \ $(distdir)/cl-t && \ { rm -f $(distdir)/ChangeLog && \ mv $(distdir)/cl-t $(distdir)/ChangeLog; } \ fi If you wish to limit the ChangeLog entries (perhaps for size issues) to only contain entries since a particular git tag, use something like the following: dist-hook: gen-ChangeLog ... gen_start_ver = 8.31 .PHONY: gen-ChangeLog gen-ChangeLog: $(AM_V_GEN)if test -e .git; then \ log_fix="$(srcdir)/build-aux/git-log-fix"; \ test -e "$$log_fix" \ && amend_git_log="--amend=$$log_fix" \ || amend_git_log=; \ $(top_srcdir)/build-aux/gitlog-to-changelog $$amend_git_log \ -- v$(gen_start_ver)~.. > $(distdir)/cl-t && \ { printf '\n\nSee the source repo for older entries\n' \ >> $(distdir)/cl-t && \ rm -f $(distdir)/ChangeLog && \ mv $(distdir)/cl-t $(distdir)/ChangeLog; } \ fi 20 Build Infrastructure Files ***************************** Gnulib contains also a small number of files that are not part of modules. They are meant to be imported into packages by means of ‘gnulib-tool --copy-file’, not ‘gnulib-tool --import’. For example, the commands to import the files ‘config.guess’ and ‘config.sub’ are for file in config.guess config.sub; do $GNULIB_TOOL --copy-file build-aux/$file \ && chmod a+x build-aux/$file \ || exit $? done Packages that don’t use Gnulib can get hold of these files through direct download from Gnulib’s git repository. The commands to do this look as follows: for file in config.guess config.sub; do echo "$0: getting $file..." wget -q --timeout=5 -O build-aux/$file.tmp "https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=build-aux/${file};hb=HEAD" \ && mv build-aux/$file.tmp build-aux/$file \ && chmod a+x build-aux/$file retval=$? rm -f build-aux/$file.tmp test $retval -eq 0 || exit $retval done 20.1 Recognizing platforms ========================== ‘build-aux/config.guess’ ‘build-aux/config.sub’ These files are helper scripts, invoked by the ‘configure’ script. ‘config.guess’ recognizes the platform on which the script is running, and produces a triplet of the form ‘CPU-TYPE-VENDOR-OPERATING_SYSTEM’. ‘config.sub’ receives a possibly abbreviated triplet and produces a canonical triplet for a platform. For more information, see *note (standards)Configuration::. It is important that you always include the newest versions of these two files in your tarball, because people who work on emerging platforms otherwise have a hard time building your package. 20.2 Utilities for Makefiles ============================ These programs can be used in Makefiles. Some of them are also described in *note (automake)Auxiliary Programs::. ‘build-aux/ar-lib’ ‘build-aux/compile’ These two scripts are necessary for supporting portability to native Windows with the MSVC compiler. ‘compile’ is a wrapper script that invokes the compiler and provides a command-line interface compatible with Unix compilers. Similarly, ‘ar-lib’ is a wrapper script that provides a command-line interface compatible with Unix ‘ar’. ‘build-aux/depcomp’ This is a helper script, used by Makefile rules generated by GNU Automake. It generates Makefile dependencies while compiling a file. ‘build-aux/install-sh’ This is a helper script, used by Makefile rules generated by GNU Automake. It installs files during the ‘make install’ phase. In the Makefile, don’t use this file directly; always use ‘$(INSTALL_PROGRAM)’ or ‘$(INSTALL_DATA)’ instead. ‘build-aux/mdate-sh’ This script determines the modification time of a file and pretty-prints it. The typical use is to add a “Last modified” line to the documentation. ‘build-aux/mkinstalldirs’ This is a helper script, used by Makefile rules generated by GNU Automake. It creates directories during the ‘make install’ phase. It is roughly equivalent to ‘mkdir -p’ (except that the latter is not portable). In the Makefile, don’t use this file directly; always use ‘$(MKDIR_P)’ instead. ‘build-aux/mktempd’ This script creates a temporary directory. It is roughly equivalent to ‘mktemp -d’ (except that the latter is not portable). ‘build-aux/move-if-change’ This script moves a freshly generated file to a destination file, with a special optimization for the case that both files are identical. In this case the freshly generated file is deleted, and the time stamp of the destination file is _not_ changed. This is useful when updating a file that rarely actually changes and which many Makefile targets depend upon. 20.3 Programs for developing in Git checkouts ============================================= These programs can help when developing in a Git checkout. The maintainer of the package copies these programs into the version control of the package, so that co-developers can use these tools right away. ‘top/gitsub.sh’ This program manages the subdirectories of a Git checkout that come from other packages, including Gnulib. ‘top/bootstrap’ ‘top/autopull.sh’ ‘top/autogen.sh’ ‘top/bootstrap-funclib.sh’ This is a set of three programs and a function library, that manage the source directory of a package, preparing for the state where ‘./configure’ can be used. ‘autopull.sh’ is a program for fetching dependencies that may require network accesses. It manages the Git submodules, including Gnulib – assuming that Gnulib is a Git submodule. It also can fetch the PO files for internationalized packages. ‘autogen.sh’ is a program that is meant to be run after ‘autopull.sh’. It generates all autogeneratable files that are omitted from version control. Usually this means that it invokes ‘gnulib-tool’ and ‘automake’, that generate files from other files. ‘bootstrap’ is a wrapper around both: ‘./bootstrap --pull’ is equivalent to ‘./autopull.sh’, ‘./bootstrap --gen’ is equivalent to ‘./autogen.sh’. Plain ‘./bootstrap’ is equivalent to ‘./autopull.sh’ immediately followed by ‘./autogen.sh’; however, because plain ‘./bootstrap’ mixes version control management and generation of files in non-obvious ways, it has a number of usability issues for the advanced developer. ‘bootstrap-funclib.sh’ is a function library for these three programs. It is not meant to be used directly. All three programs make use of a configuration file, called ‘bootstrap.conf’. ‘build-aux/bootstrap’ This acts like ‘top/bootstrap’, except it does not need the companion files ‘autogen.sh’, ‘autopull.sh’, and ‘bootstrap-funclib.sh’ so it avoids some clutter in your project’s top level directory. With this approach, you update via ‘./bootstrap --pull’ and ‘./bootstrap --gen’ instead of via ‘./autopull.sh’ and ‘./autogen.sh’. Otherwise this approach acts similarly, and uses the same ‘bootstrap.conf’ file. ‘build-aux/bootstrap.conf’ This is the template configuration file. After copying it into the top-level directory of your package, you need to customize it. ‘build-aux/po/Makefile.in.in’ ‘build-aux/po/remove-potcdate.sin’ These are auxiliary files used by ‘bootstrap’. You don’t have to copy them yourself; ‘bootstrap’ will do that. 20.4 Utilities for building documentation ========================================= These are auxiliary files for building documentation. ‘build-aux/texinfo.tex’ This file is needed for the conversion of Texinfo-format documentation to PDF, PostScript, or DVI formats. It implements the GNU Texinfo commands on top of plain TeX. ‘build-aux/x-to-1.in’ This file, once processed, gives a program ‘x-to-1’, that produces a manual page for a program, by combining a skeleton with the program’s ‘--help’ output. 20.5 Utilities for building libraries ===================================== ‘build-aux/declared.sh’ This program extracts the declared global symbols of a C header file. It is useful when you want to control the set of symbols exported by a library. See *note Exported Symbols of Shared Libraries::. 20.6 Utilities for running test suites ====================================== ‘build-aux/run-test’ This file is a test driver that supports running a test under ‘valgrind’. ‘build-aux/test-driver.diff’ This is a patch, against Automake’s test driver, that supports running a test suite on Android. 21 Release Management Files *************************** Gnulib also contain a few scripts that are useful for the release management of a package. They can be used directly off the Gnulib checkout; they don’t need to copied first. 21.1 Tools for releasing packages with shared libraries ======================================================= ‘build-aux/libtool-next-version’ This program is a wizard that helps a maintainer update the libtool version of a shared library, without making mistakes in this process. For background documentation, see *note (libtool)Updating version info::. 21.2 Tools for uploading release tarballs ========================================= ‘build-aux/gnupload’ This program is a user-friendly way to upload a release tarball to one of the GNU servers (‘ftp.gnu.org’ or ‘alpha.gnu.org’). It implements the interface described in *note (maintain)Automated FTP Uploads::. ‘build-aux/ncftpput-ftp’ This is a helper program that mimics the ‘ncftpput’ program used by ‘gnupload’. If you want to use ‘gnupload’ but don’t have ‘ncftp’ installed, copy this file into your $PATH, renaming it to ‘ncftpput’. Appendix A GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. The “publisher” means any person or entity that distributes copies of the Document to the public. A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.” 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site. “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. Appendix B Gnulib history ************************* In the beginning, Richard Stallman maintained the regular expression engine of GNU and made it available to other GNU packages, such as ‘sed’, ‘awk’, ‘grep’, so that they could use the same engine. Recall that there was no GNU C library at the time. A couple of years later, Jim Meyering, who was maintaining the shell utilities, the file utilities, and the text processing utilities, collected the common parts of these three packages in the same repository. Paul Eggert joined in, with code coming from a few GNU packages that he maintained, and so did Bruno Haible, with reusable code from the GNU gettext package. As they cared for portability, many changes in the C code were accompanied by changes in the build infrastructure. Copying these changes into packages — it was all done manually — became cumbersome. So they wrote a program, called ‘gnulib-tool’, that does this job of copying the requested shared code into a particular package. This was in 2002. Providing a substitute / override for a system function was relatively easy. Providing a substitute / override for a system header file was significantly harder, but was done successively: for ‘stdint.h’ in 2004, for ‘stdarg.h’, ‘sys/socket.h’, ‘sys/stat.h’ in 2006, for ‘sys/time.h’, ‘wchar.h’ in 2007, and the development of the corresponding idioms took until 2010. Unicode string modules (that make up GNU libunistring) were added in 2007–2009. Modules for numeric functions (‘’) were added in 2010–2011. Modules for container data structures were added between 2006 and 2018. Versatile bit-set modules were added in 2018. POSIX threads on non-POSIX platforms, as well as ISO C threads on all platforms, were added in 2019. The ‘posix_spawn’ facility was brought to completion on native Windows in 2022, providing the world’s first ‘posix_spawn’ implementation for this platform. Support for Android was added in 2023 and immediately used by GNU Emacs for Android. Functions for working with Unicode characters in multibyte representation, based on ‘mbrtoc32’, were added in 2023. Modules for manipulating the floating-point environment (‘fenv.h’) were added in 2023. The ‘gnulib-tool’ rewrite in Python, that was started by Dmitry Selyutin in 2012 but lay unfinished for many years, was completed by Collin Funk and Bruno Haible in 2024. Index ***** * Menu: * $: Match-end-of-line Operator. (line 49901) * (: Grouping Operators. (line 49770) * ): Grouping Operators. (line 49770) * *: Match-zero-or-more Operator. (line 49411) * +: Match-one-or-more Operator. (line 49455) * -: List Operators. (line 49561) * .: Match-any-character Operator. (line 49380) * =] in regex: Equivalence Class Operators. (line 49650) * ?: Match-zero-or-one Operator. (line 49470) * [: List Operators. (line 49561) * [= in regex: Equivalence Class Operators. (line 49650) * [colon in regex: Character Class Operators. (line 49666) * [^: List Operators. (line 49561) * \: The Backslash Character. (line 49280) * \ <1>: List Operators. (line 49561) * \': Match-end-of-string Operator. (line 49996) * \(: Grouping Operators. (line 49770) * \): Grouping Operators. (line 49770) * \<: Match-beginning-of-word Operator. (line 49946) * \>: Match-end-of-word Operator. (line 49952) * \b: Match-word-boundary Operator. (line 49932) * \B: Match-within-word Operator. (line 49939) * \s: Match-space Operator. (line 49973) * \S: Match-non-space Operator. (line 49979) * \w: Match-word-constituent Operator. (line 49958) * \W: Match-non-word-constituent Operator. (line 49964) * \`: Match-beginning-of-string Operator. (line 49990) * \{: Interval Operators. (line 49485) * \|: Alternation Operator. (line 49530) * \}: Interval Operators. (line 49485) * ]: List Operators. (line 49561) * ^: Match-beginning-of-line Operator. (line 49872) * ^ <1>: List Operators. (line 49561) * _Exit: _Exit. (line 7979) * _exit: _exit. (line 7992) * _Fork: _Fork. (line 44614) * _GL_EXTERN_INLINE: extern inline. (line 47892) * _GL_INLINE: extern inline. (line 47890) * _GL_INLINE_HEADER_BEGIN: extern inline. (line 47894) * _GL_INLINE_HEADER_END: extern inline. (line 47899) * _longjmp: _longjmp. (line 8005) * _Noreturn: Non-returning Functions. (line 47321) * _setjmp: _setjmp. (line 8023) * _tolower: _tolower. (line 8040) * _toupper: _toupper. (line 8055) * __attribute__: Attributes. (line 47193) * __libc_single_threaded: __libc_single_threaded. (line 43443) * __VA_ARGS__: C99 features assumed. (line 3047) * {: Interval Operators. (line 49485) * |: Alternation Operator. (line 49530) * }: Interval Operators. (line 49485) * a64l: a64l. (line 8070) * abort: abort. (line 8085) * Aborting execution: Out of memory handling. (line 5537) * abs: abs. (line 8102) * accept: accept. (line 8114) * accept4: accept4. (line 43462) * access: access. (line 8141) * acct: acct. (line 44629) * acos: acos. (line 8180) * acosf: acosf. (line 8191) * acosh: acosh. (line 8206) * acoshf: acoshf. (line 8219) * acoshl: acoshl. (line 8232) * acosl: acosl. (line 8248) * AC_LIB_HAVE_LINKFLAGS(NAME, [DEPENDENCIES], [INCLUDES], [TESTCODE], [MISSING-MESSAGE]): Searching for Libraries. (line 51223) * AC_LIB_LINKFLAGS(NAME, [DEPENDENCIES]): Searching for Libraries. (line 51214) * addmntent: addmntent. (line 35234) * addseverity: addseverity. (line 33405) * adjtime: adjtime. (line 43852) * adjtimex: adjtimex. (line 44000) * advance: advance. (line 37097) * aio_cancel: aio_cancel. (line 8266) * aio_error: aio_error. (line 8282) * aio_fsync: aio_fsync. (line 8298) * aio_init: aio_init. (line 31952) * aio_read: aio_read. (line 8315) * aio_return: aio_return. (line 8331) * aio_suspend: aio_suspend. (line 8347) * aio_write: aio_write. (line 8363) * alarm: alarm. (line 8379) * aligned_alloc: aligned_alloc. (line 8397) * ALLOC: Safe Allocation Macros. (line 47157) * alloca: alloca. (line 47056) * alloca <1>: alloca-opt. (line 47092) * allocated initialization: GNU Regular Expression Compiling. (line 50090) * ALLOC_N: Safe Allocation Macros. (line 47164) * ALLOC_N_UNINITIALIZED: Safe Allocation Macros. (line 47171) * alphasort: alphasort. (line 8433) * alternation operator: Alternation Operator. (line 49530) * alternation operator and ^: Match-beginning-of-line Operator. (line 49884) * anchoring: Anchoring Operators. (line 49865) * anchors: Match-beginning-of-line Operator. (line 49872) * anchors <1>: Match-end-of-line Operator. (line 49901) * argp_error: argp_error. (line 32074) * argp_err_exit_status: argp_err_exit_status. (line 32060) * argp_failure: argp_failure. (line 32088) * argp_help: argp_help. (line 32102) * argp_parse: argp_parse. (line 32116) * argp_program_bug_address: argp_program_bug_address. (line 32130) * argp_program_version: argp_program_version. (line 32144) * argp_program_version_hook: argp_program_version_hook. (line 32158) * argp_state_help: argp_state_help. (line 32172) * argp_usage: argp_usage. (line 32186) * argz_add: argz_add. (line 32204) * argz_add_sep: argz_add_sep. (line 32224) * argz_append: argz_append. (line 32244) * argz_count: argz_count. (line 32264) * argz_create: argz_create. (line 32284) * argz_create_sep: argz_create_sep. (line 32304) * argz_delete: argz_delete. (line 32324) * argz_extract: argz_extract. (line 32344) * argz_insert: argz_insert. (line 32364) * argz_next: argz_next. (line 32384) * argz_replace: argz_replace. (line 32404) * argz_stringify: argz_stringify. (line 32424) * asctime: asctime. (line 8451) * asctime_r: asctime_r. (line 8473) * asin: asin. (line 8497) * asinf: asinf. (line 8508) * asinh: asinh. (line 8523) * asinhf: asinhf. (line 8536) * asinhl: asinhl. (line 8549) * asinl: asinl. (line 8565) * asprintf: asprintf. (line 40951) * assert: assert. (line 8583) * assertion: Compile-time Assertions. (line 47224) * atan: atan. (line 8597) * atan2: atan2. (line 8608) * atan2f: atan2f. (line 8619) * atan2l: atan2l. (line 8634) * atanf: atanf. (line 8652) * atanh: atanh. (line 8667) * atanhf: atanhf. (line 8680) * atanhl: atanhl. (line 8693) * atanl: atanl. (line 8709) * atexit: atexit. (line 8727) * atof: atof. (line 8739) * atoi: atoi. (line 8775) * atol: atol. (line 8786) * atoll: atoll. (line 8797) * Attributes: Attributes. (line 47193) * authdes_create: authdes_create. (line 37404) * authdes_getucred: authdes_getucred. (line 37650) * authdes_pk_create: authdes_pk_create. (line 37415) * authnone_create: authnone_create. (line 37426) * authunix_create: authunix_create. (line 37439) * authunix_create_default: authunix_create_default. (line 37452) * autopoint, caveat: gettextize and autopoint. (line 4620) * Awk: Predefined Syntaxes. (line 49196) * back-references: Back-reference Operator. (line 49801) * backtrace: backtrace. (line 33182) * backtrace_symbols: backtrace_symbols. (line 33211) * backtrace_symbols_fd: backtrace_symbols_fd. (line 33233) * backtracking: Match-zero-or-more Operator. (line 49438) * backtracking <1>: Alternation Operator. (line 49547) * basename: basename. (line 8810) * bcmp: bcmp. (line 30839) * bcopy: bcopy. (line 30854) * bdflush: bdflush. (line 42914) * beginning-of-line operator: Match-beginning-of-line Operator. (line 49872) * bind: bind. (line 8832) * bindresvport: bindresvport. (line 35861) * bindtextdomain: bindtextdomain. (line 34038) * bind_textdomain_codeset: bind_textdomain_codeset. (line 34016) * block size: stat-size. (line 48938) * bracket expression: List Operators. (line 49561) * brk: brk. (line 44645) * bsd_signal: bsd_signal. (line 30869) * bsearch: bsearch. (line 8846) * bswap_16: bswap_16. (line 32570) * bswap_32: bswap_32. (line 32584) * bswap_64: bswap_64. (line 32598) * btowc: btowc. (line 8857) * buffer field, set by re_compile_pattern: GNU Regular Expression Compiling. (line 50113) * buffer initialization: GNU Regular Expression Compiling. (line 50090) * bzero: bzero. (line 30882) * C++ header files: Header files. (line 5012) * C++ tests modules: Extra tests modules. (line 5580) * c16rtomb: c16rtomb. (line 8893) * c32rtomb: c32rtomb. (line 8905) * c8rtomb: c8rtomb. (line 8882) * cabs: cabs. (line 8921) * cabsf: cabsf. (line 8934) * cabsl: cabsl. (line 8947) * cacos: cacos. (line 8961) * cacosf: cacosf. (line 8975) * cacosh: cacosh. (line 8989) * cacoshf: cacoshf. (line 9003) * cacoshl: cacoshl. (line 9017) * cacosl: cacosl. (line 9031) * calloc: calloc. (line 9045) * callrpc: callrpc. (line 37718) * call_once: call_once. (line 9069) * canonicalize: canonicalize. (line 9087) * canonicalizef: canonicalizef. (line 9103) * canonicalizel: canonicalizel. (line 9119) * canonicalize_file_name: canonicalize_file_name. (line 41443) * capget: capget. (line 42537) * capset: capset. (line 42552) * carg: carg. (line 9135) * cargf: cargf. (line 9149) * cargl: cargl. (line 9163) * casin: casin. (line 9177) * casinf: casinf. (line 9191) * casinh: casinh. (line 9205) * casinhf: casinhf. (line 9219) * casinhl: casinhl. (line 9233) * casinl: casinl. (line 9247) * catan: catan. (line 9261) * catanf: catanf. (line 9275) * catanh: catanh. (line 9289) * catanhf: catanhf. (line 9303) * catanhl: catanhl. (line 9317) * catanl: catanl. (line 9331) * catclose: catclose. (line 9345) * catgets: catgets. (line 9358) * catopen: catopen. (line 9371) * cbrt: cbrt. (line 9384) * cbrtf: cbrtf. (line 9396) * cbrtl: cbrtl. (line 9409) * ccos: ccos. (line 9428) * ccosf: ccosf. (line 9442) * ccosh: ccosh. (line 9456) * ccoshf: ccoshf. (line 9470) * ccoshl: ccoshl. (line 9484) * ccosl: ccosl. (line 9498) * ceil: ceil. (line 9512) * ceilf: ceilf. (line 9528) * ceill: ceill. (line 9548) * cexp: cexp. (line 9568) * cexpf: cexpf. (line 9582) * cexpl: cexpl. (line 9596) * cfgetispeed: cfgetispeed. (line 9610) * cfgetospeed: cfgetospeed. (line 9623) * cfmakeraw: cfmakeraw. (line 44416) * cfree: cfree. (line 41460) * cfsetispeed: cfsetispeed. (line 9636) * cfsetospeed: cfsetospeed. (line 9649) * cfsetspeed: cfsetspeed. (line 44433) * changelog: gitlog-to-changelog. (line 52034) * character classes: Character Class Operators. (line 49666) * chdir: chdir. (line 9662) * chmod: chmod. (line 9675) * chown: chown. (line 9697) * chroot: chroot. (line 44659) * cimag: cimag. (line 9727) * cimagf: cimagf. (line 9741) * cimagl: cimagl. (line 9755) * clearenv: clearenv. (line 41474) * clearerr: clearerr. (line 9769) * clearerr_unlocked: clearerr_unlocked. (line 41027) * clntraw_create: clntraw_create. (line 37822) * clnttcp_create: clnttcp_create. (line 37835) * clntudp_bufcreate: clntudp_bufcreate. (line 37848) * clntudp_create: clntudp_create. (line 37861) * clntunix_create: clntunix_create. (line 37874) * clnt_broadcast: clnt_broadcast. (line 38150) * clnt_create: clnt_create. (line 37731) * clnt_pcreateerror: clnt_pcreateerror. (line 37744) * clnt_perrno: clnt_perrno. (line 37757) * clnt_perror: clnt_perror. (line 37770) * clnt_spcreateerror: clnt_spcreateerror. (line 37783) * clnt_sperrno: clnt_sperrno. (line 37796) * clnt_sperror: clnt_sperror. (line 37809) * clock: clock. (line 9780) * clock_adjtime: clock_adjtime. (line 44454) * clock_getcpuclockid: clock_getcpuclockid. (line 9791) * clock_getres: clock_getres. (line 9805) * clock_gettime: clock_gettime. (line 9829) * clock_nanosleep: clock_nanosleep. (line 9848) * clock_settime: clock_settime. (line 9862) * clog: clog. (line 9875) * clog10: clog10. (line 32616) * clog10f: clog10f. (line 32635) * clog10l: clog10l. (line 32654) * clogf: clogf. (line 9889) * clogl: clogl. (line 9903) * clone: clone. (line 40201) * close: close. (line 9917) * closedir: closedir. (line 9935) * closefrom: closefrom. (line 44672) * closelog: closelog. (line 9947) * cnd_broadcast: cnd_broadcast. (line 9959) * cnd_destroy: cnd_destroy. (line 9974) * cnd_init: cnd_init. (line 9989) * cnd_signal: cnd_signal. (line 10004) * cnd_timedwait: cnd_timedwait. (line 10019) * cnd_wait: cnd_wait. (line 10034) * colon] in regex: Character Class Operators. (line 49666) * comments describing functions: Specification. (line 5088) * conditional dependencies: Conditional dependencies. (line 4909) * configmake module: configmake. (line 51617) * configmake.h, module for updating: configmake. (line 51617) * confstr: confstr. (line 10049) * conj: conj. (line 10062) * conjf: conjf. (line 10076) * conjl: conjl. (line 10090) * connect: connect. (line 10104) * copysign: copysign. (line 10118) * copysignf: copysignf. (line 10130) * copysignl: copysignl. (line 10143) * copy_file_range: copy_file_range. (line 44694) * cos: cos. (line 10157) * cosf: cosf. (line 10168) * cosh: cosh. (line 10183) * coshf: coshf. (line 10194) * coshl: coshl. (line 10209) * cosl: cosl. (line 10227) * cpow: cpow. (line 10245) * cpowf: cpowf. (line 10259) * cpowl: cpowl. (line 10273) * cproj: cproj. (line 10287) * cprojf: cprojf. (line 10302) * cprojl: cprojl. (line 10317) * creal: creal. (line 10332) * crealf: crealf. (line 10346) * creall: creall. (line 10360) * creat: creat. (line 10374) * crypt: crypt. (line 10395) * csin: csin. (line 10410) * csinf: csinf. (line 10424) * csinh: csinh. (line 10438) * csinhf: csinhf. (line 10452) * csinhl: csinhl. (line 10466) * csinl: csinl. (line 10480) * csqrt: csqrt. (line 10494) * csqrtf: csqrtf. (line 10508) * csqrtl: csqrtl. (line 10522) * ctan: ctan. (line 10536) * ctanf: ctanf. (line 10550) * ctanh: ctanh. (line 10564) * ctanhf: ctanhf. (line 10578) * ctanhl: ctanhl. (line 10592) * ctanl: ctanl. (line 10606) * ctermid: ctermid. (line 10620) * ctime: ctime. (line 10633) * ctime_r: ctime_r. (line 10689) * cuserid: cuserid. (line 41013) * daddl: daddl. (line 10712) * daemon: daemon. (line 44716) * daylight: daylight. (line 10727) * dbm_clearerr: dbm_clearerr. (line 10747) * dbm_close: dbm_close. (line 10760) * dbm_delete: dbm_delete. (line 10773) * dbm_error: dbm_error. (line 10786) * dbm_fetch: dbm_fetch. (line 10799) * dbm_firstkey: dbm_firstkey. (line 10812) * dbm_nextkey: dbm_nextkey. (line 10825) * dbm_open: dbm_open. (line 10838) * dbm_store: dbm_store. (line 10851) * dcgettext: dcgettext. (line 34060) * dcngettext: dcngettext. (line 34082) * ddivl: ddivl. (line 10864) * DEF files: Visual Studio Compatibility. (line 46103) * describing functions, locating: Specification. (line 5088) * dgettext: dgettext. (line 34104) * difftime: difftime. (line 10879) * dirent-safer: Closed standard fds. (line 47905) * dirfd: dirfd. (line 10890) * dirname: dirname. (line 10908) * div: div. (line 10925) * dladdr: dladdr. (line 32743) * dladdr1: dladdr1. (line 32759) * dlclose: dlclose. (line 10936) * dlerror: dlerror. (line 10949) * dlinfo: dlinfo. (line 32773) * dlmopen: dlmopen. (line 32787) * dlopen: dlopen. (line 10962) * dlsym: dlsym. (line 10980) * dlvsym: dlvsym. (line 32801) * dl_iterate_phdr: dl_iterate_phdr. (line 34218) * dmull: dmull. (line 10998) * dngettext: dngettext. (line 34126) * dn_comp: dn_comp. (line 37156) * dn_expand: dn_expand. (line 37169) * dn_skipname: dn_skipname. (line 37182) * double inclusion of header files: Header files. (line 4988) * dprintf: dprintf. (line 11013) * drand48: drand48. (line 11078) * drand48_r: drand48_r. (line 41489) * drem: drem. (line 34384) * dremf: dremf. (line 34401) * dreml: dreml. (line 34418) * dsubl: dsubl. (line 11091) * dup: dup. (line 11106) * dup2: dup2. (line 11121) * dup3: dup3. (line 44732) * duplocale: duplocale. (line 11163) * dysize: dysize. (line 44466) * eaccess: eaccess. (line 44752) * ecvt: ecvt. (line 30897) * ecvt_r: ecvt_r. (line 41507) * Egrep: Predefined Syntaxes. (line 49196) * Emacs: Predefined Syntaxes. (line 49196) * encrypt: encrypt. (line 11185) * end in struct re_registers: Using Registers. (line 50344) * end-of-line operator: Match-end-of-line Operator. (line 49901) * endaliasent: endaliasent. (line 31972) * endfsent: endfsent. (line 33424) * endgrent: endgrent. (line 11202) * endhostent: endhostent. (line 11215) * endmntent: endmntent. (line 35249) * endnetent: endnetent. (line 11228) * endnetgrent: endnetgrent. (line 35327) * endprotoent: endprotoent. (line 11241) * endpwent: endpwent. (line 11254) * endrpcent: endrpcent. (line 38039) * endservent: endservent. (line 11266) * endsgent: endsgent. (line 33847) * endspent: endspent. (line 40495) * endttyent: endttyent. (line 44558) * endusershell: endusershell. (line 44759) * endutent: endutent. (line 45257) * endutxent: endutxent. (line 11278) * environ: environ. (line 11291) * envz_add: envz_add. (line 32822) * envz_entry: envz_entry. (line 32840) * envz_get: envz_get. (line 32858) * envz_merge: envz_merge. (line 32876) * envz_remove: envz_remove. (line 32894) * envz_strip: envz_strip. (line 32912) * epoll_create: epoll_create. (line 42571) * epoll_create1: epoll_create1. (line 42589) * epoll_ctl: epoll_ctl. (line 42604) * epoll_pwait: epoll_pwait. (line 42622) * epoll_wait: epoll_wait. (line 42637) * equivalence class expression in regex: Equivalence Class Operators. (line 49650) * erand48: erand48. (line 11324) * erand48_r: erand48_r. (line 41523) * erf: erf. (line 11337) * erfc: erfc. (line 11349) * erfcf: erfcf. (line 11361) * erfcl: erfcl. (line 11374) * erff: erff. (line 11390) * erfl: erfl. (line 11403) * err: err. (line 32934) * errno: errno. (line 11419) * error: error. (line 33099) * error <1>: progname and getprogname. (line 48525) * error_at_line: error_at_line. (line 33119) * error_message_count: error_message_count. (line 33134) * error_one_per_line: error_one_per_line. (line 33149) * error_print_progname: error_print_progname. (line 33164) * errx: errx. (line 32951) * ether_aton: ether_aton. (line 35764) * ether_aton_r: ether_aton_r. (line 35777) * ether_hostton: ether_hostton. (line 35791) * ether_line: ether_line. (line 35804) * ether_ntoa: ether_ntoa. (line 35817) * ether_ntoa_r: ether_ntoa_r. (line 35830) * ether_ntohost: ether_ntohost. (line 35844) * euidaccess: euidaccess. (line 44774) * eventfd: eventfd. (line 42659) * eventfd_read: eventfd_read. (line 42674) * eventfd_write: eventfd_write. (line 42689) * execl: execl. (line 11432) * execle: execle. (line 11458) * execlp: execlp. (line 11484) * execv: execv. (line 11507) * execve: execve. (line 11533) * execveat: execveat. (line 44799) * execvp: execvp. (line 11559) * execvpe: execvpe. (line 44813) * exit: exit. (line 11582) * exp: exp. (line 11595) * exp10: exp10. (line 34436) * exp10f: exp10f. (line 34455) * exp10l: exp10l. (line 34474) * exp2: exp2. (line 11606) * exp2f: exp2f. (line 11621) * exp2l: exp2l. (line 11635) * expf: expf. (line 11658) * expl: expl. (line 11673) * explicit_bzero: explicit_bzero. (line 42175) * expm1: expm1. (line 11696) * expm1f: expm1f. (line 11714) * expm1l: expm1l. (line 11732) * EXPR_SIGNED: Arithmetic Type Properties. (line 47400) * extern inline: extern inline. (line 47835) * Extra tests modules: Extra tests modules. (line 5580) * fabs: fabs. (line 11751) * fabsf: fabsf. (line 11762) * fabsl: fabsl. (line 11776) * faccessat: faccessat. (line 11791) * fadd: fadd. (line 11822) * faddl: faddl. (line 11837) * fallocate: fallocate. (line 33261) * fanotify_init: fanotify_init. (line 42708) * fanotify_mark: fanotify_mark. (line 42723) * fastmap initialization: GNU Regular Expression Compiling. (line 50085) * fastmaps: Searching with Fastmaps. (line 50241) * fattach: fattach. (line 11852) * fchdir: fchdir. (line 11866) * fchmod: fchmod. (line 11880) * fchmodat: fchmodat. (line 11897) * fchown: fchown. (line 11932) * fchownat: fchownat. (line 11949) * fclose: fclose. (line 11980) * fcloseall: fcloseall. (line 41045) * fcntl: fcntl. (line 12001) * fcntl-safer: Closed standard fds. (line 47905) * fcvt: fcvt. (line 30913) * fcvt_r: fcvt_r. (line 41541) * fdatasync: fdatasync. (line 12044) * fdetach: fdetach. (line 12059) * fdim: fdim. (line 12073) * fdimf: fdimf. (line 12086) * fdiml: fdiml. (line 12100) * fdiv: fdiv. (line 12114) * fdivl: fdivl. (line 12129) * fdopen: fdopen. (line 12144) * fdopendir: fdopendir. (line 12159) * FD_CLR: FD_CLR. (line 7935) * FD_ISSET: FD_ISSET. (line 7946) * FD_SET: FD_SET. (line 7957) * FD_ZERO: FD_ZERO. (line 7968) * feclearexcept: feclearexcept. (line 12183) * fedisableexcept: fedisableexcept. (line 33342) * feenableexcept: feenableexcept. (line 33360) * fegetenv: fegetenv. (line 12199) * fegetexcept: fegetexcept. (line 33382) * fegetexceptflag: fegetexceptflag. (line 12217) * fegetmode: fegetmode. (line 12231) * fegetround: fegetround. (line 12246) * feholdexcept: feholdexcept. (line 12260) * feof: feof. (line 12281) * feof_unlocked: feof_unlocked. (line 41062) * feraiseexcept: feraiseexcept. (line 12292) * ferror: ferror. (line 12308) * ferror_unlocked: ferror_unlocked. (line 41080) * fesetenv: fesetenv. (line 12319) * fesetexcept: fesetexcept. (line 12343) * fesetexceptflag: fesetexceptflag. (line 12360) * fesetmode: fesetmode. (line 12382) * fesetround: fesetround. (line 12397) * fetestexcept: fetestexcept. (line 12415) * fetestexceptflag: fetestexceptflag. (line 12432) * feupdateenv: feupdateenv. (line 12447) * fexecve: fexecve. (line 12474) * fflush: fflush. (line 12488) * fflush_unlocked: fflush_unlocked. (line 41098) * ffs: ffs. (line 12521) * ffsl: ffsl. (line 42204) * ffsll: ffsll. (line 42222) * fgetc: fgetc. (line 12535) * fgetc_unlocked: fgetc_unlocked. (line 41116) * fgetfilecon: fgetfilecon. (line 40389) * fgetgrent: fgetgrent. (line 33717) * fgetgrent_r: fgetgrent_r. (line 33732) * fgetpos: fgetpos. (line 12562) * fgetpwent: fgetpwent. (line 36885) * fgetpwent_r: fgetpwent_r. (line 36900) * fgets: fgets. (line 12582) * fgetsgent: fgetsgent. (line 33859) * fgetsgent_r: fgetsgent_r. (line 33871) * fgetspent: fgetspent. (line 40509) * fgetspent_r: fgetspent_r. (line 40523) * fgets_unlocked: fgets_unlocked. (line 41134) * fgetwc: fgetwc. (line 12605) * fgetwc_unlocked: fgetwc_unlocked. (line 45567) * fgetws: fgetws. (line 12620) * fgetws_unlocked: fgetws_unlocked. (line 45587) * fgetxattr: fgetxattr. (line 44240) * fileno: fileno. (line 12635) * fileno_unlocked: fileno_unlocked. (line 41152) * Finding modules: Which modules?. (line 3826) * finite: finite. (line 34493) * finitef: finitef. (line 34511) * finitel: finitel. (line 34529) * flistxattr: flistxattr. (line 44256) * flock: flock. (line 42742) * flockfile: flockfile. (line 12646) * floor: floor. (line 12659) * floorf: floorf. (line 12673) * floorl: floorl. (line 12691) * fma: fma. (line 12706) * fmaf: fmaf. (line 12723) * fmal: fmal. (line 12742) * fmax: fmax. (line 12758) * fmaxf: fmaxf. (line 12771) * fmaxl: fmaxl. (line 12785) * fmaxmag: fmaxmag. (line 12799) * fmaxmagf: fmaxmagf. (line 12814) * fmaxmagl: fmaxmagl. (line 12829) * fmemopen: fmemopen. (line 12844) * fmin: fmin. (line 12858) * fminf: fminf. (line 12871) * fminl: fminl. (line 12885) * fminmag: fminmag. (line 12899) * fminmagf: fminmagf. (line 12914) * fminmagl: fminmagl. (line 12929) * fmod: fmod. (line 12944) * fmodf: fmodf. (line 12960) * fmodl: fmodl. (line 12980) * fmtmsg: fmtmsg. (line 13003) * fmul: fmul. (line 13016) * fmull: fmull. (line 13031) * fnmatch: fnmatch. (line 13046) * fopen: fopen. (line 13105) * fopen-safer: Closed standard fds. (line 47905) * fopencookie: fopencookie. (line 41170) * fork: fork. (line 13148) * forkpty: forkpty. (line 36833) * fpathconf: fpathconf. (line 13167) * fpclassify: fpclassify. (line 13179) * fprintf: fprintf. (line 13192) * fputc: fputc. (line 13290) * fputc_unlocked: fputc_unlocked. (line 41185) * fputs: fputs. (line 13320) * fputs_unlocked: fputs_unlocked. (line 41203) * fputwc: fputwc. (line 13346) * fputwc_unlocked: fputwc_unlocked. (line 45607) * fputws: fputws. (line 13361) * fputws_unlocked: fputws_unlocked. (line 45627) * fread: fread. (line 13379) * fread_unlocked: fread_unlocked. (line 41221) * free: free. (line 13406) * FREE: Safe Allocation Macros. (line 47188) * freeaddrinfo: freeaddrinfo. (line 13420) * freeifaddrs: freeifaddrs. (line 33999) * freelocale: freelocale. (line 13437) * fremovexattr: fremovexattr. (line 44270) * freopen: freopen. (line 13455) * freopen-safer: Closed standard fds. (line 47905) * frexp: frexp. (line 13485) * frexpf: frexpf. (line 13502) * frexpl: frexpl. (line 13521) * fromfp: fromfp. (line 13543) * fromfpf: fromfpf. (line 13558) * fromfpl: fromfpl. (line 13573) * fromfpx: fromfpx. (line 13588) * fromfpxf: fromfpxf. (line 13603) * fromfpxl: fromfpxl. (line 13618) * fscanf: fscanf. (line 13633) * fseek: fseek. (line 13661) * fseeko: fseeko. (line 13680) * fsetpos: fsetpos. (line 13698) * fsetxattr: fsetxattr. (line 44284) * fstat: fstat. (line 13712) * fstatat: fstatat. (line 13746) * fstatfs: fstatfs. (line 43588) * fstatvfs: fstatvfs. (line 13782) * fsub: fsub. (line 13799) * fsubl: fsubl. (line 13814) * fsync: fsync. (line 13829) * ftell: ftell. (line 13843) * ftello: ftello. (line 13874) * ftime: ftime. (line 30929) * ftok: ftok. (line 13906) * ftruncate: ftruncate. (line 13918) * ftrylockfile: ftrylockfile. (line 13933) * fts_children: fts_children. (line 33498) * fts_close: fts_close. (line 33517) * fts_open: fts_open. (line 33530) * fts_read: fts_read. (line 33543) * fts_set: fts_set. (line 33562) * ftw: ftw. (line 13946) * funlockfile: funlockfile. (line 13964) * futimens: futimens. (line 13977) * futimes: futimes. (line 43869) * futimesat: futimesat. (line 43888) * fwide: fwide. (line 14009) * fwprintf: fwprintf. (line 14026) * fwrite: fwrite. (line 14062) * fwrite_unlocked: fwrite_unlocked. (line 41239) * fwscanf: fwscanf. (line 14092) * gai_strerror: gai_strerror. (line 14110) * gamma: gamma. (line 34548) * gammaf: gammaf. (line 34565) * gammal: gammal. (line 34582) * gcd: gcd. (line 48530) * gcvt: gcvt. (line 30949) * getaddrinfo: getaddrinfo. (line 14127) * getaliasbyname: getaliasbyname. (line 31986) * getaliasbyname_r: getaliasbyname_r. (line 32000) * getaliasent: getaliasent. (line 32014) * getaliasent_r: getaliasent_r. (line 32028) * getauxval: getauxval. (line 42518) * getc: getc. (line 14146) * getchar: getchar. (line 14182) * getchar_unlocked: getchar_unlocked. (line 14205) * getcontext: getcontext. (line 30965) * getcpu: getcpu. (line 40215) * getcwd: getcwd. (line 14218) * getc_unlocked: getc_unlocked. (line 14169) * getdate: getdate. (line 14256) * getdate_err: getdate_err. (line 14274) * getdate_r: getdate_r. (line 44480) * getdelim: getdelim. (line 14288) * getdirentries: getdirentries. (line 32692) * getdomainname: getdomainname. (line 44853) * getdtablesize: getdtablesize. (line 44874) * getegid: getegid. (line 14309) * getentropy: getentropy. (line 43263) * getenv: getenv. (line 14321) * geteuid: geteuid. (line 14332) * getfilecon: getfilecon. (line 40416) * getfsent: getfsent. (line 33438) * getfsfile: getfsfile. (line 33452) * getfsspec: getfsspec. (line 33466) * getgid: getgid. (line 14344) * getgrent: getgrent. (line 14356) * getgrent_r: getgrent_r. (line 33747) * getgrgid: getgrgid. (line 14369) * getgrgid_r: getgrgid_r. (line 14381) * getgrnam: getgrnam. (line 14396) * getgrnam_r: getgrnam_r. (line 14408) * getgrouplist: getgrouplist. (line 33765) * getgroups: getgroups. (line 14423) * gethostbyaddr: gethostbyaddr. (line 30981) * gethostbyaddr_r: gethostbyaddr_r. (line 35341) * gethostbyname: gethostbyname. (line 30993) * gethostbyname2: gethostbyname2. (line 35359) * gethostbyname2_r: gethostbyname2_r. (line 35376) * gethostbyname_r: gethostbyname_r. (line 35394) * gethostent: gethostent. (line 14451) * gethostent_r: gethostent_r. (line 35412) * gethostid: gethostid. (line 14464) * gethostname: gethostname. (line 14477) * getifaddrs: getifaddrs. (line 33983) * getipv4sourcefilter: getipv4sourcefilter. (line 35877) * getitimer: getitimer. (line 14498) * getline: getline. (line 14512) * getloadavg: getloadavg. (line 41557) * getlogin: getlogin. (line 14534) * getlogin_r: getlogin_r. (line 14550) * getmntent: getmntent. (line 35264) * getmntent_r: getmntent_r. (line 35278) * getmsg: getmsg. (line 14577) * getnameinfo: getnameinfo. (line 14591) * getnetbyaddr: getnetbyaddr. (line 14604) * getnetbyaddr_r: getnetbyaddr_r. (line 35426) * getnetbyname: getnetbyname. (line 14617) * getnetbyname_r: getnetbyname_r. (line 35440) * getnetent: getnetent. (line 14630) * getnetent_r: getnetent_r. (line 35454) * getnetgrent: getnetgrent. (line 35468) * getnetgrent_r: getnetgrent_r. (line 35482) * getnetname: getnetname. (line 37465) * getopt: getopt. (line 14643) * getopt_long: getopt_long. (line 33579) * getopt_long_only: getopt_long_only. (line 33616) * getpagesize: getpagesize. (line 44900) * getpass: getpass. (line 44920) * getpayload: getpayload. (line 14704) * getpayloadf: getpayloadf. (line 14722) * getpayloadl: getpayloadl. (line 14740) * getpeername: getpeername. (line 14758) * getpgid: getpgid. (line 14779) * getpgrp: getpgrp. (line 14792) * getpid: getpid. (line 14804) * getpmsg: getpmsg. (line 14815) * getppid: getppid. (line 14829) * getpriority: getpriority. (line 14841) * getprogname: progname and getprogname. (line 48518) * getprotobyname: getprotobyname. (line 14853) * getprotobyname_r: getprotobyname_r. (line 35497) * getprotobynumber: getprotobynumber. (line 14865) * getprotobynumber_r: getprotobynumber_r. (line 35514) * getprotoent: getprotoent. (line 14877) * getprotoent_r: getprotoent_r. (line 35531) * getpt: getpt. (line 41577) * getpublickey: getpublickey. (line 37661) * getpw: getpw. (line 36915) * getpwent: getpwent. (line 14890) * getpwent_r: getpwent_r. (line 36929) * getpwnam: getpwnam. (line 14903) * getpwnam_r: getpwnam_r. (line 14915) * getpwuid: getpwuid. (line 14930) * getpwuid_r: getpwuid_r. (line 14945) * getrandom: getrandom. (line 43301) * getresgid: getresgid. (line 44944) * getresuid: getresuid. (line 44961) * getrlimit: getrlimit. (line 14962) * getrpcbyname: getrpcbyname. (line 38052) * getrpcbyname_r: getrpcbyname_r. (line 38065) * getrpcbynumber: getrpcbynumber. (line 38079) * getrpcbynumber_r: getrpcbynumber_r. (line 38092) * getrpcent: getrpcent. (line 38106) * getrpcent_r: getrpcent_r. (line 38119) * getrpcport: getrpcport. (line 37898) * getrusage: getrusage. (line 14980) * gets: gets. (line 14995) * getsecretkey: getsecretkey. (line 37672) * getservbyname: getservbyname. (line 15017) * getservbyname_r: getservbyname_r. (line 35548) * getservbyport: getservbyport. (line 15029) * getservbyport_r: getservbyport_r. (line 35565) * getservent: getservent. (line 15041) * getservent_r: getservent_r. (line 35582) * getsgent: getsgent. (line 33883) * getsgent_r: getsgent_r. (line 33895) * getsgnam: getsgnam. (line 33907) * getsgnam_r: getsgnam_r. (line 33919) * getsid: getsid. (line 15053) * getsockname: getsockname. (line 15066) * getsockopt: getsockopt. (line 15087) * getsourcefilter: getsourcefilter. (line 35888) * getspent: getspent. (line 40537) * getspent_r: getspent_r. (line 40551) * getspnam: getspnam. (line 40565) * getspnam_r: getspnam_r. (line 40579) * getsubopt: getsubopt. (line 15112) * gettext: gettext. (line 34148) * gettextize, caveat: gettextize and autopoint. (line 4620) * gettid: gettid. (line 44978) * gettimeofday: gettimeofday. (line 15127) * getttyent: getttyent. (line 44571) * getttynam: getttynam. (line 44584) * getuid: getuid. (line 15157) * getumask: getumask. (line 43528) * getusershell: getusershell. (line 44994) * getutent: getutent. (line 45277) * getutent_r: getutent_r. (line 45295) * getutid: getutid. (line 45314) * getutid_r: getutid_r. (line 45330) * getutline: getutline. (line 45346) * getutline_r: getutline_r. (line 45362) * getutmp: getutmp. (line 45487) * getutmpx: getutmpx. (line 45511) * getutxent: getutxent. (line 15169) * getutxid: getutxid. (line 15182) * getutxline: getutxline. (line 15195) * getw: getw. (line 41257) * getwc: getwc. (line 15208) * getwchar: getwchar. (line 15223) * getwchar_unlocked: getwchar_unlocked. (line 45667) * getwc_unlocked: getwc_unlocked. (line 45647) * getwd: getwd. (line 31005) * getxattr: getxattr. (line 44298) * get_avphys_pages: get_avphys_pages. (line 43683) * get_current_dir_name: get_current_dir_name. (line 44838) * get_myaddress: get_myaddress. (line 37885) * get_nprocs: get_nprocs. (line 43699) * get_nprocs_conf: get_nprocs_conf. (line 43718) * get_phys_pages: get_phys_pages. (line 43734) * gitlog: gitlog-to-changelog. (line 52034) * glob: glob. (line 15238) * globfree: globfree. (line 15258) * glob_pattern_p: glob_pattern_p. (line 33664) * gmtime: gmtime. (line 15271) * gmtime_r: gmtime_r. (line 15287) * gnulib-tool: Invoking gnulib-tool. (line 3801) * gnu_dev_major: gnu_dev_major. (line 43794) * gnu_dev_makedev: gnu_dev_makedev. (line 43812) * gnu_dev_minor: gnu_dev_minor. (line 43830) * gnu_get_libc_release: gnu_get_libc_release. (line 33679) * gnu_get_libc_version: gnu_get_libc_version. (line 33696) * grantpt: grantpt. (line 15303) * Grep: Predefined Syntaxes. (line 49196) * grouping: Grouping Operators. (line 49770) * group_member: group_member. (line 45012) * gsignal: gsignal. (line 40681) * hasmntopt: hasmntopt. (line 35293) * hcreate: hcreate. (line 15318) * hcreate_r: hcreate_r. (line 40301) * hdestroy: hdestroy. (line 15331) * hdestroy_r: hdestroy_r. (line 40319) * header file include protection: Header files. (line 4988) * Header files and C++: Header files. (line 5012) * herror: herror. (line 35599) * host2netname: host2netname. (line 37476) * hsearch: hsearch. (line 15344) * hsearch_r: hsearch_r. (line 40337) * hstrerror: hstrerror. (line 35612) * htonl: htonl. (line 15357) * htons: htons. (line 15370) * hypot: hypot. (line 15383) * hypotf: hypotf. (line 15399) * hypotl: hypotl. (line 15419) * h_errno: h_errno. (line 31023) * iconv: iconv. (line 15440) * iconv_close: iconv_close. (line 15473) * iconv_open: iconv_open. (line 15488) * if_freenameindex: if_freenameindex. (line 15525) * if_indextoname: if_indextoname. (line 15541) * if_nameindex: if_nameindex. (line 15554) * if_nametoindex: if_nametoindex. (line 15567) * ilogb: ilogb. (line 15580) * ilogbf: ilogbf. (line 15600) * ilogbl: ilogbl. (line 15617) * imaxabs: imaxabs. (line 15637) * imaxdiv: imaxdiv. (line 15651) * in6addr_any: in6addr_any. (line 35899) * in6addr_loopback: in6addr_loopback. (line 35912) * index: index. (line 31036) * inet6_option_alloc: inet6_option_alloc. (line 35925) * inet6_option_append: inet6_option_append. (line 35936) * inet6_option_find: inet6_option_find. (line 35947) * inet6_option_init: inet6_option_init. (line 35958) * inet6_option_next: inet6_option_next. (line 35969) * inet6_option_space: inet6_option_space. (line 35980) * inet6_opt_append: inet6_opt_append. (line 35991) * inet6_opt_find: inet6_opt_find. (line 36002) * inet6_opt_finish: inet6_opt_finish. (line 36013) * inet6_opt_get_val: inet6_opt_get_val. (line 36024) * inet6_opt_init: inet6_opt_init. (line 36035) * inet6_opt_next: inet6_opt_next. (line 36046) * inet6_opt_set_val: inet6_opt_set_val. (line 36057) * inet6_rth_add: inet6_rth_add. (line 36068) * inet6_rth_getaddr: inet6_rth_getaddr. (line 36079) * inet6_rth_init: inet6_rth_init. (line 36090) * inet6_rth_reverse: inet6_rth_reverse. (line 36101) * inet6_rth_segments: inet6_rth_segments. (line 36112) * inet6_rth_space: inet6_rth_space. (line 36123) * inet_addr: inet_addr. (line 15665) * inet_aton: inet_aton. (line 32448) * inet_lnaof: inet_lnaof. (line 32464) * inet_makeaddr: inet_makeaddr. (line 32478) * inet_netof: inet_netof. (line 32518) * inet_network: inet_network. (line 32532) * inet_net_ntop: inet_net_ntop. (line 32492) * inet_net_pton: inet_net_pton. (line 32505) * inet_nsap_addr: inet_nsap_addr. (line 32546) * inet_nsap_ntoa: inet_nsap_ntoa. (line 32556) * inet_ntoa: inet_ntoa. (line 15683) * inet_ntop: inet_ntop. (line 15706) * inet_pton: inet_pton. (line 15726) * initgroups: initgroups. (line 33787) * initial import: Initial import. (line 3850) * initstate: initstate. (line 15744) * initstate_r: initstate_r. (line 41592) * inline: static inline. (line 47829) * inline <1>: extern inline. (line 47835) * innetgr: innetgr. (line 35625) * inotify_add_watch: inotify_add_watch. (line 42812) * inotify_init: inotify_init. (line 42829) * inotify_init1: inotify_init1. (line 42846) * inotify_rm_watch: inotify_rm_watch. (line 42861) * insque: insque. (line 15765) * int: Safe Allocation Macros. (line 47156) * int <1>: Safe Allocation Macros. (line 47163) * int <2>: Safe Allocation Macros. (line 47170) * int <3>: Safe Allocation Macros. (line 47177) * integer arithmetic portability: Unsupported Platforms. (line 3474) * integer bounds: Integer Bounds. (line 47426) * integer overflow: Integer Properties. (line 47362) * integer overflow checking: Checking Integer Overflow. (line 47467) * integer properties: Integer Properties. (line 47359) * integer range overflow: Integer Range Overflow. (line 47730) * integer type overflow: Integer Type Overflow. (line 47625) * interval expression: Interval Operators. (line 49485) * INT_ADD_OK: Checking Integer Overflow. (line 47524) * INT_ADD_OVERFLOW: Integer Type Overflow. (line 47691) * INT_ADD_RANGE_OVERFLOW: Integer Range Overflow. (line 47788) * INT_ADD_WRAPV: Wraparound Arithmetic. (line 47597) * INT_BUFSIZE_BOUND: Integer Bounds. (line 47426) * INT_DIVIDE_OVERFLOW: Integer Type Overflow. (line 47707) * INT_DIVIDE_RANGE_OVERFLOW: Integer Range Overflow. (line 47804) * INT_LEFT_SHIFT_OVERFLOW: Integer Type Overflow. (line 47721) * INT_LEFT_SHIFT_RANGE_OVERFLOW: Integer Range Overflow. (line 47818) * INT_MULTIPLY_OK: Checking Integer Overflow. (line 47534) * INT_MULTIPLY_OVERFLOW: Integer Type Overflow. (line 47703) * INT_MULTIPLY_RANGE_OVERFLOW: Integer Range Overflow. (line 47800) * INT_MULTIPLY_WRAPV: Wraparound Arithmetic. (line 47607) * INT_NEGATE_OVERFLOW: Integer Type Overflow. (line 47699) * INT_NEGATE_RANGE_OVERFLOW: Integer Range Overflow. (line 47796) * INT_REMAINDER_OVERFLOW: Integer Type Overflow. (line 47713) * INT_REMAINDER_RANGE_OVERFLOW: Integer Range Overflow. (line 47810) * INT_STRLEN_BOUND: Integer Bounds. (line 47445) * INT_SUBTRACT_OK: Checking Integer Overflow. (line 47529) * INT_SUBTRACT_OVERFLOW: Integer Type Overflow. (line 47695) * INT_SUBTRACT_RANGE_OVERFLOW: Integer Range Overflow. (line 47792) * INT_SUBTRACT_WRAPV: Wraparound Arithmetic. (line 47602) * invoking gnulib-tool: Invoking gnulib-tool. (line 3801) * ioctl: ioctl. (line 15778) * ioperm: ioperm. (line 42882) * iopl: iopl. (line 42896) * isalnum: isalnum. (line 15804) * isalnum_l: isalnum_l. (line 15848) * isalpha: isalpha. (line 15862) * isalpha_l: isalpha_l. (line 15906) * isascii: isascii. (line 15920) * isastream: isastream. (line 15948) * isatty: isatty. (line 15962) * isblank: isblank. (line 15980) * isblank_l: isblank_l. (line 16026) * iscntrl: iscntrl. (line 16040) * iscntrl_l: iscntrl_l. (line 16084) * isctype: isctype. (line 32677) * isdigit: isdigit. (line 16098) * isdigit_l: isdigit_l. (line 16142) * isfdtype: isfdtype. (line 43480) * isfinite: isfinite. (line 16156) * isgraph: isgraph. (line 16176) * isgraph_l: isgraph_l. (line 16220) * isgreater: isgreater. (line 16234) * isgreaterequal: isgreaterequal. (line 16247) * isinf: isinf. (line 16260) * isinff: isinff. (line 34600) * isinfl: isinfl. (line 34617) * isless: isless. (line 16275) * islessequal: islessequal. (line 16288) * islessgreater: islessgreater. (line 16301) * islower: islower. (line 16314) * islower_l: islower_l. (line 16358) * isnan: isnan. (line 16372) * isnanf: isnanf. (line 34634) * isnanl: isnanl. (line 34649) * isnormal: isnormal. (line 16391) * isprint: isprint. (line 16404) * isprint_l: isprint_l. (line 16448) * ispunct: ispunct. (line 16462) * ispunct_l: ispunct_l. (line 16506) * isspace: isspace. (line 16520) * isspace_l: isspace_l. (line 16564) * isunordered: isunordered. (line 16578) * isupper: isupper. (line 16591) * isupper_l: isupper_l. (line 16635) * iswalnum: iswalnum. (line 16649) * iswalnum_l: iswalnum_l. (line 16668) * iswalpha: iswalpha. (line 16684) * iswalpha_l: iswalpha_l. (line 16703) * iswblank: iswblank. (line 16719) * iswblank_l: iswblank_l. (line 16739) * iswcntrl: iswcntrl. (line 16755) * iswcntrl_l: iswcntrl_l. (line 16776) * iswctype: iswctype. (line 16792) * iswctype_l: iswctype_l. (line 16813) * iswdigit: iswdigit. (line 16829) * iswdigit_l: iswdigit_l. (line 16850) * iswgraph: iswgraph. (line 16866) * iswgraph_l: iswgraph_l. (line 16885) * iswlower: iswlower. (line 16901) * iswlower_l: iswlower_l. (line 16920) * iswprint: iswprint. (line 16936) * iswprint_l: iswprint_l. (line 16957) * iswpunct: iswpunct. (line 16973) * iswpunct_l: iswpunct_l. (line 16995) * iswspace: iswspace. (line 17011) * iswspace_l: iswspace_l. (line 17030) * iswupper: iswupper. (line 17046) * iswupper_l: iswupper_l. (line 17065) * iswxdigit: iswxdigit. (line 17081) * iswxdigit_l: iswxdigit_l. (line 17102) * isxdigit: isxdigit. (line 17118) * isxdigit_l: isxdigit_l. (line 17162) * j0: j0. (line 17176) * j0f: j0f. (line 34666) * j0l: j0l. (line 34683) * j1: j1. (line 17188) * j1f: j1f. (line 34701) * j1l: j1l. (line 34718) * jn: jn. (line 17200) * jnf: jnf. (line 34736) * jnl: jnl. (line 34753) * jrand48: jrand48. (line 17212) * jrand48_r: jrand48_r. (line 41616) * key_decryptsession: key_decryptsession. (line 37487) * key_decryptsession_pk: key_decryptsession_pk. (line 37501) * key_encryptsession: key_encryptsession. (line 37512) * key_encryptsession_pk: key_encryptsession_pk. (line 37526) * key_gendes: key_gendes. (line 37537) * key_get_conv: key_get_conv. (line 37551) * key_secretkey_is_set: key_secretkey_is_set. (line 37562) * key_setsecret: key_setsecret. (line 37576) * kill: kill. (line 17225) * killpg: killpg. (line 17240) * klogctl: klogctl. (line 42933) * l64a: l64a. (line 17252) * labs: labs. (line 17267) * lchmod: lchmod. (line 43544) * lchown: lchown. (line 17279) * lckpwdf: lckpwdf. (line 40593) * lcong48: lcong48. (line 17305) * lcong48_r: lcong48_r. (line 41634) * LD DEF files: Visual Studio Compatibility. (line 46103) * ldexp: ldexp. (line 17318) * ldexpf: ldexpf. (line 17331) * ldexpl: ldexpl. (line 17346) * ldiv: ldiv. (line 17365) * lfind: lfind. (line 17376) * lgamma: lgamma. (line 17388) * lgammaf: lgammaf. (line 17400) * lgammaf_r: lgammaf_r. (line 34788) * lgammal: lgammal. (line 17413) * lgammal_r: lgammal_r. (line 34805) * lgamma_r: lgamma_r. (line 34771) * lgetfilecon: lgetfilecon. (line 40443) * lgetxattr: lgetxattr. (line 44314) * link: link. (line 17427) * linkat: linkat. (line 17447) * lio_listio: lio_listio. (line 17469) * listen: listen. (line 17485) * listxattr: listxattr. (line 44328) * llabs: llabs. (line 17499) * lldiv: lldiv. (line 17512) * llistxattr: llistxattr. (line 44342) * llogb: llogb. (line 17525) * llogbf: llogbf. (line 17540) * llogbl: llogbl. (line 17555) * llrint: llrint. (line 17570) * llrintf: llrintf. (line 17583) * llrintl: llrintl. (line 17597) * llround: llround. (line 17611) * llroundf: llroundf. (line 17624) * llroundl: llroundl. (line 17638) * loc1: loc1. (line 37108) * loc2: loc2. (line 37119) * localeconv: localeconv. (line 17652) * localtime: localtime. (line 17672) * localtime_r: localtime_r. (line 17698) * lockf: lockf. (line 17719) * locs: locs. (line 37130) * log: log. (line 17735) * log10: log10. (line 17751) * log10f: log10f. (line 17767) * log10l: log10l. (line 17787) * log1p: log1p. (line 17808) * log1pf: log1pf. (line 17825) * log1pl: log1pl. (line 17843) * log2: log2. (line 17865) * log2f: log2f. (line 17888) * log2l: log2l. (line 17911) * logb: logb. (line 17930) * logbf: logbf. (line 17947) * logbl: logbl. (line 17963) * logf: logf. (line 17983) * login: login. (line 45445) * login_tty: login_tty. (line 45460) * logl: logl. (line 18003) * long-running tests modules: Extra tests modules. (line 5580) * longjmp: longjmp. (line 18024) * lrand48: lrand48. (line 18042) * lrand48_r: lrand48_r. (line 41652) * lremovexattr: lremovexattr. (line 44356) * lrint: lrint. (line 18055) * lrintf: lrintf. (line 18068) * lrintl: lrintl. (line 18081) * lround: lround. (line 18095) * lroundf: lroundf. (line 18108) * lroundl: lroundl. (line 18121) * lsearch: lsearch. (line 18135) * lseek: lseek. (line 18147) * lsetxattr: lsetxattr. (line 44370) * lstat: lstat. (line 18175) * lutimes: lutimes. (line 43910) * madvise: madvise. (line 42952) * makecontext: makecontext. (line 31052) * mallinfo: mallinfo. (line 34239) * mallinfo2: mallinfo2. (line 34255) * malloc: malloc. (line 18206) * malloc <1>: GNU Regular Expression Compiling. (line 50090) * malloc_info: malloc_info. (line 34271) * malloc_stats: malloc_stats. (line 34286) * malloc_trim: malloc_trim. (line 34300) * malloc_usable_size: malloc_usable_size. (line 34314) * mallopt: mallopt. (line 34328) * matching list: List Operators. (line 49561) * matching newline: List Operators. (line 49561) * matching with GNU functions: GNU Matching. (line 50127) * matherr: matherr. (line 34823) * mblen: mblen. (line 18228) * mbrlen: mbrlen. (line 18240) * mbrtoc16: mbrtoc16. (line 18279) * mbrtoc32: mbrtoc32. (line 18311) * mbrtoc8: mbrtoc8. (line 18268) * mbrtowc: mbrtowc. (line 18350) * mbsinit: mbsinit. (line 18388) * mbsnrtowcs: mbsnrtowcs. (line 18404) * mbsrtowcs: mbsrtowcs. (line 18433) * mbstowcs: mbstowcs. (line 18464) * mbtowc: mbtowc. (line 18482) * mcheck: mcheck. (line 35140) * mcheck_check_all: mcheck_check_all. (line 35155) * mcheck_pedantic: mcheck_pedantic. (line 35169) * memalign: memalign. (line 34343) * memccpy: memccpy. (line 18501) * memchr: memchr. (line 18512) * memcmp: memcmp. (line 18527) * memcpy: memcpy. (line 18543) * memfd_create: memfd_create. (line 42966) * memfrob: memfrob. (line 42242) * memmem: memmem. (line 42257) * memmove: memmove. (line 18556) * Memory allocation failure: Out of memory handling. (line 5529) * mempcpy: mempcpy. (line 42294) * memrchr: memrchr. (line 42309) * memset: memset. (line 18569) * memset_explicit: memset_explicit. (line 18582) * mincore: mincore. (line 42983) * mkdir: mkdir. (line 18607) * mkdirat: mkdirat. (line 18633) * mkdtemp: mkdtemp. (line 18649) * mkfifo: mkfifo. (line 18662) * mkfifoat: mkfifoat. (line 18680) * mknod: mknod. (line 18707) * mknodat: mknodat. (line 18729) * mkostemp: mkostemp. (line 41670) * mkostemps: mkostemps. (line 41693) * mkstemp: mkstemp. (line 18753) * mkstemps: mkstemps. (line 41716) * mktemp: mktemp. (line 31068) * mktime: mktime. (line 18774) * mlock: mlock. (line 18794) * mlock2: mlock2. (line 42996) * mlockall: mlockall. (line 18807) * mmap: mmap. (line 18820) * modf: modf. (line 18845) * modff: modff. (line 18863) * modfl: modfl. (line 18885) * monstartup: monstartup. (line 42798) * mount: mount. (line 43128) * mprobe: mprobe. (line 35183) * mprotect: mprotect. (line 18908) * mq_close: mq_close. (line 18924) * mq_getattr: mq_getattr. (line 18938) * mq_notify: mq_notify. (line 18952) * mq_open: mq_open. (line 18966) * mq_receive: mq_receive. (line 18980) * mq_send: mq_send. (line 18994) * mq_setattr: mq_setattr. (line 19008) * mq_timedreceive: mq_timedreceive. (line 19022) * mq_timedsend: mq_timedsend. (line 19036) * mq_unlink: mq_unlink. (line 19050) * mrand48: mrand48. (line 19064) * mrand48_r: mrand48_r. (line 41738) * mremap: mremap. (line 43013) * msgctl: msgctl. (line 19077) * msgget: msgget. (line 19090) * msgrcv: msgrcv. (line 19103) * msgsnd: msgsnd. (line 19116) * msync: msync. (line 19129) * mtrace: mtrace. (line 35198) * mtx_destroy: mtx_destroy. (line 19143) * mtx_init: mtx_init. (line 19158) * mtx_lock: mtx_lock. (line 19173) * mtx_timedlock: mtx_timedlock. (line 19188) * mtx_trylock: mtx_trylock. (line 19203) * mtx_unlock: mtx_unlock. (line 19218) * multibyte locale: C strings. (line 46442) * munlock: munlock. (line 19233) * munlockall: munlockall. (line 19246) * munmap: munmap. (line 19259) * muntrace: muntrace. (line 35214) * name_to_handle_at: name_to_handle_at. (line 33278) * nan: nan. (line 19271) * nanf: nanf. (line 19284) * nanl: nanl. (line 19298) * nanosleep: nanosleep. (line 19312) * nearbyint: nearbyint. (line 19330) * nearbyintf: nearbyintf. (line 19343) * nearbyintl: nearbyintl. (line 19357) * netname2host: netname2host. (line 37590) * netname2user: netname2user. (line 37601) * newlocale: newlocale. (line 19371) * nextafter: nextafter. (line 19389) * nextafterf: nextafterf. (line 19401) * nextafterl: nextafterl. (line 19414) * nextdown: nextdown. (line 19428) * nextdownf: nextdownf. (line 19445) * nextdownl: nextdownl. (line 19462) * nexttoward: nexttoward. (line 19479) * nexttowardf: nexttowardf. (line 19493) * nexttowardl: nexttowardl. (line 19507) * nextup: nextup. (line 19521) * nextupf: nextupf. (line 19538) * nextupl: nextupl. (line 19555) * nftw: nftw. (line 19572) * ngettext: ngettext. (line 34170) * nice: nice. (line 19588) * nis_add: nis_add. (line 39241) * nis_addmember: nis_addmember. (line 39263) * nis_add_entry: nis_add_entry. (line 39252) * nis_checkpoint: nis_checkpoint. (line 39274) * nis_clone_object: nis_clone_object. (line 39285) * nis_creategroup: nis_creategroup. (line 39296) * nis_destroygroup: nis_destroygroup. (line 39318) * nis_destroy_object: nis_destroy_object. (line 39307) * nis_dir_cmp: nis_dir_cmp. (line 39329) * nis_domain_of: nis_domain_of. (line 39340) * nis_domain_of_r: nis_domain_of_r. (line 39351) * nis_first_entry: nis_first_entry. (line 39362) * nis_freenames: nis_freenames. (line 39373) * nis_freeresult: nis_freeresult. (line 39384) * nis_freeservlist: nis_freeservlist. (line 39395) * nis_freetags: nis_freetags. (line 39406) * nis_getnames: nis_getnames. (line 39417) * nis_getservlist: nis_getservlist. (line 39428) * nis_ismember: nis_ismember. (line 39439) * nis_leaf_of: nis_leaf_of. (line 39450) * nis_leaf_of_r: nis_leaf_of_r. (line 39461) * nis_lerror: nis_lerror. (line 39472) * nis_list: nis_list. (line 39483) * nis_local_directory: nis_local_directory. (line 39494) * nis_local_group: nis_local_group. (line 39505) * nis_local_host: nis_local_host. (line 39516) * nis_local_principal: nis_local_principal. (line 39527) * nis_lookup: nis_lookup. (line 39538) * nis_mkdir: nis_mkdir. (line 39549) * nis_modify: nis_modify. (line 39560) * nis_modify_entry: nis_modify_entry. (line 39571) * nis_name_of: nis_name_of. (line 39582) * nis_name_of_r: nis_name_of_r. (line 39593) * nis_next_entry: nis_next_entry. (line 39604) * nis_perror: nis_perror. (line 39615) * nis_ping: nis_ping. (line 39626) * nis_print_directory: nis_print_directory. (line 39637) * nis_print_entry: nis_print_entry. (line 39648) * nis_print_group: nis_print_group. (line 39659) * nis_print_group_entry: nis_print_group_entry. (line 39670) * nis_print_link: nis_print_link. (line 39681) * nis_print_object: nis_print_object. (line 39692) * nis_print_result: nis_print_result. (line 39703) * nis_print_rights: nis_print_rights. (line 39714) * nis_print_table: nis_print_table. (line 39725) * nis_remove: nis_remove. (line 39736) * nis_removemember: nis_removemember. (line 39758) * nis_remove_entry: nis_remove_entry. (line 39747) * nis_rmdir: nis_rmdir. (line 39769) * nis_servstate: nis_servstate. (line 39780) * nis_sperrno: nis_sperrno. (line 39791) * nis_sperror: nis_sperror. (line 39802) * nis_sperror_r: nis_sperror_r. (line 39813) * nis_stats: nis_stats. (line 39824) * nis_verifygroup: nis_verifygroup. (line 39835) * nl_langinfo: nl_langinfo. (line 19601) * nl_langinfo_l: nl_langinfo_l. (line 19636) * nonmatching list: List Operators. (line 49561) * noreturn: Non-returning Functions. (line 47321) * not_bol field in pattern buffer: Match-beginning-of-line Operator. (line 49891) * nrand48: nrand48. (line 19650) * nrand48_r: nrand48_r. (line 41756) * ntohl: ntohl. (line 19663) * ntohs: ntohs. (line 19676) * ntp_adjtime: ntp_adjtime. (line 44016) * ntp_gettime: ntp_gettime. (line 44031) * ntp_gettimex: ntp_gettimex. (line 44046) * null pointer: nullptr. (line 5946) * null pointer type: stddef.h. (line 7062) * num_regs in struct re_registers: Using Registers. (line 50344) * Obsolete modules: Obsolete modules. (line 5559) * obstack_alloc_failed_handler: obstack_alloc_failed_handler. (line 36160) * obstack_exit_failure: obstack_exit_failure. (line 36174) * obstack_free: obstack_free. (line 36185) * obstack_printf: obstack_printf. (line 36199) * obstack_vprintf: obstack_vprintf. (line 36274) * on_exit: on_exit. (line 41774) * open: open. (line 19689) * open-group operator and ^: Match-beginning-of-line Operator. (line 49884) * openat: openat. (line 19731) * openat-safer: Closed standard fds. (line 47905) * opendir: opendir. (line 19761) * openlog: openlog. (line 19777) * openpty: openpty. (line 36857) * open_by_handle_at: open_by_handle_at. (line 33308) * open_memstream: open_memstream. (line 19789) * open_wmemstream: open_wmemstream. (line 19806) * optarg: optarg. (line 19822) * opterr: opterr. (line 19834) * optind: optind. (line 19846) * optopt: optopt. (line 19858) * or operator: Alternation Operator. (line 49530) * Out of Memory handling: Out of memory handling. (line 5529) * overflow, integer: Integer Properties. (line 47362) * overflow, integer range: Integer Range Overflow. (line 47730) * overflow, integer type: Integer Type Overflow. (line 47625) * parenthesizing: Grouping Operators. (line 49770) * parse_printf_format: parse_printf_format. (line 36372) * pathconf: pathconf. (line 19870) * pattern buffer initialization: GNU Regular Expression Compiling. (line 50074) * pattern buffer, definition of: GNU Pattern Buffers. (line 50034) * pause: pause. (line 19882) * pclose: pclose. (line 19894) * perror: perror. (line 19906) * personality: personality. (line 43174) * pipe: pipe. (line 19933) * pipe2: pipe2. (line 45026) * pipe2-safer: Closed standard fds. (line 47905) * pkey_alloc: pkey_alloc. (line 43031) * pkey_free: pkey_free. (line 43047) * pkey_get: pkey_get. (line 43063) * pkey_mprotect: pkey_mprotect. (line 43078) * pkey_set: pkey_set. (line 43094) * pmap_getmaps: pmap_getmaps. (line 38163) * pmap_getport: pmap_getport. (line 38176) * pmap_rmtcall: pmap_rmtcall. (line 38192) * pmap_set: pmap_set. (line 38205) * pmap_unset: pmap_unset. (line 38221) * poll: poll. (line 19947) * popen: popen. (line 19968) * popen-safer: Closed standard fds. (line 47905) * portability, integer arithmetic: Unsupported Platforms. (line 3474) * POSIX Awk: Predefined Syntaxes. (line 49196) * posix_fadvise: posix_fadvise. (line 19989) * posix_fallocate: posix_fallocate. (line 20006) * posix_madvise: posix_madvise. (line 20029) * posix_memalign: posix_memalign. (line 20057) * posix_mem_offset: posix_mem_offset. (line 20043) * posix_openpt: posix_openpt. (line 20080) * posix_spawn: posix_spawn. (line 20100) * posix_spawnattr_destroy: posix_spawnattr_destroy. (line 20202) * posix_spawnattr_getflags: posix_spawnattr_getflags. (line 20216) * posix_spawnattr_getpgroup: posix_spawnattr_getpgroup. (line 20230) * posix_spawnattr_getschedparam: posix_spawnattr_getschedparam. (line 20244) * posix_spawnattr_getschedpolicy: posix_spawnattr_getschedpolicy. (line 20258) * posix_spawnattr_getsigdefault: posix_spawnattr_getsigdefault. (line 20272) * posix_spawnattr_getsigmask: posix_spawnattr_getsigmask. (line 20286) * posix_spawnattr_init: posix_spawnattr_init. (line 20300) * posix_spawnattr_setflags: posix_spawnattr_setflags. (line 20314) * posix_spawnattr_setpgroup: posix_spawnattr_setpgroup. (line 20328) * posix_spawnattr_setschedparam: posix_spawnattr_setschedparam. (line 20342) * posix_spawnattr_setschedpolicy: posix_spawnattr_setschedpolicy. (line 20356) * posix_spawnattr_setsigdefault: posix_spawnattr_setsigdefault. (line 20370) * posix_spawnattr_setsigmask: posix_spawnattr_setsigmask. (line 20384) * posix_spawnp: posix_spawnp. (line 20398) * posix_spawn_file_actions_addchdir_np: posix_spawn_file_actions_addchdir_np. (line 40897) * posix_spawn_file_actions_addclose: posix_spawn_file_actions_addclose. (line 20126) * posix_spawn_file_actions_addclosefrom_np: posix_spawn_file_actions_addclosefrom_np. (line 40916) * posix_spawn_file_actions_adddup2: posix_spawn_file_actions_adddup2. (line 20142) * posix_spawn_file_actions_addfchdir_np: posix_spawn_file_actions_addfchdir_np. (line 40928) * posix_spawn_file_actions_addopen: posix_spawn_file_actions_addopen. (line 20158) * posix_spawn_file_actions_destroy: posix_spawn_file_actions_destroy. (line 20174) * posix_spawn_file_actions_init: posix_spawn_file_actions_init. (line 20188) * posix_trace_attr_destroy: posix_trace_attr_destroy. (line 20426) * posix_trace_attr_getclockres: posix_trace_attr_getclockres. (line 20440) * posix_trace_attr_getcreatetime: posix_trace_attr_getcreatetime. (line 20454) * posix_trace_attr_getgenversion: posix_trace_attr_getgenversion. (line 20468) * posix_trace_attr_getinherited: posix_trace_attr_getinherited. (line 20482) * posix_trace_attr_getlogfullpolicy: posix_trace_attr_getlogfullpolicy. (line 20496) * posix_trace_attr_getlogsize: posix_trace_attr_getlogsize. (line 20510) * posix_trace_attr_getmaxdatasize: posix_trace_attr_getmaxdatasize. (line 20524) * posix_trace_attr_getmaxsystemeventsize: posix_trace_attr_getmaxsystemeventsize. (line 20538) * posix_trace_attr_getmaxusereventsize: posix_trace_attr_getmaxusereventsize. (line 20552) * posix_trace_attr_getname: posix_trace_attr_getname. (line 20566) * posix_trace_attr_getstreamfullpolicy: posix_trace_attr_getstreamfullpolicy. (line 20580) * posix_trace_attr_getstreamsize: posix_trace_attr_getstreamsize. (line 20594) * posix_trace_attr_init: posix_trace_attr_init. (line 20608) * posix_trace_attr_setinherited: posix_trace_attr_setinherited. (line 20622) * posix_trace_attr_setlogfullpolicy: posix_trace_attr_setlogfullpolicy. (line 20636) * posix_trace_attr_setlogsize: posix_trace_attr_setlogsize. (line 20650) * posix_trace_attr_setmaxdatasize: posix_trace_attr_setmaxdatasize. (line 20664) * posix_trace_attr_setname: posix_trace_attr_setname. (line 20678) * posix_trace_attr_setstreamfullpolicy: posix_trace_attr_setstreamfullpolicy. (line 20692) * posix_trace_attr_setstreamsize: posix_trace_attr_setstreamsize. (line 20706) * posix_trace_clear: posix_trace_clear. (line 20720) * posix_trace_close: posix_trace_close. (line 20734) * posix_trace_create: posix_trace_create. (line 20748) * posix_trace_create_withlog: posix_trace_create_withlog. (line 20762) * posix_trace_event: posix_trace_event. (line 20776) * posix_trace_eventid_equal: posix_trace_eventid_equal. (line 20790) * posix_trace_eventid_get_name: posix_trace_eventid_get_name. (line 20804) * posix_trace_eventid_open: posix_trace_eventid_open. (line 20818) * posix_trace_eventset_add: posix_trace_eventset_add. (line 20832) * posix_trace_eventset_del: posix_trace_eventset_del. (line 20846) * posix_trace_eventset_empty: posix_trace_eventset_empty. (line 20860) * posix_trace_eventset_fill: posix_trace_eventset_fill. (line 20874) * posix_trace_eventset_ismember: posix_trace_eventset_ismember. (line 20888) * posix_trace_eventtypelist_getnext_id: posix_trace_eventtypelist_getnext_id. (line 20902) * posix_trace_eventtypelist_rewind: posix_trace_eventtypelist_rewind. (line 20916) * posix_trace_flush: posix_trace_flush. (line 20930) * posix_trace_getnext_event: posix_trace_getnext_event. (line 20986) * posix_trace_get_attr: posix_trace_get_attr. (line 20944) * posix_trace_get_filter: posix_trace_get_filter. (line 20958) * posix_trace_get_status: posix_trace_get_status. (line 20972) * posix_trace_open: posix_trace_open. (line 21000) * posix_trace_rewind: posix_trace_rewind. (line 21014) * posix_trace_set_filter: posix_trace_set_filter. (line 21028) * posix_trace_shutdown: posix_trace_shutdown. (line 21042) * posix_trace_start: posix_trace_start. (line 21056) * posix_trace_stop: posix_trace_stop. (line 21070) * posix_trace_timedgetnext_event: posix_trace_timedgetnext_event. (line 21084) * posix_trace_trid_eventid_open: posix_trace_trid_eventid_open. (line 21098) * posix_trace_trygetnext_event: posix_trace_trygetnext_event. (line 21112) * posix_typed_mem_get_info: posix_typed_mem_get_info. (line 21126) * posix_typed_mem_open: posix_typed_mem_open. (line 21140) * pow: pow. (line 21154) * pow10: pow10. (line 34839) * pow10f: pow10f. (line 34856) * pow10l: pow10l. (line 34873) * powf: powf. (line 21165) * powl: powl. (line 21180) * ppoll: ppoll. (line 36354) * prctl: prctl. (line 43193) * pread: pread. (line 21198) * preadv: preadv. (line 44065) * preadv2: preadv2. (line 44083) * printf: printf. (line 21217) * printf_size: printf_size. (line 36386) * printf_size_info: printf_size_info. (line 36400) * privileged tests modules: Extra tests modules. (line 5580) * prlimit: prlimit. (line 43362) * process_vm_readv: process_vm_readv. (line 44099) * process_vm_writev: process_vm_writev. (line 44114) * profil: profil. (line 45047) * progname: progname and getprogname. (line 48512) * program_invocation_name: program_invocation_name. (line 33065) * program_invocation_short_name: program_invocation_short_name. (line 33080) * program_name: progname and getprogname. (line 48512) * pselect: pselect. (line 21315) * psiginfo: psiginfo. (line 21337) * psignal: psignal. (line 21351) * pthread_atfork: pthread_atfork. (line 21364) * pthread_attr_destroy: pthread_attr_destroy. (line 21377) * pthread_attr_getaffinity_np: pthread_attr_getaffinity_np. (line 36468) * pthread_attr_getdetachstate: pthread_attr_getdetachstate. (line 21391) * pthread_attr_getguardsize: pthread_attr_getguardsize. (line 21405) * pthread_attr_getinheritsched: pthread_attr_getinheritsched. (line 21418) * pthread_attr_getschedparam: pthread_attr_getschedparam. (line 21431) * pthread_attr_getschedpolicy: pthread_attr_getschedpolicy. (line 21444) * pthread_attr_getscope: pthread_attr_getscope. (line 21457) * pthread_attr_getsigmask_np: pthread_attr_getsigmask_np. (line 36502) * pthread_attr_getstack: pthread_attr_getstack. (line 21470) * pthread_attr_getstackaddr: pthread_attr_getstackaddr. (line 31082) * pthread_attr_getstacksize: pthread_attr_getstacksize. (line 21483) * pthread_attr_init: pthread_attr_init. (line 21496) * pthread_attr_setaffinity_np: pthread_attr_setaffinity_np. (line 36485) * pthread_attr_setdetachstate: pthread_attr_setdetachstate. (line 21512) * pthread_attr_setguardsize: pthread_attr_setguardsize. (line 21526) * pthread_attr_setinheritsched: pthread_attr_setinheritsched. (line 21539) * pthread_attr_setschedparam: pthread_attr_setschedparam. (line 21552) * pthread_attr_setschedpolicy: pthread_attr_setschedpolicy. (line 21565) * pthread_attr_setscope: pthread_attr_setscope. (line 21578) * pthread_attr_setsigmask_np: pthread_attr_setsigmask_np. (line 36518) * pthread_attr_setstack: pthread_attr_setstack. (line 21591) * pthread_attr_setstackaddr: pthread_attr_setstackaddr. (line 31096) * pthread_attr_setstacksize: pthread_attr_setstacksize. (line 21604) * pthread_barrierattr_destroy: pthread_barrierattr_destroy. (line 21659) * pthread_barrierattr_getpshared: pthread_barrierattr_getpshared. (line 21673) * pthread_barrierattr_init: pthread_barrierattr_init. (line 21688) * pthread_barrierattr_setpshared: pthread_barrierattr_setpshared. (line 21702) * pthread_barrier_destroy: pthread_barrier_destroy. (line 21617) * pthread_barrier_init: pthread_barrier_init. (line 21631) * pthread_barrier_wait: pthread_barrier_wait. (line 21645) * pthread_cancel: pthread_cancel. (line 21716) * pthread_cleanup_pop: pthread_cleanup_pop. (line 21729) * pthread_cleanup_push: pthread_cleanup_push. (line 21743) * pthread_clockjoin_np: pthread_clockjoin_np. (line 36534) * pthread_condattr_destroy: pthread_condattr_destroy. (line 21841) * pthread_condattr_getclock: pthread_condattr_getclock. (line 21855) * pthread_condattr_getpshared: pthread_condattr_getpshared. (line 21869) * pthread_condattr_init: pthread_condattr_init. (line 21882) * pthread_condattr_setclock: pthread_condattr_setclock. (line 21896) * pthread_condattr_setpshared: pthread_condattr_setpshared. (line 21910) * pthread_cond_broadcast: pthread_cond_broadcast. (line 21757) * pthread_cond_clockwait: pthread_cond_clockwait. (line 36549) * pthread_cond_destroy: pthread_cond_destroy. (line 21771) * pthread_cond_init: pthread_cond_init. (line 21785) * pthread_cond_signal: pthread_cond_signal. (line 21799) * pthread_cond_timedwait: pthread_cond_timedwait. (line 21813) * pthread_cond_wait: pthread_cond_wait. (line 21827) * pthread_create: pthread_create. (line 21923) * pthread_detach: pthread_detach. (line 21944) * pthread_equal: pthread_equal. (line 21958) * pthread_exit: pthread_exit. (line 21972) * pthread_getaffinity_np: pthread_getaffinity_np. (line 36566) * pthread_getattr_default_np: pthread_getattr_default_np. (line 36585) * pthread_getattr_np: pthread_getattr_np. (line 36602) * pthread_getconcurrency: pthread_getconcurrency. (line 21986) * pthread_getcpuclockid: pthread_getcpuclockid. (line 22001) * pthread_getname_np: pthread_getname_np. (line 36619) * pthread_getschedparam: pthread_getschedparam. (line 22015) * pthread_getspecific: pthread_getspecific. (line 22028) * pthread_join: pthread_join. (line 22042) * pthread_key_create: pthread_key_create. (line 22056) * pthread_key_delete: pthread_key_delete. (line 22070) * pthread_kill: pthread_kill. (line 22084) * pthread_kill_other_threads_np: pthread_kill_other_threads_np. (line 36634) * pthread_mutexattr_destroy: pthread_mutexattr_destroy. (line 22223) * pthread_mutexattr_getprioceiling: pthread_mutexattr_getprioceiling. (line 22237) * pthread_mutexattr_getprotocol: pthread_mutexattr_getprotocol. (line 22250) * pthread_mutexattr_getpshared: pthread_mutexattr_getpshared. (line 22263) * pthread_mutexattr_getrobust: pthread_mutexattr_getrobust. (line 22276) * pthread_mutexattr_gettype: pthread_mutexattr_gettype. (line 22291) * pthread_mutexattr_init: pthread_mutexattr_init. (line 22305) * pthread_mutexattr_setprioceiling: pthread_mutexattr_setprioceiling. (line 22319) * pthread_mutexattr_setprotocol: pthread_mutexattr_setprotocol. (line 22332) * pthread_mutexattr_setpshared: pthread_mutexattr_setpshared. (line 22345) * pthread_mutexattr_setrobust: pthread_mutexattr_setrobust. (line 22358) * pthread_mutexattr_settype: pthread_mutexattr_settype. (line 22373) * pthread_mutex_clocklock: pthread_mutex_clocklock. (line 36648) * pthread_mutex_consistent: pthread_mutex_consistent. (line 22097) * pthread_mutex_destroy: pthread_mutex_destroy. (line 22111) * pthread_mutex_getprioceiling: pthread_mutex_getprioceiling. (line 22125) * pthread_mutex_init: pthread_mutex_init. (line 22138) * pthread_mutex_lock: pthread_mutex_lock. (line 22152) * pthread_mutex_setprioceiling: pthread_mutex_setprioceiling. (line 22166) * pthread_mutex_timedlock: pthread_mutex_timedlock. (line 22179) * pthread_mutex_trylock: pthread_mutex_trylock. (line 22195) * pthread_mutex_unlock: pthread_mutex_unlock. (line 22209) * pthread_once: pthread_once. (line 22387) * pthread_rwlockattr_destroy: pthread_rwlockattr_destroy. (line 22550) * pthread_rwlockattr_getkind_np: pthread_rwlockattr_getkind_np. (line 36695) * pthread_rwlockattr_getpshared: pthread_rwlockattr_getpshared. (line 22564) * pthread_rwlockattr_init: pthread_rwlockattr_init. (line 22577) * pthread_rwlockattr_setkind_np: pthread_rwlockattr_setkind_np. (line 36712) * pthread_rwlockattr_setpshared: pthread_rwlockattr_setpshared. (line 22591) * pthread_rwlock_clockrdlock: pthread_rwlock_clockrdlock. (line 36661) * pthread_rwlock_clockwrlock: pthread_rwlock_clockwrlock. (line 36678) * pthread_rwlock_destroy: pthread_rwlock_destroy. (line 22403) * pthread_rwlock_init: pthread_rwlock_init. (line 22417) * pthread_rwlock_rdlock: pthread_rwlock_rdlock. (line 22431) * pthread_rwlock_timedrdlock: pthread_rwlock_timedrdlock. (line 22452) * pthread_rwlock_timedwrlock: pthread_rwlock_timedwrlock. (line 22473) * pthread_rwlock_tryrdlock: pthread_rwlock_tryrdlock. (line 22489) * pthread_rwlock_trywrlock: pthread_rwlock_trywrlock. (line 22508) * pthread_rwlock_unlock: pthread_rwlock_unlock. (line 22522) * pthread_rwlock_wrlock: pthread_rwlock_wrlock. (line 22536) * pthread_self: pthread_self. (line 22604) * pthread_setaffinity_np: pthread_setaffinity_np. (line 36729) * pthread_setattr_default_np: pthread_setattr_default_np. (line 36748) * pthread_setcancelstate: pthread_setcancelstate. (line 22618) * pthread_setcanceltype: pthread_setcanceltype. (line 22631) * pthread_setconcurrency: pthread_setconcurrency. (line 22644) * pthread_setname_np: pthread_setname_np. (line 36765) * pthread_setschedparam: pthread_setschedparam. (line 22659) * pthread_setschedprio: pthread_setschedprio. (line 22672) * pthread_setspecific: pthread_setspecific. (line 22686) * pthread_sigmask: pthread_sigmask. (line 22700) * pthread_sigqueue: pthread_sigqueue. (line 36782) * pthread_spin_destroy: pthread_spin_destroy. (line 22724) * pthread_spin_init: pthread_spin_init. (line 22740) * pthread_spin_lock: pthread_spin_lock. (line 22756) * pthread_spin_trylock: pthread_spin_trylock. (line 22772) * pthread_spin_unlock: pthread_spin_unlock. (line 22788) * pthread_testcancel: pthread_testcancel. (line 22804) * pthread_timedjoin_np: pthread_timedjoin_np. (line 36797) * pthread_tryjoin_np: pthread_tryjoin_np. (line 36814) * ptrace: ptrace. (line 43226) * ptsname: ptsname. (line 22817) * ptsname_r: ptsname_r. (line 41789) * putc: putc. (line 22839) * putchar: putchar. (line 22883) * putchar_unlocked: putchar_unlocked. (line 22909) * putc_unlocked: putc_unlocked. (line 22865) * putenv: putenv. (line 22927) * putgrent: putgrent. (line 33807) * putmsg: putmsg. (line 22949) * putpmsg: putpmsg. (line 22963) * putpwent: putpwent. (line 36947) * puts: puts. (line 22977) * putsgent: putsgent. (line 33931) * putspent: putspent. (line 40607) * pututline: pututline. (line 45378) * pututxline: pututxline. (line 23003) * putw: putw. (line 41270) * putwc: putwc. (line 23016) * putwchar: putwchar. (line 23034) * putwchar_unlocked: putwchar_unlocked. (line 45707) * putwc_unlocked: putwc_unlocked. (line 45687) * pvalloc: pvalloc. (line 34366) * pwrite: pwrite. (line 23052) * pwritev: pwritev. (line 44129) * pwritev2: pwritev2. (line 44147) * qecvt: qecvt. (line 41818) * qecvt_r: qecvt_r. (line 41834) * qfcvt: qfcvt. (line 41850) * qfcvt_r: qfcvt_r. (line 41866) * qgcvt: qgcvt. (line 41882) * qsort: qsort. (line 23073) * qsort_r: qsort_r. (line 41898) * quick_exit: quick_exit. (line 23084) * quotactl: quotactl. (line 43246) * quote: Quoting. (line 48483) * quotearg: Quoting. (line 48483) * quotearg_alloc: Quoting. (line 48502) * quote_n: Quoting. (line 48498) * Quoting: Quoting. (line 48483) * raise: raise. (line 23096) * rand: rand. (line 23110) * random: random. (line 23142) * random_r: random_r. (line 41914) * rand_r: rand_r. (line 23127) * range argument to re_search: GNU Searching. (line 50178) * rawmemchr: rawmemchr. (line 42327) * rcmd: rcmd. (line 35639) * rcmd_af: rcmd_af. (line 35652) * read: read. (line 23164) * readahead: readahead. (line 33293) * readdir: readdir. (line 23190) * readdir_r: readdir_r. (line 23215) * readlink: readlink. (line 23238) * readlinkat: readlinkat. (line 23281) * readv: readv. (line 23329) * realloc: realloc. (line 23341) * REALLOC_N: Safe Allocation Macros. (line 47178) * realpath: realpath. (line 23378) * reboot: reboot. (line 43345) * recv: recv. (line 23405) * recvfrom: recvfrom. (line 23419) * recvmmsg: recvmmsg. (line 43494) * recvmsg: recvmsg. (line 23440) * regcomp: regcomp. (line 23452) * regerror: regerror. (line 23465) * regex.h: Overview. (line 48984) * regexec: regexec. (line 23477) * regexp anchoring: Anchoring Operators. (line 49865) * regfree: regfree. (line 23493) * regfree <1>: Freeing GNU Pattern Buffers. (line 50488) * register_printf_function: register_printf_function. (line 36414) * register_printf_modifier: register_printf_modifier. (line 36428) * register_printf_specifier: register_printf_specifier. (line 36440) * register_printf_type: register_printf_type. (line 36452) * regular expressions, syntax of: Regular Expression Syntax. (line 48998) * remainder: remainder. (line 23505) * remainderf: remainderf. (line 23520) * remainderl: remainderl. (line 23536) * remap_file_pages: remap_file_pages. (line 43109) * remove: remove. (line 23558) * removexattr: removexattr. (line 44384) * remque: remque. (line 23575) * remquo: remquo. (line 23588) * remquof: remquof. (line 23601) * remquol: remquol. (line 23615) * rename: rename. (line 23629) * renameat: renameat. (line 23683) * renameat2: renameat2. (line 41283) * res_dnok: res_dnok. (line 37196) * res_hnok: res_hnok. (line 37210) * res_init: res_init. (line 37224) * res_mailok: res_mailok. (line 37237) * res_mkquery: res_mkquery. (line 37251) * res_nmkquery: res_nmkquery. (line 37264) * res_nquery: res_nquery. (line 37278) * res_nquerydomain: res_nquerydomain. (line 37292) * res_nsearch: res_nsearch. (line 37306) * res_nsend: res_nsend. (line 37320) * res_ownok: res_ownok. (line 37334) * res_query: res_query. (line 37348) * res_querydomain: res_querydomain. (line 37361) * res_search: res_search. (line 37374) * res_send: res_send. (line 37387) * revoke: revoke. (line 45060) * rewind: rewind. (line 23729) * rewinddir: rewinddir. (line 23742) * rexec: rexec. (line 35665) * rexec_af: rexec_af. (line 35679) * RE_BACKSLASH_ESCAPE_IN_LIST: Syntax Bits. (line 49042) * RE_BK_PLUS_QM: Syntax Bits. (line 49049) * RE_CHAR_CLASSES: Syntax Bits. (line 49056) * re_comp: re_comp. (line 36966) * re_comp <1>: BSD Regular Expression Compiling. (line 50518) * re_compile_fastmap: re_compile_fastmap. (line 36980) * re_compile_fastmap <1>: Searching with Fastmaps. (line 50265) * re_compile_pattern: re_compile_pattern. (line 36991) * re_compile_pattern <1>: GNU Regular Expression Compiling. (line 50101) * RE_CONTEXT_INDEP_ANCHORS: Syntax Bits. (line 49060) * RE_CONTEXT_INDEP_ANCHORS (and ^): Match-beginning-of-line Operator. (line 49881) * RE_CONTEXT_INDEP_OPS: Syntax Bits. (line 49066) * RE_CONTEXT_INVALID_DUP: Syntax Bits. (line 49079) * RE_CONTEXT_INVALID_OPS: Syntax Bits. (line 49084) * RE_DEBUG: Syntax Bits. (line 49102) * RE_DOT_NEWLINE: Syntax Bits. (line 49107) * RE_DOT_NOT_NULL: Syntax Bits. (line 49111) * re_exec: re_exec. (line 37002) * re_exec <1>: BSD Searching. (line 50543) * RE_HAT_LISTS_NOT_NEWLINE: Syntax Bits. (line 49115) * RE_ICASE: Syntax Bits. (line 49119) * RE_INTERVALS: Syntax Bits. (line 49123) * RE_INVALID_INTERVAL_ORD: Syntax Bits. (line 49127) * RE_LIMITED_OPS: Syntax Bits. (line 49132) * re_match: re_match. (line 37016) * re_match <1>: GNU Matching. (line 50133) * re_match_2: re_match_2. (line 37027) * re_match_2 <1>: Matching/Searching with Split Data. (line 50210) * RE_NEWLINE_ALT: Syntax Bits. (line 49137) * RE_NO_BK_BRACES: Syntax Bits. (line 49141) * RE_NO_BK_PARENS: Syntax Bits. (line 49148) * RE_NO_BK_REFS: Syntax Bits. (line 49154) * RE_NO_BK_VBAR: Syntax Bits. (line 49158) * RE_NO_EMPTY_RANGES: Syntax Bits. (line 49163) * RE_NO_GNU_OPS: Syntax Bits. (line 49168) * RE_NO_POSIX_BACKTRACKING: Syntax Bits. (line 49172) * RE_NO_SUB: Syntax Bits. (line 49178) * re_nsub field, set by re_compile_pattern: GNU Regular Expression Compiling. (line 50119) * re_pattern_buffer definition: GNU Pattern Buffers. (line 50034) * re_registers: Using Registers. (line 50344) * re_search: re_search. (line 37038) * re_search <1>: GNU Searching. (line 50172) * re_search_2: re_search_2. (line 37049) * re_search_2 <1>: Matching/Searching with Split Data. (line 50228) * re_set_registers: re_set_registers. (line 37060) * re_set_registers <1>: Using Registers. (line 50369) * re_set_syntax: re_set_syntax. (line 37071) * re_syntax_options: re_syntax_options. (line 37082) * re_syntax_options initialization: GNU Regular Expression Compiling. (line 50065) * RE_UNMATCHED_RIGHT_PAREN_ORD: Syntax Bits. (line 49183) * rindex: rindex. (line 31110) * rint: rint. (line 23757) * rintf: rintf. (line 23769) * rintl: rintl. (line 23782) * rmdir: rmdir. (line 23798) * round: round. (line 23821) * roundeven: roundeven. (line 23842) * roundevenf: roundevenf. (line 23857) * roundevenl: roundevenl. (line 23872) * roundf: roundf. (line 23887) * roundl: roundl. (line 23908) * rpc_createerr: rpc_createerr. (line 37911) * rpmatch: rpmatch. (line 41936) * rresvport: rresvport. (line 35693) * rresvport_af: rresvport_af. (line 35706) * rtime: rtime. (line 37683) * ruserok: ruserok. (line 35719) * ruserok_af: ruserok_af. (line 35732) * sbrk: sbrk. (line 45070) * scalb: scalb. (line 31125) * scalbf: scalbf. (line 34890) * scalbl: scalbl. (line 34907) * scalbln: scalbln. (line 23928) * scalblnf: scalblnf. (line 23942) * scalblnl: scalblnl. (line 23956) * scalbn: scalbn. (line 23970) * scalbnf: scalbnf. (line 23982) * scalbnl: scalbnl. (line 23995) * scandir: scandir. (line 24009) * scandirat: scandirat. (line 32708) * scanf: scanf. (line 24031) * sched_getaffinity: sched_getaffinity. (line 40231) * sched_getcpu: sched_getcpu. (line 40249) * sched_getparam: sched_getparam. (line 24085) * sched_getscheduler: sched_getscheduler. (line 24098) * sched_get_priority_max: sched_get_priority_max. (line 24059) * sched_get_priority_min: sched_get_priority_min. (line 24072) * sched_rr_get_interval: sched_rr_get_interval. (line 24111) * sched_setaffinity: sched_setaffinity. (line 40264) * sched_setparam: sched_setparam. (line 24124) * sched_setscheduler: sched_setscheduler. (line 24137) * sched_yield: sched_yield. (line 24153) * searching with GNU functions: GNU Searching. (line 50164) * secure_getenv: secure_getenv. (line 41951) * seed48: seed48. (line 24167) * seed48_r: seed48_r. (line 41967) * seekdir: seekdir. (line 24180) * select: select. (line 24195) * semctl: semctl. (line 24358) * semget: semget. (line 24371) * semop: semop. (line 24384) * semtimedop: semtimedop. (line 43381) * sem_clockwait: sem_clockwait. (line 40474) * sem_close: sem_close. (line 24224) * sem_destroy: sem_destroy. (line 24237) * sem_getvalue: sem_getvalue. (line 24251) * sem_init: sem_init. (line 24265) * sem_open: sem_open. (line 24279) * sem_post: sem_post. (line 24292) * sem_timedwait: sem_timedwait. (line 24305) * sem_trywait: sem_trywait. (line 24319) * sem_unlink: sem_unlink. (line 24332) * sem_wait: sem_wait. (line 24345) * send: send. (line 24397) * sendfile: sendfile. (line 43400) * sendmmsg: sendmmsg. (line 43509) * sendmsg: sendmsg. (line 24411) * sendto: sendto. (line 24423) * setaliasent: setaliasent. (line 32042) * setbuf: setbuf. (line 24437) * setbuffer: setbuffer. (line 41303) * setcontext: setcontext. (line 31136) * setdomainname: setdomainname. (line 45093) * setegid: setegid. (line 24448) * setenv: setenv. (line 24461) * seteuid: seteuid. (line 24482) * setfsent: setfsent. (line 33480) * setfsgid: setfsgid. (line 42764) * setfsuid: setfsuid. (line 42779) * setgid: setgid. (line 24495) * setgrent: setgrent. (line 24507) * setgroups: setgroups. (line 33821) * sethostent: sethostent. (line 24520) * sethostid: sethostid. (line 45107) * sethostname: sethostname. (line 45121) * setipv4sourcefilter: setipv4sourcefilter. (line 36134) * setitimer: setitimer. (line 24533) * setjmp: setjmp. (line 24548) * setkey: setkey. (line 24567) * setlinebuf: setlinebuf. (line 41321) * setlocale: setlocale. (line 24584) * setlogin: setlogin. (line 45083) * setlogmask: setlogmask. (line 24631) * setmntent: setmntent. (line 35308) * setnetent: setnetent. (line 24644) * setnetgrent: setnetgrent. (line 35746) * setns: setns. (line 40282) * setpayload: setpayload. (line 24657) * setpayloadf: setpayloadf. (line 24673) * setpayloadl: setpayloadl. (line 24689) * setpayloadsig: setpayloadsig. (line 24705) * setpayloadsigf: setpayloadsigf. (line 24721) * setpayloadsigl: setpayloadsigl. (line 24737) * setpgid: setpgid. (line 24753) * setpgrp: setpgrp. (line 24766) * setpriority: setpriority. (line 24781) * setprotoent: setprotoent. (line 24793) * setpwent: setpwent. (line 24806) * setregid: setregid. (line 24819) * setresgid: setresgid. (line 45148) * setresuid: setresuid. (line 45165) * setreuid: setreuid. (line 24832) * setrlimit: setrlimit. (line 24845) * setrpcent: setrpcent. (line 38133) * setservent: setservent. (line 24864) * setsgent: setsgent. (line 33943) * setsid: setsid. (line 24876) * setsockopt: setsockopt. (line 24888) * setsourcefilter: setsourcefilter. (line 36145) * setspent: setspent. (line 40621) * setstate: setstate. (line 24906) * setstate_r: setstate_r. (line 41985) * settimeofday: settimeofday. (line 43931) * setttyent: setttyent. (line 44597) * setuid: setuid. (line 24924) * setusershell: setusershell. (line 45182) * setutent: setutent. (line 45393) * setutxent: setutxent. (line 24936) * setvbuf: setvbuf. (line 24949) * setxattr: setxattr. (line 44398) * sgetsgent: sgetsgent. (line 33955) * sgetsgent_r: sgetsgent_r. (line 33967) * sgetspent: sgetspent. (line 40635) * sgetspent_r: sgetspent_r. (line 40649) * shmat: shmat. (line 24991) * shmctl: shmctl. (line 25007) * shmdt: shmdt. (line 25020) * shmget: shmget. (line 25033) * shm_open: shm_open. (line 24965) * shm_unlink: shm_unlink. (line 24978) * shutdown: shutdown. (line 25049) * sigabbrev_np: sigabbrev_np. (line 42342) * sigaction: sigaction. (line 25063) * sigaddset: sigaddset. (line 25103) * sigaltstack: sigaltstack. (line 25118) * sigandset: sigandset. (line 40696) * sigblock: sigblock. (line 40713) * sigdelset: sigdelset. (line 25133) * sigdescr_np: sigdescr_np. (line 42361) * sigemptyset: sigemptyset. (line 25148) * sigfillset: sigfillset. (line 25163) * siggetmask: siggetmask. (line 40727) * sighold: sighold. (line 25178) * sigignore: sigignore. (line 25193) * siginterrupt: siginterrupt. (line 25208) * sigisemptyset: sigisemptyset. (line 40741) * sigismember: sigismember. (line 25226) * siglongjmp: siglongjmp. (line 25241) * signal: signal. (line 25256) * signalfd: signalfd. (line 43424) * signbit: signbit. (line 25279) * signgam: signgam. (line 25292) * significand: significand. (line 34925) * significandf: significandf. (line 34942) * significandl: significandl. (line 34959) * sigorset: sigorset. (line 40758) * sigpause: sigpause. (line 25305) * sigpending: sigpending. (line 25323) * sigprocmask: sigprocmask. (line 25335) * sigqueue: sigqueue. (line 25356) * sigrelse: sigrelse. (line 25370) * sigreturn: sigreturn. (line 40775) * sigset: sigset. (line 25385) * sigsetjmp: sigsetjmp. (line 25400) * sigsetmask: sigsetmask. (line 40792) * sigstack: sigstack. (line 40806) * sigsuspend: sigsuspend. (line 25413) * sigtimedwait: sigtimedwait. (line 25425) * sigvec: sigvec. (line 40821) * sigwait: sigwait. (line 25440) * sigwaitinfo: sigwaitinfo. (line 25459) * sin: sin. (line 25472) * sincos: sincos. (line 34977) * sincosf: sincosf. (line 34995) * sincosl: sincosl. (line 35013) * sinf: sinf. (line 25483) * sinh: sinh. (line 25498) * sinhf: sinhf. (line 25509) * sinhl: sinhl. (line 25524) * sinl: sinl. (line 25542) * sleep: sleep. (line 25560) * snprintf: snprintf. (line 25580) * sockatmark: sockatmark. (line 25671) * socket: socket. (line 25685) * socketpair: socketpair. (line 25703) * specification: Specification. (line 5088) * sprintf: sprintf. (line 25715) * sprofil: sprofil. (line 43211) * sqrt: sqrt. (line 25798) * sqrtf: sqrtf. (line 25809) * sqrtl: sqrtl. (line 25824) * srand: srand. (line 25842) * srand48: srand48. (line 25857) * srand48_r: srand48_r. (line 42007) * srandom: srandom. (line 25870) * srandom_r: srandom_r. (line 42025) * sscanf: sscanf. (line 25891) * ssignal: ssignal. (line 40834) * start argument to re_search: GNU Searching. (line 50178) * start in struct re_registers: Using Registers. (line 50344) * stat: stat. (line 25909) * statfs: statfs. (line 43608) * static inline: static inline. (line 47829) * statvfs: statvfs. (line 25956) * statx: statx. (line 43567) * stdc_bit_ceil: stdc_bit_ceil. (line 25979) * stdc_bit_floor: stdc_bit_floor. (line 25995) * stdc_bit_width: stdc_bit_width. (line 26011) * stdc_count_ones: stdc_count_ones. (line 26027) * stdc_count_zeros: stdc_count_zeros. (line 26043) * stdc_first_leading_one: stdc_first_leading_one. (line 26059) * stdc_first_leading_zero: stdc_first_leading_zero. (line 26075) * stdc_first_trailing_one: stdc_first_trailing_one. (line 26091) * stdc_first_trailing_zero: stdc_first_trailing_zero. (line 26107) * stdc_has_single_bit: stdc_has_single_bit. (line 26123) * stdc_leading_ones: stdc_leading_ones. (line 26139) * stdc_leading_zeros: stdc_leading_zeros. (line 26155) * stdc_trailing_ones: stdc_trailing_ones. (line 26171) * stdc_trailing_zeros: stdc_trailing_zeros. (line 26187) * stderr: stderr. (line 26203) * stdin: stdin. (line 26224) * stdlib-safer: Closed standard fds. (line 47905) * stdnoreturn: Non-returning Functions. (line 47321) * stdopen: Closed standard fds. (line 47905) * stdout: stdout. (line 26245) * step: step. (line 37141) * stime: stime. (line 44496) * stpcpy: stpcpy. (line 26266) * stpncpy: stpncpy. (line 26282) * STP_BLKSIZE: stat-size. (line 48944) * STP_NBLOCKS: stat-size. (line 48938) * strcasecmp: strcasecmp. (line 26300) * strcasecmp_l: strcasecmp_l. (line 26316) * strcasestr: strcasestr. (line 42383) * strcat: strcat. (line 26330) * strchr: strchr. (line 26343) * strchrnul: strchrnul. (line 42412) * strcmp: strcmp. (line 26357) * strcoll: strcoll. (line 26368) * strcoll_l: strcoll_l. (line 26382) * strcpy: strcpy. (line 26396) * strcspn: strcspn. (line 26412) * strdup: strdup. (line 26427) * strerror: strerror. (line 26445) * strerrordesc_np: strerrordesc_np. (line 42429) * strerrorname_np: strerrorname_np. (line 42444) * strerror_l: strerror_l. (line 26468) * strerror_r: strerror_r. (line 26482) * strfmon: strfmon. (line 26543) * strfmon_l: strfmon_l. (line 26556) * strfromd: strfromd. (line 26574) * strfromf: strfromf. (line 26590) * strfroml: strfroml. (line 26606) * strfry: strfry. (line 42460) * strftime: strftime. (line 26622) * strftime_l: strftime_l. (line 26660) * strlen: strlen. (line 26674) * strncasecmp: strncasecmp. (line 26685) * strncasecmp_l: strncasecmp_l. (line 26701) * strncat: strncat. (line 26715) * strncmp: strncmp. (line 26730) * strncpy: strncpy. (line 26741) * strndup: strndup. (line 26764) * strnlen: strnlen. (line 26780) * strpbrk: strpbrk. (line 26793) * strptime: strptime. (line 26808) * strptime_l: strptime_l. (line 44514) * strrchr: strrchr. (line 26823) * strsep: strsep. (line 42475) * strsignal: strsignal. (line 26837) * strspn: strspn. (line 26858) * strstr: strstr. (line 26872) * strtod: strtod. (line 26899) * strtod_l: strtod_l. (line 42043) * strtof: strtof. (line 26960) * strtof_l: strtof_l. (line 42054) * strtoimax: strtoimax. (line 26991) * strtok: strtok. (line 27008) * strtok_r: strtok_r. (line 27019) * strtol: strtol. (line 27036) * strtold: strtold. (line 27053) * strtold_l: strtold_l. (line 42076) * strtoll: strtoll. (line 27096) * strtoll_l: strtoll_l. (line 42087) * strtol_l: strtol_l. (line 42065) * strtoq: strtoq. (line 42098) * strtoul: strtoul. (line 27113) * strtoull: strtoull. (line 27130) * strtoull_l: strtoull_l. (line 42127) * strtoul_l: strtoul_l. (line 42116) * strtoumax: strtoumax. (line 27147) * strtouq: strtouq. (line 42138) * struct re_pattern_buffer definition: GNU Pattern Buffers. (line 50034) * strverscmp: strverscmp. (line 42492) * strxfrm: strxfrm. (line 27162) * strxfrm_l: strxfrm_l. (line 27174) * ST_BLKSIZE: stat-size. (line 48944) * ST_NBLOCKS: stat-size. (line 48938) * ST_NBLOCKSIZE: stat-size. (line 48938) * subexpressions: Grouping Operators. (line 49770) * svcerr_auth: svcerr_auth. (line 38487) * svcerr_decode: svcerr_decode. (line 38500) * svcerr_noproc: svcerr_noproc. (line 38513) * svcerr_noprog: svcerr_noprog. (line 38526) * svcerr_progvers: svcerr_progvers. (line 38539) * svcerr_systemerr: svcerr_systemerr. (line 38552) * svcerr_weakauth: svcerr_weakauth. (line 38565) * svcraw_create: svcraw_create. (line 38578) * svctcp_create: svctcp_create. (line 38591) * svcudp_bufcreate: svcudp_bufcreate. (line 38607) * svcudp_create: svcudp_create. (line 38620) * svcunix_create: svcunix_create. (line 38636) * svc_exit: svc_exit. (line 38338) * svc_fdset: svc_fdset. (line 38348) * svc_getreq: svc_getreq. (line 38358) * svc_getreqset: svc_getreqset. (line 38391) * svc_getreq_common: svc_getreq_common. (line 38371) * svc_getreq_poll: svc_getreq_poll. (line 38381) * svc_max_pollfd: svc_max_pollfd. (line 38404) * svc_pollfd: svc_pollfd. (line 38415) * svc_register: svc_register. (line 38426) * svc_run: svc_run. (line 38442) * svc_sendreply: svc_sendreply. (line 38458) * svc_unregister: svc_unregister. (line 38474) * swab: swab. (line 27188) * swapcontext: swapcontext. (line 31155) * swapoff: swapoff. (line 43632) * swapon: swapon. (line 43646) * swprintf: swprintf. (line 27200) * swscanf: swscanf. (line 27253) * symlink: symlink. (line 27271) * symlinkat: symlinkat. (line 27287) * sync: sync. (line 27309) * syncfs: syncfs. (line 45197) * sync_file_range: sync_file_range. (line 33323) * syntax bits: Syntax Bits. (line 49021) * syntax field, set by re_compile_pattern: GNU Regular Expression Compiling. (line 50116) * syntax initialization: GNU Regular Expression Compiling. (line 50065) * syntax of regular expressions: Regular Expression Syntax. (line 48998) * syscall: syscall. (line 45212) * sysconf: sysconf. (line 27321) * sysctl: sysctl. (line 43664) * sysinfo: sysinfo. (line 43750) * syslog: syslog. (line 27336) * system: system. (line 27348) * sysv_signal: sysv_signal. (line 40862) * sys_errlist: sys_errlist. (line 41336) * sys_nerr: sys_nerr. (line 41349) * sys_siglist: sys_siglist. (line 40849) * tan: tan. (line 27370) * tanf: tanf. (line 27381) * tanh: tanh. (line 27396) * tanhf: tanhf. (line 27407) * tanhl: tanhl. (line 27422) * tanl: tanl. (line 27440) * tcdrain: tcdrain. (line 27458) * tcflow: tcflow. (line 27474) * tcflush: tcflush. (line 27487) * tcgetattr: tcgetattr. (line 27505) * tcgetpgrp: tcgetpgrp. (line 27518) * tcgetsid: tcgetsid. (line 27531) * tcsendbreak: tcsendbreak. (line 27550) * tcsetattr: tcsetattr. (line 27563) * tcsetpgrp: tcsetpgrp. (line 27576) * tdelete: tdelete. (line 27589) * tdestroy: tdestroy. (line 40355) * telldir: telldir. (line 27604) * tempnam: tempnam. (line 27619) * tests modules, C++: Extra tests modules. (line 5580) * tests modules, long-running: Extra tests modules. (line 5580) * tests modules, privileged: Extra tests modules. (line 5580) * tests modules, unportable: Extra tests modules. (line 5580) * textdomain: textdomain. (line 34192) * tfind: tfind. (line 27635) * tgamma: tgamma. (line 27648) * tgammaf: tgammaf. (line 27661) * tgammal: tgammal. (line 27675) * tgkill: tgkill. (line 40877) * thrd_create: thrd_create. (line 27689) * thrd_current: thrd_current. (line 27706) * thrd_detach: thrd_detach. (line 27721) * thrd_equal: thrd_equal. (line 27736) * thrd_exit: thrd_exit. (line 27751) * thrd_join: thrd_join. (line 27768) * thrd_sleep: thrd_sleep. (line 27787) * thrd_yield: thrd_yield. (line 27802) * time: time. (line 27817) * timegm: timegm. (line 27835) * timelocal: timelocal. (line 44525) * timerfd_create: timerfd_create. (line 43948) * timerfd_gettime: timerfd_gettime. (line 43964) * timerfd_settime: timerfd_settime. (line 43980) * timer_create: timer_create. (line 27849) * timer_delete: timer_delete. (line 27863) * timer_getoverrun: timer_getoverrun. (line 27877) * timer_gettime: timer_gettime. (line 27890) * timer_settime: timer_settime. (line 27904) * times: times. (line 27918) * timespec_get: timespec_get. (line 44539) * timespec_getres: timespec_getres. (line 27933) * timezone: timezone. (line 27957) * tmpfile: tmpfile. (line 27976) * tmpfile-safer: Closed standard fds. (line 47905) * tmpnam: tmpnam. (line 27993) * tmpnam_r: tmpnam_r. (line 41362) * toascii: toascii. (line 28006) * tolower: tolower. (line 28021) * tolower_l: tolower_l. (line 28060) * totalorder: totalorder. (line 28074) * totalorderf: totalorderf. (line 28095) * totalorderl: totalorderl. (line 28116) * totalordermag: totalordermag. (line 28137) * totalordermagf: totalordermagf. (line 28155) * totalordermagl: totalordermagl. (line 28173) * toupper: toupper. (line 28191) * toupper_l: toupper_l. (line 28230) * towctrans: towctrans. (line 28244) * towctrans_l: towctrans_l. (line 28262) * towlower: towlower. (line 28278) * towlower_l: towlower_l. (line 28300) * towupper: towupper. (line 28316) * towupper_l: towupper_l. (line 28338) * translate initialization: GNU Regular Expression Compiling. (line 50080) * trunc: trunc. (line 28354) * truncate: truncate. (line 28372) * truncf: truncf. (line 28391) * truncl: truncl. (line 28410) * tsearch: tsearch. (line 28429) * tss_create: tss_create. (line 28442) * tss_delete: tss_delete. (line 28457) * tss_get: tss_get. (line 28472) * tss_set: tss_set. (line 28487) * ttyname: ttyname. (line 28502) * ttyname_r: ttyname_r. (line 28516) * ttyslot: ttyslot. (line 45226) * twalk: twalk. (line 28537) * twalk_r: twalk_r. (line 40370) * TYPE_IS_INTEGER: Arithmetic Type Properties. (line 47391) * TYPE_MAXIMUM: Integer Bounds. (line 47450) * TYPE_MINIMUM: Integer Bounds. (line 47450) * TYPE_SIGNED: Arithmetic Type Properties. (line 47395) * tzname: tzname. (line 28550) * tzset: tzset. (line 28569) * ualarm: ualarm. (line 31171) * ufromfp: ufromfp. (line 28593) * ufromfpf: ufromfpf. (line 28608) * ufromfpl: ufromfpl. (line 28623) * ufromfpx: ufromfpx. (line 28638) * ufromfpxf: ufromfpxf. (line 28653) * ufromfpxl: ufromfpxl. (line 28668) * ulckpwdf: ulckpwdf. (line 40663) * ulimit: ulimit. (line 28683) * umask: umask. (line 28698) * umount: umount. (line 43141) * umount2: umount2. (line 43155) * uname: uname. (line 28709) * ungetc: ungetc. (line 28721) * ungetwc: ungetwc. (line 28734) * unibyte locale: C strings. (line 46442) * unistd-safer: Closed standard fds. (line 47905) * unlink: unlink. (line 28749) * unlinkat: unlinkat. (line 28783) * unlockpt: unlockpt. (line 28825) * unportable tests modules: Extra tests modules. (line 5580) * unsetenv: unsetenv. (line 28840) * updwtmp: updwtmp. (line 45411) * updwtmpx: updwtmpx. (line 45535) * uselocale: uselocale. (line 28864) * user2netname: user2netname. (line 37612) * usleep: usleep. (line 31184) * ustat: ustat. (line 44167) * utime: utime. (line 28884) * utimensat: utimensat. (line 28910) * utimes: utimes. (line 28953) * utmpname: utmpname. (line 45427) * utmpxname: utmpxname. (line 45549) * valgrind: Running self-tests under valgrind. (line 51846) * valloc: valloc. (line 42156) * vasprintf: vasprintf. (line 41377) * va_arg: va_arg. (line 28985) * va_copy: va_copy. (line 29014) * va_end: va_end. (line 29027) * va_start: va_start. (line 29038) * VCS To ChangeLog: VCS To ChangeLog. (line 51990) * vcs-to-changelog: VCS To ChangeLog. (line 51990) * vdprintf: vdprintf. (line 29049) * verify: Compile-time Assertions. (line 47224) * verify_expr: Compile-time Assertions. (line 47224) * verr: verr. (line 32968) * verrx: verrx. (line 32982) * versionsort: versionsort. (line 32723) * vfork: vfork. (line 31200) * vfprintf: vfprintf. (line 29114) * vfscanf: vfscanf. (line 29212) * vfwprintf: vfwprintf. (line 29235) * vfwscanf: vfwscanf. (line 29271) * vhangup: vhangup. (line 45239) * vlimit: vlimit. (line 44185) * void: Safe Allocation Macros. (line 47187) * vprintf: vprintf. (line 29289) * vscanf: vscanf. (line 29387) * vsnprintf: vsnprintf. (line 29409) * vsprintf: vsprintf. (line 29501) * vsscanf: vsscanf. (line 29584) * vswprintf: vswprintf. (line 29603) * vswscanf: vswscanf. (line 29638) * vsyslog: vsyslog. (line 43773) * vwarn: vwarn. (line 32999) * vwarnx: vwarnx. (line 33013) * vwprintf: vwprintf. (line 29657) * vwscanf: vwscanf. (line 29695) * wait: wait. (line 29713) * wait3: wait3. (line 44204) * wait4: wait4. (line 44219) * waitid: waitid. (line 29725) * waitpid: waitpid. (line 29740) * warn: warn. (line 33027) * warnx: warnx. (line 33044) * wcpcpy: wcpcpy. (line 29755) * wcpncpy: wcpncpy. (line 29773) * wcrtomb: wcrtomb. (line 29791) * wcscasecmp: wcscasecmp. (line 29815) * wcscasecmp_l: wcscasecmp_l. (line 29831) * wcscat: wcscat. (line 29847) * wcschr: wcschr. (line 29860) * wcschrnul: wcschrnul. (line 45727) * wcscmp: wcscmp. (line 29873) * wcscoll: wcscoll. (line 29893) * wcscoll_l: wcscoll_l. (line 29907) * wcscpy: wcscpy. (line 29923) * wcscspn: wcscspn. (line 29940) * wcsdup: wcsdup. (line 29953) * wcsftime: wcsftime. (line 29968) * wcsftime_l: wcsftime_l. (line 45743) * wcslen: wcslen. (line 29988) * wcsncasecmp: wcsncasecmp. (line 30001) * wcsncasecmp_l: wcsncasecmp_l. (line 30017) * wcsncat: wcsncat. (line 30033) * wcsncmp: wcsncmp. (line 30046) * wcsncpy: wcsncpy. (line 30065) * wcsnlen: wcsnlen. (line 30089) * wcsnrtombs: wcsnrtombs. (line 30105) * wcspbrk: wcspbrk. (line 30128) * wcsrchr: wcsrchr. (line 30141) * wcsrtombs: wcsrtombs. (line 30154) * wcsspn: wcsspn. (line 30176) * wcsstr: wcsstr. (line 30189) * wcstod: wcstod. (line 30210) * wcstod_l: wcstod_l. (line 45756) * wcstof: wcstof. (line 30225) * wcstof_l: wcstof_l. (line 45769) * wcstoimax: wcstoimax. (line 30241) * wcstok: wcstok. (line 30257) * wcstol: wcstol. (line 30277) * wcstold: wcstold. (line 30292) * wcstold_l: wcstold_l. (line 45795) * wcstoll: wcstoll. (line 30308) * wcstoll_l: wcstoll_l. (line 45808) * wcstol_l: wcstol_l. (line 45782) * wcstombs: wcstombs. (line 30323) * wcstoq: wcstoq. (line 45821) * wcstoul: wcstoul. (line 30339) * wcstoull: wcstoull. (line 30354) * wcstoull_l: wcstoull_l. (line 45853) * wcstoul_l: wcstoul_l. (line 45840) * wcstoumax: wcstoumax. (line 30369) * wcstouq: wcstouq. (line 45866) * wcswcs: wcswcs. (line 31212) * wcswidth: wcswidth. (line 30385) * wcsxfrm: wcsxfrm. (line 30403) * wcsxfrm_l: wcsxfrm_l. (line 30418) * wctob: wctob. (line 30434) * wctomb: wctomb. (line 30455) * wctrans: wctrans. (line 30469) * wctrans_l: wctrans_l. (line 30491) * wctype: wctype. (line 30507) * wctype_l: wctype_l. (line 30534) * wcwidth: wcwidth. (line 30550) * wmemchr: wmemchr. (line 30577) * wmemcmp: wmemcmp. (line 30591) * wmemcpy: wmemcpy. (line 30609) * wmemmove: wmemmove. (line 30623) * wmempcpy: wmempcpy. (line 45885) * wmemset: wmemset. (line 30637) * word boundaries, matching: Match-word-boundary Operator. (line 49932) * wordexp: wordexp. (line 30651) * wordfree: wordfree. (line 30667) * wprintf: wprintf. (line 30680) * wraparound integer arithmetic: Wraparound Arithmetic. (line 47546) * write: write. (line 30718) * writev: writev. (line 30755) * wscanf: wscanf. (line 30767) * xalloc_die: Out of memory handling. (line 5542) * xdrmem_create: xdrmem_create. (line 39156) * xdrrec_create: xdrrec_create. (line 39169) * xdrrec_endofrecord: xdrrec_endofrecord. (line 39182) * xdrrec_eof: xdrrec_eof. (line 39195) * xdrrec_skiprecord: xdrrec_skiprecord. (line 39208) * xdrstdio_create: xdrstdio_create. (line 39221) * xdr_array: xdr_array. (line 38677) * xdr_authunix_parms: xdr_authunix_parms. (line 37701) * xdr_bool: xdr_bool. (line 38690) * xdr_bytes: xdr_bytes. (line 38703) * xdr_callhdr: xdr_callhdr. (line 38295) * xdr_callmsg: xdr_callmsg. (line 38308) * xdr_cback_data: xdr_cback_data. (line 39850) * xdr_char: xdr_char. (line 38716) * xdr_cryptkeyarg: xdr_cryptkeyarg. (line 37925) * xdr_cryptkeyarg2: xdr_cryptkeyarg2. (line 37936) * xdr_cryptkeyres: xdr_cryptkeyres. (line 37947) * xdr_des_block: xdr_des_block. (line 37623) * xdr_domainname: xdr_domainname. (line 39876) * xdr_double: xdr_double. (line 38729) * xdr_enum: xdr_enum. (line 38742) * xdr_float: xdr_float. (line 38755) * xdr_free: xdr_free. (line 38768) * xdr_getcredres: xdr_getcredres. (line 37958) * xdr_hyper: xdr_hyper. (line 38781) * xdr_int: xdr_int. (line 38791) * xdr_int16_t: xdr_int16_t. (line 38804) * xdr_int32_t: xdr_int32_t. (line 38814) * xdr_int64_t: xdr_int64_t. (line 38824) * xdr_int8_t: xdr_int8_t. (line 38835) * xdr_keybuf: xdr_keybuf. (line 37991) * xdr_keydat: xdr_keydat. (line 39886) * xdr_keystatus: xdr_keystatus. (line 38002) * xdr_key_netstarg: xdr_key_netstarg. (line 37969) * xdr_key_netstres: xdr_key_netstres. (line 37980) * xdr_long: xdr_long. (line 38846) * xdr_longlong_t: xdr_longlong_t. (line 38859) * xdr_netnamestr: xdr_netnamestr. (line 38013) * xdr_netobj: xdr_netobj. (line 38869) * xdr_obj_p: xdr_obj_p. (line 39861) * xdr_opaque: xdr_opaque. (line 38879) * xdr_opaque_auth: xdr_opaque_auth. (line 37633) * xdr_pmap: xdr_pmap. (line 38241) * xdr_pmaplist: xdr_pmaplist. (line 38254) * xdr_pointer: xdr_pointer. (line 38892) * xdr_quad_t: xdr_quad_t. (line 38905) * xdr_reference: xdr_reference. (line 38916) * xdr_replymsg: xdr_replymsg. (line 38321) * xdr_rmtcallres: xdr_rmtcallres. (line 38281) * xdr_rmtcall_args: xdr_rmtcall_args. (line 38271) * xdr_short: xdr_short. (line 38929) * xdr_sizeof: xdr_sizeof. (line 38942) * xdr_string: xdr_string. (line 38953) * xdr_uint16_t: xdr_uint16_t. (line 39052) * xdr_uint32_t: xdr_uint32_t. (line 39065) * xdr_uint64_t: xdr_uint64_t. (line 39078) * xdr_uint8_t: xdr_uint8_t. (line 39091) * xdr_union: xdr_union. (line 39104) * xdr_unixcred: xdr_unixcred. (line 38024) * xdr_u_char: xdr_u_char. (line 38966) * xdr_u_hyper: xdr_u_hyper. (line 38979) * xdr_u_int: xdr_u_int. (line 38989) * xdr_u_long: xdr_u_long. (line 39005) * xdr_u_longlong_t: xdr_u_longlong_t. (line 39018) * xdr_u_quad_t: xdr_u_quad_t. (line 39028) * xdr_u_short: xdr_u_short. (line 39039) * xdr_valdat: xdr_valdat. (line 39897) * xdr_vector: xdr_vector. (line 39117) * xdr_void: xdr_void. (line 39130) * xdr_wrapstring: xdr_wrapstring. (line 39143) * xdr_ypbind_resptype: xdr_ypbind_resptype. (line 39908) * xdr_ypmaplist: xdr_ypmaplist. (line 39928) * xdr_ypmap_parms: xdr_ypmap_parms. (line 39918) * xdr_yppushresp_xfr: xdr_yppushresp_xfr. (line 39938) * xdr_ypreq_key: xdr_ypreq_key. (line 39948) * xdr_ypreq_nokey: xdr_ypreq_nokey. (line 39958) * xdr_ypreq_xfr: xdr_ypreq_xfr. (line 39968) * xdr_ypresp_all: xdr_ypresp_all. (line 39978) * xdr_ypresp_key_val: xdr_ypresp_key_val. (line 39989) * xdr_ypresp_maplist: xdr_ypresp_maplist. (line 39999) * xdr_ypresp_master: xdr_ypresp_master. (line 40009) * xdr_ypresp_order: xdr_ypresp_order. (line 40019) * xdr_ypresp_val: xdr_ypresp_val. (line 40029) * xdr_ypresp_xfr: xdr_ypresp_xfr. (line 40039) * xdr_ypstat: xdr_ypstat. (line 40050) * xdr_ypxfrstat: xdr_ypxfrstat. (line 40061) * xprt_register: xprt_register. (line 38647) * xprt_unregister: xprt_unregister. (line 38660) * xstdopen: Closed standard fds. (line 47905) * y0: y0. (line 30785) * y0f: y0f. (line 35031) * y0l: y0l. (line 35048) * y1: y1. (line 30797) * y1f: y1f. (line 35066) * y1l: y1l. (line 35083) * yn: yn. (line 30809) * ynf: ynf. (line 35101) * ynl: ynl. (line 35118) * ypbinderr_string: ypbinderr_string. (line 40166) * yperr_string: yperr_string. (line 40177) * ypprot_err: ypprot_err. (line 40187) * yp_all: yp_all. (line 40076) * yp_bind: yp_bind. (line 40086) * yp_first: yp_first. (line 40096) * yp_get_default_domain: yp_get_default_domain. (line 40106) * yp_master: yp_master. (line 40116) * yp_match: yp_match. (line 40126) * yp_next: yp_next. (line 40136) * yp_order: yp_order. (line 40146) * yp_unbind: yp_unbind. (line 40156)