| description | C99 single-header implementation of common libc extensions |
| last change | Mon, 18 May 2026 15:48:12 +0000 (11:48 -0400) |
| URL | git://git.datadissipation.net/single-header-libcext.git |
| https://git.datadissipation.net/single-header-libcext.git | |
| content tags |
A collection of portable, strict C99, single-header implementations of common libc extensions.
All functions are implemented as macros expanding to an internal function reference, this allows to use the headers with no meta build system - it compiles even if the extensions are already present, see How to on disabling this behaviour.
Include the header in every file needed as usual:
#include "<ext-func-name>.h"
In the file chosen for the function implementation:
#define <EXT-FUNC-NAME>_IMPLEMENTATION
#include "<ext-func-name.h>"
By default, the header won’t have any stdlib includes, change that with:
#define <EXT-FUNC-NAME>_INCLUDE_LIBC
Or disable function, type and variable override with:
#define HAVE_<EXT-FUNC-NAME>
includes vasprintf() and asprintf()
includes fgetln()
includes getopt(), getsubopt(),
getopt_long() and getopt_long_only()
getopt_long.h has additional macros related to argument
permuting, defining those enables it per function (GNU behaviour, can
still be disabled at runtime by setting
$POSIXLY_CORRECT):
#define GETOPT_PERMUTE_ARGS
#define GETOPT_LONG_PERMUTE_ARGS
#define GETOPT_LONG_ONLY_PERMUTE_ARGS
includes strdup() and strndup()
strndup() follows the latest standard, meaning that it
copies at most n chars, not n + 1. Also, no standard
specifies that strndup() should return less than n
if strlen(s) + 1 < n, but this implementation
does so.
includes strlcat() and strlcpy()
includes strtonum()
| 4 weeks ago | master | shortlog | log | tree |