diff options
| -rw-r--r-- | src/libstddjb/iopause_select.c | 2 | ||||
| -rw-r--r-- | src/libstddjb/iopause_stamp.c | 22 | ||||
| -rw-r--r-- | src/libstddjb/sarealpath.c | 2 |
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 |
