advanced help
phrase:
attribute:
attribute:
attribute:
order:
per page:
clip:
action:
Results of 1 - 1 of about 725 for Android 12 (1.931 sec.)
android (2801), 12 (27798)
gnulib.txt
#score: 5143
@digest: f5a230831a41b3b994d15dd3d2967eae
@id: 376418
@mdate: 2024-01-18T11:52:02Z
@size: 2085584
@type: text/plain
#keywords: ‘< (146288), pthread (56772), ‘ (41594), gnulib (34496), xdr (23398), glibc (22956), 13 (17411), 10 (15272), ‘-- (15086), nis (14486), unlocked (14183), modules (12792), trace (9977), attr (9687), posix (8385), platforms (7987), tested (7902), • (7394), extensions (7316), module (7274), substitutes (6241), tool (5119), destroy (5106), makefile (4607), sys (4382), portability (4321), import (3286), regular (3075), operator (2967), supported (2603), directory (2526), files (2413)
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.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 ‘stdbool.h' 9.48 ‘stdckdint.h' 9.49 ‘stddef.h' 9.50 ‘stdint.h' 9.51 ‘stdio.h' 9.52 ‘stdlib.h' 9.53 ‘stdnoreturn.h' 9.54 ‘string.h' 9.55 ‘strings.h' 9.56 ‘stropts.h' 9.57 ‘sys/ipc.h' 9.58 ‘sys/mman.h' 9.59 ‘sys/msg.h' 9.60 ‘sys/resource.h' 9.61 ‘sys/select.h' 9.62 ‘sys/sem.h' 9.63 ‘sys/shm.h' 9.64 ‘sys/socket.h' 9.65 ‘sys/stat.h' 9.66 ‘sys/statvfs.h' 9.67 ‘sys/time.h' 9.68 ‘sys/timeb.h' 9.69 ‘sys/times.h' 9.70 ‘sys/types.h' 9.71 ‘sys/uio.h' 9.72 ‘sys/un.h' 9.73 ‘sys/utsname.h' 9.74 ‘sys/wait.h' 9.75 ‘syslog.h' 9.76 ‘tar.h' 9.77 ‘termios.h' 9.78 ‘tgmath.h' 9.79 ‘threads.h' 9.80 ‘time.h' 9.81 ‘trace.h' 9.82 ‘uchar.h' 9.83 ‘ucontext.h' 9.84 ‘ulimit.h' 9.85 ‘unistd.h' 9.86 ‘utime.h' 9.87 ‘utmpx.h' 9.88 ‘wchar.h' 9.89 ‘wctype.h' 9.90 ‘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 ‘stderr' 10.1060 ‘stdin' 10.1061 ‘stdout' 10.1062 ‘stpcpy' 10.1063 ‘stpncpy' 10.1064 ‘strcasecmp' 10.1065 ‘strcasecmp_l' 10.1066 ‘strcat' 10.1067 ‘strchr' 10.1068 ‘strcmp' 10.1069 ‘strcoll' 10.1070 ‘strcoll_l' 10.1071 ‘strcpy' 10.1072 ‘strcspn' 10.1073 ‘strdup' 10.1074 ‘strerror' 10.1075 ‘strerror_l' 10.1076 ‘strerror_r' 10.1077 ‘strfmon' 10.1078 ‘strfmon_l' 10.1079 ‘strfromd' 10.1080 ‘strfromf' 10.1081 ‘strfroml' 10.1082 ‘strftime' 10.1083 ‘strftime_l' 10.1084 ‘strlen' 10.1085 ‘strncasecmp' 10.1086 ‘strncasecmp_l' 10.1087 ‘strncat' 10.1088 ‘strncmp' 10.1089 ‘strncpy' 10.1090 ‘strndup' 10.1091 ‘strnlen' 10.1092 ‘strpbrk' 10.1093 ‘strptime' 10.1094 ‘strrchr' 10.1095 ‘strsignal' 10.1096 ‘strspn' 10.1097 ‘strstr' 10.1098 ‘strtod' 10.1099 ‘strtof' 10.1100 ‘strtoimax' 10.1101 ‘strtok' 10.1102 ‘strtok_r' 10.1103 ‘strtol' 10.1104 ‘strtold' 10.1105 ‘strtoll' 10.1106 ‘strtoul' 10.1107 ‘strtoull' 10.1108 ‘strtoumax' 10.1109 ‘strxfrm' 10.1110 ‘strxfrm_l' 10.1111 ‘swab' 10.1112 ‘swprintf' 10.1113 ‘swscanf' 10.1114 ‘symlink' 10.1115 ‘symlinkat' 10.1116 ‘sync' 10.1117 ‘sysconf' 10.1118 ‘syslog' 10.1119 ‘system' 10.1120 ‘tan' 10.1121 ‘tanf' 10.1122 ‘tanh' 10.1123 ‘tanhf' 10.1124 ‘tanhl' 10.1125 ‘tanl' 10.1126 ‘tcdrain' 10.1127 ‘tcflow' 10.1128 ‘tcflush' 10.1129 ‘tcgetattr' 10.1130 ‘tcgetpgrp' 10.1131 ‘tcgetsid' 10.1132 ‘tcsendbreak' 10.1133 ‘tcsetattr' 10.1134 ‘tcsetpgrp' 10.1135 ‘tdelete' 10.1136 ‘telldir' 10.1137 ‘tempnam' 10.1138 ‘tfind' 10.1139 ‘tgamma' 10.1140 ‘tgammaf' 10.1141 ‘tgammal' 10.1142 ‘thrd_create' 10.1143 ‘thrd_current' 10.1144 ‘thrd_detach' 10.1145 ‘thrd_equal' 10.1146 ‘thrd_exit' 10.1147 ‘thrd_join' 10.1148 ‘thrd_sleep' 10.1149 ‘thrd_yield' 10.1150 ‘time' 10.1151 ‘timegm' 10.1152 ‘timer_create' 10.1153 ‘timer_delete' 10.1154 ‘timer_getoverrun' 10.1155 ‘timer_gettime' 10.1156 ‘timer_settime' 10.1157 ‘times' 10.1158 ‘timespec_getres' 10.1159 ‘timezone' 10.1160 ‘tmpfile' 10.1161 ‘tmpnam' 10.1162 ‘toascii' 10.1163 ‘tolower' 10.1164 ‘tolower_l' 10.1165 ‘totalorder' 10.1166 ‘totalorderf' 10.1167 ‘totalorderl' 10.1168 ‘totalordermag' 10.1169 ‘totalordermagf' 10.1170 ‘totalordermagl' 10.1171 ‘toupper' 10.1172 ‘toupper_l' 10.1173 ‘towctrans' 10.1174 ‘towctrans_l' 10.1175 ‘towlower' 10.1176 ‘towlower_l' 10.1177 ‘towupper' 10.1178 ‘towupper_l' 10.1179 ‘trunc' 10.1180 ‘truncate' 10.1181 ‘truncf' 10.1182 ‘truncl' 10.1183 ‘tsearch' 10.1184 ‘tss_create' 10.1185 ‘tss_delete' 10.1186 ‘tss_get' 10.1187 ‘tss_set' 10.1188 ‘ttyname' 10.1189 ‘ttyname_r' 10.1190 ‘twalk' 10.1191 ‘tzname' 10.1192 ‘tzset' 10.1193 ‘ufromfp' 10.1194 ‘ufromfpf' 10.1195 ‘ufromfpl' 10.1196 ‘ufromfpx' 10.1197 ‘ufromfpxf' 10.1198 ‘ufromfpxl' 10.1199 ‘ulimit' 10.1200 ‘umask' 10.1201 ‘uname' 10.1202 ‘ungetc' 10.1203 ‘ungetwc' 10.1204 ‘unlink' 10.1205 ‘unlinkat' 10.1206 ‘unlockpt' 10.1207 ‘unsetenv' 10.1208 ‘uselocale' 10.1209 ‘utime' 10.1210 ‘utimensat' 10.1211 ‘utimes' 10.1212 ‘va_arg' 10.1213 ‘va_copy' 10.1214 ‘va_end' 10.1215 ‘va_start' 10.1216 ‘vdprintf' 10.1217 ‘vfprintf' 10.1218 ‘vfscanf' 10.1219 ‘vfwprintf' 10.1220 ‘vfwscanf' 10.1221 ‘vprintf' 10.1222 ‘vscanf' 10.1223 ‘vsnprintf' 10.1224 ‘vsprintf' 10.1225 ‘vsscanf' 10.1226 ‘vswprintf' 10.1227 ‘vswscanf' 10.1228 ‘vwprintf' 10.1229 ‘vwscanf' 10.1230 ‘wait' 10.1231 ‘waitid' 10.1232 ‘waitpid' 10.1233 ‘wcpcpy' 10.1234 ‘wcpncpy' 10.1235 ‘wcrtomb' 10.1236 ‘wcscasecmp' 10.1237 ‘wcscasecmp_l' 10.1238 ‘wcscat' 10.1239 ‘wcschr' 10.1240 ‘wcscmp' 10.1241 ‘wcscoll' 10.1242 ‘wcscoll_l' 10.1243 ‘wcscpy' 10.1244 ‘wcscspn' 10.1245 ‘wcsdup' 10.1246 ‘wcsftime' 10.1247 ‘wcslen' 10.1248 ‘wcsncasecmp' 10.1249 ‘wcsncasecmp_l' 10.1250 ‘wcsncat' 10.1251 ‘wcsncmp' 10.1252 ‘wcsncpy' 10.1253 ‘wcsnlen' 10.1254 ‘wcsnrtombs' 10.1255 ‘wcspbrk' 10.1256 ‘wcsrchr' 10.1257 ‘wcsrtombs' 10.1258 ‘wcsspn' 10.1259 ‘wcsstr' 10.1260 ‘wcstod' 10.1261 ‘wcstof' 10.1262 ‘wcstoimax' 10.1263 ‘wcstok' 10.1264 ‘wcstol' 10.1265 ‘wcstold' 10.1266 ‘wcstoll' 10.1267 ‘wcstombs' 10.1268 ‘wcstoul' 10.1269 ‘wcstoull' 10.1270 ‘wcstoumax' 10.1271 ‘wcswidth' 10.1272 ‘wcsxfrm' 10.1273 ‘wcsxfrm_l' 10.1274 ‘wctob' 10.1275 ‘wctomb' 10.1276 ‘wctrans' 10.1277 ‘wctrans_l' 10.1278 ‘wctype' 10.1279 ‘wctype_l' 10.1280 ‘wcwidth' 10.1281 ‘wmemchr' 10.1282 ‘wmemcmp' 10.1283 ‘wmemcpy' 10.1284 ‘wmemmove' 10.1285 ‘wmemset' 10.1286 ‘wordexp' 10.1287 ‘wordfree' 10.1288 ‘wprintf' 10.1289 ‘write' 10.1290 ‘writev' 10.1291 ‘wscanf' 10.1292 ‘y0' 10.1293 ‘y1' 10.1294 ‘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 ‘<aio.h>' 13.1.1 ‘aio_init' 13.2 Glibc ‘<aliases.h>' 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 ‘<argp.h>' 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 ‘<argz.h>' 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 ‘<arpa/inet.h>' 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 ‘<byteswap.h>' 13.6.1 ‘bswap_16' 13.6.2 ‘bswap_32' 13.6.3 ‘bswap_64' 13.7 Glibc Extensions to ‘<complex.h>' 13.7.1 ‘clog10' 13.7.2 ‘clog10f' 13.7.3 ‘clog10l' 13.8 Glibc Extensions to ‘<ctype.h>' 13.8.1 ‘isctype' 13.9 Glibc Extensions to ‘<dirent.h>' 13.9.1 ‘getdirentries' 13.9.2 ‘scandirat' 13.9.3 ‘versionsort' 13.10 Glibc Extensions to ‘<dlfcn.h>' 13.10.1 ‘dladdr' 13.10.2 ‘dladdr1' 13.10.3 ‘dlinfo' 13.10.4 ‘dlmopen' 13.10.5 ‘dlvsym' 13.11 Glibc ‘<envz.h>' 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 ‘<err.h>' 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 ‘<errno.h>' 13.13.1 ‘program_invocation_name' 13.13.2 ‘program_invocation_short_name' 13.14 Glibc ‘<error.h>' 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 ‘<execinfo.h>' 13.15.1 ‘backtrace' 13.15.2 ‘backtrace_symbols' 13.15.3 ‘backtrace_symbols_fd' 13.16 Glibc Extensions to ‘<fcntl.h>' 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 ‘<fenv.h>' 13.17.1 ‘fedisableexcept' 13.17.2 ‘feenableexcept' 13.17.3 ‘fegetexcept' 13.18 Glibc Extensions to ‘<fmtmsg.h>' 13.18.1 ‘addseverity' 13.19 Glibc ‘<fstab.h>' 13.19.1 ‘endfsent' 13.19.2 ‘getfsent' 13.19.3 ‘getfsfile' 13.19.4 ‘getfsspec' 13.19.5 ‘setfsent' 13.20 Glibc ‘<fts.h>' 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 ‘<getopt.h>' 13.21.1 ‘getopt_long' 13.21.2 ‘getopt_long_only' 13.22 Glibc Extensions to ‘<glob.h>' 13.22.1 ‘glob_pattern_p' 13.23 Glibc Extensions to ‘<gnu/libc-version.h>' 13.23.1 ‘gnu_get_libc_release' 13.23.2 ‘gnu_get_libc_version' 13.24 Glibc Extensions to ‘<grp.h>' 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 ‘<gshadow.h>' 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 ‘<ifaddrs.h>' 13.26.1 ‘getifaddrs' 13.26.2 ‘freeifaddrs' 13.27 Glibc ‘<libintl.h>' 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 ‘<link.h>' 13.28.1 ‘dl_iterate_phdr' 13.29 Glibc ‘<malloc.h>' 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 ‘<math.h>' 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 ‘<mcheck.h>' 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 ‘<mntent.h>' 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 ‘<netdb.h>' 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 ‘<netinet/ether.h>' 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 ‘<netinet/in.h>' 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 ‘<obstack.h>' 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 ‘<poll.h>' 13.37.1 ‘ppoll' 13.38 Glibc ‘<printf.h>' 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 ‘<pthread.h>' 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 ‘<pty.h>' 13.40.1 ‘forkpty' 13.40.2 ‘openpty' 13.41 Glibc Extensions to ‘<pwd.h>' 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 ‘<regex.h>' 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 ‘<regexp.h>' 13.43.1 ‘advance' 13.43.2 ‘loc1' 13.43.3 ‘loc2' 13.43.4 ‘locs' 13.43.5 ‘step' 13.44 Glibc ‘<resolv.h>' 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 ‘<rpc/auth.h>' 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 ‘<rpc/auth_des.h>' 13.46.1 ‘authdes_getucred' 13.46.2 ‘getpublickey' 13.46.3 ‘getsecretkey' 13.46.4 ‘rtime' 13.47 Glibc ‘<rpc/auth_unix.h>' 13.47.1 ‘xdr_authunix_parms' 13.48 Glibc ‘<rpc/clnt.h>' 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 ‘<rpc/key_prot.h>' 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 ‘<rpc/netdb.h>' 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 ‘<rpc/pmap_clnt.h>' 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 ‘<rpc/pmap_prot.h>' 13.52.1 ‘xdr_pmap' 13.52.2 ‘xdr_pmaplist' 13.53 Glibc ‘<rpc/pmap_rmt.h>' 13.53.1 ‘xdr_rmtcall_args' 13.53.2 ‘xdr_rmtcallres' 13.54 Glibc ‘<rpc/rpc_msg.h>' 13.54.1 ‘xdr_callhdr' 13.54.2 ‘xdr_callmsg' 13.54.3 ‘xdr_replymsg' 13.55 Glibc ‘<rpc/svc.h>' 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 ‘<rpc/xdr.h>' 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 ‘<rpcsvc/nislib.h>' 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 ‘<rpcsvc/nis_callback.h>' 13.58.1 ‘xdr_cback_data' 13.58.2 ‘xdr_obj_p' 13.59 Glibc ‘<rpcsvc/yp.h>' 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 ‘<rpcsvc/ypclnt.h>' 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 ‘<sched.h>' 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 ‘<search.h>' 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 ‘<selinux/selinux.h>' 13.63.1 ‘fgetfilecon' 13.63.2 ‘getfilecon' 13.63.3 ‘lgetfilecon' 13.64 Glibc Extensions to ‘<semaphore.h>' 13.64.1 ‘sem_clockwait' 13.65 Glibc ‘<shadow.h>' 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 ‘<signal.h>' 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 ‘<spawn.h>' 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 ‘<stdio.h>' 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 ‘<stdlib.h>' 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 ‘<string.h>' 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 ‘<sys/auxv.h>' 13.71.1 ‘getauxval' 13.72 Glibc ‘<sys/capability.h>' 13.72.1 ‘capget' 13.72.2 ‘capset' 13.73 Glibc ‘<sys/epoll.h>' 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 ‘<sys/eventfd.h>' 13.74.1 ‘eventfd' 13.74.2 ‘eventfd_read' 13.74.3 ‘eventfd_write' 13.75 Glibc ‘<sys/fanotify.h>' 13.75.1 ‘fanotify_init' 13.75.2 ‘fanotify_mark' 13.76 Glibc ‘<sys/file.h>' 13.76.1 ‘flock' 13.77 Glibc ‘<sys/fsuid.h>' 13.77.1 ‘setfsgid' 13.77.2 ‘setfsuid' 13.78 Glibc ‘<sys/gmon.h>' 13.78.1 ‘monstartup' 13.79 Glibc ‘<sys/inotify.h>' 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 ‘<sys/io.h>', ‘<sys/perm.h>' 13.80.1 ‘ioperm' 13.80.2 ‘iopl' 13.81 Glibc ‘<sys/kdaemon.h>' 13.81.1 ‘bdflush' 13.82 Glibc ‘<sys/klog.h>' 13.82.1 ‘klogctl' 13.83 Glibc Extensions to ‘<sys/mman.h>' 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 ‘<sys/mount.h>' 13.84.1 ‘mount' 13.84.2 ‘umount' 13.84.3 ‘umount2' 13.85 Glibc ‘<sys/personality.h>' 13.85.1 ‘personality' 13.86 Glibc ‘<sys/prctl.h>' 13.86.1 ‘prctl' 13.87 Glibc ‘<sys/profil.h>' 13.87.1 ‘sprofil' 13.88 Glibc ‘<sys/ptrace.h>' 13.88.1 ‘ptrace' 13.89 Glibc ‘<sys/quota.h>' 13.89.1 ‘quotactl' 13.90 Glibc ‘<sys/random.h>' 13.90.1 ‘getentropy' 13.90.2 ‘getrandom' 13.91 Glibc ‘<sys/reboot.h>' 13.91.1 ‘reboot' 13.92 Glibc Extensions to ‘<sys/resource.h>' 13.92.1 ‘prlimit' 13.93 Glibc Extensions to ‘<sys/sem.h>' 13.93.1 ‘semtimedop' 13.94 Glibc ‘<sys/sendfile.h>' 13.94.1 ‘sendfile' 13.95 Glibc ‘<sys/signalfd.h>' 13.95.1 ‘signalfd' 13.96 Glibc ‘<sys/single_threaded.h>' 13.96.1 ‘__libc_single_threaded' 13.97 Glibc Extensions to ‘<sys/socket.h>' 13.97.1 ‘accept4' 13.97.2 ‘isfdtype' 13.97.3 ‘recvmmsg' 13.97.4 ‘sendmmsg' 13.98 Glibc Extensions to ‘<sys/stat.h>' 13.98.1 ‘getumask' 13.98.2 ‘lchmod' 13.98.3 ‘statx' 13.99 Glibc ‘<sys/statfs.h>' 13.99.1 ‘fstatfs' 13.99.2 ‘statfs' 13.100 Glibc ‘<sys/swap.h>' 13.100.1 ‘swapoff' 13.100.2 ‘swapon' 13.101 Glibc ‘<sys/sysctl.h>' 13.101.1 ‘sysctl' 13.102 Glibc ‘<sys/sysinfo.h>' 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 ‘<sys/syslog.h>' 13.103.1 ‘vsyslog' 13.104 Glibc ‘<sys/sysmacros.h>' 13.104.1 ‘gnu_dev_major' 13.104.2 ‘gnu_dev_makedev' 13.104.3 ‘gnu_dev_minor' 13.105 Glibc Extensions to ‘<sys/time.h>' 13.105.1 ‘adjtime' 13.105.2 ‘futimes' 13.105.3 ‘futimesat' 13.105.4 ‘lutimes' 13.105.5 ‘settimeofday' 13.106 Glibc ‘<sys/timerfd.h>' 13.106.1 ‘timerfd_create' 13.106.2 ‘timerfd_gettime' 13.106.3 ‘timerfd_settime' 13.107 Glibc ‘<sys/timex.h>' 13.107.1 ‘adjtimex' 13.107.2 ‘ntp_adjtime' 13.107.3 ‘ntp_gettime' 13.107.4 ‘ntp_gettimex' 13.108 Glibc Extensions to ‘<sys/uio.h>' 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 ‘<sys/ustat.h>' 13.109.1 ‘ustat' 13.110 Glibc ‘<sys/vlimit.h>' 13.110.1 ‘vlimit' 13.111 Glibc Extensions to ‘<sys/wait.h>' 13.111.1 ‘wait3' 13.111.2 ‘wait4' 13.112 Glibc ‘<sys/xattr.h>' 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 ‘<termios.h>' 13.113.1 ‘cfmakeraw' 13.113.2 ‘cfsetspeed' 13.114 Glibc Extensions to ‘<time.h>' 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 ‘<ttyent.h>' 13.115.1 ‘endttyent' 13.115.2 ‘getttyent' 13.115.3 ‘getttynam' 13.115.4 ‘setttyent' 13.116 Glibc Extensions to ‘<unistd.h>' 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 ‘<utmp.h>' 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 ‘<utmpx.h>' 13.118.1 ‘getutmp' 13.118.2 ‘getutmpx' 13.118.3 ‘updwtmpx' 13.118.4 ‘utmpxname' 13.119 Glibc Extensions to ‘<wchar.h>' 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 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 Index GNU Gnulib ********** This manual is for GNU Gnulib (updated 2024-01-18 11:42:33), 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: <https://savannah.gnu.org/projects/gnulib>. Get the sources through Git from there. • The Gnulib home page: <https://www.gnu.org/software/gnulib/>. 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 <https://savannah.gnu.org/projects/gnulib>. Then, instead of the URL <https://git.savannah.gnu.org/git/gnulib.git>, 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: <https://en.wikipedia.org/wiki/Git_(software)> Homepage: <https://git-scm.com/> 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 <bug-gnulib@gnu.org> 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 <https://lists.gnu.org/mailman/listinfo/bug-gnulib>. 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 <bug-gnulib@gnu.org>. 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 <https://www.gnu.org/prep/standards>. • 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 <stddef.h>' or ‘<stdio.h>' 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 ‘<float.h>', ‘<limits.h>', ‘<stdarg.h>', ‘<stddef.h>', and ‘<stdint.h>' unconditionally; ‘<stdbool.h>' is also in the C99 freestanding list but is obsolescent as of C23. Gnulib code can also assume the existence of ‘<ctype.h>', ‘<errno.h>', ‘<fcntl.h>', ‘<locale.h>', ‘<signal.h>', ‘<stdio.h>', ‘<stdlib.h>', ‘<string.h>', and ‘<time.h>'. Similarly, many modules include ‘<sys/types.h>' even though it's not even in C11; that's OK since ‘<sys/types.h>' 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'. • ‘<stdbool.h>', although Gnulib code no longer uses it directly, preferring plain ‘bool' via the ‘stdbool' module instead. *Note stdbool.h::. • ‘<stdint.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 <https://stackoverflow.com/questions/5134523/>. 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. • ‘<iso646.h>', 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 2023, 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 13.0 or newer is occasionally tested. • OpenBSD 7.0 or newer is occasionally tested. • NetBSD 9.0 or newer is occasionally tested. • AIX 7.1 and 7.2 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 is occasionally tested. Cygwin 1.7.x is rarely 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. • IRIX 6.5 is very 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.4 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 ‘<bug-gnulib at gnu dot org>'. 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 <https://www.gnu.org/licenses/fdl-1.3.en.html>. 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 <https://www.gnu.org/software/gnulib/MODULES.html>. • 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 <string.h> 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, - 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 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 <string.h>' 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_MODULES' The argument is a space separated list of the requested modules, not including dependencies. ‘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_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_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_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. 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 ============================================= 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/'. These Gnulib substitute header files rely on ‘<config.h>' being already included. Furthermore ‘<config.h>' 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 <config.h>' 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, ‘<config.h>' 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.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 <https://autotools.io/automake/nonrecursive.html>. Gnulib supports this flavour of build system too. To ...
http://www.gnu.org/savannah-checkouts/gnu/gnulib/manual/gnulib.txt - [detail] - [similar]
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 213331 documents and 1081083 words.