From a58812d5404844274298344babdb079e161d164f Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Fri, 16 Oct 2026 07:12:56 +0000 Subject: Prepare for 2.16.0.0, remove waitn*, change openslurpclose_at --- NEWS | 4 ++- doc/index.html | 15 ++++++-- doc/libstddjb/djbunix.html | 62 +++++++++++++++----------------- doc/license.html | 2 +- doc/upgrade.html | 6 ++-- package/deps.mak | 10 +----- package/info | 2 +- src/include/skalibs/djbunix.h | 6 ---- src/include/skalibs/unix-transactional.h | 3 +- src/libstddjb/waitn.c | 11 ------ src/libstddjb/waitn_posix.c | 21 ----------- src/libstddjb/waitn_reap.c | 11 ------ src/libstddjb/waitn_reap_posix.c | 22 ------------ src/libunixonacid/openslurpclose_at.c | 17 --------- src/libunixonacid/openslurpnclose_at.c | 17 +++++++++ 15 files changed, 71 insertions(+), 138 deletions(-) delete mode 100644 src/libstddjb/waitn.c delete mode 100644 src/libstddjb/waitn_posix.c delete mode 100644 src/libstddjb/waitn_reap.c delete mode 100644 src/libstddjb/waitn_reap_posix.c delete mode 100644 src/libunixonacid/openslurpclose_at.c create mode 100644 src/libunixonacid/openslurpnclose_at.c diff --git a/NEWS b/NEWS index 2cc65ea..5c3e1d5 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ Changelog for skalibs. -In 2.15.2.0 +In 2.16.0.0 ----------- - Bugfixes. @@ -8,6 +8,8 @@ In 2.15.2.0 (to avoid mallocing the arg when creating a thread) - New functions: waitpid_nohang, waitpids_nohang (to only reap the listed pids and ignore others) + - New function: openslurpnclose_at. openslurpclose_at is now a macro. + - Removed functions: waitn* In 2.15.1.0 diff --git a/doc/index.html b/doc/index.html index 4980b35..1da38d9 100644 --- a/doc/index.html +++ b/doc/index.html @@ -61,8 +61,8 @@ with a standard C development environment

Download

+

Support this work

+ +

+ If you like this skarnet.org project, you can donate to the author via Liberapay, +by clicking the following button: + + +

+ diff --git a/doc/libstddjb/djbunix.html b/doc/libstddjb/djbunix.html index ba9e692..0850dd6 100644 --- a/doc/libstddjb/djbunix.html +++ b/doc/libstddjb/djbunix.html @@ -364,6 +364,8 @@ The child_spawn family of functions has been moved to the

Waiting for children

+

Including bastards (children a process doesn't know it has)

+

unsigned int wait_reap ()
Instantly reaps all the pending zombies, without blocking, without a look at @@ -371,36 +373,6 @@ the exit codes. Returns the number of reaped zombies.

-

- int waitn (pid_t *pids, unsigned int n)
-Waits until all processes whose PIDs are stored in the -pids array, of size n, have died. -Returns 1 if it succeeds, and 0 (and sets errno) if it fails. The -pid array is not guaranteed to be unchanged. -

- -

- int waitn_posix (pid_t *pids, unsigned int n, int *wstat)
-Like waitn, but stores into *wstat the status -of the last process in the pids array (i.e. pids[n-1]). -

- -

- int waitn_reap (pid_t *pids, unsigned int n)
-Instantly reaps all zombies whose PIDs are stored in the -pids array, of size n. -Returns -1 (and sets errno) if it fails, and the number of reaped -zombies if it succeeds. The pid array is not guaranteed to -be unchanged. -

- -

- int waitn_reap_posix (pid_t *pids, unsigned int n, int *wstat)
-Like waitn_reap, but stores into *wstat the status -of the last process in the pids array (i.e. pids[n-1]), -if applicable; otherwise *wstat is unchanged. -

-

pid_t wait_nohang (int *wstat)
Instantly reaps one zombie, and stores the status information into @@ -448,15 +420,39 @@ function over the basic Unix APIs. This allows a program to:

+

Excluding bastards

+ +

+ size_t waitpids (pid_t const *pids, size_t n, int *wstat)
+Blockingly waits until it has reapt all the pids in array pids of +size n, or an error occurs; does not reap any zombie that is not +listed in pids. On success, it returns n. +On error, it returns an integer i lesser than n, which +is the position of the error in array pids, and sets errno. +All the pids before +pids[i] have been properly reapt, and *wstat +contains the status for the last reapt process, pids[i-1]. +

+ +

+ int waitpids_nohang (pid_t const *pids, size_t n, int *wstat, size_t *i)
+Instantly reaps one zombie among the pids listed in array pids of +size n. If an error occurs, returns -1, sets errno, and writes the +index (in the pids array) of the incriminated process in *i. +If it finds a zombie, it writes the index of the found and reapt process +in *i and returns 1. If no zombie is found in the list, it +returns 0. Any zombie not listed remains untouched. +

+

Reading and writing whole files

diff --git a/doc/license.html b/doc/license.html index e92da26..62cee6f 100644 --- a/doc/license.html +++ b/doc/license.html @@ -75,7 +75,7 @@ color, or different text font.

I am aware that the previous restrictions sound completely ridiculous while the official skalibs documentation is incomplete. -As of 2.15.2.0, I'm not going to enforce those restrictions, but if you're +As of 2.16.0.0, I'm not going to enforce those restrictions, but if you're going to provide documentation for skalibs, don't keep it to yourself, please send it to me instead. :-)

diff --git a/doc/upgrade.html b/doc/upgrade.html index 74e9776..3a429da 100644 --- a/doc/upgrade.html +++ b/doc/upgrade.html @@ -17,10 +17,12 @@ skarnet.org

-

in 2.15.2.0

+

in 2.16.0.0

in 2.15.1.0

diff --git a/package/deps.mak b/package/deps.mak index 8fcf861..0595646 100644 --- a/package/deps.mak +++ b/package/deps.mak @@ -31,7 +31,6 @@ src/include/skalibs/genset.h: src/include/skalibs/functypes.h src/include/skalibs/gensetdyn.h: src/include/skalibs/functypes.h src/include/skalibs/genalloc.h src/include/skalibs/stralloc.h src/include/skalibs/gol.h: src/include/skalibs/uint64.h src/include/skalibs/iopause.h: src/include/skalibs/tai.h -src/include/skalibs/ip46.h: src/include/skalibs/fmtscan.h src/include/skalibs/socket.h src/include/skalibs/tai.h src/include/skalibs/keventbridge.h: src/include/skalibs/sysdeps.h src/include/skalibs/kolbak.h: src/include/skalibs/unixmessage.h src/include/skalibs/lolstdio.h: src/include/skalibs/bufalloc.h src/include/skalibs/buffer.h src/include/skalibs/strerr.h @@ -59,9 +58,6 @@ src/include/skalibs/strerr.h: src/include/skalibs/gccattributes.h src/include/sk src/include/skalibs/tai.h: src/include/skalibs/gccattributes.h src/include/skalibs/uint64.h src/include/skalibs/textclient.h: src/include/skalibs/allreadwrite.h src/include/skalibs/tai.h src/include/skalibs/textmessage.h src/include/skalibs/textmessage.h: src/include/skalibs/allreadwrite.h src/include/skalibs/bufalloc.h src/include/skalibs/buffer.h src/include/skalibs/gccattributes.h src/include/skalibs/stralloc.h src/include/skalibs/tai.h -src/include/skalibs/types.h: src/include/skalibs/uint16.h src/include/skalibs/uint32.h src/include/skalibs/uint64.h -src/include/skalibs/uint16.h: src/include/skalibs/uint64.h -src/include/skalibs/uint32.h: src/include/skalibs/uint64.h src/include/skalibs/unix-timed.h: src/include/skalibs/bufalloc.h src/include/skalibs/buffer.h src/include/skalibs/functypes.h src/include/skalibs/stralloc.h src/include/skalibs/tai.h src/include/skalibs/unix-transactional.h: src/include/skalibs/direntry.h src/include/skalibs/gccattributes.h src/include/skalibs/stralloc.h src/include/skalibs/unixconnection.h: src/include/skalibs/unixmessage.h @@ -763,10 +759,6 @@ src/libstddjb/wait_nointr.o src/libstddjb/wait_nointr.lo: src/libstddjb/wait_noi src/libstddjb/wait_pid_nohang.o src/libstddjb/wait_pid_nohang.lo: src/libstddjb/wait_pid_nohang.c src/include/skalibs/djbunix.h src/libstddjb/wait_pids_nohang.o src/libstddjb/wait_pids_nohang.lo: src/libstddjb/wait_pids_nohang.c src/include/skalibs/djbunix.h src/libstddjb/wait_reap.o src/libstddjb/wait_reap.lo: src/libstddjb/wait_reap.c src/include/skalibs/djbunix.h -src/libstddjb/waitn.o src/libstddjb/waitn.lo: src/libstddjb/waitn.c src/include/skalibs/djbunix.h -src/libstddjb/waitn_posix.o src/libstddjb/waitn_posix.lo: src/libstddjb/waitn_posix.c src/include/skalibs/djbunix.h -src/libstddjb/waitn_reap.o src/libstddjb/waitn_reap.lo: src/libstddjb/waitn_reap.c src/include/skalibs/djbunix.h -src/libstddjb/waitn_reap_posix.o src/libstddjb/waitn_reap_posix.lo: src/libstddjb/waitn_reap_posix.c src/include/skalibs/djbunix.h src/libstddjb/waitpid_nointr.o src/libstddjb/waitpid_nointr.lo: src/libstddjb/waitpid_nointr.c src/include/skalibs/djbunix.h src/libstddjb/waitpids.o src/libstddjb/waitpids.lo: src/libstddjb/waitpids.c src/include/skalibs/djbunix.h src/libstddjb/waitpids_nohang.o src/libstddjb/waitpids_nohang.lo: src/libstddjb/waitpids_nohang.c src/include/skalibs/djbunix.h @@ -818,7 +810,7 @@ src/libunixonacid/opendir_at.o src/libunixonacid/opendir_at.lo: src/libunixonaci src/libunixonacid/opengetlnclose.o src/libunixonacid/opengetlnclose.lo: src/libunixonacid/opengetlnclose.c src/include/skalibs/allreadwrite.h src/include/skalibs/buffer.h src/include/skalibs/djbunix.h src/include/skalibs/skamisc.h src/include/skalibs/unix-transactional.h src/libunixonacid/opengetlnclose_at.o src/libunixonacid/opengetlnclose_at.lo: src/libunixonacid/opengetlnclose_at.c src/include/skalibs/allreadwrite.h src/include/skalibs/buffer.h src/include/skalibs/djbunix.h src/include/skalibs/skamisc.h src/include/skalibs/unix-transactional.h src/libunixonacid/openreadnclose_at.o src/libunixonacid/openreadnclose_at.lo: src/libunixonacid/openreadnclose_at.c src/include/skalibs/djbunix.h src/include/skalibs/unix-transactional.h -src/libunixonacid/openslurpclose_at.o src/libunixonacid/openslurpclose_at.lo: src/libunixonacid/openslurpclose_at.c src/include/skalibs/djbunix.h src/include/skalibs/unix-transactional.h +src/libunixonacid/openslurpnclose_at.o src/libunixonacid/openslurpnclose_at.lo: src/libunixonacid/openslurpnclose_at.c src/include/skalibs/djbunix.h src/include/skalibs/unix-transactional.h src/libunixonacid/openwritenclose_at.o src/libunixonacid/openwritenclose_at.lo: src/libunixonacid/openwritenclose_at.c src/include/skalibs/allreadwrite.h src/include/skalibs/djbunix.h src/include/skalibs/unix-transactional.h src/libunixonacid/openwritevnclose_at.o src/libunixonacid/openwritevnclose_at.lo: src/libunixonacid/openwritevnclose_at.c src/include/skalibs/allreadwrite.h src/include/skalibs/djbunix.h src/include/skalibs/siovec.h src/include/skalibs/unix-transactional.h src/libunixonacid/sassclient_ack.o src/libunixonacid/sassclient_ack.lo: src/libunixonacid/sassclient_ack.c src/include/skalibs/genqdyn.h src/include/skalibs/sassclient.h src/include/skalibs/uint32.h diff --git a/package/info b/package/info index ee6e127..546b096 100644 --- a/package/info +++ b/package/info @@ -1,4 +1,4 @@ package=skalibs -version=2.15.2.0 +version=2.16.0.0 category=prog package_macro_name=SKALIBS diff --git a/src/include/skalibs/djbunix.h b/src/include/skalibs/djbunix.h index 0bba29a..51be4aa 100644 --- a/src/include/skalibs/djbunix.h +++ b/src/include/skalibs/djbunix.h @@ -74,13 +74,7 @@ extern pid_t wait_nointr (int *) ; #define wait_nohang(wstat) waitpid_nohang(-1, (wstat)) extern pid_t wait_pid_nohang (pid_t, int *) ; extern int wait_pids_nohang (pid_t const *, unsigned int, int *) ; - -/* These will disappear or be refactored */ extern unsigned int wait_reap (void) ; -extern int waitn (pid_t *, unsigned int) ; -extern int waitn_posix (pid_t *, unsigned int, int *) ; -extern int waitn_reap (pid_t *, unsigned int) ; -extern int waitn_reap_posix (pid_t *, unsigned int, int *) ; extern int fd_chdir (int) ; diff --git a/src/include/skalibs/unix-transactional.h b/src/include/skalibs/unix-transactional.h index 9b884f9..ae8a263 100644 --- a/src/include/skalibs/unix-transactional.h +++ b/src/include/skalibs/unix-transactional.h @@ -40,7 +40,8 @@ extern int openc_appendat (int, char const *) ; extern int openc_appendatb (int, char const *) ; extern ssize_t openreadnclose_at (int, char const *, char *, size_t) ; -extern int openslurpclose_at (int, char const *, stralloc *) ; +#define openslurpclose_at(dirfd, fn, sa) openslurpnclose_at(dirfd, fn, (sa), 0) +extern int openslurpnclose_at (int, char const *, stralloc *, size_t) ; extern int opengetlnclose_at (int, char const *, stralloc *, int) ; extern size_t openwritenclose_at (int, char const *, char const *, size_t) ; diff --git a/src/libstddjb/waitn.c b/src/libstddjb/waitn.c deleted file mode 100644 index 4d980cc..0000000 --- a/src/libstddjb/waitn.c +++ /dev/null @@ -1,11 +0,0 @@ -/* ISC license. */ - -#include - -#include - -int waitn (pid_t *pids, unsigned int n) -{ - int dummy ; - return waitn_posix(pids, n, &dummy) ; -} diff --git a/src/libstddjb/waitn_posix.c b/src/libstddjb/waitn_posix.c deleted file mode 100644 index ea5935d..0000000 --- a/src/libstddjb/waitn_posix.c +++ /dev/null @@ -1,21 +0,0 @@ -/* ISC license. */ - -#include - -#include - -int waitn_posix (pid_t *pids, unsigned int n, int *w) -{ - pid_t wanted = n ? pids[n-1] : 0 ; - while (n) - { - int wstat ; - unsigned int i = 0 ; - pid_t pid = wait_nointr(&wstat) ; - if (pid < 0) return 0 ; - for (; i < n ; i++) if (pid == pids[i]) break ; - if (i < n) pids[i] = pids[--n] ; - if (pid == wanted) *w = wstat ; - } - return 1 ; -} diff --git a/src/libstddjb/waitn_reap.c b/src/libstddjb/waitn_reap.c deleted file mode 100644 index 2c4ebe8..0000000 --- a/src/libstddjb/waitn_reap.c +++ /dev/null @@ -1,11 +0,0 @@ -/* ISC license. */ - -#include - -#include - -int waitn_reap (pid_t *pids, unsigned int len) -{ - int dummy ; - return waitn_reap_posix(pids, len, &dummy) ; -} diff --git a/src/libstddjb/waitn_reap_posix.c b/src/libstddjb/waitn_reap_posix.c deleted file mode 100644 index 4a6994f..0000000 --- a/src/libstddjb/waitn_reap_posix.c +++ /dev/null @@ -1,22 +0,0 @@ -/* ISC license. */ - -#include - -#include - -int waitn_reap_posix (pid_t *pids, unsigned int len, int *w) -{ - pid_t wanted = len ? pids[len-1] : 0 ; - unsigned int n = 0 ; - while (len) - { - int wstat ; - int r = wait_pids_nohang(pids, len, &wstat) ; - if (r < 0) return r ; - else if (!r) break ; - if (pids[r-1] == wanted) *w = wstat ; - pids[r-1] = pids[--len] ; - n++ ; - } - return n ; -} diff --git a/src/libunixonacid/openslurpclose_at.c b/src/libunixonacid/openslurpclose_at.c deleted file mode 100644 index 4ab6fa5..0000000 --- a/src/libunixonacid/openslurpclose_at.c +++ /dev/null @@ -1,17 +0,0 @@ -/* ISC license. */ - -#include -#include - -int openslurpclose_at (int dirfd, char const *fn, stralloc *sa) -{ - int fd = openc_readatb(dirfd, fn) ; - if (fd < 0) return 0 ; - if (!slurp(sa, fd)) - { - fd_close(fd) ; - return 0 ; - } - fd_close(fd) ; - return 1 ; -} diff --git a/src/libunixonacid/openslurpnclose_at.c b/src/libunixonacid/openslurpnclose_at.c new file mode 100644 index 0000000..8880a71 --- /dev/null +++ b/src/libunixonacid/openslurpnclose_at.c @@ -0,0 +1,17 @@ +/* ISC license. */ + +#include +#include + +int openslurpnclose_at (int dirfd, char const *fn, stralloc *sa, size_t n) +{ + int fd = openc_readatb(dirfd, fn) ; + if (fd < 0) return 0 ; + if (!slurpn(fd, sa, n)) + { + fd_close(fd) ; + return 0 ; + } + fd_close(fd) ; + return 1 ; +} -- cgit v1.3.1