aboutsummaryrefslogtreecommitdiffstats
path: root/man3
diff options
context:
space:
mode:
Diffstat (limited to 'man3')
-rw-r--r--man3/ELEMSOF.3libsimple34
-rw-r--r--man3/INTSTRLEN.3libsimple46
l---------man3/LIBSIMPLE_UNLIST.31
-rw-r--r--man3/MAX.3libsimple58
-rw-r--r--man3/MAX3.3libsimple61
-rw-r--r--man3/MIN.3libsimple58
-rw-r--r--man3/MIN3.3libsimple61
-rw-r--r--man3/STRLEN.3libsimple41
-rw-r--r--man3/TYPE_MAX.3libsimple77
-rw-r--r--man3/TYPE_MIN.3libsimple77
l---------man3/UNLIST.3libsimple1
l---------man3/aligned_allocn.3libsimple1
l---------man3/aligned_allocz.3libsimple1
l---------man3/aligned_alloczn.3libsimple1
l---------man3/aligned_memdup.3libsimple1
l---------man3/aligned_memdupa.3libsimple1
l---------man3/asprintf.3libsimple1
l---------man3/asprintfa.3libsimple1
l---------man3/callocn.3libsimple1
l---------man3/cmptimespec.3libsimple1
l---------man3/cmptimeval.3libsimple1
l---------man3/difftimespec.3libsimple1
l---------man3/difftimeval.3libsimple1
l---------man3/doubletotimespec.3libsimple1
l---------man3/doubletotimeval.3libsimple1
l---------man3/ealigned_alloc.3libsimple1
l---------man3/ealigned_allocn.3libsimple1
l---------man3/ealigned_allocz.3libsimple1
l---------man3/ealigned_alloczn.3libsimple1
l---------man3/ealigned_memdup.3libsimple1
l---------man3/ecalloc.3libsimple1
l---------man3/ecallocn.3libsimple1
l---------man3/emalloc.3libsimple1
l---------man3/emallocn.3libsimple1
l---------man3/emallocz.3libsimple1
l---------man3/emalloczn.3libsimple1
l---------man3/ememalign.3libsimple1
l---------man3/ememalignn.3libsimple1
l---------man3/ememalignz.3libsimple1
l---------man3/ememalignzn.3libsimple1
l---------man3/ememdup.3libsimple1
l---------man3/enaligned_alloc.3libsimple1
l---------man3/enaligned_allocn.3libsimple1
l---------man3/enaligned_allocz.3libsimple1
l---------man3/enaligned_alloczn.3libsimple1
l---------man3/enaligned_memdup.3libsimple1
l---------man3/encalloc.3libsimple1
l---------man3/encallocn.3libsimple1
l---------man3/enmalloc.3libsimple1
l---------man3/enmallocn.3libsimple1
l---------man3/enmallocz.3libsimple1
l---------man3/enmalloczn.3libsimple1
l---------man3/enmemalign.3libsimple1
l---------man3/enmemalignn.3libsimple1
l---------man3/enmemalignz.3libsimple1
l---------man3/enmemalignzn.3libsimple1
l---------man3/enmemdup.3libsimple1
l---------man3/enposix_memalign.3libsimple1
l---------man3/enposix_memalignn.3libsimple1
l---------man3/enposix_memalignz.3libsimple1
l---------man3/enposix_memalignzn.3libsimple1
l---------man3/enprintf.3libsimple1
l---------man3/enputenvf.3libsimple1
l---------man3/enpvalloc.3libsimple1
l---------man3/enpvallocn.3libsimple1
l---------man3/enpvallocz.3libsimple1
l---------man3/enpvalloczn.3libsimple1
l---------man3/enrealloc.3libsimple1
l---------man3/enreallocn.3libsimple1
l---------man3/enstrdup.3libsimple1
l---------man3/enstrndup.3libsimple1
l---------man3/envaligned_allocn.3libsimple1
l---------man3/envaligned_alloczn.3libsimple1
l---------man3/envalloc.3libsimple1
l---------man3/envallocn.3libsimple1
l---------man3/envallocz.3libsimple1
l---------man3/envalloczn.3libsimple1
l---------man3/envcallocn.3libsimple1
l---------man3/envmallocn.3libsimple1
l---------man3/envmalloczn.3libsimple1
l---------man3/envmemalignn.3libsimple1
l---------man3/envmemalignzn.3libsimple1
l---------man3/envposix_memalignn.3libsimple1
l---------man3/envposix_memalignzn.3libsimple1
l---------man3/envputenvf.3libsimple1
l---------man3/envpvallocn.3libsimple1
l---------man3/envpvalloczn.3libsimple1
l---------man3/envreallocn.3libsimple1
l---------man3/envvallocn.3libsimple1
l---------man3/envvalloczn.3libsimple1
l---------man3/eposix_memalign.3libsimple1
l---------man3/eposix_memalignn.3libsimple1
l---------man3/eposix_memalignz.3libsimple1
l---------man3/eposix_memalignzn.3libsimple1
l---------man3/eprintf.3libsimple1
l---------man3/eputenvf.3libsimple1
l---------man3/epvalloc.3libsimple1
l---------man3/epvallocn.3libsimple1
l---------man3/epvallocz.3libsimple1
l---------man3/epvalloczn.3libsimple1
l---------man3/erealloc.3libsimple1
l---------man3/ereallocn.3libsimple1
l---------man3/estrdup.3libsimple1
l---------man3/estrndup.3libsimple1
l---------man3/evaligned_allocn.3libsimple1
l---------man3/evaligned_alloczn.3libsimple1
l---------man3/evalloc.3libsimple1
l---------man3/evallocn.3libsimple1
l---------man3/evallocz.3libsimple1
l---------man3/evalloczn.3libsimple1
l---------man3/evcallocn.3libsimple1
l---------man3/evmallocn.3libsimple1
l---------man3/evmalloczn.3libsimple1
l---------man3/evmemalignn.3libsimple1
l---------man3/evmemalignzn.3libsimple1
l---------man3/evposix_memalignn.3libsimple1
l---------man3/evposix_memalignzn.3libsimple1
l---------man3/evputenvf.3libsimple1
l---------man3/evpvallocn.3libsimple1
l---------man3/evpvalloczn.3libsimple1
l---------man3/evreallocn.3libsimple1
l---------man3/evvallocn.3libsimple1
l---------man3/evvalloczn.3libsimple1
l---------man3/getenv_e.3libsimple1
l---------man3/getenv_ne.3libsimple1
l---------man3/inchrcaseset.3libsimple1
l---------man3/inchrset.3libsimple1
l---------man3/libsimple_aligned_allocn.31
-rw-r--r--man3/libsimple_aligned_allocz.3188
l---------man3/libsimple_aligned_alloczn.31
-rw-r--r--man3/libsimple_aligned_memdup.3152
l---------man3/libsimple_aligned_memdupa.31
l---------man3/libsimple_arrayalloc.31
l---------man3/libsimple_asprintf.31
l---------man3/libsimple_asprintfa.31
l---------man3/libsimple_callocn.31
-rw-r--r--man3/libsimple_close.349
-rw-r--r--man3/libsimple_cmptimespec.395
l---------man3/libsimple_cmptimeval.31
l---------man3/libsimple_default_failure_exit.31
-rw-r--r--man3/libsimple_difftimespec.3118
l---------man3/libsimple_difftimeval.31
-rw-r--r--man3/libsimple_doubletotimespec.388
l---------man3/libsimple_doubletotimeval.31
l---------man3/libsimple_ealigned_alloc.31
l---------man3/libsimple_ealigned_allocn.31
l---------man3/libsimple_ealigned_allocz.31
l---------man3/libsimple_ealigned_alloczn.31
l---------man3/libsimple_ealigned_memdup.31
l---------man3/libsimple_earrayalloc.31
l---------man3/libsimple_ecalloc.31
l---------man3/libsimple_ecallocn.31
l---------man3/libsimple_emalloc.31
l---------man3/libsimple_emallocn.31
l---------man3/libsimple_emallocz.31
l---------man3/libsimple_emalloczn.31
l---------man3/libsimple_ememalign.31
l---------man3/libsimple_ememalignn.31
l---------man3/libsimple_ememalignz.31
l---------man3/libsimple_ememalignzn.31
l---------man3/libsimple_ememalloc.31
l---------man3/libsimple_ememdup.31
-rw-r--r--man3/libsimple_enaligned_alloc.3149
l---------man3/libsimple_enaligned_allocn.31
l---------man3/libsimple_enaligned_allocz.31
l---------man3/libsimple_enaligned_alloczn.31
l---------man3/libsimple_enaligned_memdup.31
l---------man3/libsimple_enarrayalloc.31
-rw-r--r--man3/libsimple_encalloc.3154
l---------man3/libsimple_encallocn.31
-rw-r--r--man3/libsimple_enmalloc.3150
l---------man3/libsimple_enmallocn.31
l---------man3/libsimple_enmallocz.31
l---------man3/libsimple_enmalloczn.31
l---------man3/libsimple_enmemalign.31
l---------man3/libsimple_enmemalignn.31
l---------man3/libsimple_enmemalignz.31
l---------man3/libsimple_enmemalignzn.31
l---------man3/libsimple_enmemalloc.31
l---------man3/libsimple_enmemdup.31
-rw-r--r--man3/libsimple_enposix_memalign.3153
l---------man3/libsimple_enposix_memalignn.31
l---------man3/libsimple_enposix_memalignz.31
l---------man3/libsimple_enposix_memalignzn.31
l---------man3/libsimple_enprintf.31
l---------man3/libsimple_enputenvf.31
l---------man3/libsimple_enpvalloc.31
l---------man3/libsimple_enpvallocn.31
l---------man3/libsimple_enpvallocz.31
l---------man3/libsimple_enpvalloczn.31
-rw-r--r--man3/libsimple_enrealloc.3161
l---------man3/libsimple_enreallocn.31
-rw-r--r--man3/libsimple_enstrdup.3120
-rw-r--r--man3/libsimple_enstrndup.3120
l---------man3/libsimple_envaligned_allocn.31
l---------man3/libsimple_envaligned_alloczn.31
l---------man3/libsimple_envalloc.31
l---------man3/libsimple_envallocn.31
l---------man3/libsimple_envallocz.31
l---------man3/libsimple_envalloczn.31
l---------man3/libsimple_envarrayalloc.31
l---------man3/libsimple_envcallocn.31
l---------man3/libsimple_envmallocn.31
l---------man3/libsimple_envmalloczn.31
l---------man3/libsimple_envmemalignn.31
l---------man3/libsimple_envmemalignzn.31
l---------man3/libsimple_envmemalloc.31
l---------man3/libsimple_envposix_memalignn.31
l---------man3/libsimple_envposix_memalignzn.31
l---------man3/libsimple_envputenvf.31
l---------man3/libsimple_envpvallocn.31
l---------man3/libsimple_envpvalloczn.31
l---------man3/libsimple_envreallocn.31
l---------man3/libsimple_envvallocn.31
l---------man3/libsimple_envvalloczn.31
l---------man3/libsimple_eposix_memalign.31
l---------man3/libsimple_eposix_memalignn.31
l---------man3/libsimple_eposix_memalignz.31
l---------man3/libsimple_eposix_memalignzn.31
l---------man3/libsimple_eprintf.31
l---------man3/libsimple_eprintf_postprint.31
l---------man3/libsimple_eprintf_preprint.31
l---------man3/libsimple_eputenvf.31
l---------man3/libsimple_epvalloc.31
l---------man3/libsimple_epvallocn.31
l---------man3/libsimple_epvallocz.31
l---------man3/libsimple_epvalloczn.31
l---------man3/libsimple_erealloc.31
l---------man3/libsimple_ereallocn.31
l---------man3/libsimple_estrdup.31
l---------man3/libsimple_estrndup.31
l---------man3/libsimple_evaligned_allocn.31
l---------man3/libsimple_evaligned_alloczn.31
l---------man3/libsimple_evalloc.31
l---------man3/libsimple_evallocn.31
l---------man3/libsimple_evallocz.31
l---------man3/libsimple_evalloczn.31
l---------man3/libsimple_evarrayalloc.31
l---------man3/libsimple_evcallocn.31
l---------man3/libsimple_evmallocn.31
l---------man3/libsimple_evmalloczn.31
l---------man3/libsimple_evmemalignn.31
l---------man3/libsimple_evmemalignzn.31
l---------man3/libsimple_evmemalloc.31
l---------man3/libsimple_evposix_memalignn.31
l---------man3/libsimple_evposix_memalignzn.31
l---------man3/libsimple_evputenvf.31
l---------man3/libsimple_evpvallocn.31
l---------man3/libsimple_evpvalloczn.31
l---------man3/libsimple_evreallocn.31
l---------man3/libsimple_evvallocn.31
l---------man3/libsimple_evvalloczn.31
-rw-r--r--man3/libsimple_getenv_e.373
-rw-r--r--man3/libsimple_getenv_ne.381
l---------man3/libsimple_inchrcaseset.31
-rw-r--r--man3/libsimple_inchrset.396
l---------man3/libsimple_mallocn.31
-rw-r--r--man3/libsimple_mallocz.3188
l---------man3/libsimple_malloczn.31
-rw-r--r--man3/libsimple_memalign.3179
l---------man3/libsimple_memalignn.31
-rw-r--r--man3/libsimple_memalignz.3182
l---------man3/libsimple_memalignzn.31
l---------man3/libsimple_memalloc.31
-rw-r--r--man3/libsimple_memcasechr.383
-rw-r--r--man3/libsimple_memcasecmp.379
-rw-r--r--man3/libsimple_memcaseends.383
-rw-r--r--man3/libsimple_memcaseeq.377
-rw-r--r--man3/libsimple_memcaseeqlen.378
-rw-r--r--man3/libsimple_memcasemem.382
-rw-r--r--man3/libsimple_memcasestarts.381
-rw-r--r--man3/libsimple_memdup.3149
l---------man3/libsimple_memdupa.31
-rw-r--r--man3/libsimple_memelem.384
-rw-r--r--man3/libsimple_memends.383
-rw-r--r--man3/libsimple_memeq.376
-rw-r--r--man3/libsimple_memeqlen.378
-rw-r--r--man3/libsimple_memmem.383
-rw-r--r--man3/libsimple_mempcpy.372
-rw-r--r--man3/libsimple_mempset.373
-rw-r--r--man3/libsimple_mempsetelem.372
-rw-r--r--man3/libsimple_memrcasechr.383
-rw-r--r--man3/libsimple_memrcaseeqlen.377
-rw-r--r--man3/libsimple_memrcasemem.382
-rw-r--r--man3/libsimple_memrchr.383
-rw-r--r--man3/libsimple_memrelem.384
-rw-r--r--man3/libsimple_memreqlen.377
-rw-r--r--man3/libsimple_memrmem.383
-rw-r--r--man3/libsimple_memsetelem.369
-rw-r--r--man3/libsimple_memstarts.381
-rw-r--r--man3/libsimple_minimise_number_string.364
-rw-r--r--man3/libsimple_multimespec.3115
l---------man3/libsimple_multimeval.31
l---------man3/libsimple_posix_memalignn.31
-rw-r--r--man3/libsimple_posix_memalignz.3187
l---------man3/libsimple_posix_memalignzn.31
l---------man3/libsimple_putenvf.31
-rw-r--r--man3/libsimple_pvalloc.3169
l---------man3/libsimple_pvallocn.31
-rw-r--r--man3/libsimple_pvallocz.3179
l---------man3/libsimple_pvalloczn.31
-rw-r--r--man3/libsimple_rawmemcasechr.382
-rw-r--r--man3/libsimple_rawmemchr.381
-rw-r--r--man3/libsimple_rawmemrcasechr.383
-rw-r--r--man3/libsimple_rawmemrchr.383
l---------man3/libsimple_reallocn.31
-rw-r--r--man3/libsimple_strcasechr.382
-rw-r--r--man3/libsimple_strcasechrnul.378
-rw-r--r--man3/libsimple_strcasecmpnul.385
-rw-r--r--man3/libsimple_strcaseends.373
-rw-r--r--man3/libsimple_strcaseeq.374
-rw-r--r--man3/libsimple_strcaseeqlen.374
-rw-r--r--man3/libsimple_strcaseeqnul.374
-rw-r--r--man3/libsimple_strcasestarts.375
-rw-r--r--man3/libsimple_strcasestr.379
-rw-r--r--man3/libsimple_strchrnul.379
-rw-r--r--man3/libsimple_strcmpnul.385
l---------man3/libsimple_strdupa.31
-rw-r--r--man3/libsimple_strend.370
-rw-r--r--man3/libsimple_strends.373
-rw-r--r--man3/libsimple_streq.373
-rw-r--r--man3/libsimple_streqlen.374
-rw-r--r--man3/libsimple_streqnul.373
-rw-r--r--man3/libsimple_strisutf8.374
-rw-r--r--man3/libsimple_strncasechr.386
-rw-r--r--man3/libsimple_strncasechrnul.385
-rw-r--r--man3/libsimple_strncasecmpnul.391
-rw-r--r--man3/libsimple_strncaseends.376
-rw-r--r--man3/libsimple_strncaseeq.380
-rw-r--r--man3/libsimple_strncaseeqlen.382
-rw-r--r--man3/libsimple_strncaseeqnul.380
-rw-r--r--man3/libsimple_strncasestarts.377
-rw-r--r--man3/libsimple_strncasestr.382
-rw-r--r--man3/libsimple_strnchr.386
-rw-r--r--man3/libsimple_strnchrnul.386
-rw-r--r--man3/libsimple_strncmpnul.391
l---------man3/libsimple_strndupa.31
-rw-r--r--man3/libsimple_strnend.378
-rw-r--r--man3/libsimple_strnends.376
-rw-r--r--man3/libsimple_strneq.379
-rw-r--r--man3/libsimple_strneqlen.382
-rw-r--r--man3/libsimple_strneqnul.379
-rw-r--r--man3/libsimple_strnstarts.377
-rw-r--r--man3/libsimple_strnstr.382
-rw-r--r--man3/libsimple_strrcasechr.380
-rw-r--r--man3/libsimple_strrcaseeqlen.373
-rw-r--r--man3/libsimple_strrcasestr.379
-rw-r--r--man3/libsimple_strreqlen.373
-rw-r--r--man3/libsimple_strrncasechr.385
-rw-r--r--man3/libsimple_strrncaseeqlen.381
-rw-r--r--man3/libsimple_strrncasestr.382
-rw-r--r--man3/libsimple_strrnchr.385
-rw-r--r--man3/libsimple_strrneqlen.381
-rw-r--r--man3/libsimple_strrnstr.382
-rw-r--r--man3/libsimple_strrstr.379
-rw-r--r--man3/libsimple_strstarts.375
-rw-r--r--man3/libsimple_strtotimespec.3133
l---------man3/libsimple_strtotimeval.31
-rw-r--r--man3/libsimple_sumtimespec.3115
l---------man3/libsimple_sumtimeval.31
l---------man3/libsimple_timespec2timeval.31
-rw-r--r--man3/libsimple_timespectodouble.390
-rw-r--r--man3/libsimple_timespectostr.3145
-rw-r--r--man3/libsimple_timeval2timespec.3112
l---------man3/libsimple_timevaltodouble.31
l---------man3/libsimple_timevaltostr.31
-rw-r--r--man3/libsimple_unlist.398
-rw-r--r--man3/libsimple_valigned_allocn.3238
-rw-r--r--man3/libsimple_valigned_alloczn.3241
-rw-r--r--man3/libsimple_valloc.3168
l---------man3/libsimple_vallocn.31
-rw-r--r--man3/libsimple_vallocz.3179
l---------man3/libsimple_valloczn.31
-rw-r--r--man3/libsimple_varrayalloc.3215
-rw-r--r--man3/libsimple_vasprintf.3195
l---------man3/libsimple_vasprintfa.31
-rw-r--r--man3/libsimple_vcallocn.3230
l---------man3/libsimple_venprintf.31
l---------man3/libsimple_veprintf.31
-rw-r--r--man3/libsimple_vmallocn.3230
-rw-r--r--man3/libsimple_vmalloczn.3238
-rw-r--r--man3/libsimple_vmemalignn.3232
-rw-r--r--man3/libsimple_vmemalignzn.3235
-rw-r--r--man3/libsimple_vmemalloc.3301
-rw-r--r--man3/libsimple_vposix_memalignn.3235
-rw-r--r--man3/libsimple_vposix_memalignzn.3238
-rw-r--r--man3/libsimple_vputenvf.3196
-rw-r--r--man3/libsimple_vpvallocn.3230
-rw-r--r--man3/libsimple_vpvalloczn.3232
-rw-r--r--man3/libsimple_vreallocn.3243
-rw-r--r--man3/libsimple_vvallocn.3229
-rw-r--r--man3/libsimple_vvalloczn.3232
-rw-r--r--man3/libsimple_vweprintf.3221
l---------man3/libsimple_weprintf.31
l---------man3/mallocn.3libsimple1
l---------man3/mallocz.3libsimple1
l---------man3/malloczn.3libsimple1
l---------man3/memalign.3libsimple1
l---------man3/memalignn.3libsimple1
l---------man3/memalignz.3libsimple1
l---------man3/memalignzn.3libsimple1
l---------man3/memcasechr.3libsimple1
l---------man3/memcasecmp.3libsimple1
l---------man3/memcaseends.3libsimple1
l---------man3/memcaseeq.3libsimple1
l---------man3/memcaseeqlen.3libsimple1
l---------man3/memcasemem.3libsimple1
l---------man3/memcasestarts.3libsimple1
l---------man3/memdup.3libsimple1
l---------man3/memdupa.3libsimple1
l---------man3/memelem.3libsimple1
l---------man3/memends.3libsimple1
l---------man3/memeq.3libsimple1
l---------man3/memeqlen.3libsimple1
l---------man3/memmem.3libsimple1
l---------man3/mempcpy.3libsimple1
l---------man3/mempset.3libsimple1
l---------man3/mempsetelem.3libsimple1
l---------man3/memrcasechr.3libsimple1
l---------man3/memrcaseeqlen.3libsimple1
l---------man3/memrcasemem.3libsimple1
l---------man3/memrchr.3libsimple1
l---------man3/memrelem.3libsimple1
l---------man3/memreqlen.3libsimple1
l---------man3/memrmem.3libsimple1
l---------man3/memsetelem.3libsimple1
l---------man3/memstarts.3libsimple1
l---------man3/minimise_number_string.3libsimple1
l---------man3/multimespec.3libsimple1
l---------man3/multimeval.3libsimple1
l---------man3/posix_memalignn.3libsimple1
l---------man3/posix_memalignz.3libsimple1
l---------man3/posix_memalignzn.3libsimple1
l---------man3/putenvf.3libsimple1
l---------man3/pvalloc.3libsimple1
l---------man3/pvallocn.3libsimple1
l---------man3/pvallocz.3libsimple1
l---------man3/pvalloczn.3libsimple1
l---------man3/rawmemcasechr.3libsimple1
l---------man3/rawmemchr.3libsimple1
l---------man3/rawmemrcasechr.3libsimple1
l---------man3/rawmemrchr.3libsimple1
l---------man3/reallocn.3libsimple1
l---------man3/strcasechr.3libsimple1
l---------man3/strcasechrnul.3libsimple1
l---------man3/strcasecmpnul.3libsimple1
l---------man3/strcaseends.3libsimple1
l---------man3/strcaseeq.3libsimple1
l---------man3/strcaseeqlen.3libsimple1
l---------man3/strcaseeqnul.3libsimple1
l---------man3/strcasestarts.3libsimple1
l---------man3/strcasestr.3libsimple1
l---------man3/strchrnul.3libsimple1
l---------man3/strcmpnul.3libsimple1
l---------man3/strdupa.3libsimple1
l---------man3/strend.3libsimple1
l---------man3/strends.3libsimple1
l---------man3/streq.3libsimple1
l---------man3/streqlen.3libsimple1
l---------man3/streqnul.3libsimple1
l---------man3/strisutf8.3libsimple1
l---------man3/strncasechr.3libsimple1
l---------man3/strncasechrnul.3libsimple1
l---------man3/strncasecmpnul.3libsimple1
l---------man3/strncaseends.3libsimple1
l---------man3/strncaseeq.3libsimple1
l---------man3/strncaseeqlen.3libsimple1
l---------man3/strncaseeqnul.3libsimple1
l---------man3/strncasestarts.3libsimple1
l---------man3/strncasestr.3libsimple1
l---------man3/strnchr.3libsimple1
l---------man3/strnchrnul.3libsimple1
l---------man3/strncmpnul.3libsimple1
l---------man3/strndupa.3libsimple1
l---------man3/strnend.3libsimple1
l---------man3/strnends.3libsimple1
l---------man3/strneq.3libsimple1
l---------man3/strneqlen.3libsimple1
l---------man3/strneqnul.3libsimple1
l---------man3/strnstarts.3libsimple1
l---------man3/strnstr.3libsimple1
l---------man3/strrcasechr.3libsimple1
l---------man3/strrcaseeqlen.3libsimple1
l---------man3/strrcasestr.3libsimple1
l---------man3/strreqlen.3libsimple1
l---------man3/strrncasechr.3libsimple1
l---------man3/strrncaseeqlen.3libsimple1
l---------man3/strrncasestr.3libsimple1
l---------man3/strrnchr.3libsimple1
l---------man3/strrneqlen.3libsimple1
l---------man3/strrnstr.3libsimple1
l---------man3/strrstr.3libsimple1
l---------man3/strstarts.3libsimple1
l---------man3/strtotimespec.3libsimple1
l---------man3/strtotimeval.3libsimple1
l---------man3/sumtimespec.3libsimple1
l---------man3/sumtimeval.3libsimple1
l---------man3/timespec2timeval.3libsimple1
l---------man3/timespectodouble.3libsimple1
l---------man3/timespectostr.3libsimple1
l---------man3/timeval2timespec.3libsimple1
l---------man3/timevaltodouble.3libsimple1
l---------man3/timevaltostr.3libsimple1
l---------man3/unlist.3libsimple1
l---------man3/valigned_allocn.3libsimple1
l---------man3/valigned_alloczn.3libsimple1
l---------man3/valloc.3libsimple1
l---------man3/vallocn.3libsimple1
l---------man3/vallocz.3libsimple1
l---------man3/valloczn.3libsimple1
l---------man3/vasprintf.3libsimple1
l---------man3/vasprintfa.3libsimple1
l---------man3/vcallocn.3libsimple1
l---------man3/venprintf.3libsimple1
l---------man3/veprintf.3libsimple1
l---------man3/vmallocn.3libsimple1
l---------man3/vmalloczn.3libsimple1
l---------man3/vmemalignn.3libsimple1
l---------man3/vmemalignzn.3libsimple1
l---------man3/vposix_memalignn.3libsimple1
l---------man3/vposix_memalignzn.3libsimple1
l---------man3/vputenvf.3libsimple1
l---------man3/vpvallocn.3libsimple1
l---------man3/vpvalloczn.3libsimple1
l---------man3/vreallocn.3libsimple1
l---------man3/vvallocn.3libsimple1
l---------man3/vvalloczn.3libsimple1
l---------man3/vweprintf.3libsimple1
l---------man3/weprintf.3libsimple1
529 files changed, 15752 insertions, 0 deletions
diff --git a/man3/ELEMSOF.3libsimple b/man3/ELEMSOF.3libsimple
new file mode 100644
index 0000000..b40d563
--- /dev/null
+++ b/man3/ELEMSOF.3libsimple
@@ -0,0 +1,34 @@
+.TH ELEMSOF 3 2018-11-05 libsimple
+.SH NAME
+ELEMSOF \- get the size of an array
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef ELEMSOF
+# define ELEMSOF(arr) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR ELEMSOF ()
+macro assumes
+.I arr
+is an array (not a pointer) and expands, as
+a constant expression. The type of the expression
+the macro expands to is
+.BR size_t .
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR STRLEN (3libsimple)
diff --git a/man3/INTSTRLEN.3libsimple b/man3/INTSTRLEN.3libsimple
new file mode 100644
index 0000000..63c1485
--- /dev/null
+++ b/man3/INTSTRLEN.3libsimple
@@ -0,0 +1,46 @@
+.TH INTSTRLEN 3 2018-11-05 libsimple
+.SH NAME
+INTSTRLEN \- get the maximum length of an integer string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef INTSTRLEN
+# define INTSTRLEN(type) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR INTSTRLEN ()
+macro assumes
+.I type
+is an integer type, and expends to a value representing
+a number of bytes sufficiently large to store any value
+of the specified integer type as a string without leading
+zeroes or plus sign, and
+.IR "without a terminating NUL byte" ,
+as a constant expression in the type
+.BR size_t ;
+however it is not suitable for
+.BR #if .
+.PP
+The resulting value can depend in either the type is
+signed or unsigned, and can be slightly larger than
+necessary, it can however not be smaller. (For integers
+up to 64 bits, the result is only off by one for signed
+64-bit integer types.)
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR TYPE_MIN (3libsimple)
+.BR TYPE_MAX (3libsimple)
diff --git a/man3/LIBSIMPLE_UNLIST.3 b/man3/LIBSIMPLE_UNLIST.3
new file mode 120000
index 0000000..d075ee4
--- /dev/null
+++ b/man3/LIBSIMPLE_UNLIST.3
@@ -0,0 +1 @@
+libsimple_unlist.3 \ No newline at end of file
diff --git a/man3/MAX.3libsimple b/man3/MAX.3libsimple
new file mode 100644
index 0000000..e4a4d62
--- /dev/null
+++ b/man3/MAX.3libsimple
@@ -0,0 +1,58 @@
+.TH MAX 3 2018-11-05 libsimple
+.SH NAME
+MAX \- get the greater of two values
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef MAX
+# define MAX(a, b) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR MAX ()
+macro is a function-like macro that
+returns the greater of the values
+.I a
+and
+.IR b .
+.PP
+The
+.I a
+and
+.I b
+expressions must not have side-effects.
+.PP
+If both of the
+.I a
+and
+.I b
+parameters are constants expressions, the
+return value is also a constant expression.
+.SH RETURN VALUE
+The
+.BR MAX ()
+macro returns to the greater value.
+.SH ERRORS
+The
+.BR libsimple_close ()
+function fail for the reasons specified for the
+.BR close (3)
+function.
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR MIN (3libsimple),
+.BR MIN3 (3libsimple),
+.BR MAX3 (3libsimple)
diff --git a/man3/MAX3.3libsimple b/man3/MAX3.3libsimple
new file mode 100644
index 0000000..103169a
--- /dev/null
+++ b/man3/MAX3.3libsimple
@@ -0,0 +1,61 @@
+.TH MAX3 3 2018-11-05 libsimple
+.SH NAME
+MAX3 \- get the greatest of three values
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef MAX3
+# define MAX3(a, b, c) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR MAX3 ()
+macro is a function-like macro that
+returns the greatest of the values
+.IR a ,
+.IR b ,
+and
+.IR c .
+.PP
+The
+.IR a ,
+.IR b ,
+and
+.I c
+expressions must not have side-effects.
+.PP
+If all three of the
+.IR a ,
+.IR b ,
+and
+.I c
+parameters are constants expressions, the
+return value is also a constant expression.
+.SH RETURN VALUE
+The
+.BR MAX3 ()
+macro returns to the greatest of value.
+.SH ERRORS
+The
+.BR libsimple_close ()
+function fail for the reasons specified for the
+.BR close (3)
+function.
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR MIN (3libsimple),
+.BR MAX (3libsimple),
+.BR MIN3 (3libsimple)
diff --git a/man3/MIN.3libsimple b/man3/MIN.3libsimple
new file mode 100644
index 0000000..d88216e
--- /dev/null
+++ b/man3/MIN.3libsimple
@@ -0,0 +1,58 @@
+.TH MIN 3 2018-11-05 libsimple
+.SH NAME
+MIN \- get the lesser of two values
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef MIN
+# define MIN(a, b) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR MIN ()
+macro is a function-like macro that
+returns the lesser of the values
+.I a
+and
+.IR b .
+.PP
+The
+.I a
+and
+.I b
+expressions must not have side-effects.
+.PP
+If both of the
+.I a
+and
+.I b
+parameters are constants expressions, the
+return value is also a constant expression.
+.SH RETURN VALUE
+The
+.BR MIN ()
+macro returns to the lesser value.
+.SH ERRORS
+The
+.BR libsimple_close ()
+function fail for the reasons specified for the
+.BR close (3)
+function.
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR MAX (3libsimple),
+.BR MIN3 (3libsimple),
+.BR MAX3 (3libsimple)
diff --git a/man3/MIN3.3libsimple b/man3/MIN3.3libsimple
new file mode 100644
index 0000000..c915781
--- /dev/null
+++ b/man3/MIN3.3libsimple
@@ -0,0 +1,61 @@
+.TH MIN3 3 2018-11-05 libsimple
+.SH NAME
+MIN3 \- get the smallest of three values
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef MIN3
+# define MIN3(a, b, c) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR MIN3 ()
+macro is a function-like macro that
+returns the smallest of the values
+.IR a ,
+.IR b ,
+and
+.IR c .
+.PP
+The
+.IR a ,
+.IR b ,
+and
+.I c
+expressions must not have side-effects.
+.PP
+If all three of the
+.IR a ,
+.IR b ,
+and
+.I c
+parameters are constants expressions, the
+return value is also a constant expression.
+.SH RETURN VALUE
+The
+.BR MIN3 ()
+macro returns to the smallest of value.
+.SH ERRORS
+The
+.BR libsimple_close ()
+function fail for the reasons specified for the
+.BR close (3)
+function.
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR MIN (3libsimple),
+.BR MAX (3libsimple),
+.BR MAX3 (3libsimple)
diff --git a/man3/STRLEN.3libsimple b/man3/STRLEN.3libsimple
new file mode 100644
index 0000000..06ccecf
--- /dev/null
+++ b/man3/STRLEN.3libsimple
@@ -0,0 +1,41 @@
+.TH STRLEN 3 2018-11-05 libsimple
+.SH NAME
+STRLEN \- get the length of a string literal
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef STRLEN
+# define STRLEN(str) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR STRLEN ()
+macro assumes
+.I str
+is string literal
+.RB ( char
+array type) and expands the value of
+.I strlen(str)
+as a constant expression, that is, without
+calling
+.IR strlen ;
+however it is not suitable for
+.BR #if .
+The type of the expression the macro expands to is
+.BR size_t .
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR ELEMSOF (3libsimple)
diff --git a/man3/TYPE_MAX.3libsimple b/man3/TYPE_MAX.3libsimple
new file mode 100644
index 0000000..c132ec9
--- /dev/null
+++ b/man3/TYPE_MAX.3libsimple
@@ -0,0 +1,77 @@
+.TH TYPE_MAX 3 2018-11-05 libsimple
+.SH NAME
+TYPE_MAX \- get largest value for an integer type
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef TYPE_MAX
+# define TYPE_MAX(type) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR TYPE_MAX ()
+macro assumes
+.I type
+is an integer type and expands to the largest value
+that can be stored in the
+.IR TYPE ,
+as a constant expression; however it is not suitable for
+.BR #if .
+.PP
+The
+.IB <libsimple.h>
+heading contains macro constants, using the
+.BR TYPE_MAX ()
+macro, for the maximum value for multiple integer types:
+.BR BLKCNT64_MAX ,
+.BR BLKCNT_MAX ,
+.BR BLKSIZE_MAX ,
+.BR CC_MAX ,
+.BR CLOCKID_MAX ,
+.BR CLOCK_MAX ,
+.BR DEV_MAX ,
+.BR FSBLKCNT64_MAX ,
+.BR FSBLKCNT_MAX ,
+.BR FSFILCNT64_MAX ,
+.BR FSFILCNT_MAX ,
+.BR GID_MAX ,
+.BR ID_MAX ,
+.BR INO64_MAX ,
+.BR INO_MAX ,
+.BR KEY_MAX ,
+.BR LOFF_MAX ,
+.BR MODE_MAX ,
+.BR NLINK_MAX ,
+.BR OFF64_MAX ,
+.BR OFF_MAX ,
+.BR PID_MAX ,
+.BR QUAD_MAX ,
+.BR REGISTER_MAX ,
+.BR RLIM64_MAX ,
+.BR RLIM_MAX ,
+.BR SOCKLEN_MAX ,
+.BR SPEED_MAX ,
+.BR SUSECONDS_MAX ,
+.BR TCFLAG_MAX ,
+.BR TIME_MAX ,
+.BR UID_MAX ,
+.BR USECONDS_MAX ,
+and
+.BR U_QUAD_MAX .
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR TYPE_MIN (3libsimple)
+.BR INTSTRLEN (3libsimple)
diff --git a/man3/TYPE_MIN.3libsimple b/man3/TYPE_MIN.3libsimple
new file mode 100644
index 0000000..6720465
--- /dev/null
+++ b/man3/TYPE_MIN.3libsimple
@@ -0,0 +1,77 @@
+.TH TYPE_MIN 3 2018-11-05 libsimple
+.SH NAME
+TYPE_MIN \- get smallest value for an integer type
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+#ifndef TYPE_MIN
+# define TYPE_MIN(type) /* implementation omitted */
+#endif
+.fi
+.SH DESCRIPTION
+The
+.BR TYPE_MIN ()
+macro assumes
+.I type
+is an integer type and expands to the smallest value
+that can be stored in the
+.IR TYPE ,
+as a constant expression; however it is not suitable for
+.BR #if .
+.PP
+The
+.IB <libsimple.h>
+heading contains macro constants, using the
+.BR TYPE_MIN ()
+macro, for the minimum value for multiple integer types:
+.BR BLKCNT64_MIN ,
+.BR BLKCNT_MIN ,
+.BR BLKSIZE_MIN ,
+.BR CC_MIN ,
+.BR CLOCKID_MIN ,
+.BR CLOCK_MIN ,
+.BR DEV_MIN ,
+.BR FSBLKCNT64_MIN ,
+.BR FSBLKCNT_MIN ,
+.BR FSFILCNT64_MIN ,
+.BR FSFILCNT_MIN ,
+.BR GID_MIN ,
+.BR ID_MIN ,
+.BR INO64_MIN ,
+.BR INO_MIN ,
+.BR KEY_MIN ,
+.BR LOFF_MIN ,
+.BR MODE_MIN ,
+.BR NLINK_MIN ,
+.BR OFF64_MIN ,
+.BR OFF_MIN ,
+.BR PID_MIN ,
+.BR QUAD_MIN ,
+.BR REGISTER_MIN ,
+.BR RLIM64_MIN ,
+.BR RLIM_MIN ,
+.BR SOCKLEN_MIN ,
+.BR SPEED_MIN ,
+.BR SUSECONDS_MIN ,
+.BR TCFLAG_MIN ,
+.BR TIME_MIN ,
+.BR UID_MIN ,
+.BR USECONDS_MIN ,
+and
+.BR U_QUAD_MIN .
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR TYPE_MAX (3libsimple)
+.BR INTSTRLEN (3libsimple)
diff --git a/man3/UNLIST.3libsimple b/man3/UNLIST.3libsimple
new file mode 120000
index 0000000..e424549
--- /dev/null
+++ b/man3/UNLIST.3libsimple
@@ -0,0 +1 @@
+LIBSIMPLE_UNLIST.3 \ No newline at end of file
diff --git a/man3/aligned_allocn.3libsimple b/man3/aligned_allocn.3libsimple
new file mode 120000
index 0000000..035b2be
--- /dev/null
+++ b/man3/aligned_allocn.3libsimple
@@ -0,0 +1 @@
+libsimple_aligned_allocn.3 \ No newline at end of file
diff --git a/man3/aligned_allocz.3libsimple b/man3/aligned_allocz.3libsimple
new file mode 120000
index 0000000..f4cc746
--- /dev/null
+++ b/man3/aligned_allocz.3libsimple
@@ -0,0 +1 @@
+libsimple_aligned_allocz.3 \ No newline at end of file
diff --git a/man3/aligned_alloczn.3libsimple b/man3/aligned_alloczn.3libsimple
new file mode 120000
index 0000000..376a797
--- /dev/null
+++ b/man3/aligned_alloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_aligned_alloczn.3 \ No newline at end of file
diff --git a/man3/aligned_memdup.3libsimple b/man3/aligned_memdup.3libsimple
new file mode 120000
index 0000000..a9c2fef
--- /dev/null
+++ b/man3/aligned_memdup.3libsimple
@@ -0,0 +1 @@
+libsimple_aligned_memdup.3 \ No newline at end of file
diff --git a/man3/aligned_memdupa.3libsimple b/man3/aligned_memdupa.3libsimple
new file mode 120000
index 0000000..1a50c24
--- /dev/null
+++ b/man3/aligned_memdupa.3libsimple
@@ -0,0 +1 @@
+libsimple_aligned_memdupa.3 \ No newline at end of file
diff --git a/man3/asprintf.3libsimple b/man3/asprintf.3libsimple
new file mode 120000
index 0000000..1d682f8
--- /dev/null
+++ b/man3/asprintf.3libsimple
@@ -0,0 +1 @@
+libsimple_asprintf.3 \ No newline at end of file
diff --git a/man3/asprintfa.3libsimple b/man3/asprintfa.3libsimple
new file mode 120000
index 0000000..2fc83bf
--- /dev/null
+++ b/man3/asprintfa.3libsimple
@@ -0,0 +1 @@
+libsimple_asprintfa.3 \ No newline at end of file
diff --git a/man3/callocn.3libsimple b/man3/callocn.3libsimple
new file mode 120000
index 0000000..77904c3
--- /dev/null
+++ b/man3/callocn.3libsimple
@@ -0,0 +1 @@
+libsimple_callocn.3 \ No newline at end of file
diff --git a/man3/cmptimespec.3libsimple b/man3/cmptimespec.3libsimple
new file mode 120000
index 0000000..8199c4e
--- /dev/null
+++ b/man3/cmptimespec.3libsimple
@@ -0,0 +1 @@
+libsimple_cmptimespec.3 \ No newline at end of file
diff --git a/man3/cmptimeval.3libsimple b/man3/cmptimeval.3libsimple
new file mode 120000
index 0000000..6831169
--- /dev/null
+++ b/man3/cmptimeval.3libsimple
@@ -0,0 +1 @@
+libsimple_cmptimeval.3 \ No newline at end of file
diff --git a/man3/difftimespec.3libsimple b/man3/difftimespec.3libsimple
new file mode 120000
index 0000000..b03eae5
--- /dev/null
+++ b/man3/difftimespec.3libsimple
@@ -0,0 +1 @@
+libsimple_difftimespec.3 \ No newline at end of file
diff --git a/man3/difftimeval.3libsimple b/man3/difftimeval.3libsimple
new file mode 120000
index 0000000..96c8b98
--- /dev/null
+++ b/man3/difftimeval.3libsimple
@@ -0,0 +1 @@
+libsimple_difftimeval.3 \ No newline at end of file
diff --git a/man3/doubletotimespec.3libsimple b/man3/doubletotimespec.3libsimple
new file mode 120000
index 0000000..4158ff1
--- /dev/null
+++ b/man3/doubletotimespec.3libsimple
@@ -0,0 +1 @@
+libsimple_doubletotimespec.3 \ No newline at end of file
diff --git a/man3/doubletotimeval.3libsimple b/man3/doubletotimeval.3libsimple
new file mode 120000
index 0000000..c61511a
--- /dev/null
+++ b/man3/doubletotimeval.3libsimple
@@ -0,0 +1 @@
+libsimple_doubletotimeval.3 \ No newline at end of file
diff --git a/man3/ealigned_alloc.3libsimple b/man3/ealigned_alloc.3libsimple
new file mode 120000
index 0000000..c95284e
--- /dev/null
+++ b/man3/ealigned_alloc.3libsimple
@@ -0,0 +1 @@
+libsimple_ealigned_alloc.3 \ No newline at end of file
diff --git a/man3/ealigned_allocn.3libsimple b/man3/ealigned_allocn.3libsimple
new file mode 120000
index 0000000..d283147
--- /dev/null
+++ b/man3/ealigned_allocn.3libsimple
@@ -0,0 +1 @@
+libsimple_ealigned_allocn.3 \ No newline at end of file
diff --git a/man3/ealigned_allocz.3libsimple b/man3/ealigned_allocz.3libsimple
new file mode 120000
index 0000000..40d949e
--- /dev/null
+++ b/man3/ealigned_allocz.3libsimple
@@ -0,0 +1 @@
+libsimple_ealigned_allocz.3 \ No newline at end of file
diff --git a/man3/ealigned_alloczn.3libsimple b/man3/ealigned_alloczn.3libsimple
new file mode 120000
index 0000000..592cff2
--- /dev/null
+++ b/man3/ealigned_alloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_ealigned_alloczn.3 \ No newline at end of file
diff --git a/man3/ealigned_memdup.3libsimple b/man3/ealigned_memdup.3libsimple
new file mode 120000
index 0000000..f860b87
--- /dev/null
+++ b/man3/ealigned_memdup.3libsimple
@@ -0,0 +1 @@
+libsimple_ealigned_memdup.3 \ No newline at end of file
diff --git a/man3/ecalloc.3libsimple b/man3/ecalloc.3libsimple
new file mode 120000
index 0000000..d2ace0f
--- /dev/null
+++ b/man3/ecalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_ecalloc.3 \ No newline at end of file
diff --git a/man3/ecallocn.3libsimple b/man3/ecallocn.3libsimple
new file mode 120000
index 0000000..146a819
--- /dev/null
+++ b/man3/ecallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_ecallocn.3 \ No newline at end of file
diff --git a/man3/emalloc.3libsimple b/man3/emalloc.3libsimple
new file mode 120000
index 0000000..30254ee
--- /dev/null
+++ b/man3/emalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_emalloc.3 \ No newline at end of file
diff --git a/man3/emallocn.3libsimple b/man3/emallocn.3libsimple
new file mode 120000
index 0000000..bdcff7f
--- /dev/null
+++ b/man3/emallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_emallocn.3 \ No newline at end of file
diff --git a/man3/emallocz.3libsimple b/man3/emallocz.3libsimple
new file mode 120000
index 0000000..a146d6f
--- /dev/null
+++ b/man3/emallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_emallocz.3 \ No newline at end of file
diff --git a/man3/emalloczn.3libsimple b/man3/emalloczn.3libsimple
new file mode 120000
index 0000000..83eceec
--- /dev/null
+++ b/man3/emalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_emalloczn.3 \ No newline at end of file
diff --git a/man3/ememalign.3libsimple b/man3/ememalign.3libsimple
new file mode 120000
index 0000000..ac40060
--- /dev/null
+++ b/man3/ememalign.3libsimple
@@ -0,0 +1 @@
+libsimple_ememalign.3 \ No newline at end of file
diff --git a/man3/ememalignn.3libsimple b/man3/ememalignn.3libsimple
new file mode 120000
index 0000000..c3c1ced
--- /dev/null
+++ b/man3/ememalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_ememalignn.3 \ No newline at end of file
diff --git a/man3/ememalignz.3libsimple b/man3/ememalignz.3libsimple
new file mode 120000
index 0000000..904ffac
--- /dev/null
+++ b/man3/ememalignz.3libsimple
@@ -0,0 +1 @@
+libsimple_ememalignz.3 \ No newline at end of file
diff --git a/man3/ememalignzn.3libsimple b/man3/ememalignzn.3libsimple
new file mode 120000
index 0000000..d4ed2d0
--- /dev/null
+++ b/man3/ememalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_ememalignzn.3 \ No newline at end of file
diff --git a/man3/ememdup.3libsimple b/man3/ememdup.3libsimple
new file mode 120000
index 0000000..ea4b242
--- /dev/null
+++ b/man3/ememdup.3libsimple
@@ -0,0 +1 @@
+libsimple_ememdup.3 \ No newline at end of file
diff --git a/man3/enaligned_alloc.3libsimple b/man3/enaligned_alloc.3libsimple
new file mode 120000
index 0000000..1737ec8
--- /dev/null
+++ b/man3/enaligned_alloc.3libsimple
@@ -0,0 +1 @@
+libsimple_enaligned_alloc.3 \ No newline at end of file
diff --git a/man3/enaligned_allocn.3libsimple b/man3/enaligned_allocn.3libsimple
new file mode 120000
index 0000000..b8399e7
--- /dev/null
+++ b/man3/enaligned_allocn.3libsimple
@@ -0,0 +1 @@
+libsimple_enaligned_allocn.3 \ No newline at end of file
diff --git a/man3/enaligned_allocz.3libsimple b/man3/enaligned_allocz.3libsimple
new file mode 120000
index 0000000..c6dc93f
--- /dev/null
+++ b/man3/enaligned_allocz.3libsimple
@@ -0,0 +1 @@
+libsimple_enaligned_allocz.3 \ No newline at end of file
diff --git a/man3/enaligned_alloczn.3libsimple b/man3/enaligned_alloczn.3libsimple
new file mode 120000
index 0000000..7f167e0
--- /dev/null
+++ b/man3/enaligned_alloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_enaligned_alloczn.3 \ No newline at end of file
diff --git a/man3/enaligned_memdup.3libsimple b/man3/enaligned_memdup.3libsimple
new file mode 120000
index 0000000..b6e0dd2
--- /dev/null
+++ b/man3/enaligned_memdup.3libsimple
@@ -0,0 +1 @@
+libsimple_enaligned_memdup.3 \ No newline at end of file
diff --git a/man3/encalloc.3libsimple b/man3/encalloc.3libsimple
new file mode 120000
index 0000000..a7bfcfa
--- /dev/null
+++ b/man3/encalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_encalloc.3 \ No newline at end of file
diff --git a/man3/encallocn.3libsimple b/man3/encallocn.3libsimple
new file mode 120000
index 0000000..a0909c1
--- /dev/null
+++ b/man3/encallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_encallocn.3 \ No newline at end of file
diff --git a/man3/enmalloc.3libsimple b/man3/enmalloc.3libsimple
new file mode 120000
index 0000000..26cfa44
--- /dev/null
+++ b/man3/enmalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_enmalloc.3 \ No newline at end of file
diff --git a/man3/enmallocn.3libsimple b/man3/enmallocn.3libsimple
new file mode 120000
index 0000000..efb153b
--- /dev/null
+++ b/man3/enmallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_enmallocn.3 \ No newline at end of file
diff --git a/man3/enmallocz.3libsimple b/man3/enmallocz.3libsimple
new file mode 120000
index 0000000..3b99dc1
--- /dev/null
+++ b/man3/enmallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_enmallocz.3 \ No newline at end of file
diff --git a/man3/enmalloczn.3libsimple b/man3/enmalloczn.3libsimple
new file mode 120000
index 0000000..b063712
--- /dev/null
+++ b/man3/enmalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_enmalloczn.3 \ No newline at end of file
diff --git a/man3/enmemalign.3libsimple b/man3/enmemalign.3libsimple
new file mode 120000
index 0000000..ce980d3
--- /dev/null
+++ b/man3/enmemalign.3libsimple
@@ -0,0 +1 @@
+libsimple_enmemalign.3 \ No newline at end of file
diff --git a/man3/enmemalignn.3libsimple b/man3/enmemalignn.3libsimple
new file mode 120000
index 0000000..8d62253
--- /dev/null
+++ b/man3/enmemalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_enmemalignn.3 \ No newline at end of file
diff --git a/man3/enmemalignz.3libsimple b/man3/enmemalignz.3libsimple
new file mode 120000
index 0000000..2b282d2
--- /dev/null
+++ b/man3/enmemalignz.3libsimple
@@ -0,0 +1 @@
+libsimple_enmemalignz.3 \ No newline at end of file
diff --git a/man3/enmemalignzn.3libsimple b/man3/enmemalignzn.3libsimple
new file mode 120000
index 0000000..f3e8942
--- /dev/null
+++ b/man3/enmemalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_enmemalignzn.3 \ No newline at end of file
diff --git a/man3/enmemdup.3libsimple b/man3/enmemdup.3libsimple
new file mode 120000
index 0000000..b7ce69c
--- /dev/null
+++ b/man3/enmemdup.3libsimple
@@ -0,0 +1 @@
+libsimple_enmemdup.3 \ No newline at end of file
diff --git a/man3/enposix_memalign.3libsimple b/man3/enposix_memalign.3libsimple
new file mode 120000
index 0000000..4276ade
--- /dev/null
+++ b/man3/enposix_memalign.3libsimple
@@ -0,0 +1 @@
+libsimple_enposix_memalign.3 \ No newline at end of file
diff --git a/man3/enposix_memalignn.3libsimple b/man3/enposix_memalignn.3libsimple
new file mode 120000
index 0000000..363ca79
--- /dev/null
+++ b/man3/enposix_memalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_enposix_memalignn.3 \ No newline at end of file
diff --git a/man3/enposix_memalignz.3libsimple b/man3/enposix_memalignz.3libsimple
new file mode 120000
index 0000000..2aba726
--- /dev/null
+++ b/man3/enposix_memalignz.3libsimple
@@ -0,0 +1 @@
+libsimple_enposix_memalignz.3 \ No newline at end of file
diff --git a/man3/enposix_memalignzn.3libsimple b/man3/enposix_memalignzn.3libsimple
new file mode 120000
index 0000000..a6d27c4
--- /dev/null
+++ b/man3/enposix_memalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_enposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/enprintf.3libsimple b/man3/enprintf.3libsimple
new file mode 120000
index 0000000..3d2d430
--- /dev/null
+++ b/man3/enprintf.3libsimple
@@ -0,0 +1 @@
+libsimple_enprintf.3 \ No newline at end of file
diff --git a/man3/enputenvf.3libsimple b/man3/enputenvf.3libsimple
new file mode 120000
index 0000000..640377b
--- /dev/null
+++ b/man3/enputenvf.3libsimple
@@ -0,0 +1 @@
+libsimple_enputenvf.3 \ No newline at end of file
diff --git a/man3/enpvalloc.3libsimple b/man3/enpvalloc.3libsimple
new file mode 120000
index 0000000..1c3b2df
--- /dev/null
+++ b/man3/enpvalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_enpvalloc.3 \ No newline at end of file
diff --git a/man3/enpvallocn.3libsimple b/man3/enpvallocn.3libsimple
new file mode 120000
index 0000000..ed1f5b5
--- /dev/null
+++ b/man3/enpvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_enpvallocn.3 \ No newline at end of file
diff --git a/man3/enpvallocz.3libsimple b/man3/enpvallocz.3libsimple
new file mode 120000
index 0000000..e8601bd
--- /dev/null
+++ b/man3/enpvallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_enpvallocz.3 \ No newline at end of file
diff --git a/man3/enpvalloczn.3libsimple b/man3/enpvalloczn.3libsimple
new file mode 120000
index 0000000..1623378
--- /dev/null
+++ b/man3/enpvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_enpvalloczn.3 \ No newline at end of file
diff --git a/man3/enrealloc.3libsimple b/man3/enrealloc.3libsimple
new file mode 120000
index 0000000..cbe7b4b
--- /dev/null
+++ b/man3/enrealloc.3libsimple
@@ -0,0 +1 @@
+libsimple_enrealloc.3 \ No newline at end of file
diff --git a/man3/enreallocn.3libsimple b/man3/enreallocn.3libsimple
new file mode 120000
index 0000000..a27d46a
--- /dev/null
+++ b/man3/enreallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_enreallocn.3 \ No newline at end of file
diff --git a/man3/enstrdup.3libsimple b/man3/enstrdup.3libsimple
new file mode 120000
index 0000000..e8f7b76
--- /dev/null
+++ b/man3/enstrdup.3libsimple
@@ -0,0 +1 @@
+libsimple_enstrdup.3 \ No newline at end of file
diff --git a/man3/enstrndup.3libsimple b/man3/enstrndup.3libsimple
new file mode 120000
index 0000000..e2011e0
--- /dev/null
+++ b/man3/enstrndup.3libsimple
@@ -0,0 +1 @@
+libsimple_enstrndup.3 \ No newline at end of file
diff --git a/man3/envaligned_allocn.3libsimple b/man3/envaligned_allocn.3libsimple
new file mode 120000
index 0000000..0d90fb2
--- /dev/null
+++ b/man3/envaligned_allocn.3libsimple
@@ -0,0 +1 @@
+libsimple_envaligned_allocn.3 \ No newline at end of file
diff --git a/man3/envaligned_alloczn.3libsimple b/man3/envaligned_alloczn.3libsimple
new file mode 120000
index 0000000..267b5dc
--- /dev/null
+++ b/man3/envaligned_alloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_envaligned_alloczn.3 \ No newline at end of file
diff --git a/man3/envalloc.3libsimple b/man3/envalloc.3libsimple
new file mode 120000
index 0000000..191ecac
--- /dev/null
+++ b/man3/envalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_envalloc.3 \ No newline at end of file
diff --git a/man3/envallocn.3libsimple b/man3/envallocn.3libsimple
new file mode 120000
index 0000000..ec6733a
--- /dev/null
+++ b/man3/envallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_envallocn.3 \ No newline at end of file
diff --git a/man3/envallocz.3libsimple b/man3/envallocz.3libsimple
new file mode 120000
index 0000000..34cfcb2
--- /dev/null
+++ b/man3/envallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_envallocz.3 \ No newline at end of file
diff --git a/man3/envalloczn.3libsimple b/man3/envalloczn.3libsimple
new file mode 120000
index 0000000..a9ee8b5
--- /dev/null
+++ b/man3/envalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_envalloczn.3 \ No newline at end of file
diff --git a/man3/envcallocn.3libsimple b/man3/envcallocn.3libsimple
new file mode 120000
index 0000000..83dd452
--- /dev/null
+++ b/man3/envcallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_envcallocn.3 \ No newline at end of file
diff --git a/man3/envmallocn.3libsimple b/man3/envmallocn.3libsimple
new file mode 120000
index 0000000..3448d63
--- /dev/null
+++ b/man3/envmallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_envmallocn.3 \ No newline at end of file
diff --git a/man3/envmalloczn.3libsimple b/man3/envmalloczn.3libsimple
new file mode 120000
index 0000000..bc3e9fd
--- /dev/null
+++ b/man3/envmalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_envmalloczn.3 \ No newline at end of file
diff --git a/man3/envmemalignn.3libsimple b/man3/envmemalignn.3libsimple
new file mode 120000
index 0000000..7589a73
--- /dev/null
+++ b/man3/envmemalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_envmemalignn.3 \ No newline at end of file
diff --git a/man3/envmemalignzn.3libsimple b/man3/envmemalignzn.3libsimple
new file mode 120000
index 0000000..da91395
--- /dev/null
+++ b/man3/envmemalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_envmemalignzn.3 \ No newline at end of file
diff --git a/man3/envposix_memalignn.3libsimple b/man3/envposix_memalignn.3libsimple
new file mode 120000
index 0000000..70b88c2
--- /dev/null
+++ b/man3/envposix_memalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_envposix_memalignn.3 \ No newline at end of file
diff --git a/man3/envposix_memalignzn.3libsimple b/man3/envposix_memalignzn.3libsimple
new file mode 120000
index 0000000..e42eac6
--- /dev/null
+++ b/man3/envposix_memalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_envposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/envputenvf.3libsimple b/man3/envputenvf.3libsimple
new file mode 120000
index 0000000..1b96365
--- /dev/null
+++ b/man3/envputenvf.3libsimple
@@ -0,0 +1 @@
+libsimple_envputenvf.3 \ No newline at end of file
diff --git a/man3/envpvallocn.3libsimple b/man3/envpvallocn.3libsimple
new file mode 120000
index 0000000..0c26fb6
--- /dev/null
+++ b/man3/envpvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_envpvallocn.3 \ No newline at end of file
diff --git a/man3/envpvalloczn.3libsimple b/man3/envpvalloczn.3libsimple
new file mode 120000
index 0000000..8b5142a
--- /dev/null
+++ b/man3/envpvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_envpvalloczn.3 \ No newline at end of file
diff --git a/man3/envreallocn.3libsimple b/man3/envreallocn.3libsimple
new file mode 120000
index 0000000..a97bab1
--- /dev/null
+++ b/man3/envreallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_envreallocn.3 \ No newline at end of file
diff --git a/man3/envvallocn.3libsimple b/man3/envvallocn.3libsimple
new file mode 120000
index 0000000..31f4783
--- /dev/null
+++ b/man3/envvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_envvallocn.3 \ No newline at end of file
diff --git a/man3/envvalloczn.3libsimple b/man3/envvalloczn.3libsimple
new file mode 120000
index 0000000..07cd4f3
--- /dev/null
+++ b/man3/envvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_envvalloczn.3 \ No newline at end of file
diff --git a/man3/eposix_memalign.3libsimple b/man3/eposix_memalign.3libsimple
new file mode 120000
index 0000000..7f0725e
--- /dev/null
+++ b/man3/eposix_memalign.3libsimple
@@ -0,0 +1 @@
+libsimple_eposix_memalign.3 \ No newline at end of file
diff --git a/man3/eposix_memalignn.3libsimple b/man3/eposix_memalignn.3libsimple
new file mode 120000
index 0000000..a6cbfa1
--- /dev/null
+++ b/man3/eposix_memalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_eposix_memalignn.3 \ No newline at end of file
diff --git a/man3/eposix_memalignz.3libsimple b/man3/eposix_memalignz.3libsimple
new file mode 120000
index 0000000..beded2e
--- /dev/null
+++ b/man3/eposix_memalignz.3libsimple
@@ -0,0 +1 @@
+libsimple_eposix_memalignz.3 \ No newline at end of file
diff --git a/man3/eposix_memalignzn.3libsimple b/man3/eposix_memalignzn.3libsimple
new file mode 120000
index 0000000..749b1e7
--- /dev/null
+++ b/man3/eposix_memalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_eposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/eprintf.3libsimple b/man3/eprintf.3libsimple
new file mode 120000
index 0000000..07276cb
--- /dev/null
+++ b/man3/eprintf.3libsimple
@@ -0,0 +1 @@
+libsimple_eprintf.3 \ No newline at end of file
diff --git a/man3/eputenvf.3libsimple b/man3/eputenvf.3libsimple
new file mode 120000
index 0000000..f1831a3
--- /dev/null
+++ b/man3/eputenvf.3libsimple
@@ -0,0 +1 @@
+libsimple_eputenvf.3 \ No newline at end of file
diff --git a/man3/epvalloc.3libsimple b/man3/epvalloc.3libsimple
new file mode 120000
index 0000000..a768ca7
--- /dev/null
+++ b/man3/epvalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_epvalloc.3 \ No newline at end of file
diff --git a/man3/epvallocn.3libsimple b/man3/epvallocn.3libsimple
new file mode 120000
index 0000000..793d73c
--- /dev/null
+++ b/man3/epvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_epvallocn.3 \ No newline at end of file
diff --git a/man3/epvallocz.3libsimple b/man3/epvallocz.3libsimple
new file mode 120000
index 0000000..88a7fa0
--- /dev/null
+++ b/man3/epvallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_epvallocz.3 \ No newline at end of file
diff --git a/man3/epvalloczn.3libsimple b/man3/epvalloczn.3libsimple
new file mode 120000
index 0000000..8a8b791
--- /dev/null
+++ b/man3/epvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_epvalloczn.3 \ No newline at end of file
diff --git a/man3/erealloc.3libsimple b/man3/erealloc.3libsimple
new file mode 120000
index 0000000..e5aafb6
--- /dev/null
+++ b/man3/erealloc.3libsimple
@@ -0,0 +1 @@
+libsimple_erealloc.3 \ No newline at end of file
diff --git a/man3/ereallocn.3libsimple b/man3/ereallocn.3libsimple
new file mode 120000
index 0000000..4f77337
--- /dev/null
+++ b/man3/ereallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_ereallocn.3 \ No newline at end of file
diff --git a/man3/estrdup.3libsimple b/man3/estrdup.3libsimple
new file mode 120000
index 0000000..df20a38
--- /dev/null
+++ b/man3/estrdup.3libsimple
@@ -0,0 +1 @@
+libsimple_estrdup.3 \ No newline at end of file
diff --git a/man3/estrndup.3libsimple b/man3/estrndup.3libsimple
new file mode 120000
index 0000000..5c08b65
--- /dev/null
+++ b/man3/estrndup.3libsimple
@@ -0,0 +1 @@
+libsimple_estrndup.3 \ No newline at end of file
diff --git a/man3/evaligned_allocn.3libsimple b/man3/evaligned_allocn.3libsimple
new file mode 120000
index 0000000..e2b8dcf
--- /dev/null
+++ b/man3/evaligned_allocn.3libsimple
@@ -0,0 +1 @@
+libsimple_evaligned_allocn.3 \ No newline at end of file
diff --git a/man3/evaligned_alloczn.3libsimple b/man3/evaligned_alloczn.3libsimple
new file mode 120000
index 0000000..5a6ce94
--- /dev/null
+++ b/man3/evaligned_alloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_evaligned_alloczn.3 \ No newline at end of file
diff --git a/man3/evalloc.3libsimple b/man3/evalloc.3libsimple
new file mode 120000
index 0000000..95361b1
--- /dev/null
+++ b/man3/evalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_evalloc.3 \ No newline at end of file
diff --git a/man3/evallocn.3libsimple b/man3/evallocn.3libsimple
new file mode 120000
index 0000000..f07f56b
--- /dev/null
+++ b/man3/evallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_evallocn.3 \ No newline at end of file
diff --git a/man3/evallocz.3libsimple b/man3/evallocz.3libsimple
new file mode 120000
index 0000000..3773f02
--- /dev/null
+++ b/man3/evallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_evallocz.3 \ No newline at end of file
diff --git a/man3/evalloczn.3libsimple b/man3/evalloczn.3libsimple
new file mode 120000
index 0000000..8898d88
--- /dev/null
+++ b/man3/evalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_evalloczn.3 \ No newline at end of file
diff --git a/man3/evcallocn.3libsimple b/man3/evcallocn.3libsimple
new file mode 120000
index 0000000..f2b7394
--- /dev/null
+++ b/man3/evcallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_evcallocn.3 \ No newline at end of file
diff --git a/man3/evmallocn.3libsimple b/man3/evmallocn.3libsimple
new file mode 120000
index 0000000..00acaa0
--- /dev/null
+++ b/man3/evmallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_evmallocn.3 \ No newline at end of file
diff --git a/man3/evmalloczn.3libsimple b/man3/evmalloczn.3libsimple
new file mode 120000
index 0000000..a7edb67
--- /dev/null
+++ b/man3/evmalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_evmalloczn.3 \ No newline at end of file
diff --git a/man3/evmemalignn.3libsimple b/man3/evmemalignn.3libsimple
new file mode 120000
index 0000000..b71c4de
--- /dev/null
+++ b/man3/evmemalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_evmemalignn.3 \ No newline at end of file
diff --git a/man3/evmemalignzn.3libsimple b/man3/evmemalignzn.3libsimple
new file mode 120000
index 0000000..7926570
--- /dev/null
+++ b/man3/evmemalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_evmemalignzn.3 \ No newline at end of file
diff --git a/man3/evposix_memalignn.3libsimple b/man3/evposix_memalignn.3libsimple
new file mode 120000
index 0000000..3f2f644
--- /dev/null
+++ b/man3/evposix_memalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_evposix_memalignn.3 \ No newline at end of file
diff --git a/man3/evposix_memalignzn.3libsimple b/man3/evposix_memalignzn.3libsimple
new file mode 120000
index 0000000..e4589a6
--- /dev/null
+++ b/man3/evposix_memalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_evposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/evputenvf.3libsimple b/man3/evputenvf.3libsimple
new file mode 120000
index 0000000..9982fa0
--- /dev/null
+++ b/man3/evputenvf.3libsimple
@@ -0,0 +1 @@
+libsimple_evputenvf.3 \ No newline at end of file
diff --git a/man3/evpvallocn.3libsimple b/man3/evpvallocn.3libsimple
new file mode 120000
index 0000000..c9d4fad
--- /dev/null
+++ b/man3/evpvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_evpvallocn.3 \ No newline at end of file
diff --git a/man3/evpvalloczn.3libsimple b/man3/evpvalloczn.3libsimple
new file mode 120000
index 0000000..4cfbb54
--- /dev/null
+++ b/man3/evpvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_evpvalloczn.3 \ No newline at end of file
diff --git a/man3/evreallocn.3libsimple b/man3/evreallocn.3libsimple
new file mode 120000
index 0000000..1a0e01b
--- /dev/null
+++ b/man3/evreallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_evreallocn.3 \ No newline at end of file
diff --git a/man3/evvallocn.3libsimple b/man3/evvallocn.3libsimple
new file mode 120000
index 0000000..d32cebd
--- /dev/null
+++ b/man3/evvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_evvallocn.3 \ No newline at end of file
diff --git a/man3/evvalloczn.3libsimple b/man3/evvalloczn.3libsimple
new file mode 120000
index 0000000..9a33472
--- /dev/null
+++ b/man3/evvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_evvalloczn.3 \ No newline at end of file
diff --git a/man3/getenv_e.3libsimple b/man3/getenv_e.3libsimple
new file mode 120000
index 0000000..8e09a17
--- /dev/null
+++ b/man3/getenv_e.3libsimple
@@ -0,0 +1 @@
+libsimple_getenv_e.3 \ No newline at end of file
diff --git a/man3/getenv_ne.3libsimple b/man3/getenv_ne.3libsimple
new file mode 120000
index 0000000..457043f
--- /dev/null
+++ b/man3/getenv_ne.3libsimple
@@ -0,0 +1 @@
+libsimple_getenv_ne.3 \ No newline at end of file
diff --git a/man3/inchrcaseset.3libsimple b/man3/inchrcaseset.3libsimple
new file mode 120000
index 0000000..b1f18ca
--- /dev/null
+++ b/man3/inchrcaseset.3libsimple
@@ -0,0 +1 @@
+libsimple_inchrcaseset.3 \ No newline at end of file
diff --git a/man3/inchrset.3libsimple b/man3/inchrset.3libsimple
new file mode 120000
index 0000000..50838ca
--- /dev/null
+++ b/man3/inchrset.3libsimple
@@ -0,0 +1 @@
+libsimple_inchrset.3 \ No newline at end of file
diff --git a/man3/libsimple_aligned_allocn.3 b/man3/libsimple_aligned_allocn.3
new file mode 120000
index 0000000..d552701
--- /dev/null
+++ b/man3/libsimple_aligned_allocn.3
@@ -0,0 +1 @@
+libsimple_valigned_allocn.3 \ No newline at end of file
diff --git a/man3/libsimple_aligned_allocz.3 b/man3/libsimple_aligned_allocz.3
new file mode 100644
index 0000000..751cf4f
--- /dev/null
+++ b/man3/libsimple_aligned_allocz.3
@@ -0,0 +1,188 @@
+.TH LIBSIMPLE_ALIGNED_ALLOCZ 3 2018-11-03 libsimple
+.SH NAME
+libsimple_aligned_allocz \- allocate optionally initialised memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_aligned_allocz(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+void *libsimple_enaligned_allocz(int \fIstatus\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void *libsimple_ealigned_allocz(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+
+#ifndef aligned_allocz
+# define aligned_allocz libsimple_aligned_allocz
+#endif
+#ifndef enaligned_allocz
+# define enaligned_allocz libsimple_enaligned_allocz
+#endif
+#ifndef ealigned_allocz
+# define ealigned_allocz libsimple_ealigned_allocz
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_aligned_allocz (),
+.BR libsimple_enaligned_allocz (),
+and
+.BR libsimple_ealigned_allocz ()
+functions allocate
+.I n
+bytes to the heap and return a pointer with an
+alignment of
+.I alignment
+bytes to the allocated memory. The memory will be
+initialised with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enaligned_allocz ()
+and
+.BR libsimple_ealigned_allocz ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enaligned_allocz ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ealigned_allocz ()
+function is used.
+.PP
+The
+.BR libsimple_enaligned_allocz ()
+and
+.BR libsimple_ealigned_allocz ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_aligned_allocz (),
+.BR libsimple_enaligned_allocz (),
+and
+.BR libsimple_ealigned_allocz ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_aligned_allocz ()
+function return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_enaligned_allocz ()
+and
+.BR libsimple_ealigned_allocz ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_aligned_allocz ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I n
+is not a multiple of
+.IR alignment .
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_enaligned_allocz ()
+and
+.BR libsimple_ealigned_allocz ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_aligned_allocz (),
+.br
+.BR libsimple_enaligned_allocz (),
+.br
+.BR libsimple_ealigned_allocz ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_aligned_allocz (),
+.br
+.BR libsimple_enaligned_allocz (),
+.br
+.BR libsimple_ealigned_allocz ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_aligned_allocz (),
+.br
+.BR libsimple_enaligned_allocz (),
+.br
+.BR libsimple_ealigned_allocz ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR aligned_alloc (3)
diff --git a/man3/libsimple_aligned_alloczn.3 b/man3/libsimple_aligned_alloczn.3
new file mode 120000
index 0000000..aac058b
--- /dev/null
+++ b/man3/libsimple_aligned_alloczn.3
@@ -0,0 +1 @@
+libsimple_valigned_alloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_aligned_memdup.3 b/man3/libsimple_aligned_memdup.3
new file mode 100644
index 0000000..6cd287a
--- /dev/null
+++ b/man3/libsimple_aligned_memdup.3
@@ -0,0 +1,152 @@
+.TH LIBSIMPLE_ALIGNED_MEMDUP 3 2018-10-27 libsimple
+.SH NAME
+libsimple_aligned_memdup, libsimple_aligned_memdupa \- duplicate bytes in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_aligned_memdupa(const void *\fIs\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+void *libsimple_aligned_memdup(const void *\fIs\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+void *libsimple_enaligned_memdup(int \fIstatus\fP, const void *\fIs\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void *libsimple_ealigned_memdup(const void *\fIs\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+
+#ifndef aligned_memdupa
+# define aligned_memdupa libsimple_aligned_memdupa
+#endif
+#ifndef aligned_memdup
+# define aligned_memdup libsimple_aligned_memdup
+#endif
+#ifndef enaligned_memdup
+# define enaligned_memdup libsimple_enaligned_memdup
+#endif
+#ifndef ealigned_memdup
+# define ealigned_memdup libsimple_ealigned_memdup
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_aligned_memdup ()
+function constructs allocates memory with the alignment
+specified in the
+.I alignment
+parameter and copies
+.I n
+first bytes from
+.I s
+into the new allocation.
+.PP
+The
+.BR libsimple_enaligned_memdup ()
+and
+.BR libsimple_ealigned_memdup ()
+functions are versions of the
+.BR libsimple_aligned_memdup ()
+function that call the
+.BR libsimple_enprintf (3)
+function on failure, causing the process to print
+an error message and exit. See
+.BR libsimple_enprintf (3)
+for more information.
+.PP
+The
+.BR libsimple_memdupa ()
+function is implemented as a macro and is a version
+of the
+.BR libsimple_memdup ()
+function that uses allocates the memory on the stack
+rather than on the heap, causing the return pointer
+to become invalid when the calling function returns.
+It is only available when compling with GCC or Clang.
+.SH RETURN VALUE
+Upon successful completion, the
+.BR libsimple_aligned_memdupa (),
+.BR libsimple_aligned_memdup (),
+.BR libsimple_enaligned_memdup (),
+and
+.BR libsimple_ealigned_memdup ()
+functions return a non-null pointer, on failure the
+.BR libsimple_aligned_memdup ()
+function returns
+.B NULL
+and set
+.I errno
+to indicate the error, and the
+.BR libsimple_enaligned_memdup (),
+and
+.BR libsimple_ealigned_memdup ()
+functions exit the process. The
+.BR libsimple_aligned_memdupa ()
+function cannot fail, however the kernel
+can kill the thread, and possibly the process, with a
+.B SIGSEGV
+signal if the memory cannot be allocated.
+.PP
+The returned pointer should be deallocated when it
+is no longer needed, except for the pointer returned
+by the
+.BR libsimple_aligned_memdupa ()
+function, it is automatically deallocated when the
+calling function returns.
+.SH ERRORS
+The
+.BR libsimple_aligned_memdup ()
+function may fail for any reason specified for the
+.BR aligned_alloc (3)
+function.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_aligned_memdupa (),
+.br
+.BR libsimple_aligned_memdup (),
+.br
+.BR libsimple_enaligned_memdup (),
+.br
+.BR libsimple_ealigned_memdup (),
+T} Thread safety MT-Safe
+T{
+.BR libsimple_aligned_memdupa (),
+.br
+.BR libsimple_aligned_memdup (),
+.br
+.BR libsimple_enaligned_memdup (),
+.br
+.BR libsimple_ealigned_memdup (),
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_aligned_memdupa (),
+.br
+.BR libsimple_aligned_memdup (),
+.br
+.BR libsimple_enaligned_memdup (),
+.br
+.BR libsimple_ealigned_memdup (),
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memdup (3),
+.BR libsimple_enstrndup (3),
+.BR libsimple_enstrdup (3),
+.BR strndup (3),
+.BR strdup (3)
diff --git a/man3/libsimple_aligned_memdupa.3 b/man3/libsimple_aligned_memdupa.3
new file mode 120000
index 0000000..a9c2fef
--- /dev/null
+++ b/man3/libsimple_aligned_memdupa.3
@@ -0,0 +1 @@
+libsimple_aligned_memdup.3 \ No newline at end of file
diff --git a/man3/libsimple_arrayalloc.3 b/man3/libsimple_arrayalloc.3
new file mode 120000
index 0000000..b191b9c
--- /dev/null
+++ b/man3/libsimple_arrayalloc.3
@@ -0,0 +1 @@
+libsimple_varrayalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_asprintf.3 b/man3/libsimple_asprintf.3
new file mode 120000
index 0000000..9456f72
--- /dev/null
+++ b/man3/libsimple_asprintf.3
@@ -0,0 +1 @@
+libsimple_vasprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_asprintfa.3 b/man3/libsimple_asprintfa.3
new file mode 120000
index 0000000..e792d7d
--- /dev/null
+++ b/man3/libsimple_asprintfa.3
@@ -0,0 +1 @@
+libsimple_vasprintfa.3 \ No newline at end of file
diff --git a/man3/libsimple_callocn.3 b/man3/libsimple_callocn.3
new file mode 120000
index 0000000..bcc02ee
--- /dev/null
+++ b/man3/libsimple_callocn.3
@@ -0,0 +1 @@
+libsimple_vcallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_close.3 b/man3/libsimple_close.3
new file mode 100644
index 0000000..d5e18c6
--- /dev/null
+++ b/man3/libsimple_close.3
@@ -0,0 +1,49 @@
+.TH LIBSIMPLE_CLOSE 3 2018-11-05 libsimple
+.SH NAME
+libsimple_close \- close file descriptor and mark it as closed
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_close(int *\fIfdp\fP);
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_close ()
+function calls
+.I close(*fdp)
+and sets
+.I *fdp
+to
+.IR \-1 .
+However if
+.IR *fdp<0 ,
+does not except return 0.
+.SH RETURN VALUE
+The
+.BR libsimple_close ()
+function returns 0 upon successful completion;
+otherwise \-1 is returned.
+.SH ERRORS
+The
+.BR libsimple_close ()
+function fail for the reasons specified for the
+.BR close (3)
+function.
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR close (3)
diff --git a/man3/libsimple_cmptimespec.3 b/man3/libsimple_cmptimespec.3
new file mode 100644
index 0000000..14873ea
--- /dev/null
+++ b/man3/libsimple_cmptimespec.3
@@ -0,0 +1,95 @@
+.TH LIBSIMPLE_CMPTIMESPEC 3 2018-10-29 libsimple
+.SH NAME
+libsimple_cmptimespec, libsimple_cmptimeval \- calculate the sum of two durations
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_cmptimespec(const struct timespec *\fIa\fP, const struct timespec *\fIb\fP);
+static inline int libsimple_cmptimeval(const struct timeval *\fIa\fP, const struct timeval *\fIb\fP);
+
+#ifndef cmptimespec
+# define cmptimespec libsimple_cmptimespec
+#endif
+#ifndef cmptimeval
+# define cmptimeval libsimple_cmptimeval
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_cmptimespec ()
+and
+.BR libsimple_cmptimeval ()
+functions compares the values of
+.I a
+and
+.IR b ,
+returning a value indicating which is larger, if any.
+.SH RETURN VALUE
+The
+.BR libsimple_cmptimespec ()
+and
+.BR libsimple_cmptimeval ()
+functions return \-1 if
+.I a
+is less than
+.IR b ,
++1 if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+.SH ERRORS
+The
+.BR libsimple_cmptimespec ()
+and
+.BR libsimple_cmptimeval ()
+functions cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_cmptimespec ()
+.br
+.BR libsimple_cmptimeval ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_cmptimespec ()
+.br
+.BR libsimple_cmptimeval ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_cmptimespec ()
+.br
+.BR libsimple_cmptimeval ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_sumtimespec (3),
+.BR libsimple_difftimespec (3),
+.BR libsimple_multimespec (3),
+.BR libsimple_timespectostr (3),
+.BR libsimple_strtotimespec (3),
+.BR libsimple_timespectodouble (3),
+.BR libsimple_doubletotimespec (3),
+.BR libsimple_timeval2timespec (3)
diff --git a/man3/libsimple_cmptimeval.3 b/man3/libsimple_cmptimeval.3
new file mode 120000
index 0000000..8199c4e
--- /dev/null
+++ b/man3/libsimple_cmptimeval.3
@@ -0,0 +1 @@
+libsimple_cmptimespec.3 \ No newline at end of file
diff --git a/man3/libsimple_default_failure_exit.3 b/man3/libsimple_default_failure_exit.3
new file mode 120000
index 0000000..39ff456
--- /dev/null
+++ b/man3/libsimple_default_failure_exit.3
@@ -0,0 +1 @@
+libsimple_vweprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_difftimespec.3 b/man3/libsimple_difftimespec.3
new file mode 100644
index 0000000..49d4faa
--- /dev/null
+++ b/man3/libsimple_difftimespec.3
@@ -0,0 +1,118 @@
+.TH LIBSIMPLE_DIFFTIMESPEC 3 2018-10-29 libsimple
+.SH NAME
+libsimple_difftimespec, libsimple_difftimeval \- calculate the difference of two durations
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_difftimespec(struct timespec *\fIdiff\fP, const struct timespec *\fIminuend\fP, const struct timespec *\fIsubtrahend\fP);
+int libsimple_difftimeval(struct timeval *\fIdiff\fP, const struct timeval *\fIminuend\fP, const struct timeval *\fIsubtrahend\fP);
+
+#ifndef difftimespec
+# define difftimespec libsimple_difftimespec
+#endif
+#ifndef difftimeval
+# define difftimeval libsimple_difftimeval
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_difftimespec ()
+and
+.BR libsimple_difftimeval ()
+functions calculates the diffence of
+.I minuend
+and
+.I subtrahend
+.RI ( minuend
+is subtracted by
+.IR subtrahend )
+and stores the result in
+.IR diff .
+.SH RETURN VALUE
+The
+.BR libsimple_difftimespec ()
+and
+.BR libsimple_difftimeval ()
+functions return 0 on successful completion;
+otherwise, \-1 is returned and
+.I errno
+is set to indicate the error.
+.SH ERRORS
+The
+.BR libsimple_difftimespec ()
+and
+.BR libsimple_difftimeval ()
+functions fail if:
+.TP
+.B ERANGE
+The result is too large or too small to be stored; if the
+result is too large
+.I *diff
+will be set to
+.I {.tv_sec=TIME_MAX,.tv_nsec=999999999L}
+for the
+.BR libsimple_difftimespec ()
+function and to
+.I {.tv_sec=TIME_MAX,.tv_usec=999999L}
+for the
+.BR libsimple_difftimeval ()
+function, if the result is too small
+.I *diff
+will be set to
+.I {.tv_sec=TIME_MIN,.tv_nsec=0}
+for the
+.BR libsimple_difftimespec ()
+function and to
+.I {.tv_sec=TIME_MIN,.tv_usec=0}
+for the
+.BR libsimple_difftimeval ()
+function.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_difftimespec ()
+.br
+.BR libsimple_difftimeval ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_difftimespec ()
+.br
+.BR libsimple_difftimeval ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_difftimespec ()
+.br
+.BR libsimple_difftimeval ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_sumtimespec (3),
+.BR libsimple_multimespec (3),
+.BR libsimple_cmptimespec (3),
+.BR libsimple_timespectostr (3),
+.BR libsimple_strtotimespec (3),
+.BR libsimple_timespectodouble (3),
+.BR libsimple_doubletotimespec (3),
+.BR libsimple_timeval2timespec (3)
diff --git a/man3/libsimple_difftimeval.3 b/man3/libsimple_difftimeval.3
new file mode 120000
index 0000000..b03eae5
--- /dev/null
+++ b/man3/libsimple_difftimeval.3
@@ -0,0 +1 @@
+libsimple_difftimespec.3 \ No newline at end of file
diff --git a/man3/libsimple_doubletotimespec.3 b/man3/libsimple_doubletotimespec.3
new file mode 100644
index 0000000..1d8790c
--- /dev/null
+++ b/man3/libsimple_doubletotimespec.3
@@ -0,0 +1,88 @@
+.TH LIBSIMPLE_DOUBLETOTIMESPEC 3 2018-10-30 libsimple
+.SH NAME
+libsimple_doubletotimespec, libsimple_doubletotimeval \- convert a double to a duration data structure
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void libsimple_doubletotimespec(struct timespec *\fIts\fP, double \fId\fP);
+void libsimple_doubletotimeval(struct timeval *\fItv\fP, double \fId\fP);
+
+#ifndef doubletotimespec
+# define doubletotimespec libsimple_doubletotimespec
+#endif
+#ifndef doubletotimeval
+# define doubletotimeval libsimple_doubletotimeval
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_doubletotimespec ()
+function converts the real value
+.I d
+to a
+.B struct timespec
+and stores the result in
+.IR ts .
+The
+.BR libsimple_doubletotimeval ()
+function converts the real value
+.I d
+to a
+.B struct timeval
+and stores the result in
+.IR tv .
+.PP
+Neither of these functions perform an overflow check.
+.SH RETURN VALUE
+None.
+.SH ERRORS
+No error checks are made.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_doubletotimespec ()
+.br
+.BR libsimple_doubletotimeval ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_doubletotimespec ()
+.br
+.BR libsimple_doubletotimeval ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_doubletotimespec ()
+.br
+.BR libsimple_doubletotimeval ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_sumtimespec (3),
+.BR libsimple_difftimespec (3),
+.BR libsimple_multimespec (3),
+.BR libsimple_cmptimespec (3),
+.BR libsimple_timespectostr (3),
+.BR libsimple_strtotimespec (3),
+.BR libsimple_timespectodouble (3),
+.BR libsimple_timeval2timespec (3)
diff --git a/man3/libsimple_doubletotimeval.3 b/man3/libsimple_doubletotimeval.3
new file mode 120000
index 0000000..4158ff1
--- /dev/null
+++ b/man3/libsimple_doubletotimeval.3
@@ -0,0 +1 @@
+libsimple_doubletotimespec.3 \ No newline at end of file
diff --git a/man3/libsimple_ealigned_alloc.3 b/man3/libsimple_ealigned_alloc.3
new file mode 120000
index 0000000..1737ec8
--- /dev/null
+++ b/man3/libsimple_ealigned_alloc.3
@@ -0,0 +1 @@
+libsimple_enaligned_alloc.3 \ No newline at end of file
diff --git a/man3/libsimple_ealigned_allocn.3 b/man3/libsimple_ealigned_allocn.3
new file mode 120000
index 0000000..b8399e7
--- /dev/null
+++ b/man3/libsimple_ealigned_allocn.3
@@ -0,0 +1 @@
+libsimple_enaligned_allocn.3 \ No newline at end of file
diff --git a/man3/libsimple_ealigned_allocz.3 b/man3/libsimple_ealigned_allocz.3
new file mode 120000
index 0000000..c6dc93f
--- /dev/null
+++ b/man3/libsimple_ealigned_allocz.3
@@ -0,0 +1 @@
+libsimple_enaligned_allocz.3 \ No newline at end of file
diff --git a/man3/libsimple_ealigned_alloczn.3 b/man3/libsimple_ealigned_alloczn.3
new file mode 120000
index 0000000..7f167e0
--- /dev/null
+++ b/man3/libsimple_ealigned_alloczn.3
@@ -0,0 +1 @@
+libsimple_enaligned_alloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_ealigned_memdup.3 b/man3/libsimple_ealigned_memdup.3
new file mode 120000
index 0000000..b6e0dd2
--- /dev/null
+++ b/man3/libsimple_ealigned_memdup.3
@@ -0,0 +1 @@
+libsimple_enaligned_memdup.3 \ No newline at end of file
diff --git a/man3/libsimple_earrayalloc.3 b/man3/libsimple_earrayalloc.3
new file mode 120000
index 0000000..b2f8ab1
--- /dev/null
+++ b/man3/libsimple_earrayalloc.3
@@ -0,0 +1 @@
+libsimple_evarrayalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_ecalloc.3 b/man3/libsimple_ecalloc.3
new file mode 120000
index 0000000..a7bfcfa
--- /dev/null
+++ b/man3/libsimple_ecalloc.3
@@ -0,0 +1 @@
+libsimple_encalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_ecallocn.3 b/man3/libsimple_ecallocn.3
new file mode 120000
index 0000000..a0909c1
--- /dev/null
+++ b/man3/libsimple_ecallocn.3
@@ -0,0 +1 @@
+libsimple_encallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_emalloc.3 b/man3/libsimple_emalloc.3
new file mode 120000
index 0000000..26cfa44
--- /dev/null
+++ b/man3/libsimple_emalloc.3
@@ -0,0 +1 @@
+libsimple_enmalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_emallocn.3 b/man3/libsimple_emallocn.3
new file mode 120000
index 0000000..efb153b
--- /dev/null
+++ b/man3/libsimple_emallocn.3
@@ -0,0 +1 @@
+libsimple_enmallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_emallocz.3 b/man3/libsimple_emallocz.3
new file mode 120000
index 0000000..3b99dc1
--- /dev/null
+++ b/man3/libsimple_emallocz.3
@@ -0,0 +1 @@
+libsimple_enmallocz.3 \ No newline at end of file
diff --git a/man3/libsimple_emalloczn.3 b/man3/libsimple_emalloczn.3
new file mode 120000
index 0000000..b063712
--- /dev/null
+++ b/man3/libsimple_emalloczn.3
@@ -0,0 +1 @@
+libsimple_enmalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_ememalign.3 b/man3/libsimple_ememalign.3
new file mode 120000
index 0000000..ce980d3
--- /dev/null
+++ b/man3/libsimple_ememalign.3
@@ -0,0 +1 @@
+libsimple_enmemalign.3 \ No newline at end of file
diff --git a/man3/libsimple_ememalignn.3 b/man3/libsimple_ememalignn.3
new file mode 120000
index 0000000..8d62253
--- /dev/null
+++ b/man3/libsimple_ememalignn.3
@@ -0,0 +1 @@
+libsimple_enmemalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_ememalignz.3 b/man3/libsimple_ememalignz.3
new file mode 120000
index 0000000..2b282d2
--- /dev/null
+++ b/man3/libsimple_ememalignz.3
@@ -0,0 +1 @@
+libsimple_enmemalignz.3 \ No newline at end of file
diff --git a/man3/libsimple_ememalignzn.3 b/man3/libsimple_ememalignzn.3
new file mode 120000
index 0000000..f3e8942
--- /dev/null
+++ b/man3/libsimple_ememalignzn.3
@@ -0,0 +1 @@
+libsimple_enmemalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_ememalloc.3 b/man3/libsimple_ememalloc.3
new file mode 120000
index 0000000..ac23478
--- /dev/null
+++ b/man3/libsimple_ememalloc.3
@@ -0,0 +1 @@
+libsimple_evmemalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_ememdup.3 b/man3/libsimple_ememdup.3
new file mode 120000
index 0000000..b7ce69c
--- /dev/null
+++ b/man3/libsimple_ememdup.3
@@ -0,0 +1 @@
+libsimple_enmemdup.3 \ No newline at end of file
diff --git a/man3/libsimple_enaligned_alloc.3 b/man3/libsimple_enaligned_alloc.3
new file mode 100644
index 0000000..1ea36cb
--- /dev/null
+++ b/man3/libsimple_enaligned_alloc.3
@@ -0,0 +1,149 @@
+.TH LIBSIMPLE_ENALIGNED_ALLOC 3 2018-11-03 libsimple
+.SH NAME
+libsimple_enaligned_alloc \- allocate memory with custom alignment or die
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_enaligned_alloc(int \fIstatus\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void *libsimple_ealigned_alloc(size_t \fIalignment\fP, size_t \fIn\fP);
+
+#ifndef enaligned_alloc
+# define enaligned_alloc libsimple_enaligned_alloc
+#endif
+#ifndef ealigned_alloc
+# define ealigned_alloc libsimple_ealigned_alloc
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_enaligned_alloc ()
+and
+.BR libsimple_ealigned_alloc ()
+functions allocate
+.I n
+uninitialised bytes to the heap and return a
+pointer with an alignment of
+.I alignment
+bytes to the allocated memory. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enaligned_alloc ()
+and
+.BR libsimple_ealigned_alloc ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enaligned_alloc ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ealigned_alloc ()
+function is used. Failure include,
+.I alignment
+not being a power of two, or
+.I n
+not being a multiple of
+.IR alignment .
+.PP
+The
+.BR libsimple_enaligned_alloc ()
+and
+.BR libsimple_ealigned_alloc ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_enaligned_alloc ()
+and
+.BR libsimple_ealigned_alloc ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the process is
+terminated.
+.SH ERRORS
+The
+.BR libsimple_enaligned_alloc ()
+and
+.BR libsimple_ealigned_alloc ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_enaligned_alloc (),
+.br
+.BR libsimple_ealigned_alloc ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_enaligned_alloc (),
+.br
+.BR libsimple_ealigned_alloc ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_enaligned_alloc (),
+.br
+.BR libsimple_ealigned_alloc ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR aligned_alloc (3)
diff --git a/man3/libsimple_enaligned_allocn.3 b/man3/libsimple_enaligned_allocn.3
new file mode 120000
index 0000000..035b2be
--- /dev/null
+++ b/man3/libsimple_enaligned_allocn.3
@@ -0,0 +1 @@
+libsimple_aligned_allocn.3 \ No newline at end of file
diff --git a/man3/libsimple_enaligned_allocz.3 b/man3/libsimple_enaligned_allocz.3
new file mode 120000
index 0000000..f4cc746
--- /dev/null
+++ b/man3/libsimple_enaligned_allocz.3
@@ -0,0 +1 @@
+libsimple_aligned_allocz.3 \ No newline at end of file
diff --git a/man3/libsimple_enaligned_alloczn.3 b/man3/libsimple_enaligned_alloczn.3
new file mode 120000
index 0000000..376a797
--- /dev/null
+++ b/man3/libsimple_enaligned_alloczn.3
@@ -0,0 +1 @@
+libsimple_aligned_alloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_enaligned_memdup.3 b/man3/libsimple_enaligned_memdup.3
new file mode 120000
index 0000000..a9c2fef
--- /dev/null
+++ b/man3/libsimple_enaligned_memdup.3
@@ -0,0 +1 @@
+libsimple_aligned_memdup.3 \ No newline at end of file
diff --git a/man3/libsimple_enarrayalloc.3 b/man3/libsimple_enarrayalloc.3
new file mode 120000
index 0000000..e51e1df
--- /dev/null
+++ b/man3/libsimple_enarrayalloc.3
@@ -0,0 +1 @@
+libsimple_envarrayalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_encalloc.3 b/man3/libsimple_encalloc.3
new file mode 100644
index 0000000..a8696e6
--- /dev/null
+++ b/man3/libsimple_encalloc.3
@@ -0,0 +1,154 @@
+.TH LIBSIMPLE_ENCALLOC 3 2018-11-03 libsimple
+.SH NAME
+libsimple_encalloc \- allocate initialised memory or die
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_encalloc(int \fIstatus\fP, size_t \fIn\fP, size_t \fIm\fP);
+static inline void *libsimple_ecalloc(size_t \fIn\fP, size_t \fIm\fP);
+
+#ifndef encalloc
+# define encalloc libsimple_encalloc
+#endif
+#ifndef ecalloc
+# define ecalloc libsimple_ecalloc
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_encalloc ()
+and
+.BR libsimple_ecalloc ()
+functions are wrappers for the
+.BR calloc (3)
+function, they allocate
+.I n*m
+zero-initialised bytes to the heap and return a
+pointer with an alignment of
+.I alignof(max_align_t)
+to the allocated memory. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_encalloc ()
+and
+.BR libsimple_ecalloc ()
+functions will terminate the process if the memory
+cannot be allocated (or if
+.I n
+or
+.I m
+is 0 and
+.BR calloc (3)
+returns
+.B NULL
+when it is used to allocate 0 bytes), by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_encalloc ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ecalloc ()
+function is used.
+.PP
+The
+.BR libsimple_encalloc ()
+and
+.BR libsimple_ecalloc ()
+functions behaviour is unspecified if
+.I n
+or
+.I m
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_encalloc ()
+and
+.BR libsimple_ecalloc ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the process is terminated.
+.SH ERRORS
+The
+.BR libsimple_encalloc ()
+and
+.BR libsimple_ecalloc ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_encalloc (),
+.br
+.BR libsimple_ecalloc ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_encalloc (),
+.br
+.BR libsimple_ecalloc ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_encalloc (),
+.br
+.BR libsimple_ecalloc ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR calloc (3)
diff --git a/man3/libsimple_encallocn.3 b/man3/libsimple_encallocn.3
new file mode 120000
index 0000000..77904c3
--- /dev/null
+++ b/man3/libsimple_encallocn.3
@@ -0,0 +1 @@
+libsimple_callocn.3 \ No newline at end of file
diff --git a/man3/libsimple_enmalloc.3 b/man3/libsimple_enmalloc.3
new file mode 100644
index 0000000..796eafd
--- /dev/null
+++ b/man3/libsimple_enmalloc.3
@@ -0,0 +1,150 @@
+.TH LIBSIMPLE_ENMALLOC 3 2018-11-03 libsimple
+.SH NAME
+libsimple_enmalloc \- allocate memory or die
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_enmalloc(int \fIstatus\fP, size_t \fIn\fP);
+static inline void *libsimple_emalloc(size_t \fIn\fP);
+
+#ifndef enmalloc
+# define enmalloc libsimple_enmalloc
+#endif
+#ifndef emalloc
+# define emalloc libsimple_emalloc
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_enmalloc ()
+and
+.BR libsimple_emalloc ()
+functions are wrappers for the
+.BR malloc (3)
+function, they allocate
+.I n
+uninitialised bytes to the heap and return a
+pointer with an alignment of
+.I alignof(max_align_t)
+to the allocated memory. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enmalloc ()
+and
+.BR libsimple_emalloc ()
+functions will terminate the process if the memory
+cannot be allocated (or if
+.I n
+is 0 and
+.BR malloc (3)
+returns
+.B NULL
+when it is used to allocate 0 bytes), by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enmalloc ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_emalloc ()
+function is used.
+.PP
+The
+.BR libsimple_enmalloc ()
+and
+.BR libsimple_emalloc ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_enmalloc ()
+and
+.BR libsimple_emalloc ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the process is terminated.
+.SH ERRORS
+The
+.BR libsimple_enmalloc ()
+and
+.BR libsimple_emalloc ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_enmalloc (),
+.br
+.BR libsimple_emalloc ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_enmalloc (),
+.br
+.BR libsimple_emalloc ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_enmalloc (),
+.br
+.BR libsimple_emalloc ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR malloc (3)
diff --git a/man3/libsimple_enmallocn.3 b/man3/libsimple_enmallocn.3
new file mode 120000
index 0000000..23348f2
--- /dev/null
+++ b/man3/libsimple_enmallocn.3
@@ -0,0 +1 @@
+libsimple_mallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_enmallocz.3 b/man3/libsimple_enmallocz.3
new file mode 120000
index 0000000..cfa0ffc
--- /dev/null
+++ b/man3/libsimple_enmallocz.3
@@ -0,0 +1 @@
+libsimple_mallocz.3 \ No newline at end of file
diff --git a/man3/libsimple_enmalloczn.3 b/man3/libsimple_enmalloczn.3
new file mode 120000
index 0000000..eb274c9
--- /dev/null
+++ b/man3/libsimple_enmalloczn.3
@@ -0,0 +1 @@
+libsimple_malloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_enmemalign.3 b/man3/libsimple_enmemalign.3
new file mode 120000
index 0000000..e56731a
--- /dev/null
+++ b/man3/libsimple_enmemalign.3
@@ -0,0 +1 @@
+libsimple_memalign.3 \ No newline at end of file
diff --git a/man3/libsimple_enmemalignn.3 b/man3/libsimple_enmemalignn.3
new file mode 120000
index 0000000..411c2eb
--- /dev/null
+++ b/man3/libsimple_enmemalignn.3
@@ -0,0 +1 @@
+libsimple_memalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_enmemalignz.3 b/man3/libsimple_enmemalignz.3
new file mode 120000
index 0000000..e468464
--- /dev/null
+++ b/man3/libsimple_enmemalignz.3
@@ -0,0 +1 @@
+libsimple_memalignz.3 \ No newline at end of file
diff --git a/man3/libsimple_enmemalignzn.3 b/man3/libsimple_enmemalignzn.3
new file mode 120000
index 0000000..24dc74d
--- /dev/null
+++ b/man3/libsimple_enmemalignzn.3
@@ -0,0 +1 @@
+libsimple_memalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_enmemalloc.3 b/man3/libsimple_enmemalloc.3
new file mode 120000
index 0000000..14d676f
--- /dev/null
+++ b/man3/libsimple_enmemalloc.3
@@ -0,0 +1 @@
+libsimple_envmemalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_enmemdup.3 b/man3/libsimple_enmemdup.3
new file mode 120000
index 0000000..ff9fc97
--- /dev/null
+++ b/man3/libsimple_enmemdup.3
@@ -0,0 +1 @@
+libsimple_memdup.3 \ No newline at end of file
diff --git a/man3/libsimple_enposix_memalign.3 b/man3/libsimple_enposix_memalign.3
new file mode 100644
index 0000000..c1157f3
--- /dev/null
+++ b/man3/libsimple_enposix_memalign.3
@@ -0,0 +1,153 @@
+.TH LIBSIMPLE_ENPOSIX_MEMALIGN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_enposix_memalign \- allocate memory with custom alignment or die
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void libsimple_enposix_memalign(int \fIstatus\fP, void **\fImemptr\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void libsimple_eposix_memalign(void **\fImemptr\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+
+#ifndef enposix_memalign
+# define enposix_memalign libsimple_enposix_memalign
+#endif
+#ifndef eposix_memalign
+# define eposix_memalign libsimple_eposix_memalign
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_enposix_memalign ()
+and
+.BR libsimple_eposix_memalign ()
+functions allocate
+.I n
+uninitialised bytes to the heap and store a
+pointer with an alignment of
+.I alignment
+bytes to the allocated memory in
+.IR memptr .
+The function
+.BR free (3)
+shall be called with the pointer stored in
+.I memptr
+as input when the allocated memory is no longer needed.
+.I *memptr
+remains unmodified on failure.
+.PP
+The
+.BR libsimple_enposix_memalign ()
+and
+.BR libsimple_eposix_memalign ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enposix_memalign ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_eposix_memalign ()
+function is used. Failure include,
+.I alignment
+not being a power of two, or
+.I alignment
+not being a multiple of
+.IR "sizeof(void *)" .
+.PP
+The
+.BR libsimple_enposix_memalign ()
+and
+.BR libsimple_eposix_memalign ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_enposix_memalign ()
+and
+.BR libsimple_eposix_memalign ()
+functions do not return a value, but
+terminated the process on failure.
+.SH ERRORS
+The
+.BR libsimple_enposix_memalign ()
+and
+.BR libsimple_eposix_memalign ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_enposix_memalign (),
+.br
+.BR libsimple_eposix_memalign ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_enposix_memalign (),
+.br
+.BR libsimple_eposix_memalign ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_enposix_memalign (),
+.br
+.BR libsimple_eposix_memalign ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR posix_memalign (3)
diff --git a/man3/libsimple_enposix_memalignn.3 b/man3/libsimple_enposix_memalignn.3
new file mode 120000
index 0000000..6ec64f0
--- /dev/null
+++ b/man3/libsimple_enposix_memalignn.3
@@ -0,0 +1 @@
+libsimple_posix_memalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_enposix_memalignz.3 b/man3/libsimple_enposix_memalignz.3
new file mode 120000
index 0000000..a8aecf3
--- /dev/null
+++ b/man3/libsimple_enposix_memalignz.3
@@ -0,0 +1 @@
+libsimple_posix_memalignz.3 \ No newline at end of file
diff --git a/man3/libsimple_enposix_memalignzn.3 b/man3/libsimple_enposix_memalignzn.3
new file mode 120000
index 0000000..fbe1b5e
--- /dev/null
+++ b/man3/libsimple_enposix_memalignzn.3
@@ -0,0 +1 @@
+libsimple_posix_memalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_enprintf.3 b/man3/libsimple_enprintf.3
new file mode 120000
index 0000000..574bdd9
--- /dev/null
+++ b/man3/libsimple_enprintf.3
@@ -0,0 +1 @@
+libsimple_venprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_enputenvf.3 b/man3/libsimple_enputenvf.3
new file mode 120000
index 0000000..1b96365
--- /dev/null
+++ b/man3/libsimple_enputenvf.3
@@ -0,0 +1 @@
+libsimple_envputenvf.3 \ No newline at end of file
diff --git a/man3/libsimple_enpvalloc.3 b/man3/libsimple_enpvalloc.3
new file mode 120000
index 0000000..d49ae25
--- /dev/null
+++ b/man3/libsimple_enpvalloc.3
@@ -0,0 +1 @@
+libsimple_pvalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_enpvallocn.3 b/man3/libsimple_enpvallocn.3
new file mode 120000
index 0000000..645a366
--- /dev/null
+++ b/man3/libsimple_enpvallocn.3
@@ -0,0 +1 @@
+libsimple_pvallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_enpvallocz.3 b/man3/libsimple_enpvallocz.3
new file mode 120000
index 0000000..e3c72f0
--- /dev/null
+++ b/man3/libsimple_enpvallocz.3
@@ -0,0 +1 @@
+libsimple_pvallocz.3 \ No newline at end of file
diff --git a/man3/libsimple_enpvalloczn.3 b/man3/libsimple_enpvalloczn.3
new file mode 120000
index 0000000..e94e13c
--- /dev/null
+++ b/man3/libsimple_enpvalloczn.3
@@ -0,0 +1 @@
+libsimple_pvalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_enrealloc.3 b/man3/libsimple_enrealloc.3
new file mode 100644
index 0000000..5262193
--- /dev/null
+++ b/man3/libsimple_enrealloc.3
@@ -0,0 +1,161 @@
+.TH LIBSIMPLE_ENREALLOC 3 2018-11-03 libsimple
+.SH NAME
+libsimple_enrealloc \- reallocate memory or die
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_enrealloc(int \fIstatus\fP, void *\fIptr\fP, size_t \fIn\fP);
+static inline void *libsimple_erealloc(void *\fIptr\fP, size_t \fIn\fP);
+
+#ifndef enrealloc
+# define enrealloc libsimple_enrealloc
+#endif
+#ifndef erealloc
+# define erealloc libsimple_erealloc
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_enrealloc ()
+and
+.BR libsimple_erealloc ()
+functions are wrappers for the
+.BR realloc (3)
+function, they reallocate memory allocated on the
+heap and return the old pointer or a new pointer
+with an alignment of
+.I alignof(max_align_t)
+to the allocated memory of
+.I n
+bytes. The returned pointer will contain the
+same content as
+.IR ptr ,
+but truncated to
+.I n
+bytes if it is smaller or with the new bytes
+uninitialised if it is larger. If a new pointer
+is returned, rather than
+.IR ptr ,
+.I ptr
+is deallocated. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enrealloc ()
+and
+.BR libsimple_erealloc ()
+functions will terminate the process if the memory
+cannot be allocated (or if
+.I n
+is 0 and
+.BR realloc (3)
+returns
+.B NULL
+when it is used to allocate 0 bytes), by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enrealloc ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_erealloc ()
+function is used.
+.PP
+The
+.BR libsimple_enrealloc ()
+and
+.BR libsimple_erealloc ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_enrealloc ()
+and
+.BR libsimple_erealloc ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the process is terminated.
+.SH ERRORS
+The
+.BR libsimple_enrealloc ()
+and
+.BR libsimple_erealloc ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_enrealloc (),
+.br
+.BR libsimple_erealloc ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_enrealloc (),
+.br
+.BR libsimple_erealloc ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_enrealloc (),
+.br
+.BR libsimple_erealloc ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR realloc (3)
diff --git a/man3/libsimple_enreallocn.3 b/man3/libsimple_enreallocn.3
new file mode 120000
index 0000000..d80e531
--- /dev/null
+++ b/man3/libsimple_enreallocn.3
@@ -0,0 +1 @@
+libsimple_reallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_enstrdup.3 b/man3/libsimple_enstrdup.3
new file mode 100644
index 0000000..4a2aa4f
--- /dev/null
+++ b/man3/libsimple_enstrdup.3
@@ -0,0 +1,120 @@
+.TH LIBSIMPLE_ENSTRDUP 3 2018-10-27 libsimple
+.SH NAME
+libsimple_enstrdup, libsimple_strdupa \- duplicate a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strdupa(const char *\fIs\fP);
+char *libsimple_enstrdup(int \fIstatus\fP, const char *\fIs\fP);
+static inline char *libsimple_estrdup(const char *\fIs\fP);
+
+#ifndef strdupa
+# define strdupa libsimple_strdupa
+#endif
+#ifndef enstrdup
+# define enstrdup libsimple_enstrdup
+#endif
+#ifndef estrdup
+# define estrdup libsimple_estrdup
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_enstrdup ()
+and
+.BR libsimple_estrdup ()
+functions are versions of the
+.BR strdup (3)
+function that call the
+.BR libsimple_enprintf (3)
+function on failure, causing the process to print
+an error message and exit. See
+.BR libsimple_enprintf (3)
+for more information.
+.PP
+The
+.BR libsimple_strdupa ()
+function is implemented as a macro and is a version
+of the
+.BR strdup (3)
+function that uses allocates the memory on the stack
+rather than on the heap, causing the return pointer
+to become invalid when the calling function returns.
+It is only available when compling with GCC or Clang.
+.SH RETURN VALUE
+Upon successful completion, the
+.BR libsimple_strdupa (),
+.BR libsimple_enstrdup (),
+and
+.BR libsimple_estrdup ()
+functions return a non-null pointer, on failure the
+.BR libsimple_enstrdup (),
+and
+.BR libsimple_estrdup ()
+functions exit the process. The
+.BR libsimple_strdupa ()
+function cannot fail, however the kernel
+can kill the thread, and possibly the process, with a
+.B SIGSEGV
+signal if the memory cannot be allocated.
+.PP
+The returned pointer should be deallocated when it
+is no longer needed, except for the pointer returned
+by the
+.BR libsimple_strdupa ()
+function, it is automatically deallocated when the
+calling function returns.
+.SH ERRORS
+None.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strdupa (),
+.br
+.BR libsimple_enstrdup (),
+.br
+.BR libsimple_estrdup (),
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strdupa (),
+.br
+.BR libsimple_enstrdup (),
+.br
+.BR libsimple_estrdup (),
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strdupa (),
+.br
+.BR libsimple_enstrdup (),
+.br
+.BR libsimple_estrdup (),
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enstrndup (3),
+.BR libsimple_memdup (3),
+.BR libsimple_aligned_memdup (3),
+.BR strndup (3),
+.BR strdup (3)
diff --git a/man3/libsimple_enstrndup.3 b/man3/libsimple_enstrndup.3
new file mode 100644
index 0000000..66272b0
--- /dev/null
+++ b/man3/libsimple_enstrndup.3
@@ -0,0 +1,120 @@
+.TH LIBSIMPLE_ENSTRNDUP 3 2018-10-27 libsimple
+.SH NAME
+libsimple_enstrndup, libsimple_strndupa \- duplicate the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strndupa(const char *\fIs\fP, size_t \fIn\fP);
+char *libsimple_enstrndup(int \fIstatus\fP, const char *\fIs\fP, size_t \fIn\fP);
+static inline char *libsimple_estrndup(const char *\fIs\fP, size_t \fIn\fP);
+
+#ifndef strndupa
+# define strndupa libsimple_strndupa
+#endif
+#ifndef enstrndup
+# define enstrndup libsimple_enstrndup
+#endif
+#ifndef estrndup
+# define estrndup libsimple_estrndup
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_enstrndup ()
+and
+.BR libsimple_estrndup ()
+functions are versions of the
+.BR strndup (3)
+function that call the
+.BR libsimple_enprintf (3)
+function on failure, causing the process to print
+an error message and exit. See
+.BR libsimple_enprintf (3)
+for more information.
+.PP
+The
+.BR libsimple_strndupa ()
+function is implemented as a macro and is a version
+of the
+.BR strndup (3)
+function that uses allocates the memory on the stack
+rather than on the heap, causing the return pointer
+to become invalid when the calling function returns.
+It is only available when compling with GCC or Clang.
+.SH RETURN VALUE
+Upon successful completion, the
+.BR libsimple_strndupa (),
+.BR libsimple_enstrndup (),
+and
+.BR libsimple_estrndup ()
+functions return a non-null pointer, on failure the
+.BR libsimple_enstrndup (),
+and
+.BR libsimple_estrndup ()
+functions exit the process. The
+.BR libsimple_strndupa ()
+function cannot fail, however the kernel
+can kill the thread, and possibly the process, with a
+.B SIGSEGV
+signal if the memory cannot be allocated.
+.PP
+The returned pointer should be deallocated when it
+is no longer needed, except for the pointer returned
+by the
+.BR libsimple_strndupa ()
+function, it is automatically deallocated when the
+calling function returns.
+.SH ERRORS
+None.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strndupa (),
+.br
+.BR libsimple_enstrndup (),
+.br
+.BR libsimple_estrndup (),
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strndupa (),
+.br
+.BR libsimple_enstrndup (),
+.br
+.BR libsimple_estrndup (),
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strndupa (),
+.br
+.BR libsimple_enstrndup (),
+.br
+.BR libsimple_estrndup (),
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enstrdup (3),
+.BR libsimple_memdup (3),
+.BR libsimple_aligned_memdup (3),
+.BR strndup (3),
+.BR strdup (3)
diff --git a/man3/libsimple_envaligned_allocn.3 b/man3/libsimple_envaligned_allocn.3
new file mode 120000
index 0000000..d552701
--- /dev/null
+++ b/man3/libsimple_envaligned_allocn.3
@@ -0,0 +1 @@
+libsimple_valigned_allocn.3 \ No newline at end of file
diff --git a/man3/libsimple_envaligned_alloczn.3 b/man3/libsimple_envaligned_alloczn.3
new file mode 120000
index 0000000..aac058b
--- /dev/null
+++ b/man3/libsimple_envaligned_alloczn.3
@@ -0,0 +1 @@
+libsimple_valigned_alloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_envalloc.3 b/man3/libsimple_envalloc.3
new file mode 120000
index 0000000..5879c71
--- /dev/null
+++ b/man3/libsimple_envalloc.3
@@ -0,0 +1 @@
+libsimple_valloc.3 \ No newline at end of file
diff --git a/man3/libsimple_envallocn.3 b/man3/libsimple_envallocn.3
new file mode 120000
index 0000000..56a5822
--- /dev/null
+++ b/man3/libsimple_envallocn.3
@@ -0,0 +1 @@
+libsimple_vallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_envallocz.3 b/man3/libsimple_envallocz.3
new file mode 120000
index 0000000..3a2dc96
--- /dev/null
+++ b/man3/libsimple_envallocz.3
@@ -0,0 +1 @@
+libsimple_vallocz.3 \ No newline at end of file
diff --git a/man3/libsimple_envalloczn.3 b/man3/libsimple_envalloczn.3
new file mode 120000
index 0000000..acae7d5
--- /dev/null
+++ b/man3/libsimple_envalloczn.3
@@ -0,0 +1 @@
+libsimple_valloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_envarrayalloc.3 b/man3/libsimple_envarrayalloc.3
new file mode 120000
index 0000000..0e63ff9
--- /dev/null
+++ b/man3/libsimple_envarrayalloc.3
@@ -0,0 +1 @@
+libsimple_arrayalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_envcallocn.3 b/man3/libsimple_envcallocn.3
new file mode 120000
index 0000000..bcc02ee
--- /dev/null
+++ b/man3/libsimple_envcallocn.3
@@ -0,0 +1 @@
+libsimple_vcallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_envmallocn.3 b/man3/libsimple_envmallocn.3
new file mode 120000
index 0000000..6410741
--- /dev/null
+++ b/man3/libsimple_envmallocn.3
@@ -0,0 +1 @@
+libsimple_vmallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_envmalloczn.3 b/man3/libsimple_envmalloczn.3
new file mode 120000
index 0000000..5a271e0
--- /dev/null
+++ b/man3/libsimple_envmalloczn.3
@@ -0,0 +1 @@
+libsimple_vmalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_envmemalignn.3 b/man3/libsimple_envmemalignn.3
new file mode 120000
index 0000000..d9dcdfd
--- /dev/null
+++ b/man3/libsimple_envmemalignn.3
@@ -0,0 +1 @@
+libsimple_vmemalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_envmemalignzn.3 b/man3/libsimple_envmemalignzn.3
new file mode 120000
index 0000000..2faeae6
--- /dev/null
+++ b/man3/libsimple_envmemalignzn.3
@@ -0,0 +1 @@
+libsimple_vmemalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_envmemalloc.3 b/man3/libsimple_envmemalloc.3
new file mode 120000
index 0000000..f578d57
--- /dev/null
+++ b/man3/libsimple_envmemalloc.3
@@ -0,0 +1 @@
+libsimple_vmemalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_envposix_memalignn.3 b/man3/libsimple_envposix_memalignn.3
new file mode 120000
index 0000000..7402678
--- /dev/null
+++ b/man3/libsimple_envposix_memalignn.3
@@ -0,0 +1 @@
+libsimple_vposix_memalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_envposix_memalignzn.3 b/man3/libsimple_envposix_memalignzn.3
new file mode 120000
index 0000000..e47154f
--- /dev/null
+++ b/man3/libsimple_envposix_memalignzn.3
@@ -0,0 +1 @@
+libsimple_vposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_envputenvf.3 b/man3/libsimple_envputenvf.3
new file mode 120000
index 0000000..ce0929f
--- /dev/null
+++ b/man3/libsimple_envputenvf.3
@@ -0,0 +1 @@
+libsimple_vputenvf.3 \ No newline at end of file
diff --git a/man3/libsimple_envpvallocn.3 b/man3/libsimple_envpvallocn.3
new file mode 120000
index 0000000..a659d76
--- /dev/null
+++ b/man3/libsimple_envpvallocn.3
@@ -0,0 +1 @@
+libsimple_vpvallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_envpvalloczn.3 b/man3/libsimple_envpvalloczn.3
new file mode 120000
index 0000000..c93e0ed
--- /dev/null
+++ b/man3/libsimple_envpvalloczn.3
@@ -0,0 +1 @@
+libsimple_vpvalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_envreallocn.3 b/man3/libsimple_envreallocn.3
new file mode 120000
index 0000000..18a590e
--- /dev/null
+++ b/man3/libsimple_envreallocn.3
@@ -0,0 +1 @@
+libsimple_vreallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_envvallocn.3 b/man3/libsimple_envvallocn.3
new file mode 120000
index 0000000..b0804fe
--- /dev/null
+++ b/man3/libsimple_envvallocn.3
@@ -0,0 +1 @@
+libsimple_vvallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_envvalloczn.3 b/man3/libsimple_envvalloczn.3
new file mode 120000
index 0000000..10be3d5
--- /dev/null
+++ b/man3/libsimple_envvalloczn.3
@@ -0,0 +1 @@
+libsimple_vvalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_eposix_memalign.3 b/man3/libsimple_eposix_memalign.3
new file mode 120000
index 0000000..4276ade
--- /dev/null
+++ b/man3/libsimple_eposix_memalign.3
@@ -0,0 +1 @@
+libsimple_enposix_memalign.3 \ No newline at end of file
diff --git a/man3/libsimple_eposix_memalignn.3 b/man3/libsimple_eposix_memalignn.3
new file mode 120000
index 0000000..363ca79
--- /dev/null
+++ b/man3/libsimple_eposix_memalignn.3
@@ -0,0 +1 @@
+libsimple_enposix_memalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_eposix_memalignz.3 b/man3/libsimple_eposix_memalignz.3
new file mode 120000
index 0000000..2aba726
--- /dev/null
+++ b/man3/libsimple_eposix_memalignz.3
@@ -0,0 +1 @@
+libsimple_enposix_memalignz.3 \ No newline at end of file
diff --git a/man3/libsimple_eposix_memalignzn.3 b/man3/libsimple_eposix_memalignzn.3
new file mode 120000
index 0000000..a6d27c4
--- /dev/null
+++ b/man3/libsimple_eposix_memalignzn.3
@@ -0,0 +1 @@
+libsimple_enposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_eprintf.3 b/man3/libsimple_eprintf.3
new file mode 120000
index 0000000..3a87c2d
--- /dev/null
+++ b/man3/libsimple_eprintf.3
@@ -0,0 +1 @@
+libsimple_veprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_eprintf_postprint.3 b/man3/libsimple_eprintf_postprint.3
new file mode 120000
index 0000000..39ff456
--- /dev/null
+++ b/man3/libsimple_eprintf_postprint.3
@@ -0,0 +1 @@
+libsimple_vweprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_eprintf_preprint.3 b/man3/libsimple_eprintf_preprint.3
new file mode 120000
index 0000000..39ff456
--- /dev/null
+++ b/man3/libsimple_eprintf_preprint.3
@@ -0,0 +1 @@
+libsimple_vweprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_eputenvf.3 b/man3/libsimple_eputenvf.3
new file mode 120000
index 0000000..9982fa0
--- /dev/null
+++ b/man3/libsimple_eputenvf.3
@@ -0,0 +1 @@
+libsimple_evputenvf.3 \ No newline at end of file
diff --git a/man3/libsimple_epvalloc.3 b/man3/libsimple_epvalloc.3
new file mode 120000
index 0000000..1c3b2df
--- /dev/null
+++ b/man3/libsimple_epvalloc.3
@@ -0,0 +1 @@
+libsimple_enpvalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_epvallocn.3 b/man3/libsimple_epvallocn.3
new file mode 120000
index 0000000..ed1f5b5
--- /dev/null
+++ b/man3/libsimple_epvallocn.3
@@ -0,0 +1 @@
+libsimple_enpvallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_epvallocz.3 b/man3/libsimple_epvallocz.3
new file mode 120000
index 0000000..e8601bd
--- /dev/null
+++ b/man3/libsimple_epvallocz.3
@@ -0,0 +1 @@
+libsimple_enpvallocz.3 \ No newline at end of file
diff --git a/man3/libsimple_epvalloczn.3 b/man3/libsimple_epvalloczn.3
new file mode 120000
index 0000000..1623378
--- /dev/null
+++ b/man3/libsimple_epvalloczn.3
@@ -0,0 +1 @@
+libsimple_enpvalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_erealloc.3 b/man3/libsimple_erealloc.3
new file mode 120000
index 0000000..cbe7b4b
--- /dev/null
+++ b/man3/libsimple_erealloc.3
@@ -0,0 +1 @@
+libsimple_enrealloc.3 \ No newline at end of file
diff --git a/man3/libsimple_ereallocn.3 b/man3/libsimple_ereallocn.3
new file mode 120000
index 0000000..a27d46a
--- /dev/null
+++ b/man3/libsimple_ereallocn.3
@@ -0,0 +1 @@
+libsimple_enreallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_estrdup.3 b/man3/libsimple_estrdup.3
new file mode 120000
index 0000000..e8f7b76
--- /dev/null
+++ b/man3/libsimple_estrdup.3
@@ -0,0 +1 @@
+libsimple_enstrdup.3 \ No newline at end of file
diff --git a/man3/libsimple_estrndup.3 b/man3/libsimple_estrndup.3
new file mode 120000
index 0000000..e2011e0
--- /dev/null
+++ b/man3/libsimple_estrndup.3
@@ -0,0 +1 @@
+libsimple_enstrndup.3 \ No newline at end of file
diff --git a/man3/libsimple_evaligned_allocn.3 b/man3/libsimple_evaligned_allocn.3
new file mode 120000
index 0000000..0d90fb2
--- /dev/null
+++ b/man3/libsimple_evaligned_allocn.3
@@ -0,0 +1 @@
+libsimple_envaligned_allocn.3 \ No newline at end of file
diff --git a/man3/libsimple_evaligned_alloczn.3 b/man3/libsimple_evaligned_alloczn.3
new file mode 120000
index 0000000..267b5dc
--- /dev/null
+++ b/man3/libsimple_evaligned_alloczn.3
@@ -0,0 +1 @@
+libsimple_envaligned_alloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_evalloc.3 b/man3/libsimple_evalloc.3
new file mode 120000
index 0000000..191ecac
--- /dev/null
+++ b/man3/libsimple_evalloc.3
@@ -0,0 +1 @@
+libsimple_envalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_evallocn.3 b/man3/libsimple_evallocn.3
new file mode 120000
index 0000000..ec6733a
--- /dev/null
+++ b/man3/libsimple_evallocn.3
@@ -0,0 +1 @@
+libsimple_envallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_evallocz.3 b/man3/libsimple_evallocz.3
new file mode 120000
index 0000000..34cfcb2
--- /dev/null
+++ b/man3/libsimple_evallocz.3
@@ -0,0 +1 @@
+libsimple_envallocz.3 \ No newline at end of file
diff --git a/man3/libsimple_evalloczn.3 b/man3/libsimple_evalloczn.3
new file mode 120000
index 0000000..a9ee8b5
--- /dev/null
+++ b/man3/libsimple_evalloczn.3
@@ -0,0 +1 @@
+libsimple_envalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_evarrayalloc.3 b/man3/libsimple_evarrayalloc.3
new file mode 120000
index 0000000..e51e1df
--- /dev/null
+++ b/man3/libsimple_evarrayalloc.3
@@ -0,0 +1 @@
+libsimple_envarrayalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_evcallocn.3 b/man3/libsimple_evcallocn.3
new file mode 120000
index 0000000..83dd452
--- /dev/null
+++ b/man3/libsimple_evcallocn.3
@@ -0,0 +1 @@
+libsimple_envcallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_evmallocn.3 b/man3/libsimple_evmallocn.3
new file mode 120000
index 0000000..3448d63
--- /dev/null
+++ b/man3/libsimple_evmallocn.3
@@ -0,0 +1 @@
+libsimple_envmallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_evmalloczn.3 b/man3/libsimple_evmalloczn.3
new file mode 120000
index 0000000..bc3e9fd
--- /dev/null
+++ b/man3/libsimple_evmalloczn.3
@@ -0,0 +1 @@
+libsimple_envmalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_evmemalignn.3 b/man3/libsimple_evmemalignn.3
new file mode 120000
index 0000000..7589a73
--- /dev/null
+++ b/man3/libsimple_evmemalignn.3
@@ -0,0 +1 @@
+libsimple_envmemalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_evmemalignzn.3 b/man3/libsimple_evmemalignzn.3
new file mode 120000
index 0000000..da91395
--- /dev/null
+++ b/man3/libsimple_evmemalignzn.3
@@ -0,0 +1 @@
+libsimple_envmemalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_evmemalloc.3 b/man3/libsimple_evmemalloc.3
new file mode 120000
index 0000000..14d676f
--- /dev/null
+++ b/man3/libsimple_evmemalloc.3
@@ -0,0 +1 @@
+libsimple_envmemalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_evposix_memalignn.3 b/man3/libsimple_evposix_memalignn.3
new file mode 120000
index 0000000..70b88c2
--- /dev/null
+++ b/man3/libsimple_evposix_memalignn.3
@@ -0,0 +1 @@
+libsimple_envposix_memalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_evposix_memalignzn.3 b/man3/libsimple_evposix_memalignzn.3
new file mode 120000
index 0000000..e42eac6
--- /dev/null
+++ b/man3/libsimple_evposix_memalignzn.3
@@ -0,0 +1 @@
+libsimple_envposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_evputenvf.3 b/man3/libsimple_evputenvf.3
new file mode 120000
index 0000000..1b96365
--- /dev/null
+++ b/man3/libsimple_evputenvf.3
@@ -0,0 +1 @@
+libsimple_envputenvf.3 \ No newline at end of file
diff --git a/man3/libsimple_evpvallocn.3 b/man3/libsimple_evpvallocn.3
new file mode 120000
index 0000000..0c26fb6
--- /dev/null
+++ b/man3/libsimple_evpvallocn.3
@@ -0,0 +1 @@
+libsimple_envpvallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_evpvalloczn.3 b/man3/libsimple_evpvalloczn.3
new file mode 120000
index 0000000..8b5142a
--- /dev/null
+++ b/man3/libsimple_evpvalloczn.3
@@ -0,0 +1 @@
+libsimple_envpvalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_evreallocn.3 b/man3/libsimple_evreallocn.3
new file mode 120000
index 0000000..a97bab1
--- /dev/null
+++ b/man3/libsimple_evreallocn.3
@@ -0,0 +1 @@
+libsimple_envreallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_evvallocn.3 b/man3/libsimple_evvallocn.3
new file mode 120000
index 0000000..31f4783
--- /dev/null
+++ b/man3/libsimple_evvallocn.3
@@ -0,0 +1 @@
+libsimple_envvallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_evvalloczn.3 b/man3/libsimple_evvalloczn.3
new file mode 120000
index 0000000..07cd4f3
--- /dev/null
+++ b/man3/libsimple_evvalloczn.3
@@ -0,0 +1 @@
+libsimple_envvalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_getenv_e.3 b/man3/libsimple_getenv_e.3
new file mode 100644
index 0000000..7e3a3ca
--- /dev/null
+++ b/man3/libsimple_getenv_e.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_GETENV_E 3 2018-10-20 libsimple
+.SH NAME
+libsimple_getenv_e \- get value of an environment variable or the empty string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline const char *libsimple_getenv_e(const char *\fIname\fP);
+
+#ifndef getenv_e
+# define getenv_e libsimple_getenv_e
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_getenv_e ()
+function searches the environment of the calling
+process for the environment variable
+.IR name .
+If it exists, its value is returned. If it does
+not exist, the empty string is returned.
+.PP
+Modifications to the environment variable made from
+within the process, its parent, or other ancestor,
+that have not be come visible to other process via
+replacement of the process image, are visible to the
+.BR libsimple_getenv_e ()
+function.
+.SH RETURN VALUE
+If the environment variable
+.I name
+is defined, its value is returned, otherwise the
+empty string is returned.
+.SH ERRORS
+The
+.BR libsimple_getenv_e ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_getenv_e ()
+T} Thread safety MT-Safe env
+T{
+.BR libsimple_getenv_e ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_getenv_e ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_getenv_ne (3),
+.BR getenv (3)
diff --git a/man3/libsimple_getenv_ne.3 b/man3/libsimple_getenv_ne.3
new file mode 100644
index 0000000..cd788d3
--- /dev/null
+++ b/man3/libsimple_getenv_ne.3
@@ -0,0 +1,81 @@
+.TH LIBSIMPLE_GETENV_NE 3 2018-10-20 libsimple
+.SH NAME
+libsimple_getenv_ne \- get non-empty value of an environment variable
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline char *libsimple_getenv_ne(const char *\fIname\fP);
+
+#ifndef getenv_ne
+# define getenv_ne libsimple_getenv_ne
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_getenv_ne ()
+function searches the environment of the calling
+process for the environment variable
+.IR name .
+If it exists, its value is returned unless the value
+is the empty string.
+.PP
+Modifications to the environment variable made from
+within the process, its parent, or other ancestor,
+that have not be come visible to other process via
+replacement of the process image, are visible to the
+.BR libsimple_getenv_ne ()
+function.
+.SH RETURN VALUE
+If the environment variable
+.I name
+is defined with a non-empty value, its value
+is returned, otherwise
+.B NULL
+is returned.
+.PP
+The returned pointer must not be deallocated and
+its content should not be modified. The returned
+pointer becomes invalid when the environment variable
+.I name
+is unset or modified.
+.SH ERRORS
+The
+.BR libsimple_getenv_ne ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_getenv_ne ()
+T} Thread safety MT-Safe env
+T{
+.BR libsimple_getenv_ne ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_getenv_ne ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_getenv_e (3),
+.BR getenv (3)
diff --git a/man3/libsimple_inchrcaseset.3 b/man3/libsimple_inchrcaseset.3
new file mode 120000
index 0000000..50838ca
--- /dev/null
+++ b/man3/libsimple_inchrcaseset.3
@@ -0,0 +1 @@
+libsimple_inchrset.3 \ No newline at end of file
diff --git a/man3/libsimple_inchrset.3 b/man3/libsimple_inchrset.3
new file mode 100644
index 0000000..f07263c
--- /dev/null
+++ b/man3/libsimple_inchrset.3
@@ -0,0 +1,96 @@
+.TH LIBSIMPLE_INCHRSET 3 2018-11-05 libsimple
+.SH NAME
+libsimple_inchrset, libsimple_inchrcaseset \- the whether a character belongs to a set
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_inchrset(int \fIc\fP, const char *\fIs\fP);
+static inline int libsimple_inchrcaseset(int \fIc\fP, const char *\fIs\fP);
+
+#ifndef inchrset
+# define inchrset libsimple_inchrset
+#endif
+#ifndef inchrcaseset
+# define inchrcaseset libsimple_inchrcaseset
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_inchrset ()
+and
+.BR libsimple_inchrcaseset ()
+functions scans the string
+.I s
+for an occurence of the character
+.I c
+(it is converted to a
+.BR char ),
+and returns a value indicating whether it exists in the string,
+the scan will always fail if
+.I c
+is the NUL byte.
+.PP
+The comparison is case-sensitive for the
+.BR libsimple_inchrset ()
+function, and case-insensitive for the
+.BR libsimple_inchrcaseset ()
+function.
+.SH RETURN VALUE
+The
+.BR libsimple_inchrset ()
+and
+.BR libsimple_inchrcaseset ()
+functions returns 1 if
+.I c
+is not the NUL byte but can be found in
+.IR s ;
+otherwise 0 is returned.
+.SH ERRORS
+The
+.BR libsimple_inchrset ()
+and
+.BR libsimple_inchrcaseset ()
+functions cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_inchrset (),
+.br
+.BR libsimple_inchrcaseset ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_inchrset (),
+.br
+.BR libsimple_strchrnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_inchrset (),
+.br
+.BR libsimple_strchrnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasechr (3),
+.BR strchr (3)
diff --git a/man3/libsimple_mallocn.3 b/man3/libsimple_mallocn.3
new file mode 120000
index 0000000..6410741
--- /dev/null
+++ b/man3/libsimple_mallocn.3
@@ -0,0 +1 @@
+libsimple_vmallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_mallocz.3 b/man3/libsimple_mallocz.3
new file mode 100644
index 0000000..86254ec
--- /dev/null
+++ b/man3/libsimple_mallocz.3
@@ -0,0 +1,188 @@
+.TH LIBSIMPLE_MALLOCZ 3 2018-11-03 libsimple
+.SH NAME
+libsimple_mallocz \- allocate optionally initialised memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_mallocz(int \fIclear\fP, size_t \fIn\fP);
+static inline void *libsimple_enmallocz(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP);
+static inline void *libsimple_emallocz(int \fIclear\fP, size_t \fIn\fP);
+
+#ifndef mallocz
+# define mallocz libsimple_mallocz
+#endif
+#ifndef enmallocz
+# define enmallocz libsimple_enmallocz
+#endif
+#ifndef emallocz
+# define emallocz libsimple_emallocz
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_mallocz (),
+.BR libsimple_enmallocz (),
+and
+.BR libsimple_emallocz ()
+functions are wrappers for the
+.BR malloc (3)
+and
+.BR calloc (3)
+functions, they allocate
+.I n
+bytes to the heap and return a pointer with an
+alignment of
+.I alignof(max_align_t)
+to the allocated memory. The memory will be
+initialised with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enmallocz ()
+and
+.BR libsimple_emallocz ()
+functions will terminate the process if the memory
+cannot be allocated (or if
+.I n
+is 0 and
+.BR malloc (3)
+and
+.BR calloc (3)
+returns
+.B NULL
+when it is used to allocate 0 bytes), by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enmallocz ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_emallocz ()
+function is used.
+.PP
+The
+.BR libsimple_enmallocz ()
+and
+.BR libsimple_emallocz ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_mallocz (),
+.BR libsimple_enmallocz (),
+and
+.BR libsimple_emallocz ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_mallocz ()
+function return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_enmallocz ()
+and
+.BR libsimple_emallocz ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_mallocz ()
+function will fail for the reasons specified for the
+.BR malloc (3)
+and
+.BR calloc (3)
+functions.
+.PP
+The
+.BR libsimple_enmallocz ()
+and
+.BR libsimple_emallocz ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_mallocz (),
+.br
+.BR libsimple_enmallocz (),
+.br
+.BR libsimple_emallocz ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_mallocz (),
+.br
+.BR libsimple_enmallocz (),
+.br
+.BR libsimple_emallocz ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_mallocz (),
+.br
+.BR libsimple_enmallocz (),
+.br
+.BR libsimple_emallocz ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR malloc (3),
+.BR calloc (3)
diff --git a/man3/libsimple_malloczn.3 b/man3/libsimple_malloczn.3
new file mode 120000
index 0000000..5a271e0
--- /dev/null
+++ b/man3/libsimple_malloczn.3
@@ -0,0 +1 @@
+libsimple_vmalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_memalign.3 b/man3/libsimple_memalign.3
new file mode 100644
index 0000000..8df0d50
--- /dev/null
+++ b/man3/libsimple_memalign.3
@@ -0,0 +1,179 @@
+.TH LIBSIMPLE_MEMALIGN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_memalign \- allocate memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_memalign(size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void *libsimple_enmemalign(int \fIstatus\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void *libsimple_ememalign(size_t \fIalignment\fP, size_t \fIn\fP);
+
+#ifndef memalign
+# define memalign libsimple_memalign
+#endif
+#ifndef enmemalign
+# define enmemalign libsimple_enmemalign
+#endif
+#ifndef ememalign
+# define ememalign libsimple_ememalign
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memalign (),
+.BR libsimple_enmemalign (),
+and
+.BR libsimple_ememalign ()
+functions allocate
+.I n
+uninitialised bytes to the heap and return a
+pointer with an alignment of
+.I alignment
+bytes to the allocated memory. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enmemalign ()
+and
+.BR libsimple_ememalign ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enmemalign ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ememalign ()
+function is used.
+.PP
+The
+.BR libsimple_enmemalign ()
+and
+.BR libsimple_ememalign ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_memalign (),
+.BR libsimple_enmemalign (),
+and
+.BR libsimple_ememalign ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_memalign ()
+function return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_enmemalign ()
+and
+.BR libsimple_ememalign ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_memalign ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_enmemalign ()
+and
+.BR libsimple_ememalign ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memalign (),
+.br
+.BR libsimple_enmemalign (),
+.br
+.BR libsimple_ememalign ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memalign (),
+.br
+.BR libsimple_enmemalign (),
+.br
+.BR libsimple_ememalign ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memalign (),
+.br
+.BR libsimple_enmemalign (),
+.br
+.BR libsimple_ememalign ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_memalignn.3 b/man3/libsimple_memalignn.3
new file mode 120000
index 0000000..d9dcdfd
--- /dev/null
+++ b/man3/libsimple_memalignn.3
@@ -0,0 +1 @@
+libsimple_vmemalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_memalignz.3 b/man3/libsimple_memalignz.3
new file mode 100644
index 0000000..11a70d7
--- /dev/null
+++ b/man3/libsimple_memalignz.3
@@ -0,0 +1,182 @@
+.TH LIBSIMPLE_MEMALIGNZ 3 2018-11-03 libsimple
+.SH NAME
+libsimple_memalignz \- allocate optionally initialised memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_memalignz(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void *libsimple_enmemalignz(int \fIstatus\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void *libsimple_ememalignz(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+
+#ifndef memalignz
+# define memalignz libsimple_memalignz
+#endif
+#ifndef enmemalignz
+# define enmemalignz libsimple_enmemalignz
+#endif
+#ifndef ememalignz
+# define ememalignz libsimple_ememalignz
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memalignz (),
+.BR libsimple_enmemalignz (),
+and
+.BR libsimple_ememalignz ()
+functions allocate
+.I n
+bytes to the heap and return a pointer with an
+alignment of
+.I alignment
+bytes to the allocated memory. The memory will be
+initialised with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enmemalignz ()
+and
+.BR libsimple_ememalignz ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enmemalignz ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ememalignz ()
+function is used.
+.PP
+The
+.BR libsimple_enmemalignz ()
+and
+.BR libsimple_ememalignz ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_memalignz (),
+.BR libsimple_enmemalignz (),
+and
+.BR libsimple_ememalignz ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_memalignz ()
+function return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_enmemalignz ()
+and
+.BR libsimple_ememalignz ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_memalignz ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_enmemalignz ()
+and
+.BR libsimple_ememalignz ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memalignz (),
+.br
+.BR libsimple_enmemalignz (),
+.br
+.BR libsimple_ememalignz ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memalignz (),
+.br
+.BR libsimple_enmemalignz (),
+.br
+.BR libsimple_ememalignz ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memalignz (),
+.br
+.BR libsimple_enmemalignz (),
+.br
+.BR libsimple_ememalignz ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_memalignzn.3 b/man3/libsimple_memalignzn.3
new file mode 120000
index 0000000..2faeae6
--- /dev/null
+++ b/man3/libsimple_memalignzn.3
@@ -0,0 +1 @@
+libsimple_vmemalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_memalloc.3 b/man3/libsimple_memalloc.3
new file mode 120000
index 0000000..f578d57
--- /dev/null
+++ b/man3/libsimple_memalloc.3
@@ -0,0 +1 @@
+libsimple_vmemalloc.3 \ No newline at end of file
diff --git a/man3/libsimple_memcasechr.3 b/man3/libsimple_memcasechr.3
new file mode 100644
index 0000000..3934598
--- /dev/null
+++ b/man3/libsimple_memcasechr.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_MEMCASECHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memcasechr \- find byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memcasechr(const void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef memcasechr
+# define memcasechr libsimple_memcasechr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcasechr ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the first occurence of the byte
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memcasechr ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)==tolower(c) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memcasechr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcasechr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcasechr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcasechr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrcasechr (3),
+.BR libsimple_rawmemcasechr (3),
+.BR libsimple_memcasemem (3),
+.BR libsimple_strncasechr (3),
+.BR libsimple_strcasechr (3),
+.BR memchr (3)
diff --git a/man3/libsimple_memcasecmp.3 b/man3/libsimple_memcasecmp.3
new file mode 100644
index 0000000..63e0e27
--- /dev/null
+++ b/man3/libsimple_memcasecmp.3
@@ -0,0 +1,79 @@
+.TH LIBSIMPLE_MEMCASECMP 3 2018-10-21 libsimple
+.SH NAME
+libsimple_memcasecmp \- compare two memory segments
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_memcasecmp(const void *\fIa\fP, const void *\fIb\fP, size_t \fIn\fP);
+
+#ifndef memcasecmp
+# define memcasecmp libsimple_memcasecmp
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcasecmp ()
+function compares the first
+.I n
+bytes of
+.I a
+and
+.IR b .
+.PP
+The comparison is case-insensitive and made as
+if the strings were converted to lowercase and as
+.BR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_memcasecmp ()
+function returns a negative value if
+.I a
+is less than
+.IR b ,
+a positive value if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+.SH ERRORS
+The
+.BR libsimple_memcasecmp ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcasecmp ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcasecmp ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcasecmp ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcaseeq (3),
+.BR libsimple_memcaseeqlen (3),
+.BR memcmp (3)
diff --git a/man3/libsimple_memcaseends.3 b/man3/libsimple_memcaseends.3
new file mode 100644
index 0000000..6605f79
--- /dev/null
+++ b/man3/libsimple_memcaseends.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_MEMCASEENDS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memcaseends \- checks end of memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_memcaseends(const void *\fIs\fP, size_t \fIn\fP, const void *\fIt\fP, size_t \fIm\fP);
+
+#ifndef memcaseends
+# define memcaseends libsimple_memcaseends
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcaseends ()
+function checks whether the
+.I n
+is at least as great as
+.I m
+and that the
+.I m
+last bytes of
+.IR s ,
+with the size
+.IR n ,
+is the same as the
+.I m
+first bytes of
+.IR t .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memcaseends ()
+function returns 1 if
+.I s
+ends with
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_memcaseends ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcaseends ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcaseends ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcaseends ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memends (3),
+.BR libsimple_memcasestarts (3),
+.BR libsimple_memrcasemem (3),
+.BR libsimple_strncaseends (3),
+.BR libsimple_strcaseends (3)
diff --git a/man3/libsimple_memcaseeq.3 b/man3/libsimple_memcaseeq.3
new file mode 100644
index 0000000..6e30970
--- /dev/null
+++ b/man3/libsimple_memcaseeq.3
@@ -0,0 +1,77 @@
+.TH LIBSIMPLE_MEMCASEEQ 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memcaseeq \- check two memory segments for equality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_memcaseeq(const void *\fIa\fP, const void *\fIb\fP, size_t \fIn\fP);
+
+#ifndef memcaseeq
+# define memcaseeq libsimple_memcaseeq
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcaseeq ()
+function checks whether the first
+.I n
+bytes of
+.I a
+and
+.I b
+are equal.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memcaseeq ()
+function returns 1 one if
+.I a
+and
+.I b
+are equal, with the possible exception if
+their case, otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_memcaseeq ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcaseeq ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcaseeq ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcaseeq ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memeq (3),
+.BR libsimple_memcaseeqlen (3),
+.BR libsimple_memcasecmp (3),
+.BR libsimple_strncaseeq (3),
+.BR libsimple_strcaseeq (3)
diff --git a/man3/libsimple_memcaseeqlen.3 b/man3/libsimple_memcaseeqlen.3
new file mode 100644
index 0000000..f8779c8
--- /dev/null
+++ b/man3/libsimple_memcaseeqlen.3
@@ -0,0 +1,78 @@
+.TH LIBSIMPLE_MEMCASEEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memcaseeqlen \- check initial commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+size_t libsimple_memcaseeqlen(const void *\fIa\fP, size_t \fIn\fP, const void *\fIb\fP, size_t \fIm\fP);
+
+#ifndef memcaseeqlen
+# define memcaseeqlen libsimple_memcaseeqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcaseeqlen ()
+function scans the number of bytes the byte array
+.IR a ,
+with size
+.IR n ,
+have in common the byte array
+.IR b ,
+with size
+.IR m ,
+at their beginnings.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memcaseeqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+have in common at their beginnings.
+.SH ERRORS
+The
+.BR libsimple_memcaseeqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcaseeqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcaseeqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcaseeqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcaseeq (3),
+.BR libsimple_memeqlen (3),
+.BR libsimple_memrcaseeqlen (3),
+.BR libsimple_strncaseeqlen (3),
+.BR libsimple_strcaseeqlen (3)
diff --git a/man3/libsimple_memcasemem.3 b/man3/libsimple_memcasemem.3
new file mode 100644
index 0000000..37c6cda
--- /dev/null
+++ b/man3/libsimple_memcasemem.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_MEMCASEMEM 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memcasemem \- find byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memcasemem(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memcasemem
+# define memcasemem libsimple_memcasemem
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcasemem ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack ,
+for the first occurence of the byte string
+.I needle
+with the size
+.IR nneedle .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memcasemem ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR !memcasecmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memcasemem ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcasemem ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcasemem ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcasemem ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memmem (3),
+.BR libsimple_memrcasemem (3),
+.BR libsimple_memcasechr (3),
+.BR libsimple_strncasestr (3),
+.BR libsimple_strcasestr (3)
diff --git a/man3/libsimple_memcasestarts.3 b/man3/libsimple_memcasestarts.3
new file mode 100644
index 0000000..d8a7259
--- /dev/null
+++ b/man3/libsimple_memcasestarts.3
@@ -0,0 +1,81 @@
+.TH LIBSIMPLE_MEMCASESTARTS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memcasestarts \- checks beginning of memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_memcasestarts(const void *\fIs\fP, size_t \fIn\fP, const void *\fIt\fP, size_t \fIm\fP);
+
+#ifndef memcasestarts
+# define memcasestarts libsimple_memcasestarts
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcasestarts ()
+function checks whether the
+.I n
+is at least as great as
+.I m
+and that the
+.I m
+first bytes of
+.I s
+is the same as the
+.I m
+first bytes of
+.IR t .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memcasestarts ()
+function returns 1 if
+.I s
+begins with
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_memcasestarts ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcasestarts ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcasestarts ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcasestarts ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memstarts (3),
+.BR libsimple_memcaseends (3),
+.BR libsimple_memcasemem (3),
+.BR libsimple_strncasestarts (3),
+.BR libsimple_strcasestarts (3)
diff --git a/man3/libsimple_memdup.3 b/man3/libsimple_memdup.3
new file mode 100644
index 0000000..e111574
--- /dev/null
+++ b/man3/libsimple_memdup.3
@@ -0,0 +1,149 @@
+.TH LIBSIMPLE_MEMDUP 3 2018-10-27 libsimple
+.SH NAME
+libsimple_memdup \- duplicate bytes in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memdupa(const void *\fIs\fP, size_t \fIn\fP);
+void *libsimple_memdup(const void *\fIs\fP, size_t \fIn\fP);
+void *libsimple_enmemdup(int \fIstatus\fP, const void *\fIs\fP, size_t \fIn\fP);
+static inline void *libsimple_ememdup(const void *\fIs\fP, size_t \fIn\fP);
+
+#ifndef memdupa
+# define memdupa libsimple_memdupa
+#endif
+#ifndef memdup
+# define memdup libsimple_memdup
+#endif
+#ifndef enmemdup
+# define enmemdup libsimple_enmemdup
+#endif
+#ifndef ememdup
+# define ememdup libsimple_ememdup
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memdup ()
+function constructs allocates memory and copies
+.I n
+first bytes from
+.I s
+into the new allocation.
+.PP
+The
+.BR libsimple_enmemdup ()
+and
+.BR libsimple_ememdup ()
+functions are versions of the
+.BR libsimple_memdup ()
+function that call the
+.BR libsimple_enprintf (3)
+function on failure, causing the process to print
+an error message and exit. See
+.BR libsimple_enprintf (3)
+for more information.
+.PP
+The
+.BR libsimple_memdupa ()
+function is implemented as a macro and is a version
+of the
+.BR libsimple_memdup ()
+function that uses allocates the memory on the stack
+rather than on the heap, causing the return pointer
+to become invalid when the calling function returns.
+It is only available when compling with GCC or Clang.
+.SH RETURN VALUE
+Upon successful completion, the
+.BR libsimple_memdupa (),
+.BR libsimple_memdup (),
+.BR libsimple_enmemdup (),
+and
+.BR libsimple_ememdup ()
+functions return a non-null pointer, on failure the
+.BR libsimple_memdup ()
+function returns
+.B NULL
+and set
+.I errno
+to indicate the error, and the
+.BR libsimple_enmemdup (),
+and
+.BR libsimple_ememdup ()
+functions exit the process. The
+.BR libsimple_memdupa ()
+function cannot fail, however the kernel
+can kill the thread, and possibly the process, with a
+.B SIGSEGV
+signal if the memory cannot be allocated.
+.PP
+The returned pointer should be deallocated when it
+is no longer needed, except for the pointer returned
+by the
+.BR libsimple_memdupa ()
+function, it is automatically deallocated when the
+calling function returns.
+.SH ERRORS
+The
+.BR libsimple_memdup ()
+function may fail for any reason specified for the
+.BR alloc (3)
+function.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memdupa (),
+.br
+.BR libsimple_memdup (),
+.br
+.BR libsimple_enmemdup (),
+.br
+.BR libsimple_ememdup (),
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memdupa (),
+.br
+.BR libsimple_memdup (),
+.br
+.BR libsimple_enmemdup (),
+.br
+.BR libsimple_ememdup (),
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memdupa (),
+.br
+.BR libsimple_memdup (),
+.br
+.BR libsimple_enmemdup (),
+.br
+.BR libsimple_ememdup (),
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_aligned_memdup (3),
+.BR libsimple_enstrndup (3),
+.BR libsimple_enstrdup (3),
+.BR strndup (3),
+.BR strdup (3)
diff --git a/man3/libsimple_memdupa.3 b/man3/libsimple_memdupa.3
new file mode 120000
index 0000000..ff9fc97
--- /dev/null
+++ b/man3/libsimple_memdupa.3
@@ -0,0 +1 @@
+libsimple_memdup.3 \ No newline at end of file
diff --git a/man3/libsimple_memelem.3 b/man3/libsimple_memelem.3
new file mode 100644
index 0000000..833e246
--- /dev/null
+++ b/man3/libsimple_memelem.3
@@ -0,0 +1,84 @@
+.TH LIBSIMPLE_MEMELEM 3 2018-10-20 libsimple
+.SH NAME
+libsimple_memelem \- find aligned byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memelem(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memelem
+# define memelem libsimple_memelem
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memelem ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack*nneedle ,
+for the first occurence of the byte string
+.I needle
+with the size
+.IR nneedle ,
+and with an offset equivalent to zero modulo
+.IR nneedle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memelem ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR !memcmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer, and such that
+the offset is equivalent to zero modulo
+.IR nneedle .
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memelem ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memelem ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memelem ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memelem ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrelem (3),
+.BR libsimple_memmem (3),
+.BR memchr (3)
diff --git a/man3/libsimple_memends.3 b/man3/libsimple_memends.3
new file mode 100644
index 0000000..34db568
--- /dev/null
+++ b/man3/libsimple_memends.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_MEMENDS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memends \- checks end of memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_memends(const void *\fIs\fP, size_t \fIn\fP, const void *\fIt\fP, size_t \fIm\fP);
+
+#ifndef memends
+# define memends libsimple_memends
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memends ()
+function checks whether the
+.I n
+is at least as great as
+.I m
+and that the
+.I m
+last bytes of
+.IR s ,
+with the size
+.IR n ,
+is the same as the
+.I m
+first bytes of
+.IR t .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memends ()
+function returns 1 if
+.I s
+ends with
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_memends ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memends ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memends ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memends ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcaseends (3),
+.BR libsimple_memstarts (3),
+.BR libsimple_memrmem (3),
+.BR libsimple_strnends (3),
+.BR libsimple_strends (3)
diff --git a/man3/libsimple_memeq.3 b/man3/libsimple_memeq.3
new file mode 100644
index 0000000..6631328
--- /dev/null
+++ b/man3/libsimple_memeq.3
@@ -0,0 +1,76 @@
+.TH LIBSIMPLE_MEMEQ 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memeq \- check two memory segments for equality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_memeq(const void *\fIa\fP, const void *\fIb\fP, size_t \fIn\fP);
+
+#ifndef memeq
+# define memeq libsimple_memeq
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memeq ()
+function checks whether the first
+.I n
+bytes of
+.I a
+and
+.I b
+are equal.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memeq ()
+function returns 1 one if
+.I a
+and
+.I b
+are equal, otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_memeq ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memeq ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memeq ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memeq ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcaseeq (3),
+.BR libsimple_memeqlen (3),
+.BR libsimple_strneq (3),
+.BR libsimple_streq (3),
+.BR memcmp (3)
diff --git a/man3/libsimple_memeqlen.3 b/man3/libsimple_memeqlen.3
new file mode 100644
index 0000000..6a03808
--- /dev/null
+++ b/man3/libsimple_memeqlen.3
@@ -0,0 +1,78 @@
+.TH LIBSIMPLE_MEMEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memeqlen \- check initial commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+size_t libsimple_memeqlen(const void *\fIa\fP, size_t \fIn\fP, const void *\fIb\fP, size_t \fIm\fP);
+
+#ifndef memeqlen
+# define memeqlen libsimple_memeqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memeqlen ()
+function scans the number of bytes the byte array
+.IR a ,
+with size
+.IR n ,
+have in common the byte array
+.IR b ,
+with size
+.IR m ,
+at their beginnings.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memeqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+have in common at their beginnings.
+.SH ERRORS
+The
+.BR libsimple_memeqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memeqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memeqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memeqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memeq (3),
+.BR libsimple_memcaseeqlen (3),
+.BR libsimple_memreqlen (3),
+.BR libsimple_strneqlen (3),
+.BR libsimple_streqlen (3)
diff --git a/man3/libsimple_memmem.3 b/man3/libsimple_memmem.3
new file mode 100644
index 0000000..30dea44
--- /dev/null
+++ b/man3/libsimple_memmem.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_MEMMEM 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memmem \- find byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memmem(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memmem
+# define memmem libsimple_memmem
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memmem ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack ,
+for the first occurence of the byte string
+.I needle
+with the size
+.IR nneedle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memmem ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR !memcmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memmem ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memmem ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memmem ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memmem ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrcasemem (3),
+.BR libsimple_memrmem (3),
+.BR libsimple_memelem (3),
+.BR libsimple_strnstr (3),
+.BR strstr (3),
+.BR memchr (3)
diff --git a/man3/libsimple_mempcpy.3 b/man3/libsimple_mempcpy.3
new file mode 100644
index 0000000..bf9e6bc
--- /dev/null
+++ b/man3/libsimple_mempcpy.3
@@ -0,0 +1,72 @@
+.TH LIBSIMPLE_MEMPCPY 3 2018-10-23 libsimple
+.SH NAME
+libsimple_mempcpy \- copy an array of bytes into another
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_mempcpy(void *\fIdest\fP, const void *\fIsrc\fP, size_t \fIn\fP);
+
+#ifndef mempcpy
+# define mempcpy libsimple_mempcpy
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_mempcpy ()
+function copies the first
+.I n
+bytes of
+.I src
+into
+.IR dest .
+.SH RETURN VALUE
+The
+.BR libsimple_mempcpy ()
+function returns the pointer
+.I dest
+with the offset
+.I n
+(the byte where the copy stopped).
+.SH ERRORS
+The
+.BR libsimple_mempcpy ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_mempcpy ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_mempcpy ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_mempcpy ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_mempset (3),
+.BR memcpy (3),
+.BR stpncpy (3),
+.BR stpcpy (3)
diff --git a/man3/libsimple_mempset.3 b/man3/libsimple_mempset.3
new file mode 100644
index 0000000..c88257b
--- /dev/null
+++ b/man3/libsimple_mempset.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_MEMPSET 3 2018-10-20 libsimple
+.SH NAME
+libsimple_mempset \- fill an array of bytes
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_mempset(void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef mempset
+# define mempset libsimple_mempset
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_mempset ()
+function fills the first
+.I n
+bytes of
+.I s
+with the value
+.I c
+coverted to a
+.BR char .
+.SH RETURN VALUE
+The
+.BR libsimple_mempset ()
+function returns the pointer
+.I s
+with the offset
+.I n
+(the byte where the copy stopped).
+.SH ERRORS
+The
+.BR libsimple_mempset ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_mempset ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_mempset ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_mempset ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_mempsetelem (3),
+.BR libsimple_mempcpy (3),
+.BR memset (3)
diff --git a/man3/libsimple_mempsetelem.3 b/man3/libsimple_mempsetelem.3
new file mode 100644
index 0000000..0b32228
--- /dev/null
+++ b/man3/libsimple_mempsetelem.3
@@ -0,0 +1,72 @@
+.TH LIBSIMPLE_MEMPSETELEM 3 2018-10-20 libsimple
+.SH NAME
+libsimple_mempsetelem \- fill an array with a value
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_mempsetelem(void *\fIbuf\fP, const void *\fIitem\fP, size_t \fIsize\fP, size_t \fInitems\fP);
+
+#ifndef mempsetelem
+# define mempsetelem libsimple_mempsetelem
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_mempsetelem ()
+function fills the beginning of
+.I buf
+with
+.I nitems
+copies of the element
+.I item
+with the size
+.IR size .
+.SH RETURN VALUE
+The
+.BR libsimple_mempsetelem ()
+function returns the pointer
+.I buf
+with the offset
+.I nitems*size
+(the byte where the copy stopped).
+.SH ERRORS
+The
+.BR libsimple_mempsetelem ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_mempsetelem ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_mempsetelem ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_mempsetelem ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memsetelem (3),
+.BR libsimple_mempset (3)
diff --git a/man3/libsimple_memrcasechr.3 b/man3/libsimple_memrcasechr.3
new file mode 100644
index 0000000..100f938
--- /dev/null
+++ b/man3/libsimple_memrcasechr.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_MEMRCASECHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memrcasechr \- find byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memrcasechr(const void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef memrcasechr
+# define memrcasechr libsimple_memrcasechr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrcasechr ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the last occurence of the byte
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrcasechr ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR tolower(*r)==tolower(c) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memrcasechr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrcasechr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrcasechr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrcasechr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcasechr (3),
+.BR libsimple_memrchr (3),
+.BR libsimple_rawmemrcasechr (3),
+.BR libsimple_memrcasemem (3),
+.BR libsimple_strrncasechr (3),
+.BR libsimple_strrcasechr (3)
diff --git a/man3/libsimple_memrcaseeqlen.3 b/man3/libsimple_memrcaseeqlen.3
new file mode 100644
index 0000000..9991e05
--- /dev/null
+++ b/man3/libsimple_memrcaseeqlen.3
@@ -0,0 +1,77 @@
+.TH LIBSIMPLE_MEMRCASEEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memrcaseeqlen \- check terminal commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+size_t libsimple_memrcaseeqlen(const void *\fIa\fP, size_t \fIn\fP, const void *\fIb\fP, size_t \fIm\fP);
+
+#ifndef memrcaseeqlen
+# define memrcaseeqlen libsimple_memrcaseeqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrcaseeqlen ()
+function scans the number of bytes the byte array
+.IR a ,
+with size
+.IR n ,
+have in common the byte array
+.IR b ,
+with size
+.IR m ,
+at their ends.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrcaseeqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+have in common at their ends.
+.SH ERRORS
+The
+.BR libsimple_memrcaseeqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrcaseeqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrcaseeqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrcaseeqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memreqlen (3),
+.BR libsimple_memcaseeqlen (3),
+.BR libsimple_strrncaseeqlen (3),
+.BR libsimple_strrcaseeqlen (3)
diff --git a/man3/libsimple_memrcasemem.3 b/man3/libsimple_memrcasemem.3
new file mode 100644
index 0000000..76b6ea5
--- /dev/null
+++ b/man3/libsimple_memrcasemem.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_MEMRCASEMEM 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memrcasemem \- find byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memrcasemem(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memrcasemem
+# define memrcasemem libsimple_memrcasemem
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrcasemem ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack ,
+for the last occurence of the byte string
+.I needle
+with the size
+.IR nneedle .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrcasemem ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR !memcasecmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memrcasemem ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrcasemem ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrcasemem ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrcasemem ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrmem (3),
+.BR libsimple_memcasemem (3),
+.BR libsimple_memrcasechr (3),
+.BR libsimple_strrncasestr (3),
+.BR libsimple_strrcasestr (3)
diff --git a/man3/libsimple_memrchr.3 b/man3/libsimple_memrchr.3
new file mode 100644
index 0000000..362c8ba
--- /dev/null
+++ b/man3/libsimple_memrchr.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_MEMRCHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memrchr \- find byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memrchr(const void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef memrchr
+# define memrchr libsimple_memrchr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrchr ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the last occurence of the byte
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrchr ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR *r==c ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memrchr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrchr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrchr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrchr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrcasechr (3),
+.BR libsimple_rawmemrchr (3),
+.BR libsimple_memrmem (3),
+.BR libsimple_strrnchr (3),
+.BR memchr (3)
+.BR strrchr (3)
diff --git a/man3/libsimple_memrelem.3 b/man3/libsimple_memrelem.3
new file mode 100644
index 0000000..203ffee
--- /dev/null
+++ b/man3/libsimple_memrelem.3
@@ -0,0 +1,84 @@
+.TH LIBSIMPLE_MEMRELEM 3 2018-10-20 libsimple
+.SH NAME
+libsimple_memrelem \- find aligned byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memrelem(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memrelem
+# define memrelem libsimple_memrelem
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrelem ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack*nneedle ,
+for the last occurence of the byte string
+.I needle
+with the size
+.IR nneedle ,
+and with an offset equivalent to zero modulo
+.IR nneedle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrelem ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR !memcmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer, and such that
+the offset is equivalent to zero modulo
+.IR nneedle .
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memrelem ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrelem ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrelem ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrelem ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memelem (3),
+.BR libsimple_memrmem (3),
+.BR libsimple_memrchr (3)
diff --git a/man3/libsimple_memreqlen.3 b/man3/libsimple_memreqlen.3
new file mode 100644
index 0000000..93b49b4
--- /dev/null
+++ b/man3/libsimple_memreqlen.3
@@ -0,0 +1,77 @@
+.TH LIBSIMPLE_MEMREQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memreqlen \- check terminal commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+size_t libsimple_memreqlen(const void *\fIa\fP, size_t \fIn\fP, const void *\fIb\fP, size_t \fIm\fP);
+
+#ifndef memreqlen
+# define memreqlen libsimple_memreqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memreqlen ()
+function scans the number of bytes the byte array
+.IR a ,
+with size
+.IR n ,
+have in common the byte array
+.IR b ,
+with size
+.IR m ,
+at their ends.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memreqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+have in common at their ends.
+.SH ERRORS
+The
+.BR libsimple_memreqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memreqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memreqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memreqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrcaseeqlen (3),
+.BR libsimple_memeqlen (3),
+.BR libsimple_strrneqlen (3),
+.BR libsimple_strreqlen (3)
diff --git a/man3/libsimple_memrmem.3 b/man3/libsimple_memrmem.3
new file mode 100644
index 0000000..706fc03
--- /dev/null
+++ b/man3/libsimple_memrmem.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_MEMRMEM 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memrmem \- find byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memrmem(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memrmem
+# define memrmem libsimple_memrmem
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrmem ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack ,
+for the last occurence of the byte string
+.I needle
+with the size
+.IR nneedle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrmem ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR !memcmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memrmem ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrmem ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrmem ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrmem ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcasemem (3),
+.BR libsimple_memmem (3),
+.BR libsimple_memrelem (3),
+.BR libsimple_memrchr (3),
+.BR libsimple_strrnstr (3),
+.BR libsimple_strrstr (3)
diff --git a/man3/libsimple_memsetelem.3 b/man3/libsimple_memsetelem.3
new file mode 100644
index 0000000..516a20b
--- /dev/null
+++ b/man3/libsimple_memsetelem.3
@@ -0,0 +1,69 @@
+.TH LIBSIMPLE_MEMSETELEM 3 2018-10-20 libsimple
+.SH NAME
+libsimple_memsetelem \- fill an array with a value
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_memsetelem(void *\fIbuf\fP, const void *\fIitem\fP, size_t \fIsize\fP, size_t \fInitems\fP);
+
+#ifndef memsetelem
+# define memsetelem libsimple_memsetelem
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memsetelem ()
+function fills the beginning of
+.I buf
+with
+.I nitems
+copies of the element
+.I item
+with the size
+.IR size .
+.SH RETURN VALUE
+The
+.BR libsimple_memsetelem ()
+function returns the pointer
+.IR buf .
+.SH ERRORS
+The
+.BR libsimple_memsetelem ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memsetelem ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memsetelem ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memsetelem ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_mempsetelem (3),
+.BR memset (3)
diff --git a/man3/libsimple_memstarts.3 b/man3/libsimple_memstarts.3
new file mode 100644
index 0000000..527397b
--- /dev/null
+++ b/man3/libsimple_memstarts.3
@@ -0,0 +1,81 @@
+.TH LIBSIMPLE_MEMSTARTS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_memstarts \- checks beginning of memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_memstarts(const void *\fIs\fP, size_t \fIn\fP, const void *\fIt\fP, size_t \fIm\fP);
+
+#ifndef memstarts
+# define memstarts libsimple_memstarts
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memstarts ()
+function checks whether the
+.I n
+is at least as great as
+.I m
+and that the
+.I m
+first bytes of
+.I s
+is the same as the
+.I m
+first bytes of
+.IR t .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memstarts ()
+function returns 1 if
+.I s
+begins with
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_memstarts ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memstarts ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memstarts ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memstarts ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcasestarts (3),
+.BR libsimple_memends (3),
+.BR libsimple_memmem (3),
+.BR libsimple_strnstarts (3),
+.BR libsimple_strstarts (3)
diff --git a/man3/libsimple_minimise_number_string.3 b/man3/libsimple_minimise_number_string.3
new file mode 100644
index 0000000..310b725
--- /dev/null
+++ b/man3/libsimple_minimise_number_string.3
@@ -0,0 +1,64 @@
+.TH LIBSIMPLE_MINIMISE_NUMBER_STRING 3 2018-10-31 libsimple
+.SH NAME
+libsimple_minimise_number_string \- ninimise a numerical string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_minimise_number_string(char *\fIs\fP);
+
+#ifndef minimise_number_string
+# define minimise_number_string libsimple_minimise_number_string
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_minimise_number_string ()
+function minimises a string representing a real value with
+the assumption that the string is on the format
+.B [+-]\e?[0-9]*\e(\e.[0-9]*\e)\e?
+(repeating decimals are not supported).
+.SH RETURN VALUE
+The
+.BR libsimple_minimise_number_string ()
+function returns the pointer
+.IR s .
+.SH ERRORS
+The
+.BR libsimple_minimise_number_string ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_minimise_number_string ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_minimise_number_string ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_minimise_number_string ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_timespectostr (3)
diff --git a/man3/libsimple_multimespec.3 b/man3/libsimple_multimespec.3
new file mode 100644
index 0000000..a55b7a2
--- /dev/null
+++ b/man3/libsimple_multimespec.3
@@ -0,0 +1,115 @@
+.TH LIBSIMPLE_MULTIMESPEC 3 2018-10-29 libsimple
+.SH NAME
+libsimple_multimespec, libsimple_multimeval \- multiply a duration with an integer
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_multimespec(struct timespec *\fIprod\fP, const struct timespec *\fImultiplicand\fP, int \fImultiplier\fP);
+int libsimple_multimeval(struct timeval *\fIprod\fP, const struct timeval *\fImultiplicand\fP, int \fImultiplier\fP);
+
+#ifndef multimespec
+# define multimespec libsimple_multimespec
+#endif
+#ifndef multimeval
+# define multimeval libsimple_multimeval
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_multimespec ()
+and
+.BR libsimple_multimeval ()
+functions calculates the product of
+.I multiplicand
+and
+.I multiplier
+and stores the result in
+.IR prod .
+.SH RETURN VALUE
+The
+.BR libsimple_multimespec ()
+and
+.BR libsimple_multimeval ()
+functions return 0 on successful completion;
+otherwise, \-1 is returned and
+.I errno
+is set to indicate the error.
+.SH ERRORS
+The
+.BR libsimple_multimespec ()
+and
+.BR libsimple_multimeval ()
+functions fail if:
+.TP
+.B ERANGE
+The result is too large or too small to be stored; if the
+result is too large
+.I *diff
+will be set to
+.I {.tv_sec=TIME_MAX,.tv_nsec=999999999L}
+for the
+.BR libsimple_multimespec ()
+function and to
+.I {.tv_sec=TIME_MAX,.tv_usec=999999L}
+for the
+.BR libsimple_multimeval ()
+function, if the result is too small
+.I *diff
+will be set to
+.I {.tv_sec=TIME_MIN,.tv_nsec=0}
+for the
+.BR libsimple_multimespec ()
+function and to
+.I {.tv_sec=TIME_MIN,.tv_usec=0}
+for the
+.BR libsimple_multimeval ()
+function.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_multimespec ()
+.br
+.BR libsimple_multimeval ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_multimespec ()
+.br
+.BR libsimple_multimeval ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_multimespec ()
+.br
+.BR libsimple_multimeval ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_sumtimespec (3),
+.BR libsimple_difftimespec (3),
+.BR libsimple_cmptimespec (3),
+.BR libsimple_timespectostr (3),
+.BR libsimple_strtotimespec (3),
+.BR libsimple_timespectodouble (3),
+.BR libsimple_doubletotimespec (3),
+.BR libsimple_timeval2timespec (3)
diff --git a/man3/libsimple_multimeval.3 b/man3/libsimple_multimeval.3
new file mode 120000
index 0000000..f5d0d9d
--- /dev/null
+++ b/man3/libsimple_multimeval.3
@@ -0,0 +1 @@
+libsimple_multimespec.3 \ No newline at end of file
diff --git a/man3/libsimple_posix_memalignn.3 b/man3/libsimple_posix_memalignn.3
new file mode 120000
index 0000000..7402678
--- /dev/null
+++ b/man3/libsimple_posix_memalignn.3
@@ -0,0 +1 @@
+libsimple_vposix_memalignn.3 \ No newline at end of file
diff --git a/man3/libsimple_posix_memalignz.3 b/man3/libsimple_posix_memalignz.3
new file mode 100644
index 0000000..3ea4655
--- /dev/null
+++ b/man3/libsimple_posix_memalignz.3
@@ -0,0 +1,187 @@
+.TH LIBSIMPLE_POSIX_MEMALIGNZ 3 2018-11-03 libsimple
+.SH NAME
+libsimple_posix_memalignz \- allocate optionally initialised memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_posix_memalignz(void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+void libsimple_enposix_memalignz(int \fIstatus\fP, void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+static inline void libsimple_eposix_memalignz(void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP);
+
+#ifndef posix_memalignz
+# define posix_memalignz libsimple_posix_memalignz
+#endif
+#ifndef enposix_memalignz
+# define enposix_memalignz libsimple_enposix_memalignz
+#endif
+#ifndef eposix_memalignz
+# define eposix_memalignz libsimple_eposix_memalignz
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_posix_memalignz (),
+.BR libsimple_enposix_memalignz (),
+and
+.BR libsimple_eposix_memalignz ()
+functions allocate
+.I n
+bytes to the heap and store a pointer with an
+alignment of
+.I alignment
+bytes to the allocated memory in
+.IR memptr .
+The memory will be initialised with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the pointer stored in
+.I memptr
+as input when the allocated memory is no longer needed.
+.I *memptr
+remains unmodified on failure.
+.PP
+The
+.BR libsimple_enposix_memalignz ()
+and
+.BR libsimple_eposix_memalignz ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enposix_memalignz ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_eposix_memalignz ()
+function is used.
+.PP
+The
+.BR libsimple_enposix_memalignz ()
+and
+.BR libsimple_eposix_memalignz ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_posix_memalignz ()
+function returns 0 upon successful completion;
+otherwise an error code is returned to indicate
+the error.
+.PP
+The
+.BR libsimple_enposix_memalignz ()
+and
+.BR libsimple_eposix_memalignz ()
+functions do not return a value, but
+terminated the process on failure.
+.SH ERRORS
+The
+.BR libsimple_posix_memalignz ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B EINVAL
+.I alignment
+is not a multiple of
+.IR "sizeof(void *)" .
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_enposix_memalignz ()
+and
+.BR libsimple_eposix_memalignz ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_posix_memalignz (),
+.br
+.BR libsimple_enposix_memalignz (),
+.br
+.BR libsimple_eposix_memalignz ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_posix_memalignz (),
+.br
+.BR libsimple_enposix_memalignz (),
+.br
+.BR libsimple_eposix_memalignz ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_posix_memalignz (),
+.br
+.BR libsimple_enposix_memalignz (),
+.br
+.BR libsimple_eposix_memalignz ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR posix_memalign (3)
diff --git a/man3/libsimple_posix_memalignzn.3 b/man3/libsimple_posix_memalignzn.3
new file mode 120000
index 0000000..e47154f
--- /dev/null
+++ b/man3/libsimple_posix_memalignzn.3
@@ -0,0 +1 @@
+libsimple_vposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/libsimple_putenvf.3 b/man3/libsimple_putenvf.3
new file mode 120000
index 0000000..ce0929f
--- /dev/null
+++ b/man3/libsimple_putenvf.3
@@ -0,0 +1 @@
+libsimple_vputenvf.3 \ No newline at end of file
diff --git a/man3/libsimple_pvalloc.3 b/man3/libsimple_pvalloc.3
new file mode 100644
index 0000000..63473b3
--- /dev/null
+++ b/man3/libsimple_pvalloc.3
@@ -0,0 +1,169 @@
+.TH LIBSIMPLE_PVALLOC 3 2018-11-03 libsimple
+.SH NAME
+libsimple_pvalloc \- allocate memory with page size alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_pvalloc(size_t \fIn\fP);
+static inline void *libsimple_enpvalloc(int \fIstatus\fP, size_t \fIn\fP);
+static inline void *libsimple_epvalloc(size_t \fIn\fP);
+
+#ifndef pvalloc
+# define pvalloc libsimple_pvalloc
+#endif
+#ifndef enpvalloc
+# define enpvalloc libsimple_enpvalloc
+#endif
+#ifndef epvalloc
+# define epvalloc libsimple_epvalloc
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_pvalloc (),
+.BR libsimple_enpvalloc (),
+and
+.BR libsimple_epvalloc ()
+functions allocate
+.I n
+uninitialised bytes, rounded up to the next multiple of
+the page size, to the heap and return a pointer with an
+alignment of the page size to the allocated memory.
+The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enpvalloc ()
+and
+.BR libsimple_epvalloc ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enpvalloc ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_epvalloc ()
+function is used.
+.SH RETURN VALUE
+The
+.BR libsimple_pvalloc (),
+.BR libsimple_enpvalloc (),
+and
+.BR libsimple_epvalloc ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_pvalloc ()
+function return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_enpvalloc ()
+and
+.BR libsimple_epvalloc ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_pvalloc ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_enpvalloc ()
+and
+.BR libsimple_epvalloc ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_pvalloc (),
+.br
+.BR libsimple_enpvalloc (),
+.br
+.BR libsimple_epvalloc ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_pvalloc (),
+.br
+.BR libsimple_enpvalloc (),
+.br
+.BR libsimple_epvalloc ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_pvalloc (),
+.br
+.BR libsimple_enpvalloc (),
+.br
+.BR libsimple_epvalloc ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+The GNU implementation of
+.BR pvalloc (3)
+is \(dqMT-Unsafe init\(dq.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_pvallocn.3 b/man3/libsimple_pvallocn.3
new file mode 120000
index 0000000..a659d76
--- /dev/null
+++ b/man3/libsimple_pvallocn.3
@@ -0,0 +1 @@
+libsimple_vpvallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_pvallocz.3 b/man3/libsimple_pvallocz.3
new file mode 100644
index 0000000..c758fcd
--- /dev/null
+++ b/man3/libsimple_pvallocz.3
@@ -0,0 +1,179 @@
+.TH LIBSIMPLE_PVALLOCZ 3 2018-11-03 libsimple
+.SH NAME
+libsimple_pvallocz \- allocate optionally initialised memory with page size alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_pvallocz(int \fIclear\fP, size_t \fIn\fP);
+static inline void *libsimple_enpvallocz(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP);
+static inline void *libsimple_epvallocz(int \fIclear\fP, size_t \fIn\fP);
+
+#ifndef pvallocz
+# define pvallocz libsimple_pvallocz
+#endif
+#ifndef enpvallocz
+# define enpvallocz libsimple_enpvallocz
+#endif
+#ifndef epvallocz
+# define epvallocz libsimple_epvallocz
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_pvallocz (),
+.BR libsimple_enpvallocz (),
+and
+.BR libsimple_epvallocz ()
+functions allocate
+.I n
+bytes, rounded up to the next multiple of the page size,
+to the heap and return a pointer with an alignment of
+the page size to the allocated memory. The memory will be
+initialised with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enpvallocz ()
+and
+.BR libsimple_epvallocz ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enpvallocz ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_epvallocz ()
+function is used.
+.PP
+The
+.BR libsimple_enpvallocz ()
+and
+.BR libsimple_epvallocz ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_pvallocz (),
+.BR libsimple_enpvallocz (),
+and
+.BR libsimple_epvallocz ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_pvallocz ()
+function return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_enpvallocz ()
+and
+.BR libsimple_epvallocz ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_pvallocz ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_enpvallocz ()
+and
+.BR libsimple_epvallocz ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_pvallocz (),
+.br
+.BR libsimple_enpvallocz (),
+.br
+.BR libsimple_epvallocz ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_pvallocz (),
+.br
+.BR libsimple_enpvallocz (),
+.br
+.BR libsimple_epvallocz ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_pvallocz (),
+.br
+.BR libsimple_enpvallocz (),
+.br
+.BR libsimple_epvallocz ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+The GNU implementation of
+.BR pvalloc (3)
+is \(dqMT-Unsafe init\(dq.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_pvalloczn.3 b/man3/libsimple_pvalloczn.3
new file mode 120000
index 0000000..c93e0ed
--- /dev/null
+++ b/man3/libsimple_pvalloczn.3
@@ -0,0 +1 @@
+libsimple_vpvalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_rawmemcasechr.3 b/man3/libsimple_rawmemcasechr.3
new file mode 100644
index 0000000..2e06898
--- /dev/null
+++ b/man3/libsimple_rawmemcasechr.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_RAWMEMCASECHR 3 2018-10-21 libsimple
+.SH NAME
+libsimple_rawmemcasechr \- find byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_rawmemcasechr(const void *\fIs\fP, int \fIc\fP);
+
+#ifndef rawmemcasechr
+# define rawmemcasechr libsimple_rawmemcasechr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_rawmemcasechr ()
+function scans the memory segment
+.I s
+for the first occurence of the byte
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The
+.BR libsimple_rawmemcasechr ()
+function assumes there is at least one
+occurence, its behaviour is undefined
+if this is not the case.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_rawmemcasechr ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)==tolower(c) ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_rawmemcasechr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_rawmemcasechr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_rawmemcasechr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_rawmemcasechr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcasechr (3),
+.BR libsimple_rawmemchr (3),
+.BR libsimple_rawmemrcasechr (3),
+.BR libsimple_memcasechr (3)
diff --git a/man3/libsimple_rawmemchr.3 b/man3/libsimple_rawmemchr.3
new file mode 100644
index 0000000..79b480e
--- /dev/null
+++ b/man3/libsimple_rawmemchr.3
@@ -0,0 +1,81 @@
+.TH LIBSIMPLE_RAWMEMCHR 3 2018-10-21 libsimple
+.SH NAME
+libsimple_rawmemchr \- find byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_rawmemchr(const void *\fIs\fP, int \fIc\fP);
+
+#ifndef rawmemchr
+# define rawmemchr libsimple_rawmemchr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_rawmemchr ()
+function scans the memory segment
+.I s
+for the first occurence of the byte
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The
+.BR libsimple_rawmemchr ()
+function assumes there is at least one
+occurence, its behaviour is undefined
+if this is not the case.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_rawmemchr ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR *r==c ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_rawmemchr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_rawmemchr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_rawmemchr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_rawmemchr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_rawmemcasechr (3),
+.BR libsimple_rawmemrchr (3),
+.BR memchr (3)
diff --git a/man3/libsimple_rawmemrcasechr.3 b/man3/libsimple_rawmemrcasechr.3
new file mode 100644
index 0000000..389b332
--- /dev/null
+++ b/man3/libsimple_rawmemrcasechr.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_RAWMEMRCASECHR 3 2018-10-21 libsimple
+.SH NAME
+libsimple_rawmemrcasechr \- find byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_rawmemrcasechr(const void *s, int c, size_t n);
+
+#ifndef rawmemrcasechr
+# define rawmemrcasechr libsimple_rawmemrcasechr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_rawmemrcasechr ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the last occurence of the byte
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The
+.BR libsimple_rawmemrcasechr ()
+function assumes there is at least one
+occurence, its behaviour is undefined
+if this is not the case.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_rawmemrcasechr ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR tolower(*r)==tolower(c) ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_rawmemrcasechr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_rawmemrcasechr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_rawmemrcasechr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_rawmemrcasechr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_rawmemrchr (3),
+.BR libsimple_memrcasechr (3),
+.BR libsimple_rawmemcasechr (3)
diff --git a/man3/libsimple_rawmemrchr.3 b/man3/libsimple_rawmemrchr.3
new file mode 100644
index 0000000..f4ae624
--- /dev/null
+++ b/man3/libsimple_rawmemrchr.3
@@ -0,0 +1,83 @@
+.TH LIBSIMPLE_RAWMEMRCHR 3 2018-10-21 libsimple
+.SH NAME
+libsimple_rawmemrchr \- find byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_rawmemrchr(const void *s, int c, size_t n);
+
+#ifndef rawmemrchr
+# define rawmemrchr libsimple_rawmemrchr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_rawmemrchr ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the last occurence of the byte
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The
+.BR libsimple_rawmemrchr ()
+function assumes there is at least one
+occurence, its behaviour is undefined
+if this is not the case.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_rawmemrchr ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR *r==c ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_rawmemrchr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_rawmemrchr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_rawmemrchr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_rawmemrchr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_rawmemrcasechr (3),
+.BR libsimple_memrchr (3),
+.BR libsimple_rawmemchr (3)
diff --git a/man3/libsimple_reallocn.3 b/man3/libsimple_reallocn.3
new file mode 120000
index 0000000..18a590e
--- /dev/null
+++ b/man3/libsimple_reallocn.3
@@ -0,0 +1 @@
+libsimple_vreallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_strcasechr.3 b/man3/libsimple_strcasechr.3
new file mode 100644
index 0000000..8d644a1
--- /dev/null
+++ b/man3/libsimple_strcasechr.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_STRCASECHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcasechr \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strcasechr(const char *\fIs\fP, int \fIc\fP);
+
+#ifndef strcasechr
+# define strcasechr libsimple_strcasechr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcasechr ()
+function scans the string
+.I s
+for the first occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcasechr ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)==tolower(c) ,
+where
+.I r
+is the returned pointer, if no such
+offset exists, it returns
+.BR NULL .
+.SH ERRORS
+The
+.BR libsimple_strcasechr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcasechr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcasechr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcasechr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasechrnul (3),
+.BR libsimple_strrcasechr (3),
+.BR libsimple_strncasechr (3),
+.BR libsimple_memcasechr (3),
+.BR libsimple_inchrcaseset (3),
+.BR strchr (3)
diff --git a/man3/libsimple_strcasechrnul.3 b/man3/libsimple_strcasechrnul.3
new file mode 100644
index 0000000..d2098bb
--- /dev/null
+++ b/man3/libsimple_strcasechrnul.3
@@ -0,0 +1,78 @@
+.TH LIBSIMPLE_STRCASECHRNUL 3 2018-10-21 libsimple
+.SH NAME
+libsimple_strcasechrnul \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strcasechrnul(const char *\fIs\fP, int \fIc\fP);
+
+#ifndef strcasechrnul
+# define strcasechrnul libsimple_strcasechrnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcasechrnul ()
+function scans the string
+.I s
+for the first occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcasechrnul ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)==tolower(c)||!*r ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_strcasechrnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcasechrnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcasechrnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcasechrnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasechr (3),
+.BR libsimple_strchrnul (3),
+.BR libsimple_strncasechrnul (3),
+.BR libsimple_inchrcaseset (3)
diff --git a/man3/libsimple_strcasecmpnul.3 b/man3/libsimple_strcasecmpnul.3
new file mode 100644
index 0000000..2b0afe6
--- /dev/null
+++ b/man3/libsimple_strcasecmpnul.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_STRCASECMPNUL 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcasecmpnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcasecmpnul(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcasecmpnul
+# define strcasecmpnul libsimple_strcasecmpnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcasecmpnul ()
+function compares the strings
+.I a
+and
+.IR b ,
+both of which may be
+.BR NULL ,
+which is treated as less than the empty string.
+.PP
+If one of the strings begins with the other string
+but is longer, the longer string is treated as
+greater than the shorter string.
+.PP
+The comparison is case-insensitive and made as
+if the strings were converted to lowercase and as
+.BR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_strcasecmpnul ()
+function returns a negative value if
+.I a
+is less than
+.IR b ,
+a positive value if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+.SH ERRORS
+The
+.BR libsimple_strcasecmpnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcasecmpnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcasecmpnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcasecmpnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcmpnul (3),
+.BR libsimple_strcaseeqnul (3),
+.BR libsimple_strncasecmpnul (3),
+.BR strcasecmp (3)
diff --git a/man3/libsimple_strcaseends.3 b/man3/libsimple_strcaseends.3
new file mode 100644
index 0000000..f658699
--- /dev/null
+++ b/man3/libsimple_strcaseends.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_STRCASEENDS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcaseends \- check the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strcaseends(const char *\fIs\fP, const char *\fIt\fP);
+
+#ifndef strcaseends
+# define strcaseends libsimple_strcaseends
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcaseends ()
+function checks whether the string
+.I s
+ends with the string
+.IR t .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcaseends ()
+function returns 1 if the string
+.I s
+ends with the string
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strcaseends ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcaseends ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcaseends ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcaseends ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strends (3),
+.BR libsimple_strcasestarts (3),
+.BR libsimple_strrcasestr (3),
+.BR libsimple_strncaseends (3),
+.BR libsimple_memcaseends (3)
diff --git a/man3/libsimple_strcaseeq.3 b/man3/libsimple_strcaseeq.3
new file mode 100644
index 0000000..b1a25bd
--- /dev/null
+++ b/man3/libsimple_strcaseeq.3
@@ -0,0 +1,74 @@
+.TH LIBSIMPLE_STRCASEEQ 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcaseeq \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcaseeq(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcaseeq
+# define strcaseeq libsimple_strcaseeq
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcaseeq ()
+function compares the strings
+.I a
+and
+.IR b ,
+neither of which may be
+.BR NULL .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcaseeq ()
+function returns 1 if the strings are equals,
+with the possible exception of the case,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strcaseeq ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcaseeq ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcaseeq ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcaseeq ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcaseeqnul (3),
+.BR libsimple_streq (3),
+.BR libsimple_strcaseeqlen (3),
+.BR libsimple_strncaseeq (3),
+.BR libsimple_memcaseeq (3),
+.BR strcasecmp (3)
diff --git a/man3/libsimple_strcaseeqlen.3 b/man3/libsimple_strcaseeqlen.3
new file mode 100644
index 0000000..6adba9c
--- /dev/null
+++ b/man3/libsimple_strcaseeqlen.3
@@ -0,0 +1,74 @@
+.TH LIBSIMPLE_STRCASEEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcaseeqlen \- check initial commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+size_t libsimple_strcaseeqlen(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcaseeqlen
+# define strcaseeqlen libsimple_strcaseeqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcaseeqlen ()
+function scans the number of bytes the string
+.I a
+have in common the string
+.I b
+at their beginnings.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcaseeqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+have in common at their beginnings.
+.SH ERRORS
+The
+.BR libsimple_strcaseeqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcaseeqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcaseeqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcaseeqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcaseeq (3),
+.BR libsimple_streqlen (3),
+.BR libsimple_strrcaseeqlen (3),
+.BR libsimple_strncaseeqlen (3),
+.BR libsimple_memcaseeqlen (3)
diff --git a/man3/libsimple_strcaseeqnul.3 b/man3/libsimple_strcaseeqnul.3
new file mode 100644
index 0000000..fa26a17
--- /dev/null
+++ b/man3/libsimple_strcaseeqnul.3
@@ -0,0 +1,74 @@
+.TH LIBSIMPLE_STRCASEEQNUL 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcaseeqnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcaseeqnul(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcaseeqnul
+# define strcaseeqnul libsimple_strcaseeqnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcaseeqnul ()
+function compares the strings
+.I a
+and
+.IR b ,
+both of which may be
+.BR NULL .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcaseeqnul ()
+function returns 1 if the strings are equals,
+with the possible exception of the case,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strcaseeqnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcaseeqnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcaseeqnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcaseeqnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcaseeq (3),
+.BR libsimple_streqnul (3),
+.BR libsimple_strcasecmpnul (3),
+.BR libsimple_strncaseeqnul (3),
+.BR libsimple_memcaseeq (3),
+.BR strcasecmp (3)
diff --git a/man3/libsimple_strcasestarts.3 b/man3/libsimple_strcasestarts.3
new file mode 100644
index 0000000..0f9d689
--- /dev/null
+++ b/man3/libsimple_strcasestarts.3
@@ -0,0 +1,75 @@
+.TH LIBSIMPLE_STRCASESTARTS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcasestarts \- check the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcasestarts(const char *\fIs\fP, const char *\fIt\fP);
+
+#ifndef strcasestarts
+# define strcasestarts libsimple_strcasestarts
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcasestarts ()
+function checks whether the string
+.I s
+starts with the string
+.IR t .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcasestarts ()
+function returns 1 if the string
+.I s
+begins with the string
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strcasestarts ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcasestarts ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcasestarts ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcasestarts ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strstarts (3),
+.BR libsimple_strcaseends (3),
+.BR libsimple_strcasestr (3),
+.BR libsimple_strncasestarts (3),
+.BR libsimple_memcasestarts (3),
+.BR strcasecmp (3),
+.BR strncasecmp (3)
diff --git a/man3/libsimple_strcasestr.3 b/man3/libsimple_strcasestr.3
new file mode 100644
index 0000000..8ee2c45
--- /dev/null
+++ b/man3/libsimple_strcasestr.3
@@ -0,0 +1,79 @@
+.TH LIBSIMPLE_STRCASESTR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcasestr \- find a substring in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strcasestr(const char *\fIhaystack\fP, const char *\fIneedle\fP);
+
+#ifndef strcasestr
+# define strcasestr libsimple_strcasestr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcasestr ()
+function scans the string
+.I haystack
+the first occurrence of the substring
+.IR needle .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcasestr ()
+function returns the pointer
+.I haystack
+with a minimal offset such that
+.I !*r
+begins with
+.IR needle ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strcasestr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcasestr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcasestr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcasestr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrcasestr (3),
+.BR libsimple_strncasestr (3),
+.BR libsimple_memcasemem (3),
+.BR strstr (3)
diff --git a/man3/libsimple_strchrnul.3 b/man3/libsimple_strchrnul.3
new file mode 100644
index 0000000..2196933
--- /dev/null
+++ b/man3/libsimple_strchrnul.3
@@ -0,0 +1,79 @@
+.TH LIBSIMPLE_STRCHRNUL 3 2018-10-21 libsimple
+.SH NAME
+libsimple_strchrnul \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strchrnul(const char *\fIs\fP, int \fIc\fP);
+
+#ifndef strchrnul
+# define strchrnul libsimple_strchrnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strchrnul ()
+function scans the string
+.I s
+for the first occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strchrnul ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR *r==c||!*r ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_strchrnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strchrnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strchrnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strchrnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasechrnul (3),
+.BR libsimple_strend (3),
+.BR libsimple_strnchrnul (3),
+.BR libsimple_inchrset (3),
+.BR strchr (3)
diff --git a/man3/libsimple_strcmpnul.3 b/man3/libsimple_strcmpnul.3
new file mode 100644
index 0000000..9f6ec47
--- /dev/null
+++ b/man3/libsimple_strcmpnul.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_STRCMPNUL 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strcmpnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcmpnul(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcmpnul
+# define strcmpnul libsimple_strcmpnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcmpnul ()
+function compares the strings
+.I a
+and
+.IR b ,
+both of which may be
+.BR NULL ,
+which is treated as less than the empty string.
+.PP
+If one of the strings begins with the other string
+but is longer, the longer string is treated as
+greater than the shorter string.
+.PP
+The comparison is case-sensitive and made as if
+the strings were
+.IR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_strcmpnul ()
+function returns a negative value if
+.I a
+is less than
+.IR b ,
+a positive value if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+.SH ERRORS
+The
+.BR libsimple_strcmpnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcmpnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcmpnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcmpnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasecmpnul (3),
+.BR libsimple_streqnul (3),
+.BR libsimple_strncmpnul (3),
+.BR strcmp (3)
diff --git a/man3/libsimple_strdupa.3 b/man3/libsimple_strdupa.3
new file mode 120000
index 0000000..e8f7b76
--- /dev/null
+++ b/man3/libsimple_strdupa.3
@@ -0,0 +1 @@
+libsimple_enstrdup.3 \ No newline at end of file
diff --git a/man3/libsimple_strend.3 b/man3/libsimple_strend.3
new file mode 100644
index 0000000..adfdf6f
--- /dev/null
+++ b/man3/libsimple_strend.3
@@ -0,0 +1,70 @@
+.TH LIBSIMPLE_STREND 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strend \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline char *libsimple_strend(const char *\fIs\fP);
+
+#ifndef strend
+# define strend libsimple_strend
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strend ()
+function scans the string
+.I s
+for its end.
+.SH RETURN VALUE
+The
+.BR libsimple_strend ()
+function returns the pointer
+.I s
+with an offset such that
+.IR !*r ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_strend ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strend ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strend ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strend ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strchrnul (3),
+.BR libsimple_strnend (3),
+.BR strchr (3)
diff --git a/man3/libsimple_strends.3 b/man3/libsimple_strends.3
new file mode 100644
index 0000000..9ab8b45
--- /dev/null
+++ b/man3/libsimple_strends.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_STRENDS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strends \- check the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strends(const char *\fIs\fP, const char *\fIt\fP);
+
+#ifndef strends
+# define strends libsimple_strends
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strends ()
+function checks whether the string
+.I s
+ends with the string
+.IR t .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strends ()
+function returns 1 if the string
+.I s
+ends with the string
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strends ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strends ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strends ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strends ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcaseends (3),
+.BR libsimple_strstarts (3),
+.BR libsimple_strrstr (3),
+.BR libsimple_strnends (3),
+.BR libsimple_memends (3)
diff --git a/man3/libsimple_streq.3 b/man3/libsimple_streq.3
new file mode 100644
index 0000000..76c1779
--- /dev/null
+++ b/man3/libsimple_streq.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_STREQ 3 2018-10-23 libsimple
+.SH NAME
+libsimple_streq \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_streq(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef streq
+# define streq libsimple_streq
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_streq ()
+function compares the strings
+.I a
+and
+.IR b ,
+neither of which may be
+.BR NULL .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_streq ()
+function returns 1 if the strings are equals,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_streq ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_streq ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_streq ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_streq ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_streqnul (3),
+.BR libsimple_strcaseeq (3),
+.BR libsimple_streqlen (3),
+.BR libsimple_strneq (3),
+.BR libsimple_memeq (3),
+.BR strcmp (3)
diff --git a/man3/libsimple_streqlen.3 b/man3/libsimple_streqlen.3
new file mode 100644
index 0000000..cb92bc6
--- /dev/null
+++ b/man3/libsimple_streqlen.3
@@ -0,0 +1,74 @@
+.TH LIBSIMPLE_STREQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_streqlen \- check initial commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+size_t libsimple_streqlen(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef streqlen
+# define streqlen libsimple_streqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_streqlen ()
+function scans the number of bytes the string
+.I a
+have in common the string
+.I b
+at their beginnings.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_streqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+have in common at their beginnings.
+.SH ERRORS
+The
+.BR libsimple_streqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_streqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_streqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_streqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_streq (3),
+.BR libsimple_strreqlen (3),
+.BR libsimple_strcaseeqlen (3),
+.BR libsimple_strneqlen (3),
+.BR libsimple_memeqlen (3)
diff --git a/man3/libsimple_streqnul.3 b/man3/libsimple_streqnul.3
new file mode 100644
index 0000000..84ccf88
--- /dev/null
+++ b/man3/libsimple_streqnul.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_STREQNUL 3 2018-10-23 libsimple
+.SH NAME
+libsimple_streqnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_streqnul(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef streqnul
+# define streqnul libsimple_streqnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_streqnul ()
+function compares the strings
+.I a
+and
+.IR b ,
+both of which may be
+.BR NULL .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_streqnul ()
+function returns 1 if the strings are equals,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_streqnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_streqnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_streqnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_streqnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_streq (3),
+.BR libsimple_strcaseeqnul (3),
+.BR libsimple_strcmpnul (3),
+.BR libsimple_strneqnul (3),
+.BR libsimple_memeq (3),
+.BR strcmp (3)
diff --git a/man3/libsimple_strisutf8.3 b/man3/libsimple_strisutf8.3
new file mode 100644
index 0000000..24dcd96
--- /dev/null
+++ b/man3/libsimple_strisutf8.3
@@ -0,0 +1,74 @@
+.TH LIBSIMPLE_strisutf8 3 2018-11-05 libsimple
+.SH NAME
+libsimple_strisutf8 \- check if a string is encoded in UTF-8
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strisutf8(const char *\fIstring\fP, int \fIallow_modified_nul\fP);
+
+#ifndef strisutf8
+# define strisutf8 libsimple_strisutf8
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strisutf8 ()
+function checks if
+.I string
+is in valid UTF-8. If
+.I allow_modified_nul
+is non-zero, NUL encoded with 2 bytes is accepted.
+.SH RETURN VALUE
+The
+.BR libsimple_strisutf8 ()
+returns 1 if the
+.I string
+is in valid UTF-8 (Modified UTF-8 if
+.I allow_modified_nul
+is non-zero); otherwise 0 is returned.
+.SH ERRORS
+The
+.BR libsimple_strisutf8 ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_inchrset (),
+.br
+.BR libsimple_inchrcaseset ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_inchrset (),
+.br
+.BR libsimple_strchrnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_inchrset (),
+.br
+.BR libsimple_strchrnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+None.
diff --git a/man3/libsimple_strncasechr.3 b/man3/libsimple_strncasechr.3
new file mode 100644
index 0000000..1a7716f
--- /dev/null
+++ b/man3/libsimple_strncasechr.3
@@ -0,0 +1,86 @@
+.TH LIBSIMPLE_STRNCASECHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncasechr \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strncasechr(const char *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef strncasechr
+# define strncasechr libsimple_strncasechr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncasechr ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for the first occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncasechr ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)==tolower(c) ,
+where
+.I r
+is the returned pointer, if no such
+offset less than
+.I n
+exists, it returns
+.BR NULL .
+.SH ERRORS
+The
+.BR libsimple_strncasechr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncasechr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncasechr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncasechr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncasechrnul (3),
+.BR libsimple_strrncasechr (3),
+.BR libsimple_strnchr (3),
+.BR libsimple_strcasechr (3),
+.BR libsimple_memcasechr (3)
diff --git a/man3/libsimple_strncasechrnul.3 b/man3/libsimple_strncasechrnul.3
new file mode 100644
index 0000000..241b61a
--- /dev/null
+++ b/man3/libsimple_strncasechrnul.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_STRNCASECHRNUL 3 2018-10-21 libsimple
+.SH NAME
+libsimple_strncasechrnul \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strncasechrnul(const char *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef strncasechrnul
+# define strncasechrnul libsimple_strncasechrnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncasechrnul ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for the first occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncasechrnul ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)==tolower(c)||!*r ,
+where
+.I r
+is the returned pointer. However if no such
+offset less than
+.I n
+exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strncasechrnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncasechrnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncasechrnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncasechrnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncasechr (3),
+.BR libsimple_strnchrnul (3),
+.BR libsimple_strcasechrnul (3)
diff --git a/man3/libsimple_strncasecmpnul.3 b/man3/libsimple_strncasecmpnul.3
new file mode 100644
index 0000000..959ea78
--- /dev/null
+++ b/man3/libsimple_strncasecmpnul.3
@@ -0,0 +1,91 @@
+.TH LIBSIMPLE_STRNCASECMPNUL 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncasecmpnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strncasecmpnul(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strncasecmpnul
+# define strncasecmpnul libsimple_strncasecmpnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncasecmpnul ()
+function compares the strings
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+and
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+both of which may be
+.BR NULL ,
+which is treated as less than the empty string.
+.PP
+If one of the strings begins with the other string
+but is longer, the longer string is treated as
+greater than the shorter string.
+.PP
+The comparison is case-insensitive and made as
+if the strings were converted to lowercase and as
+.BR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_strncasecmpnul ()
+function returns a negative value if
+.I a
+is less than
+.IR b ,
+a positive value if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+.SH ERRORS
+The
+.BR libsimple_strncasecmpnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncasecmpnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncasecmpnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncasecmpnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncmpnul (3),
+.BR libsimple_strncaseeqnul (3),
+.BR libsimple_strcasecmpnul (3),
+.BR strncasecmp (3)
diff --git a/man3/libsimple_strncaseends.3 b/man3/libsimple_strncaseends.3
new file mode 100644
index 0000000..5bdc0d9
--- /dev/null
+++ b/man3/libsimple_strncaseends.3
@@ -0,0 +1,76 @@
+.TH LIBSIMPLE_STRNCASEENDS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncaseends \- check the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strncaseends(const char *\fIs\fP, const char *\fIt\fP, size_t \fIn\fP);
+
+#ifndef strncaseends
+# define strncaseends libsimple_strncaseends
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncaseends ()
+function checks whether the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+ends with the string
+.IR t .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncaseends ()
+function returns 1 if the string
+.I s
+ends with the string
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strncaseends ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncaseends ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncaseends ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncaseends ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strnends (3),
+.BR libsimple_strncasestarts (3),
+.BR libsimple_strrncasestr (3),
+.BR libsimple_strcaseends (3),
+.BR libsimple_memcaseends (3)
diff --git a/man3/libsimple_strncaseeq.3 b/man3/libsimple_strncaseeq.3
new file mode 100644
index 0000000..55c2f79
--- /dev/null
+++ b/man3/libsimple_strncaseeq.3
@@ -0,0 +1,80 @@
+.TH LIBSIMPLE_STRNCASEEQ 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncaseeq \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strncaseeq(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strncaseeq
+# define strncaseeq libsimple_strncaseeq
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncaseeq ()
+function compares the strings
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+and
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+neither of which may be
+.BR NULL .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncaseeq ()
+function returns 1 if the strings are equals,
+with the possible exception of the case,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strncaseeq ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncaseeq ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncaseeq ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncaseeq ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncaseeqnul (3),
+.BR libsimple_strneq (3),
+.BR libsimple_strncaseeqlen (3),
+.BR libsimple_strcaseeq (3),
+.BR libsimple_memcaseeq (3),
+.BR strncasecmp (3)
diff --git a/man3/libsimple_strncaseeqlen.3 b/man3/libsimple_strncaseeqlen.3
new file mode 100644
index 0000000..8fbc236
--- /dev/null
+++ b/man3/libsimple_strncaseeqlen.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_STRNCASEEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncaseeqlen \- check initial commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+size_t libsimple_strncaseeqlen(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strncaseeqlen
+# define strncaseeqlen libsimple_strncaseeqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncaseeqlen ()
+function scans the number of bytes the string
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+have in common the string
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+at their beginnings.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncaseeqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+(both truncated to
+.I n
+bytes) have in common at their beginnings.
+.SH ERRORS
+The
+.BR libsimple_strncaseeqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncaseeqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncaseeqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncaseeqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcaseeq (3),
+.BR libsimple_streqlen (3),
+.BR libsimple_strrcaseeqlen (3),
+.BR libsimple_strcaseeqlen (3),
+.BR libsimple_memcaseeqlen (3)
diff --git a/man3/libsimple_strncaseeqnul.3 b/man3/libsimple_strncaseeqnul.3
new file mode 100644
index 0000000..743d4be
--- /dev/null
+++ b/man3/libsimple_strncaseeqnul.3
@@ -0,0 +1,80 @@
+.TH LIBSIMPLE_STRNCASEEQNUL 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncaseeqnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strncaseeqnul(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strncaseeqnul
+# define strncaseeqnul libsimple_strncaseeqnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncaseeqnul ()
+function compares the strings
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+and
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+both of which may be
+.BR NULL .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncaseeqnul ()
+function returns 1 if the strings are equals,
+with the possible exception of the case,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strncaseeqnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncaseeqnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncaseeqnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncaseeqnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncaseeq (3),
+.BR libsimple_strneqnul (3),
+.BR libsimple_strncasecmpnul (3),
+.BR libsimple_strcaseeqnul (3),
+.BR libsimple_memcaseeq (3),
+.BR strncasecmp (3)
diff --git a/man3/libsimple_strncasestarts.3 b/man3/libsimple_strncasestarts.3
new file mode 100644
index 0000000..b1efd80
--- /dev/null
+++ b/man3/libsimple_strncasestarts.3
@@ -0,0 +1,77 @@
+.TH LIBSIMPLE_STRNCASESTARTS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncasestarts \- check the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strncasestarts(const char *\fIs\fP, const char *\fIt\fP, size_t \fIn\fP);
+
+#ifndef strncasestarts
+# define strncasestarts libsimple_strncasestarts
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncasestarts ()
+function checks whether the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+starts with the string
+.IR t .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncasestarts ()
+function returns 1 if the string
+.I s
+begins with the string
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strncasestarts ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncasestarts ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncasestarts ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncasestarts ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strnstarts (3),
+.BR libsimple_strncaseends (3),
+.BR libsimple_strncasestr (3),
+.BR libsimple_strcasestarts (3),
+.BR libsimple_memcasestarts (3),
+.BR strncasecmp (3)
diff --git a/man3/libsimple_strncasestr.3 b/man3/libsimple_strncasestr.3
new file mode 100644
index 0000000..0235f7c
--- /dev/null
+++ b/man3/libsimple_strncasestr.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_STRNCASESTR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncasestr \- find a substring in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strncasestr(const char *\fIhaystack\fP, const char *\fIneedle\fP), size_t \fIn\fP;
+
+#ifndef strncasestr
+# define strncasestr libsimple_strncasestr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncasestr ()
+function scans the string
+.IR haystack ,
+truncated to
+.I n
+bytes unless it is shorter,
+the first occurrence of the substring
+.IR needle .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncasestr ()
+function returns the pointer
+.I haystack
+with a minimal offset such that
+.I r
+begins with
+.IR needle ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strncasestr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncasestr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncasestr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncasestr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrncasestr (3),
+.BR libsimple_strnstr (3),
+.BR libsimple_strcasestr (3),
+.BR libsimple_memcasemem (3)
diff --git a/man3/libsimple_strnchr.3 b/man3/libsimple_strnchr.3
new file mode 100644
index 0000000..2af62c3
--- /dev/null
+++ b/man3/libsimple_strnchr.3
@@ -0,0 +1,86 @@
+.TH LIBSIMPLE_STRNCHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strnchr \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strnchr(const char *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef strnchr
+# define strnchr libsimple_strnchr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strnchr ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for the first occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strnchr ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR *r==c ,
+where
+.I r
+is the returned pointer, if no such
+offset less than
+.I n
+exists, it returns
+.BR NULL .
+.SH ERRORS
+The
+.BR libsimple_strnchr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strnchr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strnchr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strnchr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strnchrnul (3),
+.BR libsimple_strncasechr (3),
+.BR libsimple_strrnchr (3)
+.BR strchr (3),
+.BR memchr (3),
diff --git a/man3/libsimple_strnchrnul.3 b/man3/libsimple_strnchrnul.3
new file mode 100644
index 0000000..ae0b994
--- /dev/null
+++ b/man3/libsimple_strnchrnul.3
@@ -0,0 +1,86 @@
+.TH LIBSIMPLE_STRNCHRNUL 3 2018-10-21 libsimple
+.SH NAME
+libsimple_strnchrnul \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strnchrnul(const char *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef strnchrnul
+# define strnchrnul libsimple_strnchrnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strnchrnul ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for the first occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strnchrnul ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR *r==c||!*r ,
+where
+.I r
+is the returned pointer. However if no such
+offset less than
+.I n
+exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strnchrnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strnchrnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strnchrnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strnchrnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None. I promise!
+.SH SEE ALSO
+.BR libsimple_strncasechrnul (3),
+.BR libsimple_strnchr (3),
+.BR libsimple_strnend (3),
+.BR libsimple_strchrnul (3)
diff --git a/man3/libsimple_strncmpnul.3 b/man3/libsimple_strncmpnul.3
new file mode 100644
index 0000000..f53dc8c
--- /dev/null
+++ b/man3/libsimple_strncmpnul.3
@@ -0,0 +1,91 @@
+.TH LIBSIMPLE_STRNCMPNUL 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strncmpnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strncmpnul(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strncmpnul
+# define strncmpnul libsimple_strncmpnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncmpnul ()
+function compares the strings
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+and
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+both of which may be
+.BR NULL ,
+which is treated as less than the empty string.
+.PP
+If one of the strings begins with the other string
+but is longer, the longer string is treated as
+greater than the shorter string.
+.PP
+The comparison is case-sensitive and made as if
+the strings were
+.BR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_strncmpnul ()
+function returns a negative value if
+.I a
+is less than
+.IR b ,
+a positive value if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+.SH ERRORS
+The
+.BR libsimple_strncmpnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncmpnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncmpnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncmpnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncasecmpnul (3),
+.BR libsimple_strneqnul (3),
+.BR libsimple_strcmpnul (3),
+.BR strncmp (3)
diff --git a/man3/libsimple_strndupa.3 b/man3/libsimple_strndupa.3
new file mode 120000
index 0000000..e2011e0
--- /dev/null
+++ b/man3/libsimple_strndupa.3
@@ -0,0 +1 @@
+libsimple_enstrndup.3 \ No newline at end of file
diff --git a/man3/libsimple_strnend.3 b/man3/libsimple_strnend.3
new file mode 100644
index 0000000..26ed564
--- /dev/null
+++ b/man3/libsimple_strnend.3
@@ -0,0 +1,78 @@
+.TH LIBSIMPLE_STRNEND 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strnend \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline char *libsimple_strnend(const char *\fIs\fP, size_t \fIn\fP);
+
+#ifndef strnend
+# define strnend libsimple_strnend
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strnend ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for its end.
+.SH RETURN VALUE
+The
+.BR libsimple_strnend ()
+function returns the pointer
+.I s
+with an offset such that
+.IR !*r ,
+where
+.I r
+is the returned pointer. However,
+if no such offset less than
+.I n
+exists,
+.I &s[n]
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strnend ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strnend ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strnend ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strnend ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strnchrnul (3),
+.BR libsimple_strnchr (3),
+.BR libsimple_strend (3)
diff --git a/man3/libsimple_strnends.3 b/man3/libsimple_strnends.3
new file mode 100644
index 0000000..a733b6b
--- /dev/null
+++ b/man3/libsimple_strnends.3
@@ -0,0 +1,76 @@
+.TH LIBSIMPLE_STRNENDS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strnends \- check the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strnends(const char *\fIs\fP, const char *\fIt\fP, size_t \fIn\fP);
+
+#ifndef strnends
+# define strnends libsimple_strnends
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strnends ()
+function checks whether the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+ends with the string
+.IR t .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strnends ()
+function returns 1 if the string
+.I s
+ends with the string
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strnends ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strnends ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strnends ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strnends ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncaseends (3),
+.BR libsimple_strnstarts (3),
+.BR libsimple_strrnstr (3),
+.BR libsimple_strends (3),
+.BR libsimple_memends (3)
diff --git a/man3/libsimple_strneq.3 b/man3/libsimple_strneq.3
new file mode 100644
index 0000000..a315870
--- /dev/null
+++ b/man3/libsimple_strneq.3
@@ -0,0 +1,79 @@
+.TH LIBSIMPLE_STRNEQ 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strneq \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strneq(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strneq
+# define strneq libsimple_strneq
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strneq ()
+function compares the strings
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+and
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+neither of which may be
+.BR NULL .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strneq ()
+function returns 1 if the strings are equals,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strneq ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strneq ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strneq ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strneq ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strneqnul (3),
+.BR libsimple_strncaseeq (3),
+.BR libsimple_strneqlen (3),
+.BR libsimple_streq (3),
+.BR libsimple_memeq (3),
+.BR strncmp (3)
diff --git a/man3/libsimple_strneqlen.3 b/man3/libsimple_strneqlen.3
new file mode 100644
index 0000000..df01480
--- /dev/null
+++ b/man3/libsimple_strneqlen.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_STRNEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strneqlen \- check initial commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+size_t libsimple_strneqlen(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strneqlen
+# define strneqlen libsimple_strneqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strneqlen ()
+function scans the number of bytes the string
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+have in common the string
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+at their beginnings.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strneqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+(both truncated to
+.I n
+bytes) have in common at their beginnings.
+.SH ERRORS
+The
+.BR libsimple_strneqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strneqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strneqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strneqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_streq (3),
+.BR libsimple_strreqlen (3),
+.BR libsimple_strcaseeqlen (3),
+.BR libsimple_streqlen (3),
+.BR libsimple_memeqlen (3)
diff --git a/man3/libsimple_strneqnul.3 b/man3/libsimple_strneqnul.3
new file mode 100644
index 0000000..610844b
--- /dev/null
+++ b/man3/libsimple_strneqnul.3
@@ -0,0 +1,79 @@
+.TH LIBSIMPLE_STRNEQNUL 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strneqnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strneqnul(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strneqnul
+# define strneqnul libsimple_strneqnul
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strneqnul ()
+function compares the strings
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+and
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+both of which may be
+.BR NULL .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strneqnul ()
+function returns 1 if the strings are equals,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strneqnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strneqnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strneqnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strneqnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strneq (3),
+.BR libsimple_strncaseeqnul (3),
+.BR libsimple_strncmpnul (3),
+.BR libsimple_streqnul (3),
+.BR libsimple_memeq (3),
+.BR strncmp (3)
diff --git a/man3/libsimple_strnstarts.3 b/man3/libsimple_strnstarts.3
new file mode 100644
index 0000000..4f084ea
--- /dev/null
+++ b/man3/libsimple_strnstarts.3
@@ -0,0 +1,77 @@
+.TH LIBSIMPLE_STRNSTARTS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strnstarts \- check the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strnstarts(const char *\fIs\fP, const char *\fIt\fP, size_t \fIn\fP);
+
+#ifndef strnstarts
+# define strnstarts libsimple_strnstarts
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strnstarts ()
+function checks whether the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+starts with the string
+.IR t .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strnstarts ()
+function returns 1 if the string
+.I s
+begins with the string
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strnstarts ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strnstarts ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strnstarts ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strnstarts ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncasestarts (3),
+.BR libsimple_strnends (3),
+.BR libsimple_strstarts (3),
+.BR libsimple_memstarts (3),
+.BR strnstr (3),
+.BR strncmp (3)
diff --git a/man3/libsimple_strnstr.3 b/man3/libsimple_strnstr.3
new file mode 100644
index 0000000..dca50bb
--- /dev/null
+++ b/man3/libsimple_strnstr.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_STRNSTR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strnstr \- find a substring in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strnstr(const char *\fIhaystack\fP, const char *\fIneedle\fP, size_t \fIn\fP);
+
+#ifndef strnstr
+# define strnstr libsimple_strnstr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strnstr ()
+function scans the string
+.IR haystack ,
+truncated to
+.I n
+bytes unless it is shorter,
+the first occurrence of the substring
+.IR needle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strnstr ()
+function returns the pointer
+.I haystack
+with a minimal offset such that
+.I r
+begins with
+.IR needle ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strnstr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strnstr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strnstr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strnstr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrnstr (3),
+.BR libsimple_strncasestr (3)
+.BR libsimple_memmem (3),
+.BR strstr (3)
diff --git a/man3/libsimple_strrcasechr.3 b/man3/libsimple_strrcasechr.3
new file mode 100644
index 0000000..34475b6
--- /dev/null
+++ b/man3/libsimple_strrcasechr.3
@@ -0,0 +1,80 @@
+.TH LIBSIMPLE_STRRCASECHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrcasechr \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strrcasechr(const char *\fIs\fP, int \fIc\fP);
+
+#ifndef strrcasechr
+# define strrcasechr libsimple_strrcasechr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrcasechr ()
+function scans the string
+.I s
+for the last occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrcasechr ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR tolower(*r)==tolower(c) ,
+where
+.I r
+is the returned pointer, if no such
+offset exists, it returns
+.BR NULL .
+.SH ERRORS
+The
+.BR libsimple_strrcasechr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrcasechr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrcasechr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrcasechr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasechr (3),
+.BR libsimple_strrncasechr (3),
+.BR libsimple_memrcasechr (3),
+.BR strrchr (3)
diff --git a/man3/libsimple_strrcaseeqlen.3 b/man3/libsimple_strrcaseeqlen.3
new file mode 100644
index 0000000..551debe
--- /dev/null
+++ b/man3/libsimple_strrcaseeqlen.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_STRRCASEEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrcaseeqlen \- check terminal commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline size_t libsimple_strrcaseeqlen(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strrcaseeqlen
+# define strrcaseeqlen libsimple_strrcaseeqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrcaseeqlen ()
+function scans the number of bytes the string
+.I a
+have in common the string
+.I b
+at their ends.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrcaseeqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+have in common at their ends.
+.SH ERRORS
+The
+.BR libsimple_strrcaseeqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrcaseeqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrcaseeqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrcaseeqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strreqlen (3),
+.BR libsimple_strcaseeqlen (3),
+.BR libsimple_strrncaseeqlen (3),
+.BR libsimple_memrcaseeqlen (3)
diff --git a/man3/libsimple_strrcasestr.3 b/man3/libsimple_strrcasestr.3
new file mode 100644
index 0000000..a2844b5
--- /dev/null
+++ b/man3/libsimple_strrcasestr.3
@@ -0,0 +1,79 @@
+.TH LIBSIMPLE_STRRCASESTR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrcasestr \- find a substring in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strrcasestr(const char *\fIhaystack\fP, const char *\fIneedle\fP);
+
+#ifndef strrcasestr
+# define strrcasestr libsimple_strrcasestr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrcasestr ()
+function scans the string
+.I haystack
+the last occurrence of the substring
+.IR needle .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrcasestr ()
+function returns the pointer
+.I haystack
+with a maximal offset such that
+.I r
+begins with
+.IR needle ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strrcasestr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrcasestr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrcasestr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrcasestr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrstr (3),
+.BR libsimple_strcasestr (3),
+.BR libsimple_strrncasestr (3),
+.BR libsimple_memrcasemem (3)
diff --git a/man3/libsimple_strreqlen.3 b/man3/libsimple_strreqlen.3
new file mode 100644
index 0000000..3fa4105
--- /dev/null
+++ b/man3/libsimple_strreqlen.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_STRREQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strreqlen \- check terminal commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline size_t libsimple_strreqlen(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strreqlen
+# define strreqlen libsimple_strreqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strreqlen ()
+function scans the number of bytes the string
+.I a
+have in common the string
+.I b
+at their ends.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strreqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+have in common at their ends.
+.SH ERRORS
+The
+.BR libsimple_strreqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strreqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strreqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strreqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strreqlen (3),
+.BR libsimple_streqlen (3),
+.BR libsimple_strrneqlen (3),
+.BR libsimple_memreqlen (3)
diff --git a/man3/libsimple_strrncasechr.3 b/man3/libsimple_strrncasechr.3
new file mode 100644
index 0000000..9d70548
--- /dev/null
+++ b/man3/libsimple_strrncasechr.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_STRRNCASECHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrncasechr \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strrncasechr(const char *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef strrncasechr
+# define strrncasechr libsimple_strrncasechr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrncasechr ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for the last occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrncasechr ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR tolower(*r)==tolower(c) ,
+where
+.I r
+is the returned pointer, if no such
+offset less than
+.I n
+exists, it returns
+.BR NULL .
+.SH ERRORS
+The
+.BR libsimple_strrncasechr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrncasechr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrncasechr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrncasechr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncasechr (3),
+.BR libsimple_strrnchr (3),
+.BR libsimple_strrcasechr (3),
+.BR libsimple_memrcasechr (3)
diff --git a/man3/libsimple_strrncaseeqlen.3 b/man3/libsimple_strrncaseeqlen.3
new file mode 100644
index 0000000..d938154
--- /dev/null
+++ b/man3/libsimple_strrncaseeqlen.3
@@ -0,0 +1,81 @@
+.TH LIBSIMPLE_STRRNCASEEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrncaseeqlen \- check terminal commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline size_t libsimple_strrncaseeqlen(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strrncaseeqlen
+# define strrncaseeqlen libsimple_strrncaseeqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrncaseeqlen ()
+function scans the number of bytes the string
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+have in common the string
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+at their ends.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrncaseeqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+(both truncated to
+.I n
+bytes) have in common at their ends.
+.SH ERRORS
+The
+.BR libsimple_strrncaseeqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrncaseeqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrncaseeqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrncaseeqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrneqlen (3),
+.BR libsimple_strncaseeqlen (3),
+.BR libsimple_strrcaseeqlen (3),
+.BR libsimple_memrcaseeqlen (3)
diff --git a/man3/libsimple_strrncasestr.3 b/man3/libsimple_strrncasestr.3
new file mode 100644
index 0000000..dcf48b5
--- /dev/null
+++ b/man3/libsimple_strrncasestr.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_STRRNCASESTR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrncasestr \- find a substring in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strrncasestr(const char *\fIhaystack\fP, const char *\fIneedle\fP, size_t \fIn\fP);
+
+#ifndef strrncasestr
+# define strrncasestr libsimple_strrncasestr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrncasestr ()
+function scans the string
+.IR haystack ,
+truncated to
+.I n
+bytes unless it is shorter,
+the last occurrence of the substring
+.IR needle .
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrncasestr ()
+function returns the pointer
+.I haystack
+with a maximal offset such that
+.I r
+begins with
+.IR needle ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strrncasestr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrncasestr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrncasestr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrncasestr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrnstr (3),
+.BR libsimple_strncasestr (3),
+.BR libsimple_strrcasestr (3),
+.BR libsimple_memrcasemem (3)
diff --git a/man3/libsimple_strrnchr.3 b/man3/libsimple_strrnchr.3
new file mode 100644
index 0000000..f01025d
--- /dev/null
+++ b/man3/libsimple_strrnchr.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_STRRNCHR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrnchr \- find a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strrnchr(const char *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef strrnchr
+# define strrnchr libsimple_strrnchr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrnchr ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for the last occurence of the character
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrnchr ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR *r==c ,
+where
+.I r
+is the returned pointer, if no such
+offset less than
+.I n
+exists, it returns
+.BR NULL .
+.SH ERRORS
+The
+.BR libsimple_strrnchr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrnchr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrnchr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrnchr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrncasechr (3),
+.BR libsimple_strnchr (3),
+.BR libsimple_strrchr (3),
+.BR libsimple_memrchr (3)
diff --git a/man3/libsimple_strrneqlen.3 b/man3/libsimple_strrneqlen.3
new file mode 100644
index 0000000..6828fa0
--- /dev/null
+++ b/man3/libsimple_strrneqlen.3
@@ -0,0 +1,81 @@
+.TH LIBSIMPLE_STRRNEQLEN 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrneqlen \- check terminal commonality
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline size_t libsimple_strrneqlen(const char *\fIa\fP, const char *\fIb\fP, size_t \fIn\fP);
+
+#ifndef strrneqlen
+# define strrneqlen libsimple_strrneqlen
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrneqlen ()
+function scans the number of bytes the string
+.IR a ,
+truncated to
+.I n
+bytes unless it is shorter,
+have in common the string
+.IR b ,
+truncated to
+.I n
+bytes unless it is shorter,
+at their ends.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrneqlen ()
+function returns the number of bytes
+.I a
+and
+.I b
+(both truncated to
+.I n
+bytes) have in common at their ends.
+.SH ERRORS
+The
+.BR libsimple_strrneqlen ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrneqlen ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrneqlen ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrneqlen ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrneqlen (3),
+.BR libsimple_strneqlen (3),
+.BR libsimple_strreqlen (3),
+.BR libsimple_memreqlen (3)
diff --git a/man3/libsimple_strrnstr.3 b/man3/libsimple_strrnstr.3
new file mode 100644
index 0000000..9e95196
--- /dev/null
+++ b/man3/libsimple_strrnstr.3
@@ -0,0 +1,82 @@
+.TH LIBSIMPLE_STRRNSTR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrnstr \- find a substring in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strrnstr(const char *\fIhaystack\fP, const char *\fIneedle\fP, size_t \fIn\fP);
+
+#ifndef strrnstr
+# define strrnstr libsimple_strrnstr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrnstr ()
+function scans the string
+.IR haystack ,
+truncated to
+.I n
+bytes unless it is shorter,
+the last occurrence of the substring
+.IR needle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrnstr ()
+function returns the pointer
+.I haystack
+with a maximal offset such that
+.I r
+begins with
+.IR needle ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strrnstr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrnstr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrnstr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrnstr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrncasestr (3),
+.BR libsimple_strnstr (3),
+.BR libsimple_strrstr (3),
+.BR libsimple_memrmem (3)
diff --git a/man3/libsimple_strrstr.3 b/man3/libsimple_strrstr.3
new file mode 100644
index 0000000..c3c16b7
--- /dev/null
+++ b/man3/libsimple_strrstr.3
@@ -0,0 +1,79 @@
+.TH LIBSIMPLE_STRRSTR 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strrstr \- find a substring in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strrstr(const char *\fIhaystack\fP, const char *\fIneedle\fP);
+
+#ifndef strrstr
+# define strrstr libsimple_strrstr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strrstr ()
+function scans the string
+.I haystack
+the last occurrence of the substring
+.IR needle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strrstr ()
+function returns the pointer
+.I haystack
+with a maximal offset such that
+.I r
+begins with
+.IR needle ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strrstr ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strrstr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strrstr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strrstr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strrcasestr (3),
+.BR libsimple_strrnstr (3),
+.BR libsimple_memrmem (3),
+.BR strstr (3)
diff --git a/man3/libsimple_strstarts.3 b/man3/libsimple_strstarts.3
new file mode 100644
index 0000000..fbd3412
--- /dev/null
+++ b/man3/libsimple_strstarts.3
@@ -0,0 +1,75 @@
+.TH LIBSIMPLE_STRSTARTS 3 2018-10-23 libsimple
+.SH NAME
+libsimple_strstarts \- check the beginning of a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strstarts(const char *\fIs\fP, const char *\fIt\fP);
+
+#ifndef strstarts
+# define strstarts libsimple_strstarts
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strstarts ()
+function checks whether the string
+.I s
+starts with the string
+.IR t .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strstarts ()
+function returns 1 if the string
+.I s
+begins with the string
+.IR t ,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strstarts ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strstarts ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strstarts ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strstarts ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasestarts (3),
+.BR libsimple_strends (3),
+.BR libsimple_strnstarts (3),
+.BR libsimple_memstarts (3),
+.BR strstr (3),
+.BR strcmp (3),
+.BR strncmp (3)
diff --git a/man3/libsimple_strtotimespec.3 b/man3/libsimple_strtotimespec.3
new file mode 100644
index 0000000..85ff88b
--- /dev/null
+++ b/man3/libsimple_strtotimespec.3
@@ -0,0 +1,133 @@
+.TH LIBSIMPLE_STRTOTIMESPEC 3 2018-10-31 libsimple
+.SH NAME
+libsimple_strtotimespec, libsimple_strtotimeval \- convert a string to a duration data structure
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_strtotimespec(struct timespec *restrict \fIts\fP, const char *\fIs\fP, char **\fIend\fP);
+int libsimple_strtotimeval(struct timeval *restrict \fItv\fP, const char *\fIs\fP, char **\fIend\fP);
+
+#ifndef strtotimespec
+# define strtotimespec libsimple_strtotimespec
+#endif
+#ifndef strtotimeval
+# define strtotimeval libsimple_strtotimeval
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strtotimespec ()
+and
+.BR libsimple_strtotimeval ()
+functions will parse the string
+.IR s ,
+representing a real value of number of seconds,
+and store the value in
+.I ts
+and
+.R tv
+respectively, rounding to the nearest nanosecond
+(for the
+.BR libsimple_strtotimespec ())
+or microsecond
+(for the
+.BR libsimple_strtotimeval ()).
+These functions will ignore any leading whitespace
+and byte where the parsing stopped, as
+.I s
+with an offset, to
+.IR end .
+The parsed part of
+.I s
+must contain atleast one digit and be on the
+format
+.BR [+-]\e?[0-9]*\e(\e.[0-9]*\e(\e.[0-9]*\e|([0-9]*)\e)\e?\e)\e? .
+where the digits in
+.BR \e2 ,
+if any, are repeating decimals and must contain atleast
+one digit if it is included.
+.SH RETURN VALUE
+The
+.BR libsimple_strtotimespec ()
+and
+.BR libsimple_strtotimeval ()
+functions return 0 upon successful completion;
+otherwise \-1 is returned.
+.SH ERRORS
+The
+.BR libsimple_strtotimespec ()
+and
+.BR libsimple_strtotimeval ()
+functions fail if:
+.TP
+.B EINVAL
+.I s
+does not represent a real value in a recognised format.
+.I *end
+will not be set.
+.TP
+.B ERANGE
+The result is too large or too small to be store. Either
+.I *ts
+will be set to
+.I {.tv_sec=TIME_MAX,.tv_nsec=999999999L}
+and
+.I *tv
+set to
+.I {.tv_sec=TIME_MAX,.tv_usec=999999L}
+(if the result is too large) or to
+.I {.tv_sec=TIME_MIN,.tv_nsec=0L}
+and
+.I {.tv_sec=TIME_MIN,.tv_usec=0L}
+(if the result is too small).
+.I *end
+will be set.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strtotimespec ()
+.br
+.BR libsimple_strtotimeval ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strtotimespec ()
+.br
+.BR libsimple_strtotimeval ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strtotimespec ()
+.br
+.BR libsimple_strtotimeval ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_sumtimespec (3),
+.BR libsimple_difftimespec (3),
+.BR libsimple_multimespec (3),
+.BR libsimple_cmptimespec (3),
+.BR libsimple_timespectostr (3),
+.BR libsimple_timespectodouble (3),
+.BR libsimple_doubletotimespec (3),
+.BR libsimple_timeval2timespec (3)
diff --git a/man3/libsimple_strtotimeval.3 b/man3/libsimple_strtotimeval.3
new file mode 120000
index 0000000..9bc7f8b
--- /dev/null
+++ b/man3/libsimple_strtotimeval.3
@@ -0,0 +1 @@
+libsimple_strtotimespec.3 \ No newline at end of file
diff --git a/man3/libsimple_sumtimespec.3 b/man3/libsimple_sumtimespec.3
new file mode 100644
index 0000000..81632b8
--- /dev/null
+++ b/man3/libsimple_sumtimespec.3
@@ -0,0 +1,115 @@
+.TH LIBSIMPLE_SUMTIMESPEC 3 2018-10-29 libsimple
+.SH NAME
+libsimple_sumtimespec, libsimple_sumtimeval \- calculate the sum of two durations
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_sumtimespec(struct timespec *\fIsum\fP, const struct timespec *\fIaugend\fP, const struct timespec *\fIaddend\fP);
+int libsimple_sumtimeval(struct timeval *\fIsum\fP, const struct timeval *\fIaugend\fP, const struct timeval *\fIaddend\fP);
+
+#ifndef sumtimespec
+# define sumtimespec libsimple_sumtimespec
+#endif
+#ifndef sumtimeval
+# define sumtimeval libsimple_sumtimeval
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_sumtimespec ()
+and
+.BR libsimple_sumtimeval ()
+functions calculates the sum of
+.I augend
+and
+.I addend
+and stores the result in
+.IR sum .
+.SH RETURN VALUE
+The
+.BR libsimple_sumtimespec ()
+and
+.BR libsimple_sumtimeval ()
+functions return 0 on successful completion;
+otherwise, \-1 is returned and
+.I errno
+is set to indicate the error.
+.SH ERRORS
+The
+.BR libsimple_sumtimespec ()
+and
+.BR libsimple_sumtimeval ()
+functions fail if:
+.TP
+.B ERANGE
+The result is too large or too small to be stored; if the
+result is too large
+.I *sum
+will be set to
+.I {.tv_sec=TIME_MAX,.tv_nsec=999999999L}
+for the
+.BR libsimple_sumtimespec ()
+function and to
+.I {.tv_sec=TIME_MAX,.tv_usec=999999L}
+for the
+.BR libsimple_sumtimeval ()
+function, if the result is too small
+.I *sum
+will be set to
+.I {.tv_sec=TIME_MIN,.tv_nsec=0}
+for the
+.BR libsimple_sumtimespec ()
+function and to
+.I {.tv_sec=TIME_MIN,.tv_usec=0}
+for the
+.BR libsimple_sumtimeval ()
+function.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_sumtimespec ()
+.br
+.BR libsimple_sumtimeval ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_sumtimespec ()
+.br
+.BR libsimple_sumtimeval ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_sumtimespec ()
+.br
+.BR libsimple_sumtimeval ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_difftimespec (3),
+.BR libsimple_multimespec (3),
+.BR libsimple_cmptimespec (3),
+.BR libsimple_timespectostr (3),
+.BR libsimple_strtotimespec (3),
+.BR libsimple_timespectodouble (3),
+.BR libsimple_doubletotimespec (3),
+.BR libsimple_timeval2timespec (3)
diff --git a/man3/libsimple_sumtimeval.3 b/man3/libsimple_sumtimeval.3
new file mode 120000
index 0000000..2bfd9e9
--- /dev/null
+++ b/man3/libsimple_sumtimeval.3
@@ -0,0 +1 @@
+libsimple_sumtimespec.3 \ No newline at end of file
diff --git a/man3/libsimple_timespec2timeval.3 b/man3/libsimple_timespec2timeval.3
new file mode 120000
index 0000000..ea39fdf
--- /dev/null
+++ b/man3/libsimple_timespec2timeval.3
@@ -0,0 +1 @@
+libsimple_timeval2timespec.3 \ No newline at end of file
diff --git a/man3/libsimple_timespectodouble.3 b/man3/libsimple_timespectodouble.3
new file mode 100644
index 0000000..fddc899
--- /dev/null
+++ b/man3/libsimple_timespectodouble.3
@@ -0,0 +1,90 @@
+.TH LIBSIMPLE_TIMESPECTODOUBLE 3 2018-10-30 libsimple
+.SH NAME
+libsimple_timespectodouble, libsimple_timevaltodouble \- convert a duration data structure to a double
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline double libsimple_timespectodouble(const struct timespec *\fIts\fP);
+static inline double libsimple_timevaltodouble(const struct timeval *\fItv\fP);
+
+#ifndef timespectodouble
+# define timespectodouble libsimple_timespectodouble
+#endif
+#ifndef timevaltodouble
+# define timevaltodouble libsimple_timevaltodouble
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_timespectodouble ()
+and
+.BR libsimple_timevaltodouble ()
+functions convert
+.I ts
+and
+.IR tv ,
+respectively, to a
+.B double
+and return the result.
+.SH RETURN VALUE
+The
+.BR libsimple_timespectodouble ()
+and
+.BR libsimple_timevaltodouble ()
+functions return the input argument as a
+.BR double .
+.SH ERRORS
+The
+.BR libsimple_timespectodouble ()
+and
+.BR libsimple_timevaltodouble ()
+functions cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_timespectodouble ()
+.br
+.BR libsimple_timevaltodouble ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_timespectodouble ()
+.br
+.BR libsimple_timevaltodouble ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_timespectodouble ()
+.br
+.BR libsimple_timevaltodouble ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_sumtimespec (3),
+.BR libsimple_difftimespec (3),
+.BR libsimple_multimespec (3),
+.BR libsimple_cmptimespec (3),
+.BR libsimple_timespectostr (3),
+.BR libsimple_strtotimespec (3),
+.BR libsimple_doubletotimespec (3),
+.BR libsimple_timeval2timespec (3)
diff --git a/man3/libsimple_timespectostr.3 b/man3/libsimple_timespectostr.3
new file mode 100644
index 0000000..d6e2b71
--- /dev/null
+++ b/man3/libsimple_timespectostr.3
@@ -0,0 +1,145 @@
+.TH LIBSIMPLE_TIMESPECTOSTR 3 2018-10-30 libsimple
+.SH NAME
+libsimple_timespectostr, libsimple_timevaltostr \- convert a duration data structure to a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_timespectostr(char *restrict \fIbuf\fP, const struct timespec *restrict \fIts\fP);
+char *libsimple_timevaltostr(char *restrict \fIbuf\fP, const struct timeval *restrict \fItv\fP);
+
+#ifndef timespectostr
+# define timespectostr libsimple_timespectostr
+#endif
+#ifndef timevaltostr
+# define timevaltostr libsimple_timevaltostr
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_timespectostr ()
+and
+.BR libsimple_timevaltostr ()
+functions convert
+.I ts
+and
+.IR tv ,
+respectively, to a textual represention contain only a
+real value of the number of seconds the input represents.
+.PP
+If
+.I buf
+is
+.BR NULL ,
+a new pointer is allocated, otherwise
+.I buf
+is used as storage buffer for the string and is returned.
+Unless
+.I buf
+is
+.BR NULL ,
+it should be at least
+.I INTSTRLEN(time_t)+12
+bytes for the
+.BR libsimple_timespectostr ()
+function, and less 3 bytes
+for the
+.BR libsimple_timevaltostr ()
+function.
+.PP
+The returned string will always start with either a
+.B +
+or a
+.BR \- ,
+and will always contain 9 (for the
+.BR libsimple_timespectostr ()
+function) or 6 (for the
+.BR libsimple_timevaltostr ()
+function) decimals.
+.SH RETURN VALUE
+The
+.BR libsimple_timespectostr ()
+and
+.BR libsimple_timevaltostr ()
+functions return the duration as a textual
+representation of the it as a real value of
+seconds, without any unit included in the text,
+upon successful completion. If
+.I buf
+is
+.BR NULL ,
+the returned pointer is a deallocatable, unique,
+pointer, otherwise the pointer
+.I buf
+is returned. On failure,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_timespectostr ()
+and
+.BR libsimple_timevaltostr ()
+functions fail if:
+.TP
+.B ENOMEM
+.I buf
+is
+.B NULL
+and the call to
+.BR malloc (3)
+failed because it could not allocate enough memory.
+.TP
+.B EINVAL
+.I ts->tv_nsec
+is negative or greater than 999\ 999\ 999, or
+.I tv->tv_usec
+is negative or greater than 999\ 999.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_timespectostr ()
+.br
+.BR libsimple_timevaltostr ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_timespectostr ()
+.br
+.BR libsimple_timevaltostr ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_timespectostr ()
+.br
+.BR libsimple_timevaltostr ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_minimise_number_string (3),
+.BR libsimple_sumtimespec (3),
+.BR libsimple_difftimespec (3),
+.BR libsimple_multimespec (3),
+.BR libsimple_cmptimespec (3),
+.BR libsimple_strtotimespec (3),
+.BR libsimple_timespectodouble (3),
+.BR libsimple_doubletotimespec (3),
+.BR libsimple_timeval2timespec (3)
diff --git a/man3/libsimple_timeval2timespec.3 b/man3/libsimple_timeval2timespec.3
new file mode 100644
index 0000000..d4381ce
--- /dev/null
+++ b/man3/libsimple_timeval2timespec.3
@@ -0,0 +1,112 @@
+.TH LIBSIMPLE_TIMEVAL2TIMESPEC 3 2018-10-30 libsimple
+.SH NAME
+libsimple_timeval2timespec, libsimple_timespec2timeval \- convert between timespec and timeval
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void libsimple_timeval2timespec(struct timespec *restrict \fIts\fP, const struct timeval *restrict \fItv\fP);
+int libsimple_timespec2timeval(struct timeval *restrict \fItv\fP, const struct timespec *restrict \fIts\fP);
+
+#ifndef timeval2timespec
+# define timeval2timespec libsimple_timeval2timespec
+#endif
+#ifndef timespec2timeval
+# define timespec2timeval libsimple_timespec2timeval
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_timeval2timespec ()
+converts the value
+.I *tv
+to a
+.B struct timespec
+and stores the result in
+.IR ts .
+.PP
+The
+.BR libsimple_timespec2timeval ()
+converts the value
+.I *ts
+to a
+.BR "struct timeval" ,
+rounding to nearest microsecond,
+and stores the result in
+.IR tv .
+.SH RETURN VALUE
+The
+.BR libsimple_timespec2timeval ()
+function returns 0 on successful completion; otherwise -1 is returned
+and sets
+.I errno
+to indicate the error.
+.PP
+The
+.BR libsimple_timeval2timespec ()
+function does not return a value.
+.SH ERRORS
+The
+.BR libsimple_timespec2timeval ()
+function fail if:
+.TP
+.B EOVERFLOW
+The value
+.I {.tv_sec=TIME_MAX,.tv_nsec=999999500L}
+or a greater value converted, which would lead to overflow.
+The value
+.I {.tv_sec=TIME_MAX,.tv_usec=999999L}
+will be stored in
+.IR tv .
+.PP
+The
+.BR libsimple_timeval2timespec ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_timeval2timespec ()
+.br
+.BR libsimple_timespec2timeval ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_timeval2timespec ()
+.br
+.BR libsimple_timespec2timeval ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_timeval2timespec ()
+.br
+.BR libsimple_timespec2timeval ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_sumtimespec (3),
+.BR libsimple_difftimespec (3),
+.BR libsimple_multimespec (3),
+.BR libsimple_cmptimespec (3),
+.BR libsimple_timespectostr (3),
+.BR libsimple_strtotimespec (3),
+.BR libsimple_timespectodouble (3),
+.BR libsimple_doubletotimespec (3)
diff --git a/man3/libsimple_timevaltodouble.3 b/man3/libsimple_timevaltodouble.3
new file mode 120000
index 0000000..dcb0a1c
--- /dev/null
+++ b/man3/libsimple_timevaltodouble.3
@@ -0,0 +1 @@
+libsimple_timespectodouble.3 \ No newline at end of file
diff --git a/man3/libsimple_timevaltostr.3 b/man3/libsimple_timevaltostr.3
new file mode 120000
index 0000000..b8e0e0a
--- /dev/null
+++ b/man3/libsimple_timevaltostr.3
@@ -0,0 +1 @@
+libsimple_timespectostr.3 \ No newline at end of file
diff --git a/man3/libsimple_unlist.3 b/man3/libsimple_unlist.3
new file mode 100644
index 0000000..5be3858
--- /dev/null
+++ b/man3/libsimple_unlist.3
@@ -0,0 +1,98 @@
+.TH LIBSIMPLE_UNLIST 3 2018-11-05 libsimple
+.SH NAME
+libsimple_unlist \- remove item for array and keep order
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void libsimple_unlist(void *\fIlist\fP, size_t \fIi\fP, size_t *\fInp\fP, size_t \fIwidth\fP);
+void LIBSIMPLE_UNLIST(\fItype\fP *\fIlist\fP, size_t \fIi\fP, size_t *\fInp\fP);
+
+#ifndef unlist
+# define unlist libsimple_unlist
+#endif
+#ifndef UNLIST
+# define UNLIST LIBSIMPLE_UNLIST
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_unlist ()
+function removes the
+.IR i th
+element from
+.IR list ,
+and pushes up all following elements one step, so
+next element take the removed elements position. The
+.I width
+parameter shall be the size of each element, in bytes,
+.RI ( sizeof(*list)
+in all sane circumstances).
+.I np
+shall be a pointer to the number of elements stored in
+.IR list ,
+.I *np
+will be set to
+.IR *np-1 .
+The function assumes that
+.IR i<*np .
+.PP
+.BR LIBSIMPLE_UNLIST ()
+is a macro-wrapper for the
+.BR libsimple_unlist ()
+function which does not have the parameter
+.IR width ,
+instead it is inferred from the type of
+.IR list ;
+as such,
+.I type
+must be a complete, non-void type.
+.SH RETURN VALUE
+None.
+.SH ERRORS
+The
+.BR libsimple_unlist ()
+and
+.BR LIBSIMPLE_UNLIST ()
+functions cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_unlist (),
+.br
+.BR LIBSIMPLE_UNLIST ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_unlist (),
+.br
+.BR LIBSIMPLE_UNLIST ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_unlist (),
+.br
+.BR LIBSIMPLE_UNLIST ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR memmove (3)
diff --git a/man3/libsimple_valigned_allocn.3 b/man3/libsimple_valigned_allocn.3
new file mode 100644
index 0000000..2600571
--- /dev/null
+++ b/man3/libsimple_valigned_allocn.3
@@ -0,0 +1,238 @@
+.TH LIBSIMPLE_VALIGNED_ALLOCN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_valigned_allocn \- allocate memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_valigned_allocn(size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envaligned_allocn(int \fIstatus\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evaligned_allocn(size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_aligned_allocn(size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enaligned_allocn(int \fIstatus\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_ealigned_allocn(size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef valigned_allocn
+# define valigned_allocn libsimple_valigned_allocn
+#endif
+#ifndef envaligned_allocn
+# define envaligned_allocn libsimple_envaligned_allocn
+#endif
+#ifndef evaligned_allocn
+# define evaligned_allocn libsimple_evaligned_allocn
+#endif
+#ifndef aligned_allocn
+# define aligned_allocn libsimple_aligned_allocn
+#endif
+#ifndef enaligned_allocn
+# define enaligned_allocn libsimple_enaligned_allocn
+#endif
+#ifndef ealigned_allocn
+# define ealigned_allocn libsimple_ealigned_allocn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_aligned_allocn (),
+.BR libsimple_enaligned_allocn (),
+and
+.BR libsimple_ealigned_allocn ()
+functions allocate
+.I N
+uninitialised bytes to the heap and return a
+pointer with an alignment of
+.I alignment
+bytes to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enaligned_allocn ()
+and
+.BR libsimple_ealigned_allocn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enaligned_allocn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ealigned_allocn ()
+function is used.
+.PP
+The
+.BR libsimple_valigned_allocn (),
+.BR libsimple_envaligned_allocn (),
+and
+.BR libsimple_evaligned_allocn ()
+functions are versions of the
+.BR libsimple_aligned_allocn (),
+.BR libsimple_enaligned_allocn (),
+and
+.BR libsimple_ealigned_allocn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_valigned_allocn (),
+.BR libsimple_envaligned_allocn (),
+.BR libsimple_evaligned_allocn (),
+.BR libsimple_aligned_allocn (),
+.BR libsimple_enaligned_allocn (),
+and
+.BR libsimple_ealigned_allocn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_valigned_allocn ()
+and
+.BR libsimple_aligned_allocn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envaligned_allocn (),
+.BR libsimple_evaligned_allocn (),
+.BR libsimple_enaligned_allocn (),
+and
+.BR libsimple_ealigned_allocn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_valigned_allocn (),
+.BR libsimple_aligned_allocn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I n
+is not a multiple of
+.IR alignment .
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envaligned_allocn (),
+.BR libsimple_evaligned_allocn (),
+.BR libsimple_enaligned_allocn (),
+and
+.BR libsimple_ealigned_allocn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_valigned_allocn (),
+.br
+.BR libsimple_envaligned_allocn (),
+.br
+.BR libsimple_evaligned_allocn (),
+.br
+.BR libsimple_aligned_allocn (),
+.br
+.BR libsimple_enaligned_allocn (),
+.br
+.BR libsimple_ealigned_allocn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_valigned_allocn (),
+.br
+.BR libsimple_envaligned_allocn (),
+.br
+.BR libsimple_evaligned_allocn (),
+.br
+.BR libsimple_aligned_allocn (),
+.br
+.BR libsimple_enaligned_allocn (),
+.br
+.BR libsimple_ealigned_allocn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_valigned_allocn (),
+.br
+.BR libsimple_envaligned_allocn (),
+.br
+.BR libsimple_evaligned_allocn (),
+.br
+.BR libsimple_aligned_allocn (),
+.br
+.BR libsimple_enaligned_allocn (),
+.br
+.BR libsimple_ealigned_allocn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR aligned_alloc (3)
diff --git a/man3/libsimple_valigned_alloczn.3 b/man3/libsimple_valigned_alloczn.3
new file mode 100644
index 0000000..9f68adb
--- /dev/null
+++ b/man3/libsimple_valigned_alloczn.3
@@ -0,0 +1,241 @@
+.TH LIBSIMPLE_VALIGNED_ALLOCZN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_valigned_alloczn \- allocate optionally initialised memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_valigned_alloczn(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+void *libsimple_envaligned_alloczn(int \fIstatus\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evaligned_alloczn(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_aligned_alloczn(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enaligned_alloczn(int \fIstatus\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_ealigned_alloczn(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef valigned_alloczn
+# define valigned_alloczn libsimple_valigned_alloczn
+#endif
+#ifndef envaligned_alloczn
+# define envaligned_alloczn libsimple_envaligned_alloczn
+#endif
+#ifndef evaligned_alloczn
+# define evaligned_alloczn libsimple_evaligned_alloczn
+#endif
+#ifndef aligned_alloczn
+# define aligned_alloczn libsimple_aligned_alloczn
+#endif
+#ifndef enaligned_alloczn
+# define enaligned_alloczn libsimple_enaligned_alloczn
+#endif
+#ifndef ealigned_alloczn
+# define ealigned_alloczn libsimple_ealigned_alloczn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_aligned_alloczn (),
+.BR libsimple_enaligned_alloczn (),
+and
+.BR libsimple_ealigned_alloczn ()
+functions allocate
+.I N
+bytes to the heap and return a pointer with an
+alignment of
+.I alignment
+bytes to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The memory will be initialised
+with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enaligned_alloczn ()
+and
+.BR libsimple_ealigned_alloczn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enaligned_alloczn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ealigned_alloczn ()
+function is used.
+.PP
+The
+.BR libsimple_valigned_alloczn (),
+.BR libsimple_envaligned_alloczn (),
+and
+.BR libsimple_evaligned_alloczn ()
+functions are versions of the
+.BR libsimple_aligned_alloczn (),
+.BR libsimple_enaligned_alloczn (),
+and
+.BR libsimple_ealigned_alloczn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_valigned_alloczn (),
+.BR libsimple_envaligned_alloczn (),
+.BR libsimple_evaligned_alloczn (),
+.BR libsimple_aligned_alloczn (),
+.BR libsimple_enaligned_alloczn (),
+and
+.BR libsimple_ealigned_alloczn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_valigned_alloczn ()
+and
+.BR libsimple_aligned_alloczn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envaligned_alloczn (),
+.BR libsimple_evaligned_alloczn (),
+.BR libsimple_enaligned_alloczn (),
+and
+.BR libsimple_ealigned_alloczn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_valigned_alloczn (),
+.BR libsimple_aligned_alloczn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I n
+is not a multiple of
+.IR alignment .
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envaligned_alloczn (),
+.BR libsimple_evaligned_alloczn (),
+.BR libsimple_enaligned_alloczn (),
+and
+.BR libsimple_ealigned_alloczn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_valigned_alloczn (),
+.br
+.BR libsimple_envaligned_alloczn (),
+.br
+.BR libsimple_evaligned_alloczn (),
+.br
+.BR libsimple_aligned_alloczn (),
+.br
+.BR libsimple_enaligned_alloczn (),
+.br
+.BR libsimple_ealigned_alloczn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_valigned_alloczn (),
+.br
+.BR libsimple_envaligned_alloczn (),
+.br
+.BR libsimple_evaligned_alloczn (),
+.br
+.BR libsimple_aligned_alloczn (),
+.br
+.BR libsimple_enaligned_alloczn (),
+.br
+.BR libsimple_ealigned_alloczn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_valigned_alloczn (),
+.br
+.BR libsimple_envaligned_alloczn (),
+.br
+.BR libsimple_evaligned_alloczn (),
+.br
+.BR libsimple_aligned_alloczn (),
+.br
+.BR libsimple_enaligned_alloczn (),
+.br
+.BR libsimple_ealigned_alloczn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR aligned_alloc (3)
diff --git a/man3/libsimple_valloc.3 b/man3/libsimple_valloc.3
new file mode 100644
index 0000000..033e5e9
--- /dev/null
+++ b/man3/libsimple_valloc.3
@@ -0,0 +1,168 @@
+.TH LIBSIMPLE_VALLOC 3 2018-11-03 libsimple
+.SH NAME
+libsimple_valloc \- allocate memory with page size alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_valloc(size_t \fIn\fP);
+static inline void *libsimple_envalloc(int \fIstatus\fP, size_t \fIn\fP);
+static inline void *libsimple_evalloc(size_t \fIn\fP);
+
+#ifndef valloc
+# define valloc libsimple_valloc
+#endif
+#ifndef envalloc
+# define envalloc libsimple_envalloc
+#endif
+#ifndef evalloc
+# define evalloc libsimple_evalloc
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_valloc (),
+.BR libsimple_envalloc (),
+and
+.BR libsimple_evalloc ()
+functions allocate
+.I n
+uninitialised bytes to the heap and return a
+pointer with an alignment of the page size
+to the allocated memory. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_envalloc ()
+and
+.BR libsimple_evalloc ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_envalloc ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_evalloc ()
+function is used.
+.SH RETURN VALUE
+The
+.BR libsimple_valloc (),
+.BR libsimple_envalloc (),
+and
+.BR libsimple_evalloc ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_valloc ()
+function return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envalloc ()
+and
+.BR libsimple_evalloc ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_valloc ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envalloc ()
+and
+.BR libsimple_evalloc ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_valloc (),
+.br
+.BR libsimple_envalloc (),
+.br
+.BR libsimple_evalloc ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_valloc (),
+.br
+.BR libsimple_envalloc (),
+.br
+.BR libsimple_evalloc ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_valloc (),
+.br
+.BR libsimple_envalloc (),
+.br
+.BR libsimple_evalloc ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+The GNU implementation of
+.BR valloc (3)
+is \(dqMT-Unsafe init\(dq.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_vallocn.3 b/man3/libsimple_vallocn.3
new file mode 120000
index 0000000..b0804fe
--- /dev/null
+++ b/man3/libsimple_vallocn.3
@@ -0,0 +1 @@
+libsimple_vvallocn.3 \ No newline at end of file
diff --git a/man3/libsimple_vallocz.3 b/man3/libsimple_vallocz.3
new file mode 100644
index 0000000..3559a32
--- /dev/null
+++ b/man3/libsimple_vallocz.3
@@ -0,0 +1,179 @@
+.TH LIBSIMPLE_VALLOCZ 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vallocz \- allocate optionally initialised memory with page size alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vallocz(int \fIclear\fP, size_t \fIn\fP);
+static inline void *libsimple_envallocz(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP);
+static inline void *libsimple_evallocz(int \fIclear\fP, size_t \fIn\fP);
+
+#ifndef vallocz
+# define vallocz libsimple_vallocz
+#endif
+#ifndef envallocz
+# define envallocz libsimple_envallocz
+#endif
+#ifndef evallocz
+# define evallocz libsimple_evallocz
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_vallocz (),
+.BR libsimple_envallocz (),
+and
+.BR libsimple_evallocz ()
+functions allocate
+.I n
+bytes to the heap and return a pointer with an
+alignment of the page size
+to the allocated memory. The memory will be
+initialised with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_envallocz ()
+and
+.BR libsimple_evallocz ()
+functions will terminate the process if the memory
+cannot be allocated of if the user tries to allocate
+0 bytes, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_envallocz ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_evallocz ()
+function is used.
+.PP
+The
+.BR libsimple_envallocz ()
+and
+.BR libsimple_evallocz ()
+functions behaviour is unspecified if
+.I n
+is 0.
+.SH RETURN VALUE
+The
+.BR libsimple_vallocz (),
+.BR libsimple_envallocz (),
+and
+.BR libsimple_evallocz ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vallocz ()
+function return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envallocz ()
+and
+.BR libsimple_evallocz ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vallocz ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envallocz ()
+and
+.BR libsimple_evallocz ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vallocz (),
+.br
+.BR libsimple_envallocz (),
+.br
+.BR libsimple_evallocz ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vallocz (),
+.br
+.BR libsimple_envallocz (),
+.br
+.BR libsimple_evallocz ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vallocz (),
+.br
+.BR libsimple_envallocz (),
+.br
+.BR libsimple_evallocz ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+The GNU implementation of
+.BR valloc (3)
+is \(dqMT-Unsafe init\(dq.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_valloczn.3 b/man3/libsimple_valloczn.3
new file mode 120000
index 0000000..10be3d5
--- /dev/null
+++ b/man3/libsimple_valloczn.3
@@ -0,0 +1 @@
+libsimple_vvalloczn.3 \ No newline at end of file
diff --git a/man3/libsimple_varrayalloc.3 b/man3/libsimple_varrayalloc.3
new file mode 100644
index 0000000..ceea9f1
--- /dev/null
+++ b/man3/libsimple_varrayalloc.3
@@ -0,0 +1,215 @@
+.TH LIBSIMPLE_VARRAYALLOC 3 2018-11-03 libsimple
+.SH NAME
+libsimple_varrayalloc \- allocate memory in a flexible manner
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+enum libsimple_arrayalloc_option {
+ /* constants omitted, see \fBDESCRIPTION\fP */
+};
+
+void *libsimple_varrayalloc(\fItype\fP, size_t \fIn\fP, va_list \fIap\fP);
+void *libsimple_envarrayalloc(int \fIstatus\fP, \fItype\fP, size_t \fIn\fP, va_list \fIap\fP);
+void *libsimple_evarrayalloc(\fItype\fP, size_t \fIn\fP, va_list \fIap\fP);
+void *libsimple_arrayalloc(\fItype\fP, size_t \fIn\fP, ..., /* LIBSIMPLE_ARRAYALLOC_END */);
+void *libsimple_enarrayalloc(int \fIstatus\fP, \fItype\fP, size_t \fIn\fP, ..., /* LIBSIMPLE_ARRAYALLOC_END */);
+void *libsimple_earrayalloc(\fItype\fP, size_t \fIn\fP, ..., /* LIBSIMPLE_ARRAYALLOC_END */);
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_varrayalloc (),
+.BR libsimple_envarrayalloc (),
+.BR libsimple_earrayalloc (),
+.BR libsimple_arrayalloc (),
+.BR libsimple_enarrayalloc (),
+and
+.BR libsimple_earrayalloc ()
+functions are versions of the
+.BR libsimple_vmemalloc (),
+.BR libsimple_envmemalloc (),
+.BR libsimple_ememalloc (),
+.BR libsimple_memalloc (),
+.BR libsimple_enmemalloc (),
+and
+.BR libsimple_ememalloc ()
+functions, respectively, implemented as macros,
+and are identical to those functions with the
+following excepts:
+.TP
+*
+The namespaces
+.B libsimple_arrayalloc
+and
+.B LIBSIMPLE_ARRAYALLOC
+instead of
+.B libsimple_memalloc
+and
+.BR LIBSIMPLE_MEMALLOC .
+.TP
+*
+The constants
+.BR LIBSIMPLE_MEMALLOC_ALIGNMENT ,
+.BR LIBSIMPLE_MEMALLOC_PAGE_ALIGNMENT ,
+and
+.B LIBSIMPLE_MEMALLOC_ELEMENT_SIZE
+are not defined.
+.TP
+*
+The additional parameter
+.I type
+which shall be a type, or an identifier, for which
+.I sizeof(type)
+and
+.I _Alignof(type)
+can be evaluated.
+.TP
+*
+.I _Alignof(type)
+will be used as the alignment for the returned pointer.
+.TP
+*
+The specified allocatio size will be multiplied by
+.IR sizeof(type) .
+.SH RETURN VALUE
+The
+.BR libsimple_varrayalloc (),
+.BR libsimple_envarrayalloc (),
+.BR libsimple_earrayalloc (),
+.BR libsimple_arrayalloc (),
+.BR libsimple_enarrayalloc (),
+and
+.BR libsimple_earrayalloc ()
+functions return the a pointer to the allocated
+memory upon successful completion; otherwise the
+.BR libsimple_varrayalloc ()
+and
+.BR libsimple_arrayalloc ()
+functions return
+.B NULL
+and set
+.I errno
+to indicate the error, whereas the
+.BR libsimple_envarrayalloc (),
+.BR libsimple_earrayalloc (),
+.BR libsimple_enarrayalloc (),
+and
+.BR libsimple_earrayalloc ()
+functions terminate the process.
+.SH ERRORS
+The
+.BR libsimple_varrayalloc ()
+and
+.BR libsimple_arrayalloc ()
+functions will fail if
+.TP
+.B EINVAL
+An invalid argument is specified.
+.TP
+.B EINVAL
+An option is specified twice or in
+conjunction with a mutually exclusive option.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envarrayalloc (),
+.BR libsimple_earrayalloc (),
+.BR libsimple_enarrayalloc (),
+and
+.BR libsimple_earrayalloc ()
+functions terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_varrayalloc (),
+.br
+.BR libsimple_envarrayalloc (),
+.br
+.BR libsimple_earrayalloc (),
+.br
+.BR libsimple_arrayalloc (),
+.br
+.BR libsimple_enarrayalloc (),
+.br
+.BR libsimple_earrayalloc ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_varrayalloc (),
+.br
+.BR libsimple_envarrayalloc (),
+.br
+.BR libsimple_earrayalloc (),
+.br
+.BR libsimple_arrayalloc (),
+.br
+.BR libsimple_enarrayalloc (),
+.br
+.BR libsimple_earrayalloc ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_varrayalloc (),
+.br
+.BR libsimple_envarrayalloc (),
+.br
+.BR libsimple_earrayalloc (),
+.br
+.BR libsimple_arrayalloc (),
+.br
+.BR libsimple_enarrayalloc (),
+.br
+.BR libsimple_earrayalloc ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_vmemalloc (3),
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3)
diff --git a/man3/libsimple_vasprintf.3 b/man3/libsimple_vasprintf.3
new file mode 100644
index 0000000..e91c404
--- /dev/null
+++ b/man3/libsimple_vasprintf.3
@@ -0,0 +1,195 @@
+.TH LIBSIMPLE_VASPRINTF 3 2018-11-04 libsimple
+.SH NAME
+libsimple_vasprintf \- allocate and format a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_vasprintf(char **\fIstrp\fP, const char *\fIfmt\fP, va_list \fIap\fP);
+int libsimple_asprintf(char **\fIstrp\fP, const char *\fIfmt\fP, ...);
+char *libsimple_vasprintfa(const char *\fIfmt\fP, va_list \fIap\fP);
+char *libsimple_asprintfa(const char *\fIfmt\fP, ...);
+
+#ifndef vasprintf
+# define vasprintf libsimple_vasprintf
+#endif
+#ifndef asprintf
+# define asprintf libsimple_asprintf
+#endif
+#ifndef vasprintfa
+# define vasprintfa libsimple_vasprintfa
+#endif
+#ifndef asprintfa
+# define asprintfa libsimple_asprintfa
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_vasprintf ()
+function is a version of the
+.BR vsprintf (3)
+function that allocates a sufficiently large string,
+writes the string to it, and stores it in
+.IR strp .
+The parameter
+.I fmt
+is used as the format string for the
+.BR vfprintf (3)
+function, and the parameter
+.I ap
+is used as the formatting arguments.
+On failure
+.I *strp
+is set to
+.BR NULL ,
+portable applications shall not assume this
+is true if the shorthand aliases
+.BR vasprintf
+and
+.BR asprintf
+are used.
+.PP
+The
+.BR libsimple_asprintf ()
+function is a version of the
+.BR libsimple_vasprintf ()
+function that uses variadic arguments instead of
+.BR va_list .
+.PP
+The
+.BR libsimple_vasprintfa ()
+and
+.BR libsimple_asprintfa ()
+functions are versions of the
+.BR libsimple_vasprintf ()
+and
+.BR libsimple_asprintf ()
+functions that allocates the string on the stack
+rather than the heap.
+.PP
+The string stored in
+.I strp
+by the
+.BR libsimple_vasprintf ()
+and
+.BR libsimple_asprintf ()
+functions shall be deallocated with the
+.BR free (3)
+function when it is no longer needed; the string
+returned by the
+.BR libsimple_vasprintfa ()
+and
+.BR libsimple_asprintfa ()
+functions shall not be freed but are automatically
+deallocated when the calling function returns.
+.PP
+The
+.BR libsimple_vasprintfa ()
+and
+.BR libsimple_asprintfa ()
+functions are implemented as macros and are only
+available if compiling with GCC or Clang.
+.SH RETURN VALUE
+The
+.BR libsimple_vasprintf ()
+and
+.BR libsimple_asprintf ()
+functions return
+.I strlen(*strp)
+upon successful completion; otherwise -1 is returned and
+.I errno
+set to indicate the error.
+.PP
+The
+.BR libsimple_vasprintfa ()
+and
+.BR libsimple_asprintfa ()
+functions return the constructed string upon successful
+completion; otherwise
+.B NULL
+is returned and
+.I errno
+set to indicate the error.
+.SH ERRORS
+The
+.BR libsimple_vasprintf (),
+.BR libsimple_asprintf (),
+.BR libsimple_vasprintfa (),
+and
+.BR libsimple_asprintfa ()
+functions will fail for any reason specified for the
+.BR fprintf (3)
+function. The
+.BR libsimple_vasprintf ()
+and
+.BR libsimple_asprintf ()
+functions will also fail if:
+.TP
+.B EMFILE
+{FOPEN_MAX} streams are currently open in the calling process.
+.TP
+.B ENOMEM
+Could not allocate enough memory.
+.PP
+If enough memory cannot be allocated by the
+.BR libsimple_vasprintfa ()
+and
+.BR libsimple_asprintfa ()
+functions, the kernel will kill the thread with a
+.B SIGSEGV
+signal.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vasprintf (),
+.br
+.BR libsimple_asprintf (),
+.br
+.BR libsimple_vasprintfa (),
+.br
+.BR libsimple_asprintfa ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vasprintf (),
+.br
+.BR libsimple_asprintf (),
+.br
+.BR libsimple_vasprintfa (),
+.br
+.BR libsimple_asprintfa ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vasprintf (),
+.br
+.BR libsimple_asprintf (),
+.br
+.BR libsimple_vasprintfa (),
+.br
+.BR libsimple_asprintfa ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_vweprintf (3),
+.BR sprintf (3),
+.BR snprintf (3)
diff --git a/man3/libsimple_vasprintfa.3 b/man3/libsimple_vasprintfa.3
new file mode 120000
index 0000000..9456f72
--- /dev/null
+++ b/man3/libsimple_vasprintfa.3
@@ -0,0 +1 @@
+libsimple_vasprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_vcallocn.3 b/man3/libsimple_vcallocn.3
new file mode 100644
index 0000000..0d1c71d
--- /dev/null
+++ b/man3/libsimple_vcallocn.3
@@ -0,0 +1,230 @@
+.TH LIBSIMPLE_VCALLOCN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vcallocn \- allocate memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vcallocn(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envcallocn(int \fIstatus\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evcallocn(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_callocn(size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_encallocn(int \fIstatus\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_ecallocn(size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vcallocn
+# define vcallocn libsimple_vcallocn
+#endif
+#ifndef envcallocn
+# define envcallocn libsimple_envcallocn
+#endif
+#ifndef evcallocn
+# define evcallocn libsimple_evcallocn
+#endif
+#ifndef callocn
+# define callocn libsimple_callocn
+#endif
+#ifndef encallocn
+# define encallocn libsimple_encallocn
+#endif
+#ifndef ecallocn
+# define ecallocn libsimple_ecallocn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_callocn (),
+.BR libsimple_encallocn (),
+and
+.BR libsimple_ecallocn ()
+functions are wrappers for the
+.BR calloc (3)
+function, they allocate
+.I N
+zero-initialised bytes to the heap and return a
+pointer with an alignment of
+.I alignof(max_align_t)
+to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_encallocn ()
+and
+.BR libsimple_ecallocn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_encallocn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ecallocn ()
+function is used.
+.PP
+The
+.BR libsimple_vcallocn (),
+.BR libsimple_envcallocn (),
+and
+.BR libsimple_evcallocn ()
+functions are versions of the
+.BR libsimple_callocn (),
+.BR libsimple_encallocn (),
+and
+.BR libsimple_ecallocn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vcallocn (),
+.BR libsimple_envcallocn (),
+.BR libsimple_evcallocn (),
+.BR libsimple_callocn (),
+.BR libsimple_encallocn (),
+and
+.BR libsimple_ecallocn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vcallocn ()
+and
+.BR libsimple_callocn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envcallocn (),
+.BR libsimple_evcallocn (),
+.BR libsimple_encallocn (),
+and
+.BR libsimple_ecallocn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vcallocn (),
+.BR libsimple_callocn ()
+function will fail for the reasons specified for the
+.BR calloc (3)
+function, and if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.PP
+The
+.BR libsimple_envcallocn (),
+.BR libsimple_evcallocn (),
+.BR libsimple_encallocn (),
+and
+.BR libsimple_ecallocn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vcallocn (),
+.br
+.BR libsimple_envcallocn (),
+.br
+.BR libsimple_evcallocn (),
+.br
+.BR libsimple_callocn (),
+.br
+.BR libsimple_encallocn (),
+.br
+.BR libsimple_ecallocn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vcallocn (),
+.br
+.BR libsimple_envcallocn (),
+.br
+.BR libsimple_evcallocn (),
+.br
+.BR libsimple_callocn (),
+.br
+.BR libsimple_encallocn (),
+.br
+.BR libsimple_ecallocn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vcallocn (),
+.br
+.BR libsimple_envcallocn (),
+.br
+.BR libsimple_evcallocn (),
+.br
+.BR libsimple_callocn (),
+.br
+.BR libsimple_encallocn (),
+.br
+.BR libsimple_ecallocn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR calloc (3)
diff --git a/man3/libsimple_venprintf.3 b/man3/libsimple_venprintf.3
new file mode 120000
index 0000000..39ff456
--- /dev/null
+++ b/man3/libsimple_venprintf.3
@@ -0,0 +1 @@
+libsimple_vweprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_veprintf.3 b/man3/libsimple_veprintf.3
new file mode 120000
index 0000000..574bdd9
--- /dev/null
+++ b/man3/libsimple_veprintf.3
@@ -0,0 +1 @@
+libsimple_venprintf.3 \ No newline at end of file
diff --git a/man3/libsimple_vmallocn.3 b/man3/libsimple_vmallocn.3
new file mode 100644
index 0000000..0aed464
--- /dev/null
+++ b/man3/libsimple_vmallocn.3
@@ -0,0 +1,230 @@
+.TH LIBSIMPLE_VMALLOCN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vmallocn \- allocate memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vmallocn(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envmallocn(int \fIstatus\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evmallocn(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_mallocn(size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enmallocn(int \fIstatus\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_emallocn(size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vmallocn
+# define vmallocn libsimple_vmallocn
+#endif
+#ifndef envmallocn
+# define envmallocn libsimple_envmallocn
+#endif
+#ifndef evmallocn
+# define evmallocn libsimple_evmallocn
+#endif
+#ifndef mallocn
+# define mallocn libsimple_mallocn
+#endif
+#ifndef enmallocn
+# define enmallocn libsimple_enmallocn
+#endif
+#ifndef emallocn
+# define emallocn libsimple_emallocn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_mallocn (),
+.BR libsimple_enmallocn (),
+and
+.BR libsimple_emallocn ()
+functions are wrappers for the
+.BR malloc (3)
+function, they allocate
+.I N
+uninitialised bytes to the heap and return a
+pointer with an alignment of
+.I alignof(max_align_t)
+to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enmallocn ()
+and
+.BR libsimple_emallocn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enmallocn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_emallocn ()
+function is used.
+.PP
+The
+.BR libsimple_vmallocn (),
+.BR libsimple_envmallocn (),
+and
+.BR libsimple_evmallocn ()
+functions are versions of the
+.BR libsimple_mallocn (),
+.BR libsimple_enmallocn (),
+and
+.BR libsimple_emallocn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vmallocn (),
+.BR libsimple_envmallocn (),
+.BR libsimple_evmallocn (),
+.BR libsimple_mallocn (),
+.BR libsimple_enmallocn (),
+and
+.BR libsimple_emallocn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vmallocn ()
+and
+.BR libsimple_mallocn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envmallocn (),
+.BR libsimple_evmallocn (),
+.BR libsimple_enmallocn (),
+and
+.BR libsimple_emallocn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vmallocn (),
+.BR libsimple_mallocn ()
+function will fail for the reasons specified for the
+.BR malloc (3)
+function, and if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.PP
+The
+.BR libsimple_envmallocn (),
+.BR libsimple_evmallocn (),
+.BR libsimple_enmallocn (),
+and
+.BR libsimple_emallocn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vmallocn (),
+.br
+.BR libsimple_envmallocn (),
+.br
+.BR libsimple_evmallocn (),
+.br
+.BR libsimple_mallocn (),
+.br
+.BR libsimple_enmallocn (),
+.br
+.BR libsimple_emallocn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vmallocn (),
+.br
+.BR libsimple_envmallocn (),
+.br
+.BR libsimple_evmallocn (),
+.br
+.BR libsimple_mallocn (),
+.br
+.BR libsimple_enmallocn (),
+.br
+.BR libsimple_emallocn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vmallocn (),
+.br
+.BR libsimple_envmallocn (),
+.br
+.BR libsimple_evmallocn (),
+.br
+.BR libsimple_mallocn (),
+.br
+.BR libsimple_enmallocn (),
+.br
+.BR libsimple_emallocn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR malloc (3)
diff --git a/man3/libsimple_vmalloczn.3 b/man3/libsimple_vmalloczn.3
new file mode 100644
index 0000000..8b12b4a
--- /dev/null
+++ b/man3/libsimple_vmalloczn.3
@@ -0,0 +1,238 @@
+.TH LIBSIMPLE_VMALLOCZN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vmalloczn \- allocate optionally initialised memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_vmalloczn(int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+void *libsimple_envmalloczn(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evmalloczn(int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_malloczn(int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enmalloczn(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_emalloczn(int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vmalloczn
+# define vmalloczn libsimple_vmalloczn
+#endif
+#ifndef envmalloczn
+# define envmalloczn libsimple_envmalloczn
+#endif
+#ifndef evmalloczn
+# define evmalloczn libsimple_evmalloczn
+#endif
+#ifndef malloczn
+# define malloczn libsimple_malloczn
+#endif
+#ifndef enmalloczn
+# define enmalloczn libsimple_enmalloczn
+#endif
+#ifndef emalloczn
+# define emalloczn libsimple_emalloczn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_malloczn (),
+.BR libsimple_enmalloczn (),
+and
+.BR libsimple_emalloczn ()
+functions are wrappers for the
+.BR malloc (3)
+and
+.BR calloc (3)
+functions, they allocate
+.I N
+bytes to the heap and return a pointer with an
+alignment of
+.I alignof(max_align_t)
+to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The memory will be initialised
+with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enmalloczn ()
+and
+.BR libsimple_emalloczn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enmalloczn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_emalloczn ()
+function is used.
+.PP
+The
+.BR libsimple_vmalloczn (),
+.BR libsimple_envmalloczn (),
+and
+.BR libsimple_evmalloczn ()
+functions are versions of the
+.BR libsimple_malloczn (),
+.BR libsimple_enmalloczn (),
+and
+.BR libsimple_emalloczn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vmalloczn (),
+.BR libsimple_envmalloczn (),
+.BR libsimple_evmalloczn (),
+.BR libsimple_malloczn (),
+.BR libsimple_enmalloczn (),
+and
+.BR libsimple_emalloczn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vmalloczn ()
+and
+.BR libsimple_malloczn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envmalloczn (),
+.BR libsimple_evmalloczn (),
+.BR libsimple_enmalloczn (),
+and
+.BR libsimple_emalloczn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vmalloczn (),
+.BR libsimple_malloczn ()
+function will fail for the reasons specified for the
+.BR malloc (3)
+and
+.BR calloc (3)
+functions, and if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.PP
+The
+.BR libsimple_envmalloczn (),
+.BR libsimple_evmalloczn (),
+.BR libsimple_enmalloczn (),
+and
+.BR libsimple_emalloczn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vmalloczn (),
+.br
+.BR libsimple_envmalloczn (),
+.br
+.BR libsimple_evmalloczn (),
+.br
+.BR libsimple_malloczn (),
+.br
+.BR libsimple_enmalloczn (),
+.br
+.BR libsimple_emalloczn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vmalloczn (),
+.br
+.BR libsimple_envmalloczn (),
+.br
+.BR libsimple_evmalloczn (),
+.br
+.BR libsimple_malloczn (),
+.br
+.BR libsimple_enmalloczn (),
+.br
+.BR libsimple_emalloczn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vmalloczn (),
+.br
+.BR libsimple_envmalloczn (),
+.br
+.BR libsimple_evmalloczn (),
+.br
+.BR libsimple_malloczn (),
+.br
+.BR libsimple_enmalloczn (),
+.br
+.BR libsimple_emalloczn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR malloc (3),
+.BR calloc (3)
diff --git a/man3/libsimple_vmemalignn.3 b/man3/libsimple_vmemalignn.3
new file mode 100644
index 0000000..8a6c5c1
--- /dev/null
+++ b/man3/libsimple_vmemalignn.3
@@ -0,0 +1,232 @@
+.TH LIBSIMPLE_VMEMALIGNN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vmemalignn \- allocate memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vmemalignn(size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envmemalignn(int \fIstatus\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evmemalignn(size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_memalignn(size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enmemalignn(int \fIstatus\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_ememalignn(size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vmemalignn
+# define vmemalignn libsimple_vmemalignn
+#endif
+#ifndef envmemalignn
+# define envmemalignn libsimple_envmemalignn
+#endif
+#ifndef evmemalignn
+# define evmemalignn libsimple_evmemalignn
+#endif
+#ifndef memalignn
+# define memalignn libsimple_memalignn
+#endif
+#ifndef enmemalignn
+# define enmemalignn libsimple_enmemalignn
+#endif
+#ifndef ememalignn
+# define ememalignn libsimple_ememalignn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memalignn (),
+.BR libsimple_enmemalignn (),
+and
+.BR libsimple_ememalignn ()
+functions allocate
+.I N
+uninitialised bytes to the heap and return a
+pointer with an alignment of
+.I alignment
+bytes to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enmemalignn ()
+and
+.BR libsimple_ememalignn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enmemalignn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ememalignn ()
+function is used.
+.PP
+The
+.BR libsimple_vmemalignn (),
+.BR libsimple_envmemalignn (),
+and
+.BR libsimple_evmemalignn ()
+functions are versions of the
+.BR libsimple_memalignn (),
+.BR libsimple_enmemalignn (),
+and
+.BR libsimple_ememalignn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vmemalignn (),
+.BR libsimple_envmemalignn (),
+.BR libsimple_evmemalignn (),
+.BR libsimple_memalignn (),
+.BR libsimple_enmemalignn (),
+and
+.BR libsimple_ememalignn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vmemalignn ()
+and
+.BR libsimple_memalignn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envmemalignn (),
+.BR libsimple_evmemalignn (),
+.BR libsimple_enmemalignn (),
+and
+.BR libsimple_ememalignn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vmemalignn (),
+.BR libsimple_memalignn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envmemalignn (),
+.BR libsimple_evmemalignn (),
+.BR libsimple_enmemalignn (),
+and
+.BR libsimple_ememalignn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vmemalignn (),
+.br
+.BR libsimple_envmemalignn (),
+.br
+.BR libsimple_evmemalignn (),
+.br
+.BR libsimple_memalignn (),
+.br
+.BR libsimple_enmemalignn (),
+.br
+.BR libsimple_ememalignn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vmemalignn (),
+.br
+.BR libsimple_envmemalignn (),
+.br
+.BR libsimple_evmemalignn (),
+.br
+.BR libsimple_memalignn (),
+.br
+.BR libsimple_enmemalignn (),
+.br
+.BR libsimple_ememalignn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vmemalignn (),
+.br
+.BR libsimple_envmemalignn (),
+.br
+.BR libsimple_evmemalignn (),
+.br
+.BR libsimple_memalignn (),
+.br
+.BR libsimple_enmemalignn (),
+.br
+.BR libsimple_ememalignn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_vmemalignzn.3 b/man3/libsimple_vmemalignzn.3
new file mode 100644
index 0000000..f59b3a0
--- /dev/null
+++ b/man3/libsimple_vmemalignzn.3
@@ -0,0 +1,235 @@
+.TH LIBSIMPLE_VMEMALIGNZN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vmemalignzn \- allocate optionally initialised memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vmemalignzn(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envmemalignzn(int \fIstatus\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evmemalignzn(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_memalignzn(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enmemalignzn(int \fIstatus\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_ememalignzn(int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vmemalignzn
+# define vmemalignzn libsimple_vmemalignzn
+#endif
+#ifndef envmemalignzn
+# define envmemalignzn libsimple_envmemalignzn
+#endif
+#ifndef evmemalignzn
+# define evmemalignzn libsimple_evmemalignzn
+#endif
+#ifndef memalignzn
+# define memalignzn libsimple_memalignzn
+#endif
+#ifndef enmemalignzn
+# define enmemalignzn libsimple_enmemalignzn
+#endif
+#ifndef ememalignzn
+# define ememalignzn libsimple_ememalignzn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memalignzn (),
+.BR libsimple_enmemalignzn (),
+and
+.BR libsimple_ememalignzn ()
+functions allocate
+.I N
+bytes to the heap and return a pointer with an
+alignment of
+.I alignment
+bytes to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The memory will be initialised
+with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enmemalignzn ()
+and
+.BR libsimple_ememalignzn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enmemalignzn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ememalignzn ()
+function is used.
+.PP
+The
+.BR libsimple_vmemalignzn (),
+.BR libsimple_envmemalignzn (),
+and
+.BR libsimple_evmemalignzn ()
+functions are versions of the
+.BR libsimple_memalignzn (),
+.BR libsimple_enmemalignzn (),
+and
+.BR libsimple_ememalignzn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vmemalignzn (),
+.BR libsimple_envmemalignzn (),
+.BR libsimple_evmemalignzn (),
+.BR libsimple_memalignzn (),
+.BR libsimple_enmemalignzn (),
+and
+.BR libsimple_ememalignzn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vmemalignzn ()
+and
+.BR libsimple_memalignzn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envmemalignzn (),
+.BR libsimple_evmemalignzn (),
+.BR libsimple_enmemalignzn (),
+and
+.BR libsimple_ememalignzn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vmemalignzn (),
+.BR libsimple_memalignzn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envmemalignzn (),
+.BR libsimple_evmemalignzn (),
+.BR libsimple_enmemalignzn (),
+and
+.BR libsimple_ememalignzn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vmemalignzn (),
+.br
+.BR libsimple_envmemalignzn (),
+.br
+.BR libsimple_evmemalignzn (),
+.br
+.BR libsimple_memalignzn (),
+.br
+.BR libsimple_enmemalignzn (),
+.br
+.BR libsimple_ememalignzn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vmemalignzn (),
+.br
+.BR libsimple_envmemalignzn (),
+.br
+.BR libsimple_evmemalignzn (),
+.br
+.BR libsimple_memalignzn (),
+.br
+.BR libsimple_enmemalignzn (),
+.br
+.BR libsimple_ememalignzn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vmemalignzn (),
+.br
+.BR libsimple_envmemalignzn (),
+.br
+.BR libsimple_evmemalignzn (),
+.br
+.BR libsimple_memalignzn (),
+.br
+.BR libsimple_enmemalignzn (),
+.br
+.BR libsimple_ememalignzn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_vmemalloc.3 b/man3/libsimple_vmemalloc.3
new file mode 100644
index 0000000..b661f29
--- /dev/null
+++ b/man3/libsimple_vmemalloc.3
@@ -0,0 +1,301 @@
+.TH LIBSIMPLE_VMEMALLOC 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vmemalloc \- allocate memory in a flexible manner
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+enum libsimple_memalloc_option {
+ /* constants omitted, see \fBDESCRIPTION\fP */
+};
+
+void *libsimple_vmemalloc(size_t \fIn\fP, va_list \fIap\fP);
+void *libsimple_envmemalloc(int \fIstatus\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evmemalloc(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_memalloc(size_t \fIn\fP, ..., /* LIBSIMPLE_MEMALLOC_END */);
+static inline void *libsimple_enmemalloc(int \fIstatus\fP, size_t \fIn\fP, ..., /* LIBSIMPLE_MEMALLOC_END */);
+static inline void *libsimple_ememalloc(size_t \fIn\fP, ..., /* LIBSIMPLE_MEMALLOC_END */);
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_vmemalloc ()
+function is a flexible alternative to standard allocation
+functions.
+.PP
+.I va
+is a list of options that specify the behaviour, its
+end is marked by
+.BR LIBSIMPLE_MEMALLOC_END ,
+the following options (which is the type
+.BR "enum libsimple_memalloc_option" )
+are recognised:
+.TP
+.B LIBSIMPLE_MEMALLOC_ZERO_INIT
+The allocated memory shall be initialisd with NUL bytes.
+.TP
+.B LIBSIMPLE_MEMALLOC_CONDITIONAL_ZERO_INIT
+The allocated memory shall be initialisd with NUL bytes
+with the argument, which should be of the type
+.BR int ,
+is nonzero.
+.TP
+.B LIBSIMPLE_MEMALLOC_UNIQUE_IF_ZERO
+If attempting to allocate 0 bytes,
+rather than failing with
+.I errno
+set to
+.BR EINVAL ,
+a unique pointer (that can be deallocated)
+should be returned.
+.TP
+.B LIBSIMPLE_MEMALLOC_NULL_IF_ZERO
+If attempting to allocate 0 bytes,
+rather than failing with
+.I errno
+set to
+.BR EINVAL ,
+a
+.B NULL
+should be returned.
+.TP
+.B LIBSIMPLE_MEMALLOC_ALIGNMENT
+The value of the next argument, which should be of the type
+.BR size_t ,
+should be used as the alignment of the returned pointer.
+By default the alignment is
+.IR "alignof(max_align_t)" .
+.TP
+.B LIBSIMPLE_MEMALLOC_PAGE_ALIGNMENT
+The alignment of the returned pointer should be the page size.
+By default the alignment is
+.IR "alignof(max_align_t)" .
+.TP
+.B LIBSIMPLE_MEMALLOC_ROUND_UP_SIZE_TO_ALIGNMENT
+The number of bytes to allocated should be rounded up to
+the next multiple of the alignment, unless it already is
+a multiple of the alignment.
+.TP
+.B LIBSIMPLE_MEMALLOC_ELEMENT_SIZE
+The next argument, which should be of the type
+.BR size_t ,
+shall act as a multiplier for the number of bytes to allocate
+(default multiplier is 1), effectively, making the specified
+allocation size specified in elements rather than in bytes.
+.TP
+.B LIBSIMPLE_MEMALLOC_PRODUCT_SIZE
+If
+.I n
+is zero, the product of the following arguments,
+which should be of the type
+.BR size_t ,
+up to the first 0, shall be used as the allocation size.
+If
+.I n
+is not zero, the product of the following
+.I n
+arguments, also of type
+.BR size_t ,
+shall be used as the allocation size.
+By default
+.I n
+bytes are allocated.
+.TP
+.B LIBSIMPLE_MEMALLOC_VA_PRODUCT_SIZE
+Like
+.BR LIBSIMPLE_MEMALLOC_PRODUCT_SIZE ,
+the arguments are read from the next argument,
+which should be of the type
+.BR va_list .
+.TP
+.B LIBSIMPLE_MEMALLOC_1_VA_PRODUCT_SIZE
+Like
+.BR LIBSIMPLE_MEMALLOC_PRODUCT_SIZE ,
+except two arguments read from
+.IR ap :
+a
+.BR size_t ,
+which act as the first factor, and a
+.B va_list
+with the rest of the factors.
+.TP
+.B LIBSIMPLE_MEMALLOC_VA_LIST
+Arguments from the next argument, which should be of the type
+.B va_list
+and should end with
+.BR LIBSIMPLE_MEMALLOC_END ,
+shall be parsed as options for the memory allocation.
+.PP
+Each
+.B enum libsimple_memalloc_option
+constant have a self-referencing macros defined
+which can be used to test which constants are defined.
+.PP
+The
+.BR libsimple_envmemalloc ()
+and
+.BR libsimple_evmemalloc ()
+functions are versions of the
+.BR libsimple_vmemalloc ()
+that terminate the process by calling the
+.BR libsimple_enprintf (3)
+(with
+.I status
+as the exit value) and
+.BR libsimple_eprintf (3)
+functions, respectively.
+.PP
+The
+.BR libsimple_memalloc (),
+.BR libsimple_enmemalloc (),
+and
+.BR libsimple_ememalloc ()
+functions are versions of the
+.BR libsimple_vmemalloc (),
+.BR libsimple_envmemalloc (),
+and
+.BR libsimple_evmemalloc ()
+functions, respectively, that use variadic arguments
+instead of
+.BR va_list .
+.SH RETURN VALUE
+The
+.BR libsimple_vmemalloc (),
+.BR libsimple_envmemalloc (),
+.BR libsimple_ememalloc (),
+.BR libsimple_memalloc (),
+.BR libsimple_enmemalloc (),
+and
+.BR libsimple_ememalloc ()
+functions return the a pointer to the allocated
+memory upon successful completion; otherwise the
+.BR libsimple_vmemalloc ()
+and
+.BR libsimple_memalloc ()
+functions return
+.B NULL
+and set
+.I errno
+to indicate the error, whereas the
+.BR libsimple_envmemalloc (),
+.BR libsimple_ememalloc (),
+.BR libsimple_enmemalloc (),
+and
+.BR libsimple_ememalloc ()
+functions terminate the process.
+.SH ERRORS
+The
+.BR libsimple_vmemalloc ()
+and
+.BR libsimple_memalloc ()
+functions will fail if
+.TP
+.B EINVAL
+An invalid argument is specified.
+.TP
+.B EINVAL
+An option is specified twice or in
+conjunction with a mutually exclusive option.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envmemalloc (),
+.BR libsimple_ememalloc (),
+.BR libsimple_enmemalloc (),
+and
+.BR libsimple_ememalloc ()
+functions terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vmemalloc (),
+.br
+.BR libsimple_envmemalloc (),
+.br
+.BR libsimple_ememalloc (),
+.br
+.BR libsimple_memalloc (),
+.br
+.BR libsimple_enmemalloc (),
+.br
+.BR libsimple_ememalloc ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vmemalloc (),
+.br
+.BR libsimple_envmemalloc (),
+.br
+.BR libsimple_ememalloc (),
+.br
+.BR libsimple_memalloc (),
+.br
+.BR libsimple_enmemalloc (),
+.br
+.BR libsimple_ememalloc ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vmemalloc (),
+.br
+.BR libsimple_envmemalloc (),
+.br
+.BR libsimple_ememalloc (),
+.br
+.BR libsimple_memalloc (),
+.br
+.BR libsimple_enmemalloc (),
+.br
+.BR libsimple_ememalloc ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_varrayalloc (3),
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3)
diff --git a/man3/libsimple_vposix_memalignn.3 b/man3/libsimple_vposix_memalignn.3
new file mode 100644
index 0000000..f05ab6b
--- /dev/null
+++ b/man3/libsimple_vposix_memalignn.3
@@ -0,0 +1,235 @@
+.TH LIBSIMPLE_VPOSIX_MEMALIGNN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vposix_memalignn \- allocate memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_vposix_memalignn(void **\fImemptr\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void libsimple_envposix_memalignn(int \fIstatus\fP, void **\fImemptr\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void libsimple_evposix_memalignn(void **\fImemptr\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline int libsimple_posix_memalignn(void **\fImemptr\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void libsimple_enposix_memalignn(int \fIstatus\fP, void **\fImemptr\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void libsimple_eposix_memalignn(void **\fImemptr\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vposix_memalignn
+# define vposix_memalignn libsimple_vposix_memalignn
+#endif
+#ifndef envposix_memalignn
+# define envposix_memalignn libsimple_envposix_memalignn
+#endif
+#ifndef evposix_memalignn
+# define evposix_memalignn libsimple_evposix_memalignn
+#endif
+#ifndef posix_memalignn
+# define posix_memalignn libsimple_posix_memalignn
+#endif
+#ifndef enposix_memalignn
+# define enposix_memalignn libsimple_enposix_memalignn
+#endif
+#ifndef eposix_memalignn
+# define eposix_memalignn libsimple_eposix_memalignn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_posix_memalignn (),
+.BR libsimple_enposix_memalignn (),
+and
+.BR libsimple_eposix_memalignn ()
+functions allocate
+.I N
+uninitialised bytes to the heap and store a
+pointer with an alignment of
+.I alignment
+bytes to the allocated memory in
+.IR memptr ,
+where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The function
+.BR free (3)
+shall be called with the pointer stored in
+.I memptr
+as input when the allocated memory is no longer needed.
+.I *memptr
+remains unmodified on failure.
+.PP
+The
+.BR libsimple_enposix_memalignn ()
+and
+.BR libsimple_eposix_memalignn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enposix_memalignn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_eposix_memalignn ()
+function is used.
+.PP
+The
+.BR libsimple_vposix_memalignn (),
+.BR libsimple_envposix_memalignn (),
+and
+.BR libsimple_evposix_memalignn ()
+functions are versions of the
+.BR libsimple_posix_memalignn (),
+.BR libsimple_enposix_memalignn (),
+and
+.BR libsimple_eposix_memalignn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vposix_memalignn ()
+and
+.BR libsimple_posix_memalignn ()
+functions return 0 upon successful completion;
+otherwise an error code is returned to indicate
+the error.
+.PP
+The
+.BR libsimple_envposix_memalignn (),
+.BR libsimple_evposix_memalignn (),
+.BR libsimple_enposix_memalignn (),
+and
+.BR libsimple_eposix_memalignn ()
+functions to not return a value, but
+terminated the process on failure.
+.SH ERRORS
+The
+.BR libsimple_vposix_memalignn (),
+.BR libsimple_posix_memalignn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B EINVAL
+.I alignment
+is not a multiple of
+.IR "sizeof(void *)" .
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envposix_memalignn (),
+.BR libsimple_evposix_memalignn (),
+.BR libsimple_enposix_memalignn (),
+and
+.BR libsimple_eposix_memalignn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vposix_memalignn (),
+.br
+.BR libsimple_envposix_memalignn (),
+.br
+.BR libsimple_evposix_memalignn (),
+.br
+.BR libsimple_posix_memalignn (),
+.br
+.BR libsimple_enposix_memalignn (),
+.br
+.BR libsimple_eposix_memalignn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vposix_memalignn (),
+.br
+.BR libsimple_envposix_memalignn (),
+.br
+.BR libsimple_evposix_memalignn (),
+.br
+.BR libsimple_posix_memalignn (),
+.br
+.BR libsimple_enposix_memalignn (),
+.br
+.BR libsimple_eposix_memalignn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vposix_memalignn (),
+.br
+.BR libsimple_envposix_memalignn (),
+.br
+.BR libsimple_evposix_memalignn (),
+.br
+.BR libsimple_posix_memalignn (),
+.br
+.BR libsimple_enposix_memalignn (),
+.br
+.BR libsimple_eposix_memalignn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR posix_memalign (3)
diff --git a/man3/libsimple_vposix_memalignzn.3 b/man3/libsimple_vposix_memalignzn.3
new file mode 100644
index 0000000..481a4b1
--- /dev/null
+++ b/man3/libsimple_vposix_memalignzn.3
@@ -0,0 +1,238 @@
+.TH LIBSIMPLE_VPOSIX_MEMALIGNZN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vposix_memalignzn \- allocate optionally initialised memory with custom alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_vposix_memalignzn(void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+void libsimple_envposix_memalignzn(int \fIstatus\fP, void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void libsimple_evposix_memalignzn(void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline int libsimple_posix_memalignzn(void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void libsimple_enposix_memalignzn(int \fIstatus\fP, void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline int libsimple_eposix_memalignzn(void **\fImemptr\fP, int \fIclear\fP, size_t \fIalignment\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vposix_memalignzn
+# define vposix_memalignzn libsimple_vposix_memalignzn
+#endif
+#ifndef envposix_memalignzn
+# define envposix_memalignzn libsimple_envposix_memalignzn
+#endif
+#ifndef evposix_memalignzn
+# define evposix_memalignzn libsimple_evposix_memalignzn
+#endif
+#ifndef posix_memalignzn
+# define posix_memalignzn libsimple_posix_memalignzn
+#endif
+#ifndef enposix_memalignzn
+# define enposix_memalignzn libsimple_enposix_memalignzn
+#endif
+#ifndef eposix_memalignzn
+# define eposix_memalignzn libsimple_eposix_memalignzn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_posix_memalignzn (),
+.BR libsimple_enposix_memalignzn (),
+and
+.BR libsimple_eposix_memalignzn ()
+functions allocate
+.I N
+bytes to the heap and store a pointer with an
+alignment of
+.I alignment
+bytes to the allocated memory in
+.IR memptr ,
+where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The memory will be initialised
+with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the pointer stored in
+.I memptr
+as input when the allocated memory is no longer needed.
+.I *memptr
+remains unmodified on failure.
+.PP
+The
+.BR libsimple_enposix_memalignzn ()
+and
+.BR libsimple_eposix_memalignzn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enposix_memalignzn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_eposix_memalignzn ()
+function is used.
+.PP
+The
+.BR libsimple_vposix_memalignzn (),
+.BR libsimple_envposix_memalignzn (),
+and
+.BR libsimple_evposix_memalignzn ()
+functions are versions of the
+.BR libsimple_posix_memalignzn (),
+.BR libsimple_enposix_memalignzn (),
+and
+.BR libsimple_eposix_memalignzn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vposix_memalignzn ()
+and
+.BR libsimple_posix_memalignzn ()
+functions return 0 upon successful completion;
+otherwise an error code is returned to indicate
+the error.
+.PP
+The
+.BR libsimple_envposix_memalignzn (),
+.BR libsimple_evposix_memalignzn (),
+.BR libsimple_enposix_memalignzn (),
+and
+.BR libsimple_eposix_memalignzn ()
+functions do not return a value, but
+terminated the process on failure.
+.SH ERRORS
+The
+.BR libsimple_vposix_memalignzn (),
+.BR libsimple_posix_memalignzn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B EINVAL
+.I alignment
+is not a power of two.
+.TP
+.B EINVAL
+.I alignment
+is not a multiple of
+.IR "sizeof(void *)" .
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envposix_memalignzn (),
+.BR libsimple_evposix_memalignzn (),
+.BR libsimple_enposix_memalignzn (),
+and
+.BR libsimple_eposix_memalignzn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vposix_memalignzn (),
+.br
+.BR libsimple_envposix_memalignzn (),
+.br
+.BR libsimple_evposix_memalignzn (),
+.br
+.BR libsimple_posix_memalignzn (),
+.br
+.BR libsimple_enposix_memalignzn (),
+.br
+.BR libsimple_eposix_memalignzn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vposix_memalignzn (),
+.br
+.BR libsimple_envposix_memalignzn (),
+.br
+.BR libsimple_evposix_memalignzn (),
+.br
+.BR libsimple_posix_memalignzn (),
+.br
+.BR libsimple_enposix_memalignzn (),
+.br
+.BR libsimple_eposix_memalignzn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vposix_memalignzn (),
+.br
+.BR libsimple_envposix_memalignzn (),
+.br
+.BR libsimple_evposix_memalignzn (),
+.br
+.BR libsimple_posix_memalignzn (),
+.br
+.BR libsimple_enposix_memalignzn (),
+.br
+.BR libsimple_eposix_memalignzn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR posix_memalign (3)
diff --git a/man3/libsimple_vputenvf.3 b/man3/libsimple_vputenvf.3
new file mode 100644
index 0000000..33c5559
--- /dev/null
+++ b/man3/libsimple_vputenvf.3
@@ -0,0 +1,196 @@
+.TH LIBSIMPLE_VPUTENVF 3 2018-10-20 libsimple
+.SH NAME
+libsimple_vputenvf \- change or add a string formatted value to the environment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+int libsimple_vputenvf(const char *\fIfmt\fP, va_list \fIap\fP);
+static inline int libsimple_putenvf(const char *\fIfmt\fP, ...);
+void libsimple_envputenvf(int \fIstatus\fP, const char *\fIfmt\fP, va_list \fIap\fP);
+static inline void libsimple_enputenvf(int \fIstatus\fP, const char *\fIfmt\fP, ...);
+static inline void libsimple_evputenvf(const char *\fIfmt\fP, va_list \fIap\fP);
+static inline void libsimple_eputenvf(const char *\fIfmt\fP, ...);
+
+#ifndef vputenvf
+# define vputenvf libsimple_vputenvf
+#endif
+#ifndef putenvf
+# define putenvf libsimple_putenvf
+#endif
+#ifndef envputenvf
+# define envputenvf libsimple_envputenvf
+#endif
+#ifndef enputenvf
+# define enputenvf libsimple_enputenvf
+#endif
+#ifndef evputenvf
+# define evputenvf libsimple_evputenvf
+#endif
+#ifndef eputenvf
+# define eputenvf libsimple_eputenvf
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_vputenvf ()
+function constructs a string using the
+.BR vsprintf (3)
+function, and adds it to the environment, overriding
+its old value if it already exists. The string shall be on
+the format \fB\(dq\fP\fIname\fP\fB=\fP\fIvalue\fP\fB\(dq\fP;
+however this is not strictly enforced, see
+.BR NOTES .
+The parameter
+.I fmt
+is used as the format string for the
+.BR vsprintf (3)
+function, and the parameter
+.I ap
+is used as the formatting arguments.
+.PP
+The
+.BR libsimple_putenvf ()
+function is a version of the
+.BR libsimple_vputenvf ()
+function that uses variadic arguments instead of
+.BR va_list .
+.PP
+The
+.BR libsimple_envputenvf ()
+and
+.BR libsimple_evputenvf ()
+functions are versions of the
+.BR libsimple_vputenvf ()
+function that call the
+.BR libsimple_enprintf (3)
+function on failure, causing the process to print
+an error message and exit. See
+.BR libsimple_enprintf (3)
+for more information.
+.PP
+The
+.BR libsimple_enputenvf ()
+and
+.BR libsimple_eputenvf ()
+functions are versions of the
+.BR libsimple_putenvf ()
+function that call the
+.BR libsimple_enprintf (3)
+function on failure, causing the process to print
+an error message and exit. See
+.BR libsimple_enprintf ()
+for more information.
+.PP
+Modifications made to the environment do not become
+visible to other process until the process image is
+changed.
+.SH RETURN VALUE
+Upon successful completion, the
+.BR libsimple_vputenvf ()
+and
+.BR libsimple_putenvf ()
+functions return 0; otherwise, they return \-1 and set
+.I errno
+to indicate the error.
+.SH ERRORS
+The
+.BR libsimple_vputenvf ()
+and
+.BR libsimple_putenvf ()
+functions will fail if:
+.TP
+.B EINVAL
+The construct string is empty or starts with the
+.B '='
+character.
+.TP
+.B ENOMEM
+Insufficient memory was available.
+.PP
+They may also fail for any reason specified for the
+.BR vsnprintf (3)
+function.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vputenvf (),
+.br
+.BR libsimple_putenvf (),
+.br
+.BR libsimple_envputenvf (),
+.br
+.BR libsimple_enputenvf (),
+.br
+.BR libsimple_evputenvf (),
+.br
+.BR libsimple_eputenvf ()
+T} Thread safety MT-Safe env
+T{
+.BR libsimple_vputenvf (),
+.br
+.BR libsimple_putenvf (),
+.br
+.BR libsimple_envputenvf (),
+.br
+.BR libsimple_enputenvf (),
+.br
+.BR libsimple_evputenvf (),
+.br
+.BR libsimple_eputenvf ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vputenvf (),
+.br
+.BR libsimple_putenvf (),
+.br
+.BR libsimple_envputenvf (),
+.br
+.BR libsimple_enputenvf (),
+.br
+.BR libsimple_evputenvf (),
+.br
+.BR libsimple_eputenvf ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+If the construct does not contain the
+.B '='
+character, it may still be added to the environment,
+however this can cause problem for some programs, and
+the behaviour is unspecified when countered by the
+.BR getenv (3),
+.BR putenv (3),
+.BR setenv (3),
+and
+.BR unsetenv (3)
+functions.
+.SH BUGS
+There is no mechanism for detecting which entries in the
+environment are statically allocated and which are
+dynamically allocated, this can lead to memory leaks
+with are detected by
+.BR valgrind (1).
+.SH SEE ALSO
+.BR putenv (3),
+.BR setenv (3),
+.BR unsetenv (3),
+.BR getenv (3),
+.BR environ (3)
diff --git a/man3/libsimple_vpvallocn.3 b/man3/libsimple_vpvallocn.3
new file mode 100644
index 0000000..4c05134
--- /dev/null
+++ b/man3/libsimple_vpvallocn.3
@@ -0,0 +1,230 @@
+.TH LIBSIMPLE_VPVALLOCN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vpvallocn \- allocate memory with page size alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vpvallocn(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envpvallocn(int \fIstatus\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evpvallocn(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_pvallocn(size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enpvallocn(int \fIstatus\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_epvallocn(size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vpvallocn
+# define vpvallocn libsimple_vpvallocn
+#endif
+#ifndef envpvallocn
+# define envpvallocn libsimple_envpvallocn
+#endif
+#ifndef evpvallocn
+# define evpvallocn libsimple_evpvallocn
+#endif
+#ifndef pvallocn
+# define pvallocn libsimple_pvallocn
+#endif
+#ifndef enpvallocn
+# define enpvallocn libsimple_enpvallocn
+#endif
+#ifndef epvallocn
+# define epvallocn libsimple_epvallocn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_pvallocn (),
+.BR libsimple_enpvallocn (),
+and
+.BR libsimple_epvallocn ()
+functions allocate
+.I N
+uninitialised bytes, rounded up to the next multiple
+of the page size, to the heap and return a
+pointer with an alignment of the page size
+to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enpvallocn ()
+and
+.BR libsimple_epvallocn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enpvallocn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_epvallocn ()
+function is used.
+.PP
+The
+.BR libsimple_vpvallocn (),
+.BR libsimple_envpvallocn (),
+and
+.BR libsimple_evpvallocn ()
+functions are versions of the
+.BR libsimple_pvallocn (),
+.BR libsimple_enpvallocn (),
+and
+.BR libsimple_epvallocn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vpvallocn (),
+.BR libsimple_envpvallocn (),
+.BR libsimple_evpvallocn (),
+.BR libsimple_pvallocn (),
+.BR libsimple_enpvallocn (),
+and
+.BR libsimple_epvallocn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vpvallocn ()
+and
+.BR libsimple_pvallocn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envpvallocn (),
+.BR libsimple_evpvallocn (),
+.BR libsimple_enpvallocn (),
+and
+.BR libsimple_epvallocn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vpvallocn (),
+.BR libsimple_pvallocn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envpvallocn (),
+.BR libsimple_evpvallocn (),
+.BR libsimple_enpvallocn (),
+and
+.BR libsimple_epvallocn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vpvallocn (),
+.br
+.BR libsimple_envpvallocn (),
+.br
+.BR libsimple_evpvallocn (),
+.br
+.BR libsimple_pvallocn (),
+.br
+.BR libsimple_enpvallocn (),
+.br
+.BR libsimple_epvallocn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vpvallocn (),
+.br
+.BR libsimple_envpvallocn (),
+.br
+.BR libsimple_evpvallocn (),
+.br
+.BR libsimple_pvallocn (),
+.br
+.BR libsimple_enpvallocn (),
+.br
+.BR libsimple_epvallocn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vpvallocn (),
+.br
+.BR libsimple_envpvallocn (),
+.br
+.BR libsimple_evpvallocn (),
+.br
+.BR libsimple_pvallocn (),
+.br
+.BR libsimple_enpvallocn (),
+.br
+.BR libsimple_epvallocn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+The GNU implementation of
+.BR pvalloc (3)
+is \(dqMT-Unsafe init\(dq.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_vpvalloczn.3 b/man3/libsimple_vpvalloczn.3
new file mode 100644
index 0000000..be9f1c5
--- /dev/null
+++ b/man3/libsimple_vpvalloczn.3
@@ -0,0 +1,232 @@
+.TH LIBSIMPLE_VPVALLOCZN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vpvalloczn \- allocate optionally initialised memory with page size alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vpvalloczn(int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envpvalloczn(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evpvalloczn(int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_pvalloczn(int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enpvalloczn(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_epvalloczn(int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vpvalloczn
+# define vpvalloczn libsimple_vpvalloczn
+#endif
+#ifndef envpvalloczn
+# define envpvalloczn libsimple_envpvalloczn
+#endif
+#ifndef evpvalloczn
+# define evpvalloczn libsimple_evpvalloczn
+#endif
+#ifndef pvalloczn
+# define pvalloczn libsimple_pvalloczn
+#endif
+#ifndef enpvalloczn
+# define enpvalloczn libsimple_enpvalloczn
+#endif
+#ifndef epvalloczn
+# define epvalloczn libsimple_epvalloczn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_pvalloczn (),
+.BR libsimple_enpvalloczn (),
+and
+.BR libsimple_epvalloczn ()
+functions allocate
+.I N
+bytes, rounded up to the next multiple of the page size,
+to the heap and return a pointer with an alignment of
+the page size to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The memory will be initialised
+with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enpvalloczn ()
+and
+.BR libsimple_epvalloczn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enpvalloczn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_epvalloczn ()
+function is used.
+.PP
+The
+.BR libsimple_vpvalloczn (),
+.BR libsimple_envpvalloczn (),
+and
+.BR libsimple_evpvalloczn ()
+functions are versions of the
+.BR libsimple_pvalloczn (),
+.BR libsimple_enpvalloczn (),
+and
+.BR libsimple_epvalloczn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vpvalloczn (),
+.BR libsimple_envpvalloczn (),
+.BR libsimple_evpvalloczn (),
+.BR libsimple_pvalloczn (),
+.BR libsimple_enpvalloczn (),
+and
+.BR libsimple_epvalloczn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vpvalloczn ()
+and
+.BR libsimple_pvalloczn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envpvalloczn (),
+.BR libsimple_evpvalloczn (),
+.BR libsimple_enpvalloczn (),
+and
+.BR libsimple_epvalloczn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vpvalloczn (),
+.BR libsimple_pvalloczn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envpvalloczn (),
+.BR libsimple_evpvalloczn (),
+.BR libsimple_enpvalloczn (),
+and
+.BR libsimple_epvalloczn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vpvalloczn (),
+.br
+.BR libsimple_envpvalloczn (),
+.br
+.BR libsimple_evpvalloczn (),
+.br
+.BR libsimple_pvalloczn (),
+.br
+.BR libsimple_enpvalloczn (),
+.br
+.BR libsimple_epvalloczn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vpvalloczn (),
+.br
+.BR libsimple_envpvalloczn (),
+.br
+.BR libsimple_evpvalloczn (),
+.br
+.BR libsimple_pvalloczn (),
+.br
+.BR libsimple_enpvalloczn (),
+.br
+.BR libsimple_epvalloczn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vpvalloczn (),
+.br
+.BR libsimple_envpvalloczn (),
+.br
+.BR libsimple_evpvalloczn (),
+.br
+.BR libsimple_pvalloczn (),
+.br
+.BR libsimple_enpvalloczn (),
+.br
+.BR libsimple_epvalloczn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+The GNU implementation of
+.BR pvalloc (3)
+is \(dqMT-Unsafe init\(dq.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_vreallocn.3 b/man3/libsimple_vreallocn.3
new file mode 100644
index 0000000..2f61307
--- /dev/null
+++ b/man3/libsimple_vreallocn.3
@@ -0,0 +1,243 @@
+.TH LIBSIMPLE_VREALLOCN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vreallocn \- reallocate memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_vreallocn(void *\fIptr\fP, size_t \fIn\fP, va_list \fIap\fP);
+void *libsimple_envreallocn(int \fIstatus\fP, void *\fIptr\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evreallocn(void *\fIptr\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_reallocn(void *\fIptr\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_enreallocn(int \fIstatus\fP, void *\fIptr\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_ereallocn(void *\fIptr\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vreallocn
+# define vreallocn libsimple_vreallocn
+#endif
+#ifndef envreallocn
+# define envreallocn libsimple_envreallocn
+#endif
+#ifndef evreallocn
+# define evreallocn libsimple_evreallocn
+#endif
+#ifndef reallocn
+# define reallocn libsimple_reallocn
+#endif
+#ifndef enreallocn
+# define enreallocn libsimple_enreallocn
+#endif
+#ifndef ereallocn
+# define ereallocn libsimple_ereallocn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_reallocn (),
+.BR libsimple_enreallocn (),
+and
+.BR libsimple_ereallocn ()
+functions are wrappers for the
+.BR realloc (3)
+function, they reallocate memory allocated on
+the heap and return the older pointer ot a new
+pointer with the alignment of
+.I alignof(max_align_t)
+to the allocated memory of
+.I N
+bytes, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The returned pointer will contain the
+same content as
+.IR ptr ,
+but truncated to
+.I N
+bytes if it is smaller or with the new bytes
+unitialised if it is larger. If a new pointer
+is returned, rather than
+.IR ptr ,
+.I ptr
+is deallocated;
+.I ptr
+is not deallocated on failure. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_enreallocn ()
+and
+.BR libsimple_ereallocn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_enreallocn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_ereallocn ()
+function is used.
+.PP
+The
+.BR libsimple_vreallocn (),
+.BR libsimple_envreallocn (),
+and
+.BR libsimple_evreallocn ()
+functions are versions of the
+.BR libsimple_reallocn (),
+.BR libsimple_enreallocn (),
+and
+.BR libsimple_ereallocn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vreallocn (),
+.BR libsimple_envreallocn (),
+.BR libsimple_evreallocn (),
+.BR libsimple_reallocn (),
+.BR libsimple_enreallocn (),
+and
+.BR libsimple_ereallocn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vreallocn ()
+and
+.BR libsimple_reallocn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envreallocn (),
+.BR libsimple_evreallocn (),
+.BR libsimple_enreallocn (),
+and
+.BR libsimple_ereallocn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vreallocn (),
+.BR libsimple_reallocn ()
+function will fail for the reasons specified for the
+.BR realloc (3)
+function, and if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.PP
+The
+.BR libsimple_envreallocn (),
+.BR libsimple_evreallocn (),
+.BR libsimple_enreallocn (),
+and
+.BR libsimple_ereallocn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vreallocn (),
+.br
+.BR libsimple_envreallocn (),
+.br
+.BR libsimple_evreallocn (),
+.br
+.BR libsimple_reallocn (),
+.br
+.BR libsimple_enreallocn (),
+.br
+.BR libsimple_ereallocn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vreallocn (),
+.br
+.BR libsimple_envreallocn (),
+.br
+.BR libsimple_evreallocn (),
+.br
+.BR libsimple_reallocn (),
+.br
+.BR libsimple_enreallocn (),
+.br
+.BR libsimple_ereallocn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vreallocn (),
+.br
+.BR libsimple_envreallocn (),
+.br
+.BR libsimple_evreallocn (),
+.br
+.BR libsimple_reallocn (),
+.br
+.BR libsimple_enreallocn (),
+.br
+.BR libsimple_ereallocn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3),
+.BR malloc (3)
diff --git a/man3/libsimple_vvallocn.3 b/man3/libsimple_vvallocn.3
new file mode 100644
index 0000000..e21d37b
--- /dev/null
+++ b/man3/libsimple_vvallocn.3
@@ -0,0 +1,229 @@
+.TH LIBSIMPLE_VVALLOCN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vvallocn \- allocate memory with page size alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vvallocn(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envvallocn(int \fIstatus\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evvallocn(size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_vallocn(size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_envallocn(int \fIstatus\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_evallocn(size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vvallocn
+# define vvallocn libsimple_vvallocn
+#endif
+#ifndef envvallocn
+# define envvallocn libsimple_envvallocn
+#endif
+#ifndef evvallocn
+# define evvallocn libsimple_evvallocn
+#endif
+#ifndef vallocn
+# define vallocn libsimple_vallocn
+#endif
+#ifndef envallocn
+# define envallocn libsimple_envallocn
+#endif
+#ifndef evallocn
+# define evallocn libsimple_evallocn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_vallocn (),
+.BR libsimple_envallocn (),
+and
+.BR libsimple_evallocn ()
+functions allocate
+.I N
+uninitialised bytes to the heap and return a
+pointer with an alignment of the page size
+to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_envallocn ()
+and
+.BR libsimple_evallocn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_envallocn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_evallocn ()
+function is used.
+.PP
+The
+.BR libsimple_vvallocn (),
+.BR libsimple_envvallocn (),
+and
+.BR libsimple_evvallocn ()
+functions are versions of the
+.BR libsimple_vallocn (),
+.BR libsimple_envallocn (),
+and
+.BR libsimple_evallocn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vvallocn (),
+.BR libsimple_envvallocn (),
+.BR libsimple_evvallocn (),
+.BR libsimple_vallocn (),
+.BR libsimple_envallocn (),
+and
+.BR libsimple_evallocn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vvallocn ()
+and
+.BR libsimple_vallocn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envvallocn (),
+.BR libsimple_evvallocn (),
+.BR libsimple_envallocn (),
+and
+.BR libsimple_evallocn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vvallocn (),
+.BR libsimple_vallocn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envvallocn (),
+.BR libsimple_evvallocn (),
+.BR libsimple_envallocn (),
+and
+.BR libsimple_evallocn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vvallocn (),
+.br
+.BR libsimple_envvallocn (),
+.br
+.BR libsimple_evvallocn (),
+.br
+.BR libsimple_vallocn (),
+.br
+.BR libsimple_envallocn (),
+.br
+.BR libsimple_evallocn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vvallocn (),
+.br
+.BR libsimple_envvallocn (),
+.br
+.BR libsimple_evvallocn (),
+.br
+.BR libsimple_vallocn (),
+.br
+.BR libsimple_envallocn (),
+.br
+.BR libsimple_evallocn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vvallocn (),
+.br
+.BR libsimple_envvallocn (),
+.br
+.BR libsimple_evvallocn (),
+.br
+.BR libsimple_vallocn (),
+.br
+.BR libsimple_envallocn (),
+.br
+.BR libsimple_evallocn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+The GNU implementation of
+.BR valloc (3)
+is \(dqMT-Unsafe init\(dq.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvalloczn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_vvalloczn.3 b/man3/libsimple_vvalloczn.3
new file mode 100644
index 0000000..1b7a8e0
--- /dev/null
+++ b/man3/libsimple_vvalloczn.3
@@ -0,0 +1,232 @@
+.TH LIBSIMPLE_VVALLOCZN 3 2018-11-03 libsimple
+.SH NAME
+libsimple_vvalloczn \- allocate optionally initialised memory with page size alignment
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_vvalloczn(int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_envvalloczn(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_evvalloczn(int \fIclear\fP, size_t \fIn\fP, va_list \fIap\fP);
+static inline void *libsimple_valloczn(int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_envalloczn(int \fIstatus\fP, int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+static inline void *libsimple_evalloczn(int \fIclear\fP, size_t \fIn\fP, ..., /* (size_t)0 */);
+
+#ifndef vvalloczn
+# define vvalloczn libsimple_vvalloczn
+#endif
+#ifndef envvalloczn
+# define envvalloczn libsimple_envvalloczn
+#endif
+#ifndef evvalloczn
+# define evvalloczn libsimple_evvalloczn
+#endif
+#ifndef valloczn
+# define valloczn libsimple_valloczn
+#endif
+#ifndef envalloczn
+# define envalloczn libsimple_envalloczn
+#endif
+#ifndef evalloczn
+# define evalloczn libsimple_evalloczn
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_valloczn (),
+.BR libsimple_envalloczn (),
+and
+.BR libsimple_evalloczn ()
+functions allocate
+.I N
+bytes to the heap and return a pointer with an
+alignment of the page size
+to the allocated memory, where
+.I N
+is the product of
+.I n
+and all following arguments (which should have the type
+.BR size_t )
+up to the first 0;
+.I n
+must not be 0. The memory will be initialised
+with zeroes if
+.I clear
+is a non-zero value. The function
+.BR free (3)
+shall be called with the returned pointer as
+input when the allocated memory is no longer needed.
+.PP
+The
+.BR libsimple_envalloczn ()
+and
+.BR libsimple_evalloczn ()
+functions will terminate the process if the memory
+cannot be allocated, by calling the
+.BR libsimple_enprintf ()
+and
+.BR libsimple_eprintf ()
+functions, respectively.
+On failure, the process's exit value will be
+.I status
+if the
+.BR libsimple_envalloczn ()
+function is used or
+.IR libsimple_default_failure_exit (3)
+if the
+.BR libsimple_evalloczn ()
+function is used.
+.PP
+The
+.BR libsimple_vvalloczn (),
+.BR libsimple_envvalloczn (),
+and
+.BR libsimple_evvalloczn ()
+functions are versions of the
+.BR libsimple_valloczn (),
+.BR libsimple_envalloczn (),
+and
+.BR libsimple_evalloczn (),
+respectively, that use
+.B va_list
+instead of variadic arguments.
+.SH RETURN VALUE
+The
+.BR libsimple_vvalloczn (),
+.BR libsimple_envvalloczn (),
+.BR libsimple_evvalloczn (),
+.BR libsimple_valloczn (),
+.BR libsimple_envalloczn (),
+and
+.BR libsimple_evalloczn ()
+functions return a pointer to the allocated memory
+upon success completion; otherwise the
+.BR libsimple_vvalloczn ()
+and
+.BR libsimple_valloczn ()
+functions return
+.B NULL
+and set
+.I errno
+it indicate the error, and the
+.BR libsimple_envvalloczn (),
+.BR libsimple_evvalloczn (),
+.BR libsimple_envalloczn (),
+and
+.BR libsimple_evalloczn ()
+functions terminated the process.
+.SH ERRORS
+The
+.BR libsimple_vvalloczn (),
+.BR libsimple_valloczn ()
+function will fail if:
+.TP
+.B EINVAL
+.I n
+is 0.
+.TP
+.B ENOMEM
+Enough memory could not be allocated.
+.PP
+The
+.BR libsimple_envvalloczn (),
+.BR libsimple_evvalloczn (),
+.BR libsimple_envalloczn (),
+and
+.BR libsimple_evalloczn ()
+functions will terminate the process on failure.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vvalloczn (),
+.br
+.BR libsimple_envvalloczn (),
+.br
+.BR libsimple_evvalloczn (),
+.br
+.BR libsimple_valloczn (),
+.br
+.BR libsimple_envalloczn (),
+.br
+.BR libsimple_evalloczn ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_vvalloczn (),
+.br
+.BR libsimple_envvalloczn (),
+.br
+.BR libsimple_evvalloczn (),
+.br
+.BR libsimple_valloczn (),
+.br
+.BR libsimple_envalloczn (),
+.br
+.BR libsimple_evalloczn ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vvalloczn (),
+.br
+.BR libsimple_envvalloczn (),
+.br
+.BR libsimple_evvalloczn (),
+.br
+.BR libsimple_valloczn (),
+.br
+.BR libsimple_envalloczn (),
+.br
+.BR libsimple_evalloczn ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+The GNU implementation of
+.BR valloc (3)
+is \(dqMT-Unsafe init\(dq.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_enmalloc (3),
+.BR libsimple_mallocz (3),
+.BR libsimple_vmallocn (3),
+.BR libsimple_vmalloczn (3),
+.BR libsimple_encalloc (3),
+.BR libsimple_vcallocn (3),
+.BR libsimple_enrealloc (3),
+.BR libsimple_vreallocn (3),
+.BR libsimple_memalign (3),
+.BR libsimple_memalignz (3),
+.BR libsimple_vmemalignn (3),
+.BR libsimple_vmemalignzn (3),
+.BR libsimple_enposix_memalign (3),
+.BR libsimple_posix_memalignz (3),
+.BR libsimple_vposix_memalignn (3),
+.BR libsimple_vposix_memalignzn (3),
+.BR libsimple_enaligned_alloc (3),
+.BR libsimple_aligned_allocz (3),
+.BR libsimple_valigned_allocn (3),
+.BR libsimple_valigned_alloczn (3),
+.BR libsimple_pvalloc (3),
+.BR libsimple_pvallocz (3),
+.BR libsimple_vpvallocn (3),
+.BR libsimple_vpvalloczn (3),
+.BR libsimple_valloc (3),
+.BR libsimple_vallocz (3),
+.BR libsimple_vvallocn (3),
+.BR libsimple_vmemalloc (3),
+.BR libsimple_varrayalloc (3)
diff --git a/man3/libsimple_vweprintf.3 b/man3/libsimple_vweprintf.3
new file mode 100644
index 0000000..06d339d
--- /dev/null
+++ b/man3/libsimple_vweprintf.3
@@ -0,0 +1,221 @@
+.TH LIBSIMPLE_VWEPRINTF 3 2018-11-06 libsimple
+.SH NAME
+libsimple_vweprintf \- print an error message
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+extern int libsimple_default_failure_exit;
+extern void (*libsimple_eprint_preprint)(void);
+extern void (*libsimple_eprint_postprint)(void);
+
+void libsimple_vweprintf(const char *\fIfmt\fP, va_list \fIap\fP);
+static inline void libsimple_weprintf(const char *\fIfmt\fP, ...);
+static inline void libsimple_venprintf(int \fIstatus\fP, const char *\fIfmt\fP, va_list \fIap\fP);
+static inline void libsimple_enprintf(int \fIstatus\fP, const char *\fIfmt\fP, ...);
+static inline void libsimple_veprintf(const char *\fIfmt\fP, va_list \fIap\fP);
+static inline void libsimple_eprintf(const char *\fIfmt\fP, ...);
+
+#ifndef vweprintf
+# define vweprintf libsimple_vweprintf
+#endif
+#ifndef weprintf
+# define weprintf libsimple_weprintf
+#endif
+#ifndef venprintf
+# define venprintf libsimple_venprintf
+#endif
+#ifndef enprintf
+# define enprintf libsimple_enprintf
+#endif
+#ifndef veprintf
+# define veprintf libsimple_veprintf
+#endif
+#ifndef eprintf
+# define eprintf libsimple_eprintf
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_vweprintf ()
+function is a version of the
+.BR printf (3)
+function. It prints the string to the standard error
+(rather than the standard output), and attempts to
+avoid output mangling in case multiple processes are
+writting. Additionally, the output is suffixed with
+.nf
+
+ \fB\(dq %s\en\(dq, \fP<\fIerror message\fP>
+
+.fi
+if
+.I fmt
+ends with a colon
+.RB ( : ),
+otherwise it is suffixed with a <newline> if
+.I fmt
+does not end with a <newline>; otherwise, if
+.I fmt
+is the empty string, the output is suffixed with
+.nf
+
+ \fB\(dq%s\en\(dq, \fP<\fIerror message\fP>
+
+.fi
+Furthermore, if
+.I argv0
+.RB ( "char *" )
+is non-null and
+.I fmt
+does not start with
+.RB \(dq "usage :" \(dq,
+the output is preffixed with
+.nf
+
+ \fB\(dq%s: \(dq, \fP\fIargv0\fP
+.fi
+.PP
+The
+.BR libsimple_weprintf ()
+function is a version of the
+.BR libsimple_vweprintf ()
+function that uses variadic arguments instead of
+.BR va_list .
+.PP
+The
+.BR libsimple_venprintf ()
+and
+.BR libsimple_enprintf ()
+functions are versions of the
+.BR libsimple_vweprintf ()
+and
+.BR libsimple_weprintf ()
+functions that terminate the process by calling
+.BR exit (3),
+the exit value of the process will be
+.IR status .
+.PP
+The
+.BR libsimple_veprintf ()
+and
+.BR libsimple_eprintf ()
+functions are versions of the
+.BR libsimple_vweprintf ()
+and
+.BR libsimple_weprintf ()
+functions that terminate the process by calling
+.BR exit (3),
+the exit value of the process will be
+.IR libsimple_default_failure_exit (3),
+which is 1 by default.
+.PP
+The
+.BR libsimple_vweprintf (),
+.BR libsimple_weprintf (),
+.BR libsimple_venprintf (),
+.BR libsimple_enprintf (),
+.BR libsimple_veprintf (),
+and
+.BR libsimple_eprintf ()
+functions call
+.I libsimple_eprint_preprint
+unless it is
+.B NULL
+before they print the message, after printing
+the message they call
+.I libsimple_eprint_postprint
+unless it is
+.BR NULL .
+The
+.I libsimple_eprint_preprint
+and
+.I libsimple_eprint_postprint
+variables are
+.B NULL
+byte default.
+.I errno
+may have a different value from when the
+.BR libsimple_vweprintf (),
+.BR libsimple_weprintf (),
+.BR libsimple_venprintf (),
+.BR libsimple_enprintf (),
+.BR libsimple_veprintf (),
+or
+.BR libsimple_eprintf ()
+function called when
+.I libsimple_eprint_preprint
+or
+.I libsimple_eprint_postprint
+is called.
+.SH RETURN VALUE
+None.
+.SH ERRORS
+None.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_vweprintf (),
+.br
+.BR libsimple_weprintf (),
+.br
+.BR libsimple_venprintf (),
+.br
+.BR libsimple_enprintf (),
+.br
+.BR libsimple_veprintf (),
+.br
+.BR libsimple_eprintf ()
+T} Thread safety MT-Unsafe race:strerror
+T{
+.BR libsimple_vweprintf (),
+.br
+.BR libsimple_weprintf (),
+.br
+.BR libsimple_venprintf (),
+.br
+.BR libsimple_enprintf (),
+.br
+.BR libsimple_veprintf (),
+.br
+.BR libsimple_eprintf ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_vweprintf (),
+.br
+.BR libsimple_weprintf (),
+.br
+.BR libsimple_venprintf (),
+.br
+.BR libsimple_enprintf (),
+.br
+.BR libsimple_veprintf (),
+.br
+.BR libsimple_eprintf ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR perror (3),
+.BR fprintf (3),
+.BR exit (3)
diff --git a/man3/libsimple_weprintf.3 b/man3/libsimple_weprintf.3
new file mode 120000
index 0000000..39ff456
--- /dev/null
+++ b/man3/libsimple_weprintf.3
@@ -0,0 +1 @@
+libsimple_vweprintf.3 \ No newline at end of file
diff --git a/man3/mallocn.3libsimple b/man3/mallocn.3libsimple
new file mode 120000
index 0000000..23348f2
--- /dev/null
+++ b/man3/mallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_mallocn.3 \ No newline at end of file
diff --git a/man3/mallocz.3libsimple b/man3/mallocz.3libsimple
new file mode 120000
index 0000000..cfa0ffc
--- /dev/null
+++ b/man3/mallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_mallocz.3 \ No newline at end of file
diff --git a/man3/malloczn.3libsimple b/man3/malloczn.3libsimple
new file mode 120000
index 0000000..eb274c9
--- /dev/null
+++ b/man3/malloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_malloczn.3 \ No newline at end of file
diff --git a/man3/memalign.3libsimple b/man3/memalign.3libsimple
new file mode 120000
index 0000000..e56731a
--- /dev/null
+++ b/man3/memalign.3libsimple
@@ -0,0 +1 @@
+libsimple_memalign.3 \ No newline at end of file
diff --git a/man3/memalignn.3libsimple b/man3/memalignn.3libsimple
new file mode 120000
index 0000000..411c2eb
--- /dev/null
+++ b/man3/memalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_memalignn.3 \ No newline at end of file
diff --git a/man3/memalignz.3libsimple b/man3/memalignz.3libsimple
new file mode 120000
index 0000000..e468464
--- /dev/null
+++ b/man3/memalignz.3libsimple
@@ -0,0 +1 @@
+libsimple_memalignz.3 \ No newline at end of file
diff --git a/man3/memalignzn.3libsimple b/man3/memalignzn.3libsimple
new file mode 120000
index 0000000..24dc74d
--- /dev/null
+++ b/man3/memalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_memalignzn.3 \ No newline at end of file
diff --git a/man3/memcasechr.3libsimple b/man3/memcasechr.3libsimple
new file mode 120000
index 0000000..e7d10b2
--- /dev/null
+++ b/man3/memcasechr.3libsimple
@@ -0,0 +1 @@
+libsimple_memcasechr.3 \ No newline at end of file
diff --git a/man3/memcasecmp.3libsimple b/man3/memcasecmp.3libsimple
new file mode 120000
index 0000000..275bff4
--- /dev/null
+++ b/man3/memcasecmp.3libsimple
@@ -0,0 +1 @@
+libsimple_memcasecmp.3 \ No newline at end of file
diff --git a/man3/memcaseends.3libsimple b/man3/memcaseends.3libsimple
new file mode 120000
index 0000000..4068e05
--- /dev/null
+++ b/man3/memcaseends.3libsimple
@@ -0,0 +1 @@
+libsimple_memcaseends.3 \ No newline at end of file
diff --git a/man3/memcaseeq.3libsimple b/man3/memcaseeq.3libsimple
new file mode 120000
index 0000000..0ec4ac0
--- /dev/null
+++ b/man3/memcaseeq.3libsimple
@@ -0,0 +1 @@
+libsimple_memcaseeq.3 \ No newline at end of file
diff --git a/man3/memcaseeqlen.3libsimple b/man3/memcaseeqlen.3libsimple
new file mode 120000
index 0000000..5fa4167
--- /dev/null
+++ b/man3/memcaseeqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_memcaseeqlen.3 \ No newline at end of file
diff --git a/man3/memcasemem.3libsimple b/man3/memcasemem.3libsimple
new file mode 120000
index 0000000..a9c885d
--- /dev/null
+++ b/man3/memcasemem.3libsimple
@@ -0,0 +1 @@
+libsimple_memcasemem.3 \ No newline at end of file
diff --git a/man3/memcasestarts.3libsimple b/man3/memcasestarts.3libsimple
new file mode 120000
index 0000000..c450aff
--- /dev/null
+++ b/man3/memcasestarts.3libsimple
@@ -0,0 +1 @@
+libsimple_memcasestarts.3 \ No newline at end of file
diff --git a/man3/memdup.3libsimple b/man3/memdup.3libsimple
new file mode 120000
index 0000000..ff9fc97
--- /dev/null
+++ b/man3/memdup.3libsimple
@@ -0,0 +1 @@
+libsimple_memdup.3 \ No newline at end of file
diff --git a/man3/memdupa.3libsimple b/man3/memdupa.3libsimple
new file mode 120000
index 0000000..9b957e5
--- /dev/null
+++ b/man3/memdupa.3libsimple
@@ -0,0 +1 @@
+libsimple_memdupa.3 \ No newline at end of file
diff --git a/man3/memelem.3libsimple b/man3/memelem.3libsimple
new file mode 120000
index 0000000..e1f66cf
--- /dev/null
+++ b/man3/memelem.3libsimple
@@ -0,0 +1 @@
+libsimple_memelem.3 \ No newline at end of file
diff --git a/man3/memends.3libsimple b/man3/memends.3libsimple
new file mode 120000
index 0000000..5ab92b7
--- /dev/null
+++ b/man3/memends.3libsimple
@@ -0,0 +1 @@
+libsimple_memends.3 \ No newline at end of file
diff --git a/man3/memeq.3libsimple b/man3/memeq.3libsimple
new file mode 120000
index 0000000..6d3ecb3
--- /dev/null
+++ b/man3/memeq.3libsimple
@@ -0,0 +1 @@
+libsimple_memeq.3 \ No newline at end of file
diff --git a/man3/memeqlen.3libsimple b/man3/memeqlen.3libsimple
new file mode 120000
index 0000000..73567aa
--- /dev/null
+++ b/man3/memeqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_memeqlen.3 \ No newline at end of file
diff --git a/man3/memmem.3libsimple b/man3/memmem.3libsimple
new file mode 120000
index 0000000..81f1d83
--- /dev/null
+++ b/man3/memmem.3libsimple
@@ -0,0 +1 @@
+libsimple_memmem.3 \ No newline at end of file
diff --git a/man3/mempcpy.3libsimple b/man3/mempcpy.3libsimple
new file mode 120000
index 0000000..3ae360f
--- /dev/null
+++ b/man3/mempcpy.3libsimple
@@ -0,0 +1 @@
+libsimple_mempcpy.3 \ No newline at end of file
diff --git a/man3/mempset.3libsimple b/man3/mempset.3libsimple
new file mode 120000
index 0000000..619340a
--- /dev/null
+++ b/man3/mempset.3libsimple
@@ -0,0 +1 @@
+libsimple_mempset.3 \ No newline at end of file
diff --git a/man3/mempsetelem.3libsimple b/man3/mempsetelem.3libsimple
new file mode 120000
index 0000000..5c79a07
--- /dev/null
+++ b/man3/mempsetelem.3libsimple
@@ -0,0 +1 @@
+libsimple_mempsetelem.3 \ No newline at end of file
diff --git a/man3/memrcasechr.3libsimple b/man3/memrcasechr.3libsimple
new file mode 120000
index 0000000..4337383
--- /dev/null
+++ b/man3/memrcasechr.3libsimple
@@ -0,0 +1 @@
+libsimple_memrcasechr.3 \ No newline at end of file
diff --git a/man3/memrcaseeqlen.3libsimple b/man3/memrcaseeqlen.3libsimple
new file mode 120000
index 0000000..5f451d1
--- /dev/null
+++ b/man3/memrcaseeqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_memrcaseeqlen.3 \ No newline at end of file
diff --git a/man3/memrcasemem.3libsimple b/man3/memrcasemem.3libsimple
new file mode 120000
index 0000000..6b52d2c
--- /dev/null
+++ b/man3/memrcasemem.3libsimple
@@ -0,0 +1 @@
+libsimple_memrcasemem.3 \ No newline at end of file
diff --git a/man3/memrchr.3libsimple b/man3/memrchr.3libsimple
new file mode 120000
index 0000000..1dbd392
--- /dev/null
+++ b/man3/memrchr.3libsimple
@@ -0,0 +1 @@
+libsimple_memrchr.3 \ No newline at end of file
diff --git a/man3/memrelem.3libsimple b/man3/memrelem.3libsimple
new file mode 120000
index 0000000..6ca1a18
--- /dev/null
+++ b/man3/memrelem.3libsimple
@@ -0,0 +1 @@
+libsimple_memrelem.3 \ No newline at end of file
diff --git a/man3/memreqlen.3libsimple b/man3/memreqlen.3libsimple
new file mode 120000
index 0000000..fd637c4
--- /dev/null
+++ b/man3/memreqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_memreqlen.3 \ No newline at end of file
diff --git a/man3/memrmem.3libsimple b/man3/memrmem.3libsimple
new file mode 120000
index 0000000..ff9d6f4
--- /dev/null
+++ b/man3/memrmem.3libsimple
@@ -0,0 +1 @@
+libsimple_memrmem.3 \ No newline at end of file
diff --git a/man3/memsetelem.3libsimple b/man3/memsetelem.3libsimple
new file mode 120000
index 0000000..bd94192
--- /dev/null
+++ b/man3/memsetelem.3libsimple
@@ -0,0 +1 @@
+libsimple_memsetelem.3 \ No newline at end of file
diff --git a/man3/memstarts.3libsimple b/man3/memstarts.3libsimple
new file mode 120000
index 0000000..40f1024
--- /dev/null
+++ b/man3/memstarts.3libsimple
@@ -0,0 +1 @@
+libsimple_memstarts.3 \ No newline at end of file
diff --git a/man3/minimise_number_string.3libsimple b/man3/minimise_number_string.3libsimple
new file mode 120000
index 0000000..7d0d47c
--- /dev/null
+++ b/man3/minimise_number_string.3libsimple
@@ -0,0 +1 @@
+libsimple_minimise_number_string.3 \ No newline at end of file
diff --git a/man3/multimespec.3libsimple b/man3/multimespec.3libsimple
new file mode 120000
index 0000000..f5d0d9d
--- /dev/null
+++ b/man3/multimespec.3libsimple
@@ -0,0 +1 @@
+libsimple_multimespec.3 \ No newline at end of file
diff --git a/man3/multimeval.3libsimple b/man3/multimeval.3libsimple
new file mode 120000
index 0000000..ff93d2b
--- /dev/null
+++ b/man3/multimeval.3libsimple
@@ -0,0 +1 @@
+libsimple_multimeval.3 \ No newline at end of file
diff --git a/man3/posix_memalignn.3libsimple b/man3/posix_memalignn.3libsimple
new file mode 120000
index 0000000..6ec64f0
--- /dev/null
+++ b/man3/posix_memalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_posix_memalignn.3 \ No newline at end of file
diff --git a/man3/posix_memalignz.3libsimple b/man3/posix_memalignz.3libsimple
new file mode 120000
index 0000000..a8aecf3
--- /dev/null
+++ b/man3/posix_memalignz.3libsimple
@@ -0,0 +1 @@
+libsimple_posix_memalignz.3 \ No newline at end of file
diff --git a/man3/posix_memalignzn.3libsimple b/man3/posix_memalignzn.3libsimple
new file mode 120000
index 0000000..fbe1b5e
--- /dev/null
+++ b/man3/posix_memalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_posix_memalignzn.3 \ No newline at end of file
diff --git a/man3/putenvf.3libsimple b/man3/putenvf.3libsimple
new file mode 120000
index 0000000..c2a50ed
--- /dev/null
+++ b/man3/putenvf.3libsimple
@@ -0,0 +1 @@
+libsimple_putenvf.3 \ No newline at end of file
diff --git a/man3/pvalloc.3libsimple b/man3/pvalloc.3libsimple
new file mode 120000
index 0000000..d49ae25
--- /dev/null
+++ b/man3/pvalloc.3libsimple
@@ -0,0 +1 @@
+libsimple_pvalloc.3 \ No newline at end of file
diff --git a/man3/pvallocn.3libsimple b/man3/pvallocn.3libsimple
new file mode 120000
index 0000000..645a366
--- /dev/null
+++ b/man3/pvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_pvallocn.3 \ No newline at end of file
diff --git a/man3/pvallocz.3libsimple b/man3/pvallocz.3libsimple
new file mode 120000
index 0000000..e3c72f0
--- /dev/null
+++ b/man3/pvallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_pvallocz.3 \ No newline at end of file
diff --git a/man3/pvalloczn.3libsimple b/man3/pvalloczn.3libsimple
new file mode 120000
index 0000000..e94e13c
--- /dev/null
+++ b/man3/pvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_pvalloczn.3 \ No newline at end of file
diff --git a/man3/rawmemcasechr.3libsimple b/man3/rawmemcasechr.3libsimple
new file mode 120000
index 0000000..2379e2a
--- /dev/null
+++ b/man3/rawmemcasechr.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemcasechr.3 \ No newline at end of file
diff --git a/man3/rawmemchr.3libsimple b/man3/rawmemchr.3libsimple
new file mode 120000
index 0000000..5391310
--- /dev/null
+++ b/man3/rawmemchr.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemchr.3 \ No newline at end of file
diff --git a/man3/rawmemrcasechr.3libsimple b/man3/rawmemrcasechr.3libsimple
new file mode 120000
index 0000000..8fd4d5c
--- /dev/null
+++ b/man3/rawmemrcasechr.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemrcasechr.3 \ No newline at end of file
diff --git a/man3/rawmemrchr.3libsimple b/man3/rawmemrchr.3libsimple
new file mode 120000
index 0000000..b0c9553
--- /dev/null
+++ b/man3/rawmemrchr.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemrchr.3 \ No newline at end of file
diff --git a/man3/reallocn.3libsimple b/man3/reallocn.3libsimple
new file mode 120000
index 0000000..d80e531
--- /dev/null
+++ b/man3/reallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_reallocn.3 \ No newline at end of file
diff --git a/man3/strcasechr.3libsimple b/man3/strcasechr.3libsimple
new file mode 120000
index 0000000..719a07d
--- /dev/null
+++ b/man3/strcasechr.3libsimple
@@ -0,0 +1 @@
+libsimple_strcasechr.3 \ No newline at end of file
diff --git a/man3/strcasechrnul.3libsimple b/man3/strcasechrnul.3libsimple
new file mode 120000
index 0000000..ff1b0db
--- /dev/null
+++ b/man3/strcasechrnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strcasechrnul.3 \ No newline at end of file
diff --git a/man3/strcasecmpnul.3libsimple b/man3/strcasecmpnul.3libsimple
new file mode 120000
index 0000000..e356b28
--- /dev/null
+++ b/man3/strcasecmpnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strcasecmpnul.3 \ No newline at end of file
diff --git a/man3/strcaseends.3libsimple b/man3/strcaseends.3libsimple
new file mode 120000
index 0000000..c363f5d
--- /dev/null
+++ b/man3/strcaseends.3libsimple
@@ -0,0 +1 @@
+libsimple_strcaseends.3 \ No newline at end of file
diff --git a/man3/strcaseeq.3libsimple b/man3/strcaseeq.3libsimple
new file mode 120000
index 0000000..2f51780
--- /dev/null
+++ b/man3/strcaseeq.3libsimple
@@ -0,0 +1 @@
+libsimple_strcaseeq.3 \ No newline at end of file
diff --git a/man3/strcaseeqlen.3libsimple b/man3/strcaseeqlen.3libsimple
new file mode 120000
index 0000000..36f0971
--- /dev/null
+++ b/man3/strcaseeqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_strcaseeqlen.3 \ No newline at end of file
diff --git a/man3/strcaseeqnul.3libsimple b/man3/strcaseeqnul.3libsimple
new file mode 120000
index 0000000..902badb
--- /dev/null
+++ b/man3/strcaseeqnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strcaseeqnul.3 \ No newline at end of file
diff --git a/man3/strcasestarts.3libsimple b/man3/strcasestarts.3libsimple
new file mode 120000
index 0000000..c2619f3
--- /dev/null
+++ b/man3/strcasestarts.3libsimple
@@ -0,0 +1 @@
+libsimple_strcasestarts.3 \ No newline at end of file
diff --git a/man3/strcasestr.3libsimple b/man3/strcasestr.3libsimple
new file mode 120000
index 0000000..7ba4049
--- /dev/null
+++ b/man3/strcasestr.3libsimple
@@ -0,0 +1 @@
+libsimple_strcasestr.3 \ No newline at end of file
diff --git a/man3/strchrnul.3libsimple b/man3/strchrnul.3libsimple
new file mode 120000
index 0000000..78ebcea
--- /dev/null
+++ b/man3/strchrnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strchrnul.3 \ No newline at end of file
diff --git a/man3/strcmpnul.3libsimple b/man3/strcmpnul.3libsimple
new file mode 120000
index 0000000..4cb5905
--- /dev/null
+++ b/man3/strcmpnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strcmpnul.3 \ No newline at end of file
diff --git a/man3/strdupa.3libsimple b/man3/strdupa.3libsimple
new file mode 120000
index 0000000..17cc881
--- /dev/null
+++ b/man3/strdupa.3libsimple
@@ -0,0 +1 @@
+libsimple_strdupa.3 \ No newline at end of file
diff --git a/man3/strend.3libsimple b/man3/strend.3libsimple
new file mode 120000
index 0000000..0bf4a76
--- /dev/null
+++ b/man3/strend.3libsimple
@@ -0,0 +1 @@
+libsimple_strend.3 \ No newline at end of file
diff --git a/man3/strends.3libsimple b/man3/strends.3libsimple
new file mode 120000
index 0000000..21f71aa
--- /dev/null
+++ b/man3/strends.3libsimple
@@ -0,0 +1 @@
+libsimple_strends.3 \ No newline at end of file
diff --git a/man3/streq.3libsimple b/man3/streq.3libsimple
new file mode 120000
index 0000000..7ad81c1
--- /dev/null
+++ b/man3/streq.3libsimple
@@ -0,0 +1 @@
+libsimple_streq.3 \ No newline at end of file
diff --git a/man3/streqlen.3libsimple b/man3/streqlen.3libsimple
new file mode 120000
index 0000000..85b2736
--- /dev/null
+++ b/man3/streqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_streqlen.3 \ No newline at end of file
diff --git a/man3/streqnul.3libsimple b/man3/streqnul.3libsimple
new file mode 120000
index 0000000..4f3547a
--- /dev/null
+++ b/man3/streqnul.3libsimple
@@ -0,0 +1 @@
+libsimple_streqnul.3 \ No newline at end of file
diff --git a/man3/strisutf8.3libsimple b/man3/strisutf8.3libsimple
new file mode 120000
index 0000000..0f01521
--- /dev/null
+++ b/man3/strisutf8.3libsimple
@@ -0,0 +1 @@
+libsimple_strisutf8.3 \ No newline at end of file
diff --git a/man3/strncasechr.3libsimple b/man3/strncasechr.3libsimple
new file mode 120000
index 0000000..2d09610
--- /dev/null
+++ b/man3/strncasechr.3libsimple
@@ -0,0 +1 @@
+libsimple_strncasechr.3 \ No newline at end of file
diff --git a/man3/strncasechrnul.3libsimple b/man3/strncasechrnul.3libsimple
new file mode 120000
index 0000000..60448c9
--- /dev/null
+++ b/man3/strncasechrnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strncasechrnul.3 \ No newline at end of file
diff --git a/man3/strncasecmpnul.3libsimple b/man3/strncasecmpnul.3libsimple
new file mode 120000
index 0000000..a2ed681
--- /dev/null
+++ b/man3/strncasecmpnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strncasecmpnul.3 \ No newline at end of file
diff --git a/man3/strncaseends.3libsimple b/man3/strncaseends.3libsimple
new file mode 120000
index 0000000..8e45624
--- /dev/null
+++ b/man3/strncaseends.3libsimple
@@ -0,0 +1 @@
+libsimple_strncaseends.3 \ No newline at end of file
diff --git a/man3/strncaseeq.3libsimple b/man3/strncaseeq.3libsimple
new file mode 120000
index 0000000..f0ea42f
--- /dev/null
+++ b/man3/strncaseeq.3libsimple
@@ -0,0 +1 @@
+libsimple_strncaseeq.3 \ No newline at end of file
diff --git a/man3/strncaseeqlen.3libsimple b/man3/strncaseeqlen.3libsimple
new file mode 120000
index 0000000..18e46e0
--- /dev/null
+++ b/man3/strncaseeqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_strncaseeqlen.3 \ No newline at end of file
diff --git a/man3/strncaseeqnul.3libsimple b/man3/strncaseeqnul.3libsimple
new file mode 120000
index 0000000..3d50ddc
--- /dev/null
+++ b/man3/strncaseeqnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strncaseeqnul.3 \ No newline at end of file
diff --git a/man3/strncasestarts.3libsimple b/man3/strncasestarts.3libsimple
new file mode 120000
index 0000000..50f228e
--- /dev/null
+++ b/man3/strncasestarts.3libsimple
@@ -0,0 +1 @@
+libsimple_strncasestarts.3 \ No newline at end of file
diff --git a/man3/strncasestr.3libsimple b/man3/strncasestr.3libsimple
new file mode 120000
index 0000000..035c71a
--- /dev/null
+++ b/man3/strncasestr.3libsimple
@@ -0,0 +1 @@
+libsimple_strncasestr.3 \ No newline at end of file
diff --git a/man3/strnchr.3libsimple b/man3/strnchr.3libsimple
new file mode 120000
index 0000000..43c29bf
--- /dev/null
+++ b/man3/strnchr.3libsimple
@@ -0,0 +1 @@
+libsimple_strnchr.3 \ No newline at end of file
diff --git a/man3/strnchrnul.3libsimple b/man3/strnchrnul.3libsimple
new file mode 120000
index 0000000..60b8881
--- /dev/null
+++ b/man3/strnchrnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strnchrnul.3 \ No newline at end of file
diff --git a/man3/strncmpnul.3libsimple b/man3/strncmpnul.3libsimple
new file mode 120000
index 0000000..fa439bb
--- /dev/null
+++ b/man3/strncmpnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strncmpnul.3 \ No newline at end of file
diff --git a/man3/strndupa.3libsimple b/man3/strndupa.3libsimple
new file mode 120000
index 0000000..201bc24
--- /dev/null
+++ b/man3/strndupa.3libsimple
@@ -0,0 +1 @@
+libsimple_strndupa.3 \ No newline at end of file
diff --git a/man3/strnend.3libsimple b/man3/strnend.3libsimple
new file mode 120000
index 0000000..9f728bf
--- /dev/null
+++ b/man3/strnend.3libsimple
@@ -0,0 +1 @@
+libsimple_strnend.3 \ No newline at end of file
diff --git a/man3/strnends.3libsimple b/man3/strnends.3libsimple
new file mode 120000
index 0000000..a8a14ee
--- /dev/null
+++ b/man3/strnends.3libsimple
@@ -0,0 +1 @@
+libsimple_strnends.3 \ No newline at end of file
diff --git a/man3/strneq.3libsimple b/man3/strneq.3libsimple
new file mode 120000
index 0000000..5c125b0
--- /dev/null
+++ b/man3/strneq.3libsimple
@@ -0,0 +1 @@
+libsimple_strneq.3 \ No newline at end of file
diff --git a/man3/strneqlen.3libsimple b/man3/strneqlen.3libsimple
new file mode 120000
index 0000000..82589f6
--- /dev/null
+++ b/man3/strneqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_strneqlen.3 \ No newline at end of file
diff --git a/man3/strneqnul.3libsimple b/man3/strneqnul.3libsimple
new file mode 120000
index 0000000..d0141dc
--- /dev/null
+++ b/man3/strneqnul.3libsimple
@@ -0,0 +1 @@
+libsimple_strneqnul.3 \ No newline at end of file
diff --git a/man3/strnstarts.3libsimple b/man3/strnstarts.3libsimple
new file mode 120000
index 0000000..1e8f08a
--- /dev/null
+++ b/man3/strnstarts.3libsimple
@@ -0,0 +1 @@
+libsimple_strnstarts.3 \ No newline at end of file
diff --git a/man3/strnstr.3libsimple b/man3/strnstr.3libsimple
new file mode 120000
index 0000000..03b83b7
--- /dev/null
+++ b/man3/strnstr.3libsimple
@@ -0,0 +1 @@
+libsimple_strnstr.3 \ No newline at end of file
diff --git a/man3/strrcasechr.3libsimple b/man3/strrcasechr.3libsimple
new file mode 120000
index 0000000..c49c441
--- /dev/null
+++ b/man3/strrcasechr.3libsimple
@@ -0,0 +1 @@
+libsimple_strrcasechr.3 \ No newline at end of file
diff --git a/man3/strrcaseeqlen.3libsimple b/man3/strrcaseeqlen.3libsimple
new file mode 120000
index 0000000..698634c
--- /dev/null
+++ b/man3/strrcaseeqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_strrcaseeqlen.3 \ No newline at end of file
diff --git a/man3/strrcasestr.3libsimple b/man3/strrcasestr.3libsimple
new file mode 120000
index 0000000..7c5ce07
--- /dev/null
+++ b/man3/strrcasestr.3libsimple
@@ -0,0 +1 @@
+libsimple_strrcasestr.3 \ No newline at end of file
diff --git a/man3/strreqlen.3libsimple b/man3/strreqlen.3libsimple
new file mode 120000
index 0000000..0be1d93
--- /dev/null
+++ b/man3/strreqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_strreqlen.3 \ No newline at end of file
diff --git a/man3/strrncasechr.3libsimple b/man3/strrncasechr.3libsimple
new file mode 120000
index 0000000..6316f08
--- /dev/null
+++ b/man3/strrncasechr.3libsimple
@@ -0,0 +1 @@
+libsimple_strrncasechr.3 \ No newline at end of file
diff --git a/man3/strrncaseeqlen.3libsimple b/man3/strrncaseeqlen.3libsimple
new file mode 120000
index 0000000..28bc354
--- /dev/null
+++ b/man3/strrncaseeqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_strrncaseeqlen.3 \ No newline at end of file
diff --git a/man3/strrncasestr.3libsimple b/man3/strrncasestr.3libsimple
new file mode 120000
index 0000000..86107aa
--- /dev/null
+++ b/man3/strrncasestr.3libsimple
@@ -0,0 +1 @@
+libsimple_strrncasestr.3 \ No newline at end of file
diff --git a/man3/strrnchr.3libsimple b/man3/strrnchr.3libsimple
new file mode 120000
index 0000000..de1494a
--- /dev/null
+++ b/man3/strrnchr.3libsimple
@@ -0,0 +1 @@
+libsimple_strrnchr.3 \ No newline at end of file
diff --git a/man3/strrneqlen.3libsimple b/man3/strrneqlen.3libsimple
new file mode 120000
index 0000000..b255358
--- /dev/null
+++ b/man3/strrneqlen.3libsimple
@@ -0,0 +1 @@
+libsimple_strrneqlen.3 \ No newline at end of file
diff --git a/man3/strrnstr.3libsimple b/man3/strrnstr.3libsimple
new file mode 120000
index 0000000..d493079
--- /dev/null
+++ b/man3/strrnstr.3libsimple
@@ -0,0 +1 @@
+libsimple_strrnstr.3 \ No newline at end of file
diff --git a/man3/strrstr.3libsimple b/man3/strrstr.3libsimple
new file mode 120000
index 0000000..c9f34e7
--- /dev/null
+++ b/man3/strrstr.3libsimple
@@ -0,0 +1 @@
+libsimple_strrstr.3 \ No newline at end of file
diff --git a/man3/strstarts.3libsimple b/man3/strstarts.3libsimple
new file mode 120000
index 0000000..2b6b62f
--- /dev/null
+++ b/man3/strstarts.3libsimple
@@ -0,0 +1 @@
+libsimple_strstarts.3 \ No newline at end of file
diff --git a/man3/strtotimespec.3libsimple b/man3/strtotimespec.3libsimple
new file mode 120000
index 0000000..9bc7f8b
--- /dev/null
+++ b/man3/strtotimespec.3libsimple
@@ -0,0 +1 @@
+libsimple_strtotimespec.3 \ No newline at end of file
diff --git a/man3/strtotimeval.3libsimple b/man3/strtotimeval.3libsimple
new file mode 120000
index 0000000..21cc596
--- /dev/null
+++ b/man3/strtotimeval.3libsimple
@@ -0,0 +1 @@
+libsimple_strtotimeval.3 \ No newline at end of file
diff --git a/man3/sumtimespec.3libsimple b/man3/sumtimespec.3libsimple
new file mode 120000
index 0000000..2bfd9e9
--- /dev/null
+++ b/man3/sumtimespec.3libsimple
@@ -0,0 +1 @@
+libsimple_sumtimespec.3 \ No newline at end of file
diff --git a/man3/sumtimeval.3libsimple b/man3/sumtimeval.3libsimple
new file mode 120000
index 0000000..f4df894
--- /dev/null
+++ b/man3/sumtimeval.3libsimple
@@ -0,0 +1 @@
+libsimple_sumtimeval.3 \ No newline at end of file
diff --git a/man3/timespec2timeval.3libsimple b/man3/timespec2timeval.3libsimple
new file mode 120000
index 0000000..db76384
--- /dev/null
+++ b/man3/timespec2timeval.3libsimple
@@ -0,0 +1 @@
+libsimple_timespec2timeval.3 \ No newline at end of file
diff --git a/man3/timespectodouble.3libsimple b/man3/timespectodouble.3libsimple
new file mode 120000
index 0000000..dcb0a1c
--- /dev/null
+++ b/man3/timespectodouble.3libsimple
@@ -0,0 +1 @@
+libsimple_timespectodouble.3 \ No newline at end of file
diff --git a/man3/timespectostr.3libsimple b/man3/timespectostr.3libsimple
new file mode 120000
index 0000000..b8e0e0a
--- /dev/null
+++ b/man3/timespectostr.3libsimple
@@ -0,0 +1 @@
+libsimple_timespectostr.3 \ No newline at end of file
diff --git a/man3/timeval2timespec.3libsimple b/man3/timeval2timespec.3libsimple
new file mode 120000
index 0000000..ea39fdf
--- /dev/null
+++ b/man3/timeval2timespec.3libsimple
@@ -0,0 +1 @@
+libsimple_timeval2timespec.3 \ No newline at end of file
diff --git a/man3/timevaltodouble.3libsimple b/man3/timevaltodouble.3libsimple
new file mode 120000
index 0000000..87eeb49
--- /dev/null
+++ b/man3/timevaltodouble.3libsimple
@@ -0,0 +1 @@
+libsimple_timevaltodouble.3 \ No newline at end of file
diff --git a/man3/timevaltostr.3libsimple b/man3/timevaltostr.3libsimple
new file mode 120000
index 0000000..bab1bb3
--- /dev/null
+++ b/man3/timevaltostr.3libsimple
@@ -0,0 +1 @@
+libsimple_timevaltostr.3 \ No newline at end of file
diff --git a/man3/unlist.3libsimple b/man3/unlist.3libsimple
new file mode 120000
index 0000000..d075ee4
--- /dev/null
+++ b/man3/unlist.3libsimple
@@ -0,0 +1 @@
+libsimple_unlist.3 \ No newline at end of file
diff --git a/man3/valigned_allocn.3libsimple b/man3/valigned_allocn.3libsimple
new file mode 120000
index 0000000..d552701
--- /dev/null
+++ b/man3/valigned_allocn.3libsimple
@@ -0,0 +1 @@
+libsimple_valigned_allocn.3 \ No newline at end of file
diff --git a/man3/valigned_alloczn.3libsimple b/man3/valigned_alloczn.3libsimple
new file mode 120000
index 0000000..aac058b
--- /dev/null
+++ b/man3/valigned_alloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_valigned_alloczn.3 \ No newline at end of file
diff --git a/man3/valloc.3libsimple b/man3/valloc.3libsimple
new file mode 120000
index 0000000..5879c71
--- /dev/null
+++ b/man3/valloc.3libsimple
@@ -0,0 +1 @@
+libsimple_valloc.3 \ No newline at end of file
diff --git a/man3/vallocn.3libsimple b/man3/vallocn.3libsimple
new file mode 120000
index 0000000..56a5822
--- /dev/null
+++ b/man3/vallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_vallocn.3 \ No newline at end of file
diff --git a/man3/vallocz.3libsimple b/man3/vallocz.3libsimple
new file mode 120000
index 0000000..3a2dc96
--- /dev/null
+++ b/man3/vallocz.3libsimple
@@ -0,0 +1 @@
+libsimple_vallocz.3 \ No newline at end of file
diff --git a/man3/valloczn.3libsimple b/man3/valloczn.3libsimple
new file mode 120000
index 0000000..acae7d5
--- /dev/null
+++ b/man3/valloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_valloczn.3 \ No newline at end of file
diff --git a/man3/vasprintf.3libsimple b/man3/vasprintf.3libsimple
new file mode 120000
index 0000000..9456f72
--- /dev/null
+++ b/man3/vasprintf.3libsimple
@@ -0,0 +1 @@
+libsimple_vasprintf.3 \ No newline at end of file
diff --git a/man3/vasprintfa.3libsimple b/man3/vasprintfa.3libsimple
new file mode 120000
index 0000000..e792d7d
--- /dev/null
+++ b/man3/vasprintfa.3libsimple
@@ -0,0 +1 @@
+libsimple_vasprintfa.3 \ No newline at end of file
diff --git a/man3/vcallocn.3libsimple b/man3/vcallocn.3libsimple
new file mode 120000
index 0000000..bcc02ee
--- /dev/null
+++ b/man3/vcallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_vcallocn.3 \ No newline at end of file
diff --git a/man3/venprintf.3libsimple b/man3/venprintf.3libsimple
new file mode 120000
index 0000000..574bdd9
--- /dev/null
+++ b/man3/venprintf.3libsimple
@@ -0,0 +1 @@
+libsimple_venprintf.3 \ No newline at end of file
diff --git a/man3/veprintf.3libsimple b/man3/veprintf.3libsimple
new file mode 120000
index 0000000..3a87c2d
--- /dev/null
+++ b/man3/veprintf.3libsimple
@@ -0,0 +1 @@
+libsimple_veprintf.3 \ No newline at end of file
diff --git a/man3/vmallocn.3libsimple b/man3/vmallocn.3libsimple
new file mode 120000
index 0000000..6410741
--- /dev/null
+++ b/man3/vmallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_vmallocn.3 \ No newline at end of file
diff --git a/man3/vmalloczn.3libsimple b/man3/vmalloczn.3libsimple
new file mode 120000
index 0000000..5a271e0
--- /dev/null
+++ b/man3/vmalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_vmalloczn.3 \ No newline at end of file
diff --git a/man3/vmemalignn.3libsimple b/man3/vmemalignn.3libsimple
new file mode 120000
index 0000000..d9dcdfd
--- /dev/null
+++ b/man3/vmemalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_vmemalignn.3 \ No newline at end of file
diff --git a/man3/vmemalignzn.3libsimple b/man3/vmemalignzn.3libsimple
new file mode 120000
index 0000000..2faeae6
--- /dev/null
+++ b/man3/vmemalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_vmemalignzn.3 \ No newline at end of file
diff --git a/man3/vposix_memalignn.3libsimple b/man3/vposix_memalignn.3libsimple
new file mode 120000
index 0000000..7402678
--- /dev/null
+++ b/man3/vposix_memalignn.3libsimple
@@ -0,0 +1 @@
+libsimple_vposix_memalignn.3 \ No newline at end of file
diff --git a/man3/vposix_memalignzn.3libsimple b/man3/vposix_memalignzn.3libsimple
new file mode 120000
index 0000000..e47154f
--- /dev/null
+++ b/man3/vposix_memalignzn.3libsimple
@@ -0,0 +1 @@
+libsimple_vposix_memalignzn.3 \ No newline at end of file
diff --git a/man3/vputenvf.3libsimple b/man3/vputenvf.3libsimple
new file mode 120000
index 0000000..ce0929f
--- /dev/null
+++ b/man3/vputenvf.3libsimple
@@ -0,0 +1 @@
+libsimple_vputenvf.3 \ No newline at end of file
diff --git a/man3/vpvallocn.3libsimple b/man3/vpvallocn.3libsimple
new file mode 120000
index 0000000..a659d76
--- /dev/null
+++ b/man3/vpvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_vpvallocn.3 \ No newline at end of file
diff --git a/man3/vpvalloczn.3libsimple b/man3/vpvalloczn.3libsimple
new file mode 120000
index 0000000..c93e0ed
--- /dev/null
+++ b/man3/vpvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_vpvalloczn.3 \ No newline at end of file
diff --git a/man3/vreallocn.3libsimple b/man3/vreallocn.3libsimple
new file mode 120000
index 0000000..18a590e
--- /dev/null
+++ b/man3/vreallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_vreallocn.3 \ No newline at end of file
diff --git a/man3/vvallocn.3libsimple b/man3/vvallocn.3libsimple
new file mode 120000
index 0000000..b0804fe
--- /dev/null
+++ b/man3/vvallocn.3libsimple
@@ -0,0 +1 @@
+libsimple_vvallocn.3 \ No newline at end of file
diff --git a/man3/vvalloczn.3libsimple b/man3/vvalloczn.3libsimple
new file mode 120000
index 0000000..10be3d5
--- /dev/null
+++ b/man3/vvalloczn.3libsimple
@@ -0,0 +1 @@
+libsimple_vvalloczn.3 \ No newline at end of file
diff --git a/man3/vweprintf.3libsimple b/man3/vweprintf.3libsimple
new file mode 120000
index 0000000..39ff456
--- /dev/null
+++ b/man3/vweprintf.3libsimple
@@ -0,0 +1 @@
+libsimple_vweprintf.3 \ No newline at end of file
diff --git a/man3/weprintf.3libsimple b/man3/weprintf.3libsimple
new file mode 120000
index 0000000..071fbc2
--- /dev/null
+++ b/man3/weprintf.3libsimple
@@ -0,0 +1 @@
+libsimple_weprintf.3 \ No newline at end of file