10.32:
2  remove OpenBSD #warning (obsd maintainer says no longer needed)
3  move headers to <libowfat/> upon install
4  fix fmt_ip6 (Erwin Hoffmann)
5  add MSG_ZEROCOPY support (only used for buffers >8k)
6  use writev in buffer_put for a slight perf improvement
7  add experimental iom API for multithreaded I/O multiplexing (in io.h)
8
90.31:
10  special case buffer_get_token with token length 1 through memccpy (almost 4x speedup)
11  test for pread and use it instead of lseek+read in cdb and io_mmapwritefile
12  add mmap_readat (like mmap_read but open by fd, not by name)
13  add fmt_iso8601 and scan_iso8601 (time_t -> "2014-05-27T19:22:16Z")
14  add fmt_netstring and scan_netstring (http://cr.yp.to/proto/netstrings.txt)
15  add (fmt|scan)_varint and (fmt|scan)_pb_* (binary marshaling ala protocol buffers)
16
170.30:
18  add compiletimeassert.h
19  add haveuint128.h
20  byte.h now defines UNALIGNED_ACCESS_OK on x86
21  add scan_ulongn, scan_8longn, scan_xlongn, scan_longn, scan_netstring
22  change buffer to have a destructor function pointer
23  SECURITY: fmt_strn would write one byte too many (returned right length though, so usually not a problem as that byte would be overwritten with \0 by the caller anyway)
24  fmt_pad and fmt_fill fail more gracefully when srclen > maxlen
25  You can now say $ make WERROR=-Werror (compiling t.c may fail but that's strictly speaking not part of the library)
26  scan_html now decodes HTML entities based on the actual w3c list (from entities.json, say gmake update to fetch the current version)
27  added fmt_escapechar* to fmt.h (implement various escaping mechanisms also found in textcode but for a single char not a whole string, and they always escape, not just when they think it's needed)
28  scan_ushort was supposed to abort early and return 5 when attempting to parse "65536", because the result does not fit.  It did not.  Now it does.
29  scan_*long, scan_*int, scan_*short now properly abort if the number would not fit
30  SECURITY: check for integer overflow in stralloc_ready
31  switch io_fds from array to newly implemented (hopefully thread-safe) iarray
32  switch epoll from level triggering to edge triggering
33  introduce io_eagain_read and io_eagain_write (discontinue using io_eagain plz)
34  fix buffer_get
35  add fmt_html_tagarg, fmt_xml, scan_html_tagarg
36  add socket_fastopen, socket_fastopen_connect4, socket_fastopen_connect6 and socket_quickack
37  on Linux, in iob_send, if MSG_MORE is defined, and the request type
38    lends itself to it, used sendto/sendmsg with MSG_MORE instead of
39    TCP_CORK (saves two syscalls)
40  add io_fd_flags so the caller can tell io_fd whether the socket is blocking
41    (saves one fcntl syscall)
42  more constness for stralloc and buffer
43  mmap_read/mmap_shared on zero length files no longer fail but return a
44    zero length buffer
45  if SOCK_NONBLOCK is defined, use it instead of socket+fcntl
46  ... but if errno==EINVAL still fall back to socket+fcntl (Robert Henney)
47  SECURITY: fix botched integer overflow handling logic in stralloc_ready (Giorgio)
48  add critbit
49
500.29:
51  save 8 bytes in taia.h for 64-bit systems
52  add buffer_tosa (buffer writing to auto-growing stralloc)
53  add iarray
54  support SCTP in addition to TCP
55  fix io_receivefd so the incoming buffer is only 1 byte; io_passfd
56    sends only one byte, so we might receive (and discard) other data if
57    we try to read more (Stefan Bühler, from the lightttpd project)
58  add io_fd_canwrite (like io_fd but assume the fd is writable)
59  save a few syscalls here and there
60  add awesome hack in isset.h (comex, Linus Torvalds)
61  add byte_equal_notimingattack
62
630.28:
64  add uint64 pack and unpack routines
65  fix subtle typo in sub_of (David Sirovsky)
66  work around gcc bugs
67
680.27:
69  add fmt_strm
70  add iob_addbuf_munmap
71  add socket_deferaccept
72  catch one more case in umult64 (Tomi Jylhä-Ollila)
73
740.26:
75  fix really pathological case where io_timeouted would never
76    start over from the beginning because always new accept()ed
77    connections came in and got newer, higher descriptors since the last
78    io_timeouted loop.  (Dirk Engling)
79  add some int overflow check macros to rangecheck.h
80  fmt_ip6 compresses at best spot, not at first spot (Nikola Vladov)
81  use inttypes.h to declare ints in uint*.h
82  escape more in fmt_ldapescape
83  try to catch malicious input in textcode fmt_* functions
84  fmt_xlonglong was utterly broken (Johannes Vetter)
85
860.25:
87  array_allocate no longer truncates the array
88  array_get now not only checks whether the element fits in the
89    allocates space, it also needs to be in the initialized space.
90  add -D_REENTRANT to CFLAGS so libowfat can be used in multi-threaded
91    programs
92  further Windoze support (test/io5.c works, gatling still doesn't)
93    This is just to get gatling to work, I may remove it again after
94    that.
95  implement Nikola's idea to remove limit number of strings in errmsg
96  add taia_half
97  add cdb
98  add rangecheck.h
99  add io_block
100  make socket_(tc|ud)p[46] actually return non-blocking sockets as
101    documented (Richard Lyons)
102  fix for NetBSD 3.0 (Their /sys/types.h actually does not define u_char
103    unless you #define _NETBSD_SOURCE, and then their CMSG_* macros use
104    it.  This is horrible even by OpenBSD standards)
105  remove support for ip6.int (it's no longer delegated)
106  add asm versions of imult64 and umult64 for x86_64
107    (22 cycles -> 12 cycles on my Athlon 64)
108  use size_t and ssize_t instead of unsigned long et al
109  add iob_bytesleft
110  don't leak memory in test/httpd
111
1120.24:
113  fix scan_to_sa (Tim Lorenz)
114  turns out we can not do file descriptor passing on OpenBSD
115    if _XOPEN_SOURCE is defined, which is needed for Solaris.
116    OpenBSD sucks.  I checked in a _really_ kludge now.  Please do not
117    use OpenBSD if you have a choice.  Or Solaris, for that matter.
118  turns out the imult routines (which I never used) were incorrect.
119    Noted by Matthew Dempsky
120  open_* from open.h now open in large file mode
121
1220.23:
123  also recognize EPFNOSUPPORT as EAFNOSUPPORT (groan)
124  fix a few man pages
125  optimize fmt_base64 (Dan Gundlach)
126  gcc 4 cleanups (mostly unsigned char* vs char*)
127  fix scan_xlong, scan_xlonglong and scan_8long
128  remove a few gcc 4 warnings
129  work around freebsd 5.4 brokenness (if you don't have IPv6 in the
130    kernel, socket(PF_INET6,SOCK_STREAM,0) returns EPROTONOSUPPORT
131    instead of EPFNOSUPPORT, which basically says "yeah, I know IPv6,
132    but TCP?  never heard of it")
133  remove even more warnings
134  64-bit cleanliness issue with auto-NULL-appending macros
135  IRIX compatibility (yuck!)
136
1370.22:
138  uh, the scope_id detection #defined the wrong constant.  libowfat
139    always thought there was no scope_id.  Oops.
140  #include <unistd.h> in io/io_sendfile.c (broken OpenBSD, thx Rob)
141  add scan_urlencoded2 (like scan_urlencoded but will not convert '+' to
142    ' '; needed for web servers, so they can serve libstdc++.tar.gz)
143  fix iob_write to handle failure properly
144  document that the iob_write callback should limit itself
145  fix mmap_shared
146  add iob_free, add man pages for iob_free and iob_reset
147  fix descriptor leak in iob_addfile_close if the range was 0 (oops)
148
1490.21:
150  errno cleanup and man page updates (Rolf Eike Beer)
151  implement iob_prefetch with madvise MADV_WILLNEED if it's defined
152  extend API To read line/token to stralloc to allow clearing the
153    stralloc first.
154  add stralloc_zero to clear a stralloc
155  add buffer_putsflush
156  add stralloc_catm and stralloc_copym
157  add buffer_putm and buffer_putmflush
158  cleanups in stralloc and buffer:
159    int -> long for sizes
160    char -> unsigned char for strings
161  buffer_getline is now a function, not a macro
162  add iob_write (send io batch through callback, e.g. for SSL)
163  add errmsg_info and errmsg_infosys to write to stdout instead
164  epoll fix (how could this ever work?)
165
1660.20:
167  add errmsg API
168  work around broken Linux sendfile API (offset 64-bit but count 32-bit)
169  add io_appendfile, io_readwritefile
170  support ip6.arpa in addition to ip6.int in dns_name (adds one
171    parameter to dns_name6_domain and two constants in dns.h)
172  Solaris compatibility for io_passfd and io_receivefd
173
1740.19.2:
175  for some reason, a botched dependency slipped in the the Makefile
176
1770.19.1:
178  oops, I botched havealloca.h, which was not generated but static
179    Now it is generated.
180
1810.19:
182  add io_socketpair
183  add io_passfd and io_receivefd (and test/fdpassing.c)
184  io_trywrite and io_waitwrite not ignore SIGPIPE
185  add man pages for libio, safemult
186  fix possible signal race in io_tryread and io_trywrite (Scott Lamb)
187  fix byte_rchr return value (Marcus Winkler)
188  fix bug in mmap code path of io_sendfile (David Leadbeater)
189
1900.18:
191  make libowfat compile on BSD again (sorry, and thanks to everyone who
192    sent me a patch :-D)
193  add iob_addfile_close, needed for gatling 0.5+
194  add test/client and test/server, two simple TCP shell interfaces
195
1960.17:
197  add Linux SIGIO support to IO
198  expand IO api to be able to cope with edge triggered event
199    notification: introduce io_eagain
200  the integer scan routines should only write *dest if they actually
201    scanned something
202  io_sendfile and iob_send should return -1 to -3 just like io_trywrite
203  make io_waituntil actually take an "until", not a "how long"
204  turns out that BSD kqueue is actually Free/OpenBSD kqueue -- NetBSD
205    doesn't have it.  That means I'll need some adaptive two-threads-
206    running-poll approach to get C10k type scalability on NetBSD :-(
207  turns out that BSD sendfile is actually FreeBSD sendfile -- neither
208    OpenBSD nor NetBSD have it (as of 3.4 and 1.6.1).  That means I'll
209    need to try using mmap on OpenBSD and NetBSD to get zero-copy TCP.
210  guard against same event being signalled twice (confused our list
211    handling)
212  add support for Solaris /dev/poll
213  add lose32 support (broken, please don't use!)
214  head -1 -> head -n 1
215  apending 0 bytes to an empty array would fail it
216  remove socket_sendfile now that we have io_sendfile
217  break out alloca #include dependency into havealloca.h
218  support HP-UX sendfile64 (thanks to Rolf Eike Beer)
219  support Solaris sendfile64
220  support MacOS X sendfile (and comment it out again, the headers
221    declare it but it's not actually there) (thanks to Bernhard Schmidt)
222  support AIX 5 (thanks to Lutz Chwala and Arthur Erhardt)
223  fix ip6_fmt (martin paljak)
224
2250.16:
226  add buffer_fromsa (make buffer from stralloc)
227  add API for integer multiply with overflow detection
228  change length counters from int to long for 64-bit platforms
229  add array API from http://cr.yp.to/lib/array.html
230  oops, had a declaration and man page for taia_addsec but not the
231    function itself
232  add buffer functions to write strerror(errno)
233  add io API supporting poll, epoll and kqueue
234  remove obsolete "extern" from header files
235  add iob API to send several buffers and files in one batch
236
2370.15:
238  man page update (document stralloc return values)
239  add stralloc_chop and stralloc_chomp
240  add buffer_putsa, buffer_get_token_sa and buffer_getline_sa
241  extended uudecode test.  See comment at top for details.
242  fix #include in ndelay*.3 (Hynek Schlawack)
243  add stralloc_diff and stralloc_diffs (my invention)
244  scan_ip6 returned 1 for "::" (Uwe Ohse)
245  add el-cheapo MIME decoding to test/uudecode
246  make install forgot to install ndelay.h
247  fix typos in several man pages (Hynek Schlawack)
248  add stralloc versions of textcode API (Kai Ruemmler)
249  add html to textcode ('<' to '&lt;' etc)
250  add fmt_human and fmt_humank (format numbers ala ls -H/-h)
251  add fmt_httpdate and scan_httpdate
252  fix typo breaking buffer_GETC in buffer (Marcus Winkler)
253  fix typo breaking fmt_long for dest==NULL
254  add fmt_*longlong()
255  add range check to scan_ulong, scan_ulonglong, scan_uint and
256    scan_ushort
257  extended socket API; you can now pass NULL for results you don't want
258  rename Makefile to GNUmakefile; create Makefile target
259  add buffer_get_token_pred and buffer_get_token_sa_pred
260
2610.14:
262  avoid bus errors in byte_copy
263  byte_rchr was completely broken
264  add case, iopause, tai, taia, openreadclose and ipv6-enhanced dns
265
2660.13:
267  fixed several bugs in test/uudecode.c
268  add uninstall target
269  add uint16_read API like the uint32_read one
270  add buffer_putnlflush
271  lots of general clean-ups from Jukka Zitting:
272    add FMT_LONG to fmt.h (FMT_ULONG plus 1 for sign)
273    fmt_strn did not work for out==NULL
274    fix inconsistencies in man pages
275  make scan_urlencode do the '+' -> ' ' transformation
276
2770.12:
278  add textcode api for uuencode/uudecode, base64, quoted printable,
279    url-encoding and yenc.
280
2810.11:
282  fix fmt_long (didn't count the '-'), which in turn broke
283    buffer_putlong
284  referenced wrong include file in stralloc_ready and stralloc_readyplus
285    man page.
286
2870.10:
288  add comment to stralloc.h that explains the structure (Markus Brischke)
289  fix socket routines (two cut-and-paste errors)
290
2910.9:
292  fmt_str did not check for out==NULL!  Thanks, Uwe Ohse.
293  Updated to buffer to fix read buffers.  Thanks, David Lichteblau.
294  Oops!  byte_copy had a trivial and dumb typo in it that I'm unsure how
295    I could have missed it.
296  add mmap man pages.
297  update and add socket man pages.
298  don't include str.h from fmt.h
299  document error signalling for the mmap functions.
300
3010.8:
302  BSD compatibility.
303  fix mmap_shared.
304  ranlib.
305  s/EPROTO/EPROTONOSUPPORT/.
306
3070.7:
308  add buffer_putspace
309  fix b0read prototype in buffer/buffer_0*
310  scan_ip6 will not transparently scan IPv4 addresses and save them as
311    v4-mapped addresses (::ffff:127.0.0.1).
312  byte_copy was sped up (but made larger in the process)
313
3140.6:
315  changed name to libowfat.
316  fixed fmt_ulong (did not output 0 correctly).
317  added buffer.
318  extended buffer API to include buffer_putulong() and friends.
319  oops, the read buffering was completely broken!
320  add mmap library (idea from Ingo Oeser)
321
3220.5:
323  made subdirectories for the different libraries.
324  moved the sources into the corresponding subdirectory.
325  imported my man pages from libdjb.
326  removed fmt_int.c and fmt_uint.c (they are macros in fmt.h).
327  corrected comment in open.h for open_excl.
328  wrote new man pages for fmt_double, scan_double, the sign fmt_ and
329    scan_ routines, the whitespace and charset scan_ routines, and the
330    str and stralloc routines.
331
3320.4:
333  implemented stralloc.
334
3350.3:
336  implemented uint16, uint32 and uint64.  The header files try to
337    define shortcut endianness conversion routines that do not convert
338    anything.
339  implemented open (I hope I got open_excl right, I couldn't find an
340    implementationen).
341
3420.2:
343  implemented the scan, fmt and str interfaces.
344  added adapted fmt_double and scan_double from diet libc.
345
3460.1:
347  initial release.
348  implemented the byte interface.
349