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.

### How to

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>
```

### Specifics

---

### asprintf

includes `vasprintf()` and `asprintf()`

---

### fgetln

includes `fgetln()`

---

### getopt\_long

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
```

---

### strdup

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.

---

### strlcat

includes `strlcat()` and `strlcpy()`

---

### strtonum

includes `strtonum()`
