aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-05-27 02:35:28 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-05-27 02:35:28 +0000
commit58c02e5fee86a059231fec3bc80b44774b1d603c (patch)
tree41623447f890d447e7b504d66510d5431faee0e9
parenta668770a4268fd4c61ae365a90e354bd073755b4 (diff)
downloadskalibs-58c02e5fee86a059231fec3bc80b44774b1d603c.tar.gz
iopause: limit spurious returns. sarealpath: align no PATH_MAX case.
-rw-r--r--src/libstddjb/iopause_select.c2
-rw-r--r--src/libstddjb/iopause_stamp.c22
-rw-r--r--src/libstddjb/sarealpath.c2
3 files changed, 19 insertions, 7 deletions
diff --git a/src/libstddjb/iopause_select.c b/src/libstddjb/iopause_select.c
index 6ca2f20..8cf0b87 100644
--- a/src/libstddjb/iopause_select.c
+++ b/src/libstddjb/iopause_select.c
@@ -31,7 +31,7 @@ int iopause_select (iopause_fd *x, unsigned int len, tain const *deadline, tain
else deadline = 0 ;
}
#ifndef SKALIBS_HASSELECTINFINITE
- if (deadline && tv.tv_sec >= 100000000)
+ if (tv.tv_sec >= 100000000)
{
tv.tv_sec = 100000000 ;
tv.tv_usec = 0 ;
diff --git a/src/libstddjb/iopause_stamp.c b/src/libstddjb/iopause_stamp.c
index 890909b..0eb546b 100644
--- a/src/libstddjb/iopause_stamp.c
+++ b/src/libstddjb/iopause_stamp.c
@@ -8,10 +8,20 @@
int iopause_stamp (iopause_fd *x, unsigned int n, tain const *deadline, tain *stamp)
{
int e = errno ;
- int r ;
- do r = iopause(x, n, deadline, stamp) ;
- while (r == -1 && errno == EINTR) ;
- if (stamp) tain_now(stamp) ;
- if (r >= 0) errno = e ;
- return r ;
+ for (;;)
+ {
+ int r = iopause(x, n, deadline, stamp) ;
+ if (r == -1)
+ {
+ if (errno != EINTR) return -1 ;
+ if (stamp) tain_now(stamp) ;
+ }
+ else
+ {
+ if (stamp) tain_now(stamp) ;
+ errno = e ;
+ if (r > 0) return r ;
+ if (deadline && stamp && !tain_less(stamp, deadline)) return 0 ;
+ }
+ }
}
diff --git a/src/libstddjb/sarealpath.c b/src/libstddjb/sarealpath.c
index 8c994c4..ff4ee4f 100644
--- a/src/libstddjb/sarealpath.c
+++ b/src/libstddjb/sarealpath.c
@@ -3,6 +3,7 @@
#include <limits.h>
#include <string.h>
#include <stdlib.h>
+
#include <skalibs/stralloc.h>
#include <skalibs/djbunix.h>
@@ -23,6 +24,7 @@ int sarealpath (stralloc *sa, char const *path)
return -1 ;
}
free(p) ;
+ sa->len-- ;
#endif
}
else