aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-05-11 09:10:11 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-05-11 09:10:11 +0000
commitc5d6bea6d9f98a593890f9694ef1575d744e5a32 (patch)
treef5611169470b25f621cda8073d66dec672d1e46f
parentb95dc9e9c6694df5d7925b1ba806b4e4a95d7db9 (diff)
downloadskalibs-c5d6bea6d9f98a593890f9694ef1575d744e5a32.tar.gz
Prepare for 2.15.0.1; add selectshorttimeout sysdeps (yay MacOS)
-rwxr-xr-xconfigure6
-rw-r--r--doc/index.html4
-rw-r--r--doc/license.html2
-rw-r--r--doc/upgrade.html6
-rw-r--r--package/deps.mak2
-rw-r--r--package/info2
-rw-r--r--src/libstddjb/iopause_select.c8
-rw-r--r--src/sysdeps/tryselectshorttimeout.c41
8 files changed, 64 insertions, 7 deletions
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 </li>
<h3> Download </h3>
<ul>
- <li> The current released version of skalibs is <a href="skalibs-2.15.0.0.tar.gz">2.15.0.0</a>.
-You can access its checksum <a href="skalibs-2.15.0.0.tar.gz.sha256">here</a>. </li>
+ <li> The current released version of skalibs is <a href="skalibs-2.15.0.1.tar.gz">2.15.0.1</a>.
+You can access its checksum <a href="skalibs-2.15.0.1.tar.gz.sha256">here</a>. </li>
<li> Alternatively, you can checkout a copy of the
<a href="//git.skarnet.org/cgi-bin/cgit.cgi/skalibs/">skalibs
git repository</a>:
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. </li>
<p>
<em>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. :-) </em>
</p>
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 @@
<a href="//skarnet.org/">skarnet.org</a>
</p>
+<h2> in 2.15.0.1 </h2>
+
+<ul>
+ <li> No functional changes. </li>
+</ul>
+
<h2> in 2.15.0.0 </h2>
<ul>
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 <skalibs/sysdeps.h>
#include <skalibs/bsdsnowflake.h>
#include <string.h> /* 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 <sys/types.h>
+#include <sys/time.h>
+#include <sys/select.h>
+#include <unistd.h>
+#include <signal.h>
+
+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) ;
+}