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