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