aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--doc/libstddjb/tai.html6
-rw-r--r--package/deps.mak2
-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
7 files changed, 34 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 20fdf45..e02952a 100644
--- a/NEWS
+++ b/NEWS
@@ -8,7 +8,7 @@ In 2.14.4.0
- New functions: buffer_timed_getv, buffer_timed_putv,
timed_read, timed_readv, timed_Write, timed_writev
- New sysdeps, better handling of variable sysdeps
- - New function: sagetexecname
+ - New functions: sagetexecname, tain_addmsec, millisleep
In 2.14.3.0
diff --git a/doc/libstddjb/tai.html b/doc/libstddjb/tai.html
index dcdad11..080a9dd 100644
--- a/doc/libstddjb/tai.html
+++ b/doc/libstddjb/tai.html
@@ -407,6 +407,12 @@ Adds <em>c</em> seconds to *<em>a1</em> and stores the result into <em>a</em>.
</p>
<p>
+<code> int tain_addmsec (tain *a, tain const *a1, unsigned int c) </code> <br />
+Adds <em>c</em> milliseconds to *<em>a1</em> and stores the result into <em>a</em>.
+Unlike with the previous function, <em>c</em> cannot be negative.
+</p>
+
+<p>
<code> void tain_half (tain *a, tain const *b) </code> <br />
Stores *<em>b</em>/2 into <em>a</em>. *<em>b</em> must be relative.
</p>
diff --git a/package/deps.mak b/package/deps.mak
index abd27b5..ef923c4 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -174,6 +174,7 @@ src/libposixplz/execvep_loose.o src/libposixplz/execvep_loose.lo: src/libposixpl
src/libposixplz/fork_newpid.o src/libposixplz/fork_newpid.lo: src/libposixplz/fork_newpid.c src/include/skalibs/nonposix.h src/include/skalibs/sysdeps.h src/include/skalibs/uint64.h
src/libposixplz/getpeereid.o src/libposixplz/getpeereid.lo: src/libposixplz/getpeereid.c src/include/skalibs/nonposix.h src/include/skalibs/posixplz.h src/include/skalibs/sysdeps.h
src/libposixplz/memmem.o src/libposixplz/memmem.lo: src/libposixplz/memmem.c src/include/skalibs/posixplz.h src/include/skalibs/sysdeps.h
+src/libposixplz/millisleep.o src/libposixplz/millisleep.lo: src/libposixplz/millisleep.c src/include/skalibs/posixplz.h
src/libposixplz/mkbtemp.o src/libposixplz/mkbtemp.lo: src/libposixplz/mkbtemp.c src/include/skalibs/djbunix.h src/include/skalibs/posixplz.h
src/libposixplz/mkctemp.o src/libposixplz/mkctemp.lo: src/libposixplz/mkctemp.c src/include/skalibs/djbunix.h src/include/skalibs/posixplz.h
src/libposixplz/mkfiletemp.o src/libposixplz/mkfiletemp.lo: src/libposixplz/mkfiletemp.c src/include/skalibs/posixplz.h src/include/skalibs/random.h
@@ -618,6 +619,7 @@ src/libstddjb/tai_u64.o src/libstddjb/tai_u64.lo: src/libstddjb/tai_u64.c src/in
src/libstddjb/tai_unpack.o src/libstddjb/tai_unpack.lo: src/libstddjb/tai_unpack.c src/include/skalibs/tai.h src/include/skalibs/uint64.h
src/libstddjb/tai_unpack_little.o src/libstddjb/tai_unpack_little.lo: src/libstddjb/tai_unpack_little.c src/include/skalibs/tai.h src/include/skalibs/uint64.h
src/libstddjb/tain_add.o src/libstddjb/tain_add.lo: src/libstddjb/tain_add.c src/include/skalibs/tai.h
+src/libstddjb/tain_addmsec.o src/libstddjb/tain_addmsec.lo: src/libstddjb/tain_addmsec.c src/include/skalibs/tai.h src/include/skalibs/uint64.h
src/libstddjb/tain_addsec.o src/libstddjb/tain_addsec.lo: src/libstddjb/tain_addsec.c src/include/skalibs/tai.h src/include/skalibs/uint64.h
src/libstddjb/tain_approx.o src/libstddjb/tain_approx.lo: src/libstddjb/tain_approx.c src/include/skalibs/tai.h
src/libstddjb/tain_earliest1.o src/libstddjb/tain_earliest1.lo: src/libstddjb/tain_earliest1.c src/include/skalibs/tai.h
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) ;
+}