Release notes ============= 6.5 (2015-07-17) ---------------- * Added companion library <<../ucw-json/index:,LibUCW-JSON>> for parsing and formatting JSON. * Fastbufs have a new wrapper for parsing and generating hex-dumps. Useful primarily for debugging. * Unicode functions are now more strict and they reject denormalized UTF-8 sequences. Also, it is now possible to append UTF-8 characters to a memory pool. * The naming of memory pool functions mp_append_printf() and mp_append_vprintf() turned out to be unfortunate as they have differently from all other functions operating on growing buffers. They have been renamed to mp_printf_append() and mp_vprintf_append() with the old names kept as aliases for backward compatibility. 6.4 (2015-04-08) ---------------- * Fixed several minor bugs in the <> module. 6.3 (2015-02-14) ---------------- * Cleaned up and documented the <<../ucw-xml/index:,LibUCW-XML>> companion library -- a lightning fast standards-complient XML parser. * Solved problems with closing of stderr in daemons: see the new function <>. 6.2 (2015-01-16) ---------------- * Fixed race conditions in <>. * The <> have been documented and integrated in the table printer, command-line option parser, and configuration parser. * The <> have been documented. 6.1 (2014-08-09) ---------------- Incompatible changes ~~~~~~~~~~~~~~~~~~~~ * Major changes of the table printer module. Finally, its interface can be considered stable now. Minor changes ~~~~~~~~~~~~~ * The <> gained `OPT_BREAK` class and `OPT_HELP_COLUMNS` flag. * The strtonum module supports more types. 6.0 (2014-06-20) ---------------- Incompatible changes ~~~~~~~~~~~~~~~~~~~~ * *Incompatible:* It turned out that almost all users of the <> module push/pop individual elements. Therefore, we have removed the second argument (item count) of `GARY_PUSH` and `GARY_POP`. If you want to push/pop multiple elements at once, use `GARY_PUSH_MULTI` and `GARY_POP_MULTI`. * *Incompatible:* The interface of the <> module was cleaned up to remove non-systematic side-effects. The `HEAP_INSERT` operation is now a proper insert (previously, it was just cleanup after insertion performed by the caller), similarly `HEAP_INCREASE` and `HEAP_DECREASE`. The `HEAP_DELMIN` operation was renamed to `HEAP_DELETE_MIN`. New operations `HEAP_REPLACE` and `HEAP_REPLACE_MIN` have been added. If you need to track positions of elements in the heap, please check the notes at individual functions. * The <> has been improved: ** Multiple instances of the configuration parser are supported. ** *Incompatible:* As there may be more instances, we can no longer use global variables to control the configuration system. In particular, `cf_need_journal` and `cf_pool` variables have been replaced by functions <> and <>. ** *Incompatible:* Loading of configuration files has been decoupled from the getopt wrapper, so you might need to include `conf.h` for functions which were previously declared in `getopt.h`. ** New functions have been added: <>, <>, and <>. ** *Incompatible:* Dynamic configuration arrays have been re-implemented in terms of our generic <>. This makes them easier to use and most of the interface has been preserved. The only exception is static allocation via the DARY_ALLOC() macro, which is no longer available. * *Incompatible:* The `UCW::CGI` Perl module has its custom error handlers (which override default Perl error handlers) split off to a separate module `UCW::CGI::ErrorHandler`. New modules ~~~~~~~~~~~ * <> have been added including a new `daemon-control` utility. The old `daemon-helper` utility has been obsoleted and it is not compiled by default. * <> for translation between signal names and numbers have been added. * The fastbuf I/O layer received a new back-end <>, which concatenates several fastbuf streams to form a single virtual stream. * Added <> module for efficient UTF-8-like encoding of 64-bit integers to byte sequences. * Added <> module for configurable formatting of 2-dimensional tables in both user-friendly and machine-friendly ways. * A <> has been added, similar in spirit to our <>. The <> module has been obsoleted * <> have been introduced, providing an abstract way of memory allocation. <> are now based on such allocators, which allows for example growing arrays in memory pools. Cleanups ~~~~~~~~ * Libucw finally has a clean ABI, which does not pollute namespace, risking collisions with other libraries. However, we did not want to abandon our nicely and simply named functions, so the header files define macros, which translate names of all externally visible symbols to start with `ucw_`. If you don't like this, configure libucw with `CONFIG_UCW_CLEAN_ABI` turned off. * All helper utilities are now installed with names starting with `ucw-` to prevent collisions. * The auxiliary libraries have been renamed to `libucw-charset`, `libucw-images`, `libucw-xml`. The clean ABI promise does not extend to them yet. * The alias `uns` for `unsigned int` has been replaced by a more common `uint`. The old name is still maintained for backward compatibility. * Several functions now accept `size_t` instead of `unsigned int` for size arguments. Minor changes ~~~~~~~~~~~~~ * `` is automatically included by ``. 5.0 (2012-02-21) ---------------- * *Incompatible:* The `timestamp_t` type has been decoupled from wall clock time. It now specifies the number of milliseconds from an unspecified origin, so that it can for example refer to the system monotonic clock. The `ucw_time_t` type has been removed. * The <> module has been rewritten: ** Multiple instances of the main loop are supported (to be used in different threads or locally within a library function). ** The new implementation is more efficient: it uses heaps for timers, epoll() for file descriptors (when available). ** The return value of <> handlers has been changed to <> and <>. However, the numerical values are equal, so old code should keep working. ** *Incompatible:* The main loop time (`main_now`) has been decoupled from wall clock time and moved to a field in the `main_context` structure. It can be accessed either directly or via <>. The `main_now_seconds` variable has been removed, `main_idle_time` has become a structure field. ** *Incompatible:* The interface for asynchronous reading and writing (file_read() and friends) has been separated from the core of the main loop. Use <> and related functions instead. ** *Incompatible:* file_close_all() is gone. You have to call <> or <> to clean up properly after fork(). ** Added support for <>. ** Added relative timers: <>. ** Modification of events from a running event handler is always safe. ** Deleting an already deleted event is always safe. ** For any event type, it is possible to ask whether it is active (added to the mainloop) or not: <> and friends. ** A new mainloop front-end for asynchronous <> has been added. * Added support for <>, which is a general mechanism for tracking resources and reporting errors. It is still considered experimental, so the API can change in future releases. * Added a <> module `gary.h`, similar to `gbuf.h`, but with a much more convenient interface. * The <> can recognize unlinked nodes, see <>. * Added `strtonum.h` -- a module for precise parsing of numbers. * When compiled by a recent enough GCC, `__thread` is used for thread-local variables, which is more efficient than the POSIX per-thread storage. ** *Incompatible:* `ucwlib_context->thread_id` is no longer available directly, please use <> instead. * *Incompatible:* Several modules have been declared obsolete and removed: ** `sighandler` -- generic signal handling (it still exists internally) ** `qache` -- a mmap-based shared cache ** `prefetch` -- an interface to memory prefetch instructions; superseded by GCC `__builtin_prefetch` ** `randomkey` -- a generator of cryptographically strong pseudo-random tokens; will be replaced by something more generic soon ** `profile` -- a profiling hack * *Incompatible:* Several modules now have their own header files: ** `process.h` -- all functions related to processes, previously declared in `lib.h` ** `io.h` -- functions related to files from `lib.h` and `lfs.h` ** `time.h` -- timestamps and interval timers, previously in `lib.h` * *Incompatible:* Several configuration options were renamed or removed: ** `CONFIG_FAKE_ELTPOOL` → `CONFIG_UCW_FAKE_ELTPOOL` ** `CONFIG_LARGE_FILES` → `CONFIG_UCW_LARGE_FILES` ** `CONFIG_OWN_GETOPT` → `CONFIG_UCW_OWN_GETOPT` ** `CONFIG_DIRECT_IO` → `CONFIG_UCW_DIRECT_IO` ** `DEFAULT_CONFIG` → `CONFIG_UCW_DEFAULT_CONFIG` ** `ENV_VAR_CONFIG` → `CONFIG_UCW_ENV_VAR_CONFIG` ** `CONFIG_LFS` was removed ** `CONFIG_URL_ESCAPE_COMPAT` was removed * `UCW::Configure` supports running of test programs. * `UCW::CGI` support multiple argument tables and UTF-8 mode. Also, it uses the proper HTTP status codes when reporting errors. * Implementation details of <> have changed. The new code checks invariants more carefully, so it is possible that custom fastbuf back-ends which are buggy now fail, although they previously seemed to work. 4.0 (2009-04-13) ---------------- This was the first stand-alone release of LibUCW. Before that, LibUCW was developed as a part of the http://www.ucw.cz/holmes/[Sherlock Holmes project].