C99 Interceptions

<assert.h>: no functions

<complex.h>: N/A

<ctype.h>:

is*(): These may return any non-zero value for truth.

<errno.h>: no functions

<fenv.h>: ?

<float.h>: no functions

<inttypes.h>: ?

Various arithmetic-performing functions which produce UB.

<iso646.h>: no functions

<limits.h>: no functions

<locale.h>: ?

<math.h>: ?

<setjmp.h>: ?

<signal.h>: ?

<stdarg.h>: no functions

<stdbool.h>: no functions

<stddef.h>: no functions

<stdint.h>: no functions

<stdio.h>:

Lots here, including UB, IDB and returning errors (operations on streams may fail). For example: fprintf() and fscanf(): %p's format is IDB. We could maintain an internal look-up table of pointers keyed by, say, colour. %p can then output a colour for printf, and scan it back in for scanf.

<stdlib.h>:

Lots here. rand(): return constants. malloc() and realloc(): various edge cases, and failure. Have malloc produce non-contigious chunks; this could be done by maintaining a list of allocated memory and their sizes, and asserting that new memory isn't adjacent to previous memory. atexit(): minimum maximum of 32 functions.

<string.h>: ?

UB for passing NULL to various things.

<tgmath.h>: no functions

<time.h>:

Various things here, mostly for IDB. time(): The encoding of this value is unspecified. clock(): Perhaps this can return random values? strftime(): As for fprintf, we can be strict about extension format specifiers.

<wchar.h>:

Lots here; mostly IDB.

<wctype.h>:

Lots here; mostly IDB. isw*(): As for <ctype.h>.