skalibs
Software
skarnet.org
in 2.14.2.0
- New skalibs/gol.h header, implementing long options.
- New mkptemp3() function.
in 2.14.1.1
in 2.14.1.0
- New ip46.h macros:
socket_sendnb46_g() and socket_recvnb46_g()
in 2.14.0.1
in 2.14.0.0
- New selfpipe accessor function: selfpipe_fd()
- New djbunix functions: slurpn(), openslurpnclose()
- slurp and openslurpclose are now macros
- New cdb functions: cdb_hashv(), cdbmake_addv()
- New cspawn function, for posix_spawn/fork unification
- child_spawn functions are now declared in cspawn.h
- New sysdeps for posix_spawn options and more
- case_lowerb() and friends now use ctype.h functions, supporting locale
if it is declared in the application.
- case_str() removed, strcasestr() fallback implementation added
in 2.13.1.1
in 2.13.1.0
- New macro: SKALIBS_PATH_MAX
in 2.13.0.0
- New functions: buffer_timed_put(), buffer_timed_puts().
in 2.12.0.1
in 2.12.0.0
- random_init() and random_finish() removed,
as well as random_char().
- random_string() renamed to random_buf().
- random functions now have an early version, to use when
randomness is required before the generator can be seeded (i.e. in
programs running in the very early boot).
- New djbunix functions:
waitn_posix(), waitn_reap_posix()
in 2.11.2.0
- User-provided CPPFLAGS, CFLAGS and LDFLAGS are now honored during
sysdeps autodetection.
- envdir_internal() now has a SKALIBS_ENVDIR_NOCLAMP option
allowing reading of unlimited-size variables.
in 2.11.1.0
- fd_close() now chooses to adapt to Linux's
close()
behaviour (closing the fd on EINTR) over the HP-UX one (not closing it).
Destructors like
close()
being allowed to fail has always been a mistake in the specification and a
programming nightmare, making it impossible to behave correctly on all
systems, but apparently standardization efforts are on the way and the Linux
behaviour seems to be the chosen one.
- New unix-transactional.h function: opendir_at.
in 2.11.0.0
- libbiguint removed.
- Obsolete skalibs/environ.h and skalibs/getpeereid.h headers removed.
- rc4 and md5 functions removed.
- iobuffer removed. fd_cat() and fd_catn() changed signatures.
- All *_t types renamed without the _t suffix,
in order to preserve POSIX namespace.
- subgetopt() renamed to lgetopt().
- All signal functions entirely reworked; cruft removed.
- skalibs/cdb_make.h renamed to skalibs/cdbmake.h;
cdbmake functions now return 1 on success and 0 on failure.
- skalibs/cdb.h redesigned to remove reader state from the
cdb structure itself.
- The unsafe cdb_successor() API has been removed.
- New skalibs/posixplz.h function: munmap_void().
in 2.10.0.3
in 2.10.0.2
in 2.10.0.1
in 2.10.0.0
- 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
socket.h).
- 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
chroot() function.
in 2.9.3.0
- New function: stralloc_readyplus_tuned()
in 2.9.2.1
in 2.9.2.0
in 2.9.1.0
- skalibs now works on GNU Hurd without patches.
- New function: path_canonicalize
in 2.9.0.0
- 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
build time.
- 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
--with-sysdep-devurandom=no.
in 2.8.1.0
- New functions:
- skalibs_regcomp(), which accepts empty regexes even
when regcomp()
does not (e.g. the BSDs).
in 2.8.0.1
- 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.
in 2.8.0.0
- 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()
function.)
- New functions: env_dump(), mk?temp(),
autosurf(), autosurf_name()
- 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.
in 2.7.0.0
- New functions: ipc_timed_sendv(), unlink_void(),
skagetln_loose(), skagetlnsep_loose(),
genset_deepfree(), gensetdyn_deepfree()
- 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
skalibs/env.h anymore.
in 2.6.4.0
in 2.6.3.1
in 2.6.3.0
- 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.
in 2.6.2.0
- New functions: access_at(), skaclient_timed_aflush().
in 2.6.1.0
in 2.6.0.2
in 2.6.0.1
- openwritenclose() and openwritevnclose() now use
mkstemp()
instead of relying on an unpredictable name (which required a random
generator to be fully initialized).
in 2.6.0.0
- New functions: unixmessage_receiver_hasmsginbuf(),
skalibs_setgroups(), setgroups_with_egid(),
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.)
in 2.5.1.1
in 2.5.1.0
What has changed in skalibs
in 2.5.0.0
- 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.
in 2.4.0.2
in 2.4.0.1
in 2.4.0.0
- 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
in 2.3.10.0
- Support for advanced fd callbacks in unixmessage_sender.
in 2.3.9.0
- New functions: bitarray_firstclear_skip and
bitarray_firstset_skip.
in 2.3.8.3
in 2.3.8.2
in 2.3.8.1
in 2.3.8.0
- The /etc/leapsecs.dat file is no longer necessary.
in 2.3.7.1
in 2.3.7.0
- New functions: atomic_rm_rf(), atomic_rm_rf_tmp().
in 2.3.6.1
in 2.3.6.0
- New function: openreadnclose_nb.
in 2.3.5.2
in 2.3.5.1
in 2.3.5.0
- New functions: bitarray_count(), openwritevnclose_at()
in 2.3.4.0
- New function: stat_at()
- The rest of the changes are bugfixes or QoL.
in 2.3.3.0
- New sha512 functions, see skalibs/sha512.h
in 2.3.2.0
in 2.3.1.3
- Bugfix release, no functional changes.
in 2.3.1.2
- The child_spawn* family of functions now resets all signals
to their default values when spawning a program on systems with
posix_spawn().
This should not change anything - it's just paranoia.
- Minor bugfixes.
in 2.3.1.1
- Bugfix release, no functional changes.
in 2.3.1.0
- 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()
in 2.3.0.1
- wait_status() now returns 256 (instead of 126) when WIFSIGNALED().
in 2.3.0.0
- 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
in 2.2.1.0
- unixconnection added.
- sig_name and sig_number added.
in 2.2.0.0
- TAI64 and TAI64N conversion functions revisited.
API slightly changed, made more consistent.
in 2.1.0.0
- 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
in 2.0.0.0
- The packaging system has completely changed.
- Programs should now link with -lskarnet followed by the appropriate
sysdeps links.
- No compatibility is ensured. Most APIs haven't changed, but no guarantee
is offered.
- 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.