aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-04-04 09:30:22 +0000
committerLaurent Bercot <ska@appnovation.com>2025-04-04 09:30:22 +0000
commit84b1c5f50749523d940a449d8f684a38a5d157f5 (patch)
treed8bd3c0fd5499b138a5c130373b22f5bedd5973b /src
parentc8c1cab2b6a2754acbe7ee130c356383d0289f09 (diff)
downloadskalibs-84b1c5f50749523d940a449d8f684a38a5d157f5.tar.gz
Add tain_addmsec, millisleep
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/skalibs/posixplz.h1
-rw-r--r--src/include/skalibs/tai.h2
-rw-r--r--src/libposixplz/millisleep.c12
-rw-r--r--src/libstddjb/tain_addmsec.c10
4 files changed, 25 insertions, 0 deletions
diff --git a/src/include/skalibs/posixplz.h b/src/include/skalibs/posixplz.h
index c990379..c7e8dd2 100644
--- a/src/include/skalibs/posixplz.h
+++ b/src/include/skalibs/posixplz.h
@@ -39,6 +39,7 @@ extern void munmap_void (void *, size_t) ;
extern pid_t doublefork (void) ;
extern pid_t fork_newpid (void) ;
extern int touch (char const *) ;
+extern unsigned int millisleep (unsigned int) ;
extern int mkfiletemp (char *, create_func_ref, mode_t, void *) ;
extern int mklinktemp (char const *, char *, link_func_ref) ;
diff --git a/src/include/skalibs/tai.h b/src/include/skalibs/tai.h
index 0e38b8c..c449d9a 100644
--- a/src/include/skalibs/tai.h
+++ b/src/include/skalibs/tai.h
@@ -121,6 +121,8 @@ extern int tain_add (tain *, tain const *, tain const *) ;
#define tain_add_g(deadline, tto) tain_add(deadline, &STAMP, tto)
extern int tain_addsec (tain *, tain const *, int) ;
#define tain_addsec_g(deadline, n) tain_addsec(deadline, &STAMP, n)
+extern int tain_addmsec (tain *, tain const *, unsigned int) ;
+#define tain_addmsec_g(deadline, n) tain_addmillisec(deadline, &STAMP, n)
extern int tain_sub (tain *, tain const *, tain const *) ;
extern int tain_less (tain const *, tain const *) gccattr_pure ;
#define tain_future(deadline) tain_less(&STAMP, (deadline))
diff --git a/src/libposixplz/millisleep.c b/src/libposixplz/millisleep.c
new file mode 100644
index 0000000..e781f58
--- /dev/null
+++ b/src/libposixplz/millisleep.c
@@ -0,0 +1,12 @@
+/* ISC license. */
+
+#include <time.h>
+
+#include <skalibs/posixplz.h>
+
+unsigned int millisleep (unsigned int msec)
+{
+ struct timespec ts = { .tv_sec = msec / 1000, .tv_nsec = (long)(msec % 1000) * 1000000U } ;
+ struct timespec tr ;
+ return nanosleep(&ts, &tr) == -1 ? 1000 * tr.tv_sec + tr.tv_nsec / 1000000U : 0 ;
+}
diff --git a/src/libstddjb/tain_addmsec.c b/src/libstddjb/tain_addmsec.c
new file mode 100644
index 0000000..5608672
--- /dev/null
+++ b/src/libstddjb/tain_addmsec.c
@@ -0,0 +1,10 @@
+/* ISC license. */
+
+#include <skalibs/uint64.h>
+#include <skalibs/tai.h>
+
+int tain_addmsec (tain *b, tain const *a, unsigned int c)
+{
+ tain tn = { .sec = { .x = (uint64_t)c / 1000 }, .nano = (c % 1000) * 1000000U } ;
+ return tain_add(b, a, &tn) ;
+}