- New openc_* functions, which are O_CLOEXEC versions of the
djbunix.h open_* functions.
- New ipc_bind_reuse_lock() function, which takes a lock before
deleting a Unix domain socket. The ipc_bind_reuse() function now
uses it, so it won't unconditionally clobber sockets in the filesystem anymore.
- Complete revamping of the pathexec functions, see exec.h.
- Revamping of the locking functions, see
instead of adhoc DJBUNIX_FLAG_NB and DJBUNIX_FLAG_COE.
- Better header separation; webipc.h removed (stuff moved to
- New mkptemp2() function, creating a fifo with a templated name
and an option field for O_NONBLOCK and O_CLOEXEC.
- New sysdep: chroot, testing whether the system has the
- New function: stralloc_readyplus_tuned()
- skalibs now works on GNU Hurd without patches.
- New function: path_canonicalize
- Formatting and scanning functions and macros have been refactored.
- The configure script now emulates autotools-created configure scripts
more closely. In particular, it's now possible to declare an out-of-path
compiler in CC.
- tain_* functions dealing with wall clocks and stopwatches
have been refactored. The --enable-clock and --enable-monotonic
configure switches have been removed. tain_now() can now be told at run
time to use a wall clock (default, or via tain_now_set_wallclock()) or a
stopwatch (via tain_now_set_stopwatch()), instead of it being fixed at
- Cross-compilation has been made a lot easier, by removing the need to
provide a whole sysdeps directory anymore. Only a few sysdeps - the ones that
need code execution on the target to be autodetected - have to be provided manually,
via a --with-sysdep-K=V option to configure.
Currently, that means one: --with-sysdep-devurandom=yes or
- New functions:
- skalibs_regcomp(), which accepts empty regexes even
does not (e.g. the BSDs).
- Changes to skalibs/djbtime.h functions
that produce UTC time: when a leap second is hit, utc_from_tai()
now returns 2, and functions writing a struct tm put 60 into
the struct's tm_sec field.
- The avltreeb macros have been removed. Instead, the
AVLTREEN_DECLARE_AND_INIT() macro has been added.
- The mkdir_unique() function has been removed.
(It duplicated the functionality of the standard mkdtemp()
- New functions: env_dump(), mk?temp(),
- The ancilautoclose and nbwaitall sysdeps have been removed.
- New header: skalibs/posixishard.h
- libskarnet.a now builds as PIC by default no matter
the toolchain's settings. Use the --disable-all-pic configure
option to build static libraries as non-PIC.
- New functions: ipc_timed_sendv(), unlink_void(),
- The dir_close() function now returns void
and leaves errno unchanged.
- The absolutepath() and sarealpath_tmp() functions, as well
as the avl*_deletenode(), skalibs/mininetstring.h and prot
families of functions, have been removed.
- skalibs/djbunix.h does not include
- New dir_fd function wrapping dirfd() (Solaris doesn't have dirfd()).
- memmem implementation for platforms that don't provide it.
- memmem wrappers: byte_search, siovec_search.
- New functions: atomic_symlink, skagetlnmaxsep, child_spawn3
- New header: skalibs/posixplz.h. Some header reorganization.
- New family of functions: skalibs/textmessage.h, skalibs/textclient.h
- skalibs/environ.h and skalibs/getpeereid.h are now obsolescent.
- New functions: access_at(), skaclient_timed_aflush().
- openwritenclose() and openwritevnclose() now use
instead of relying on an unpredictable name (which required a random
generator to be fully initialized).
- New functions: unixmessage_receiver_hasmsginbuf(),
setgroups_and_gid(). The setgroups_and_gid()
function is the one that should be used, if possible: it does the
right thing even on the BSDs. (That's an achievement.)
What has changed in skalibs
- Support for old versions of OpenBSD dropped. At least OpenBSD 5.7
and newer are still supported.
- --enable-replace-libc compilation flag dropped
- skalibs/ushort.h, skalibs/uint.h and skalibs/ulong.h
removed. skalibs/types.h is now a generic header for fmtscan primitives
for various types.
- uint16, uint32 and uint64 types replaced with POSIX
uint16_t, uint32_t and uint64_t.
- APIs changed across all skalibs functions to support more POSIXly correct
types. Main benefit: correct 64-bit support on 64-bit archs with 32-bit int.
- More support for advanced fd callbacks in unixmessage_sender and unixconnection.
- ipc_timed_send(), ipc_timed_recv()
- rt.lib sysdep removed; spawn.lib and timer.lib sysdeps added
- Leap second for 2016-12-31 23:59:60 UTC added
- Complete librandom rewrite
- skalibs/alarm.h added
- Support for advanced fd callbacks in unixmessage_sender.
- New functions: bitarray_firstclear_skip and
- The /etc/leapsecs.dat file is no longer necessary.
- New functions: atomic_rm_rf(), atomic_rm_rf_tmp().
- New function: openreadnclose_nb.
- New functions: bitarray_count(), openwritevnclose_at()
- New function: stat_at()
- The rest of the changes are bugfixes or QoL.
- New sha512 functions, see skalibs/sha512.h
- Bugfix release, no functional changes.
- The child_spawn* family of functions now resets all signals
to their default values when spawning a program on systems with
This should not change anything - it's just paranoia.
- Minor bugfixes.
- Bugfix release, no functional changes.
- wait_status() now returns 256 + signal number when WIFSIGNALED().
- new macro wait_estatus() to get WIFSIGNALED information in an exit code.
- new functions in djbunix.h: hiercopy(), hiercopy_tmp()
- wait_status() now returns 256 (instead of 126) when WIFSIGNALED().
- buffer_getvall and buffer_putvall have a different interface. (And now work.)
- buffer_read and buffer_write are now deprecated.
- various siovec additions, such as siovec_trunc
- unixconnection added.
- sig_name and sig_number added.
- TAI64 and TAI64N conversion functions revisited.
API slightly changed, made more consistent.
- unixmessage_drop added, part of unixmessage/skaclient hardening against fd leakage
- unixmessage_sender_flush return code aligned with the convention in the rest of skalibs
- unixmessage_sender_flush now handles short writes
- skaclient_start(_async) prototype changed: now takes an option argument
- The packaging system has completely changed.
- Programs should now link with -lskarnet followed by the appropriate
- No compatibility is ensured. Most APIs haven't changed, but no guarantee
- The most important change is probably the disparition of struct tai
and struct taia, replaced with the tai_t and tain_t
types. Attosecond precision has been removed - processor speed is almost capped now,
and it looks like nanosecond precision will be enough for the foreseeable future.
- Buffer implementation has changed, and some interfaces too, mainly the
buffer_flush and bufalloc_flush return code.
- skaclient, skalibs' client-server communication suite, has been
entirely reimplemented: it's now using the new "unixmessage" set of primitives
for easier fd-passing.