skalibs

Mirror/fork of https://skarnet.org/software/skalibs/
git clone https://ccx.te2000.cz/git/skalibs
Log | Files | Refs | README | LICENSE

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:
Msrc/include/skalibs/tai.h | 8+++++---
Msrc/libstddjb/tain_now_set_stopwatch.c | 13++++++++-----
Msrc/libstddjb/tain_now_set_wallclock.c | 3++-
Msrc/libstddjb/tain_stopwatch.c | 13+++++++------
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) ;