Revision history for libeio

TODO: maybe add mincore support? available on at least darwin, solaris, linux, freebsd
TODO: openbsd requires stdint.h for intptr_t - why posix?

TODO: make mtouch/readdir maybe others cancellable in-request
TODO: fadvise request
TODO: fdopendir/utimensat
TODO: maybe work around 3.996gb barrier in pread/pwrite as well, maybe readahead etc.?
TODO: pthread_condattr_setclock(..., CLOCK_MONOTONIC) and clock_gettime(CLOCK_MONOTONIC) instead of defualt CLOCK_REALTIME timeouts
1.0
	- for simple request api, initialise result/errorno to -1/ECANCELED.
	- fix a deadlock where a wakeup signal could be missed when
          a timeout occured at the same time.
	- use nonstandard but maybe-working-on-bsd fork technique.
        - use fewer time() syscalls when waiting for new requests.
        - fix a path-memory-leak in readdir when using the wrappers
          (reported by Thomas L. Shinnick).
	- support a max_idle value of 0.
	- support setting of idle timeout value (eio_set_idle_timeout).
        - readdir: correctly handle malloc failures.
        - readdir: new flags argument, can return inode
          and possibly filetype, can sort in various ways.
        - readdir: stop immediately when cancelled, do
          not continue reading the directory.
        - fix return value of eio_sendfile_sync.
        - include sys/mman.h for msync.
	- added EIO_STACKSIZE.
	- added msync, mtouch support (untested).
        - added sync_file_range (untested).
        - fixed custom support.
        - use a more robust feed-add detection method.
	- "outbundled" from IO::AIO.
        - eio_set_max_polltime did not properly convert time to ticks.
        - tentatively support darwin in sendfile.
        - fix freebsd/darwin sendfile.
        - also use sendfile emulation for ENOTSUP and EOPNOTSUPP
          error codes.
        - add OS-independent EIO_MT_* and EIO_MS_* flag enums.
        - add eio_statvfs/eio_fstatvfs.
        - add eio_mlock/eio_mlockall and OS-independent MCL_* flag enums.
        - no longer set errno to 0 before making syscalls, this only lures
          people into the trap of believing errno shows success or failure.
        - "fix" demo.c so that it works as non-root.
        - suppoert utimes seperately from futimes, as some systems have
          utimes but not futimes.
        - use _POSIX_MEMLOCK_RANGE for mlock.
        - do not (errornously) overwrite CFLAGS in configure.ac.
        - mknod used int3 for dev_t (§2 bit), not offs (64 bit).
        - fix memory corruption in eio_readdirx for the flags
          combination EIO_READDIR_STAT_ORDER | EIO_READDIR_DIRS_FIRST.
        - port to openbsd (another blatantly broken non-UNIX/POSIX platform).
        - fix eio_custom prototype.
        - work around a Linux (and likely FreeBSD and other kernels) bug
          where sendfile would not transfer all the requested bytes on
          large transfers, using a heuristic.
        - use libecb, and apply lots of minor space optimisations.
        - disable sendfile on darwin, broken as everything else.
        - add realpath request and implementation.
	- cancelled requests will still invoke their request callbacks.
        - add fallocate.
        - do not acquire any locks when forking.
        - incorporated some mingw32 changes by traviscline.
        - added syncfs support, using direct syscall.
        - set thread name on linux (ps -L/Hcx, top, gdb).
        - remove useless use of volatile variables.
        - fix memory leak when reaping threads.
        - use utime now uses nanosecond resolution on posix 2008 systems.
        - allow taking advantage of posix 2008 xxxat functions and fdopendir
          by implementing a working directory abstraction.
        - make readahead emulation behave more like actual readahead by never failing.
        - added EIO_LSEEK (untested).
        - added EIO_FALLOC_FL_PUNCH_HOLE.
        - wtf. etp_proc returned 0, and no compiler ever complained.
        - remove pread/pwrite emulation, as the only system that lacked them
          (cygwin) provides them for a while now.
        - provide pread/pwrite implementations for win32.
        - implement aio_realpath for windows.
        - add EIO_FALLOC_FL_COLLAPSE_RANGE and EIO_FALLOC_FL_ZERO_RANGE.
        - add EIO_FCNTL, EIO_IOCTL.
        - try to use SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE when creating
          symlinks on windows.
        - support a minimum of EIO_PATH_MIN (default: 8160) as PATH_MAX (including
          trailing 0 byte) in readlink, realpath etc.
        - generate ENAMETOOLONG if readlink overflow is detected.
        - implement support for renameat2, and corresponding flags.
        - add EIO_FALLOC_FL_INSERT_RANGE and EIO_FALLOC_FL_UNSHARE_RANGE.
        - use posix_close if available or needed.
        - save errno around close in ftruncateat, fstatvfsat and EIO_CLOSE.
        - add EIO_SLURP convenience request.
        - update configure.ac for newer autoconf/automake.
        - include sys/prctl.h if available.
        - use O_NONBLOCK when opening directories and in truncateat and statvfsat.
        - add EIO_MCL_ONFAULT.
        - add eio_mlockall_sync.
        - fix configure tests for readahead and sync_file_range, they were based on the
          manpages, which turned out to be wrong.
        - protect wd_open against fd being 0, which is used for the value of EIO_CWD.


