commit 48e06b650a393ca6fc0b65bd601d67904dd669e8
parent 07db6986589d42e2dcb5b1e91c57da9ec990bc4e
Author: Laurent Bercot <ska-skaware@skarnet.org>
Date: Fri, 6 Sep 2019 09:37:56 +0000
Change tain_now_set_* API: also give an initial value
Diffstat:
4 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/src/include/skalibs/tai.h b/src/include/skalibs/tai.h
@@ -94,15 +94,17 @@ extern int sysclock_from_tain (tain_t *, tain_t const *) ;
extern tain_clockread_func_t sysclock_get ;
extern tain_clockread_func_t tain_wallclock_read ;
#define tain_wallclock_read_g() tain_wallclock_read(&STAMP)
-extern int tain_stopwatch_init (clock_t, tain_t *) ;
+extern int tain_stopwatch_init (tain_t *, clock_t, tain_t *) ;
extern int tain_stopwatch_read (tain_t *, clock_t, tain_t const *) ;
#define tain_stopwatch_read_g(cl, offset) tain_stopwatch_read(&STAMP, (cl), offset)
extern tain_clockread_func_t_ref tain_now ;
#define tain_now_g() (*tain_now)(&STAMP)
#define tain_copynow(t) (*(t) = STAMP)
-extern void tain_now_set_wallclock (void) ;
-extern void tain_now_set_stopwatch (void) ;
+extern tain_clockread_func_t tain_now_set_wallclock ;
+#define tain_now_set_wallclock_g() tain_now_set_wallclock(&STAMP)
+extern tain_clockread_func_t tain_now_set_stopwatch ;
+#define tain_now_set_stopwatch_g() tain_now_set_stopwatch(&STAMP)
extern int sysclock_set (tain_t const *) ;
extern int tain_setnow (tain_t const *) ;
diff --git a/src/libstddjb/tain_now_set_stopwatch.c b/src/libstddjb/tain_now_set_stopwatch.c
@@ -17,21 +17,24 @@
static tain_t offset ;
-static int tain_now_stopwatch (tain_t *a)
+static int tain_now_stopwatch (tain_t *now)
{
- return tain_stopwatch_read(a, SKALIBS_STOPWATCH, &offset) ;
+ return tain_stopwatch_read(now, SKALIBS_STOPWATCH, &offset) ;
}
-void tain_now_set_stopwatch (void)
+int tain_now_set_stopwatch (tain_t *now)
{
- if (!tain_stopwatch_init(SKALIBS_STOPWATCH, &offset)) return ;
+ if (!tain_stopwatch_init(now, SKALIBS_STOPWATCH, &offset))
+ return tain_now_set_wallclock(now) ;
tain_now = &tain_now_stopwatch ;
+ return 1 ;
}
#else
-void tain_now_set_stopwatch (void)
+int tain_now_set_stopwatch (tain_t *now)
{
+ return tain_now_set_wallclock(now) ;
}
#endif
diff --git a/src/libstddjb/tain_now_set_wallclock.c b/src/libstddjb/tain_now_set_wallclock.c
@@ -4,7 +4,8 @@
#include <skalibs/tai.h>
-void tain_now_set_wallclock (void)
+int tain_now_set_wallclock (tain_t *now)
{
tain_now = &tain_wallclock_read ;
+ return tain_wallclock_read(now) ;
}
diff --git a/src/libstddjb/tain_stopwatch.c b/src/libstddjb/tain_stopwatch.c
@@ -7,15 +7,15 @@
#include <time.h>
-int tain_stopwatch_init (clock_t cl, tain_t *offset)
+int tain_stopwatch_init (tain_t *now, clock_t cl, tain_t *offset)
{
tain_t a, b ;
struct timespec ts ;
- if (!tain_wallclock_read(&a)) return 0 ;
if (clock_gettime(cl, &ts) < 0) return 0 ;
if (!tain_from_timespec(&b, &ts)) return 0 ;
- tain_add(&a, &a, &tain_nano500) ;
+ if (!tain_wallclock_read(&a)) return 0 ;
tain_sub(offset, &a, &b) ;
+ *now = a ;
return 1 ;
}
@@ -32,16 +32,17 @@ int tain_stopwatch_read (tain_t *a, clock_t cl, tain_t const *offset)
#include <errno.h>
-int tain_stopwatch_init (clock_t cl, tain_t *offset)
+int tain_stopwatch_init (tain_t *now, clock_t cl, tain_t *offset)
{
+ (void)now ;
(void)cl ;
(void)offset ;
return (errno = ENOSYS, 0) ;
}
-int tain_stopwatch_read (tain_t *a, clock_t cl, tain_t const *offset)
+int tain_stopwatch_read (tain_t *now, clock_t cl, tain_t const *offset)
{
- (void)a ;
+ (void)now ;
(void)cl ;
(void)offset ;
return (errno = ENOSYS, 0) ;