From c5d6bea6d9f98a593890f9694ef1575d744e5a32 Mon Sep 17 00:00:00 2001
From: Laurent Bercot
Date: Mon, 11 May 2026 09:10:11 +0000
Subject: Prepare for 2.15.0.1; add selectshorttimeout sysdeps (yay MacOS)
---
configure | 6 ++++--
doc/index.html | 4 ++--
doc/license.html | 2 +-
doc/upgrade.html | 6 ++++++
package/deps.mak | 2 +-
package/info | 2 +-
src/libstddjb/iopause_select.c | 8 ++++++++
src/sysdeps/tryselectshorttimeout.c | 41 +++++++++++++++++++++++++++++++++++++
8 files changed, 64 insertions(+), 7 deletions(-)
create mode 100644 src/sysdeps/tryselectshorttimeout.c
diff --git a/configure b/configure
index 53d4aa7..7105869 100755
--- a/configure
+++ b/configure
@@ -52,9 +52,10 @@ Sysdeps autodetection override:
--with-sysdep-K=V assume sysdep K has the value V [autodetected]
List of mandatory sysdeps to provide by hand for cross-compiling:
- devurandom (yes|no): =yes if you have a working /dev/urandom
- posixspawnearlyreturn (yes|no): =yes if you have an old glibc or otherwise bad posix_spawn
+ devurandom (yes|no): =yes if the target has a working /dev/urandom
+ posixspawnearlyreturn (yes|no): =yes if the target has an old glibc or otherwise bad posix_spawn
procselfexe (path|none): =path if you can get the executable name via readlink(path)
+ selectshorttimeout (yes|no): =yes if the target's select() fails on very long timeouts (MacOS, old OpenBSD)
EOF
exit 0
}
@@ -733,6 +734,7 @@ choose cl pthreadmutexclocklock 'pthread_mutex_clocklock()' $pthread_lib
choose clr devurandom '/dev/urandom'
choose clr posixspawnearlyreturn 'posix_spawn() return early' $spawn_lib
choosevalue procselfexe '/proc/self/exe' /proc/self/exe /proc/curproc/exe /proc/curproc/file /proc/self/path/a.out
+choose clr selectshorttimeout 'a select() that fails on long timeouts'
# Finally, produce config.mak and config.h
diff --git a/doc/index.html b/doc/index.html
index aded07c..613920e 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -61,8 +61,8 @@ with a standard C development environment
Download
- - The current released version of skalibs is 2.15.0.0.
-You can access its checksum here.
+ - The current released version of skalibs is 2.15.0.1.
+You can access its checksum here.
- Alternatively, you can checkout a copy of the
skalibs
git repository:
diff --git a/doc/license.html b/doc/license.html
index 858e998..605a169 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.0.0, I'm not going to enforce those restrictions, but if you're
+As of 2.15.0.1, 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 20d3cd3..86a44f0 100644
--- a/doc/upgrade.html
+++ b/doc/upgrade.html
@@ -17,6 +17,12 @@
skarnet.org
+ in 2.15.0.1
+
+
+ - No functional changes.
+
+
in 2.15.0.0
diff --git a/package/deps.mak b/package/deps.mak
index 99a9a64..ab5fc6f 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -419,7 +419,7 @@ src/libstddjb/int64_scanlist.o src/libstddjb/int64_scanlist.lo: src/libstddjb/in
src/libstddjb/iopause.o src/libstddjb/iopause.lo: src/libstddjb/iopause.c src/include/skalibs/config.h src/include/skalibs/iopause.h src/include/skalibs/sysdeps.h
src/libstddjb/iopause_poll.o src/libstddjb/iopause_poll.lo: src/libstddjb/iopause_poll.c src/include/skalibs/iopause.h src/include/skalibs/tai.h
src/libstddjb/iopause_ppoll.o src/libstddjb/iopause_ppoll.lo: src/libstddjb/iopause_ppoll.c src/include/skalibs/iopause.h src/include/skalibs/nonposix.h src/include/skalibs/sysdeps.h src/include/skalibs/tai.h
-src/libstddjb/iopause_select.o src/libstddjb/iopause_select.lo: src/libstddjb/iopause_select.c src/include/skalibs/bsdsnowflake.h src/include/skalibs/iopause.h src/include/skalibs/tai.h
+src/libstddjb/iopause_select.o src/libstddjb/iopause_select.lo: src/libstddjb/iopause_select.c src/include/skalibs/bsdsnowflake.h src/include/skalibs/iopause.h src/include/skalibs/sysdeps.h src/include/skalibs/tai.h
src/libstddjb/iopause_stamp.o src/libstddjb/iopause_stamp.lo: src/libstddjb/iopause_stamp.c src/include/skalibs/iopause.h src/include/skalibs/tai.h
src/libstddjb/ip46_scan.o src/libstddjb/ip46_scan.lo: src/libstddjb/ip46_scan.c src/include/skalibs/fmtscan.h src/include/skalibs/ip46.h
src/libstddjb/ip46_scanlist.o src/libstddjb/ip46_scanlist.lo: src/libstddjb/ip46_scanlist.c src/include/skalibs/fmtscan.h src/include/skalibs/ip46.h
diff --git a/package/info b/package/info
index 01bbfcc..430eab8 100644
--- a/package/info
+++ b/package/info
@@ -1,4 +1,4 @@
package=skalibs
-version=2.15.0.0
+version=2.15.0.1
category=prog
package_macro_name=SKALIBS
diff --git a/src/libstddjb/iopause_select.c b/src/libstddjb/iopause_select.c
index 823f20b..863bea7 100644
--- a/src/libstddjb/iopause_select.c
+++ b/src/libstddjb/iopause_select.c
@@ -1,5 +1,6 @@
/* ISC license. */
+#include
#include
#include /* Solaris... */
@@ -29,6 +30,13 @@ int iopause_select (iopause_fd *x, unsigned int len, tain const *deadline, tain
if (errno != EOVERFLOW) return -1 ;
else deadline = 0 ;
}
+#ifdef SKALIBS_HASSELECTSHORTTIMEOUT
+ if (deadline && tv.tv_sec >= 100000000)
+ {
+ tv.tv_sec = 99999999 ;
+ tv.tv_usec = 0 ;
+ }
+#endif
}
for (unsigned int i = 0 ; i < len ; i++)
diff --git a/src/sysdeps/tryselectshorttimeout.c b/src/sysdeps/tryselectshorttimeout.c
new file mode 100644
index 0000000..9049079
--- /dev/null
+++ b/src/sysdeps/tryselectshorttimeout.c
@@ -0,0 +1,41 @@
+/* ISC license. */
+
+#undef _POSIX_C_SOURCE
+#undef _XOPEN_SOURCE
+
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE
+#endif
+#ifndef _NETBSD_SOURCE
+#define _NETBSD_SOURCE
+#endif
+#ifndef _DARWIN_C_SOURCE
+#define _DARWIN_C_SOURCE
+#endif
+
+#include
+#include
+#include
+#include
+#include
+
+static void alrm_handler (int sig)
+{
+ (void)sig ;
+ _exit(1) ;
+}
+
+int main (void)
+{
+ struct sigaction action = { .sa_handler = &alrm_handler, .sa_flags = SA_NOCLDSTOP | SA_RESTART } ;
+ struct timeval tv = { .tv_sec = 100000000, .tv_usec = 0 } ;
+ fd_set r, w, x ;
+ FD_ZERO(&r) ;
+ FD_ZERO(&w) ;
+ FD_ZERO(&x) ;
+ sigfillset(&action.sa_mask) ;
+ if (sigaction(SIGALRM, &action, 0) == -1) _exit(111) ;
+ alarm(1) ;
+ if (select(1, &r, &w, &x, &tv) == -1) _exit(errno == EINVAL ? 0 : 111) ;
+ _exit(1) ;
+}
--
cgit v1.3.1