failtest: compile fix for OpenBSD OpenBSD doesn't idempotent-wrap sys/mman.h, so when we #define mmap to an alternative, it fails to compile when sys/mman.h is included again. Workaround is not to #define mmap to add arguments on Open BSD.
failtest: save and restore file state inside child (on-demand) We currently save all files in the parent, and restore them once the child is gone. That doesn't work in a case where the child manipulates a file the parent doesn't currently have open, so switch to a model where the child cleans itself up, using the already-existing cleanup callbacks. This means that we need to undo much more, especially restoring file offsets. We also need to handle the case where we've already closed the file, and now we're cleaning up. As a bonus, we now handle open() with O_TRUNC properly. The cleanup function now has two modes: one simply frees (so valgrind doesn't complain about failtest leaking so the user can see real leaks in their programs), the other restores things so the parent sees no changes.
failtest: catch mmap. mmap can also fail on out-of-memory, and for the coming change to the way we save and restore files we want to know about them anyway.
various: add LICENSE comments.
failtest: override getpid() as well. TDB2 tracks locks using getpid(), and gets upset when we fork behind its back.
failtest: record close events We trap them, might as well put them in history. This also makes tracking open file descriptors more robust.
failtest: generic cleanup hooks Each function in the history stores a cleanup function, rather than storing extra structures. In particular, we save writes and file offsets using this.
failtest: capture pread/pwrite
failtest: handle 2-argument open()
failtest: fcntl handling Catch fcntl, particularly fcntl locks.
failtest: new module. A module designed to help test "never fails" functions like malloc.