diff options
| author | Mattias Andrée <maandree@kth.se> | 2020-09-04 21:51:38 +0200 | 
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2020-09-04 21:51:38 +0200 | 
| commit | 8c85de545f2fc998accd7d6f88bebf234c728ce5 (patch) | |
| tree | 93866e6ab9e378dd96d7cb063f5a84096e5224cc | |
| parent | Use sigaction instead of signal and siginterrupt (diff) | |
| download | mongotimer-8c85de545f2fc998accd7d6f88bebf234c728ce5.tar.gz mongotimer-8c85de545f2fc998accd7d6f88bebf234c728ce5.tar.bz2 mongotimer-8c85de545f2fc998accd7d6f88bebf234c728ce5.tar.xz | |
Add leap second support
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
| -rw-r--r-- | config.mk | 2 | ||||
| -rw-r--r-- | mongoclock.c | 25 | 
2 files changed, 25 insertions, 2 deletions
| @@ -2,5 +2,5 @@ PREFIX = /usr/local  MANPREFIX = $(PREFIX)/share/man  CFLAGS   = -std=c99 -Wall -Wextra -O2 -CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 +CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -DUSE_ADJTIMEX  LDFLAGS  = -s diff --git a/mongoclock.c b/mongoclock.c index cf34e6d..442a380 100644 --- a/mongoclock.c +++ b/mongoclock.c @@ -9,6 +9,9 @@  #include <string.h>  #include <time.h>  #include <unistd.h> +#ifdef USE_ADJTIMEX +# include <sys/timex.h> +#endif  #include "arg.h" @@ -80,7 +83,6 @@ print_time(const char ***str, size_t y, size_t x)  int  main(int argc, char *argv[])  { -	time_t now_;  	struct tm *now;  	const char **digits[9];  	size_t x = 0, y = 0; @@ -90,6 +92,12 @@ main(int argc, char *argv[])  	struct itimerspec itimerspec;  	uint64_t _overrun;  	struct sigaction sigact; +#ifdef USE_ADJTIMEX +	struct timex timex; +	int r; +#else +	time_t now_; +#endif  	ARGBEGIN {  	default: @@ -123,6 +131,10 @@ main(int argc, char *argv[])  	sigact.sa_handler = sigwinch;  	sigaction(SIGWINCH, &sigact, NULL); +#ifdef USE_ADJTIMEX +	memset(&timex, 0, sizeof(timex)); +#endif +  	while (!caught_sigterm) {  		if (caught_sigwinch) {  			if (ioctl(STDOUT_FILENO, (unsigned long)TIOCGWINSZ, &winsize) < 0) { @@ -152,12 +164,23 @@ main(int argc, char *argv[])  			continue;  		} +#ifdef USE_ADJTIMEX +		r = adjtimex(&timex); +		if (r == -1) +			goto fail; +		now = localtime(&timex.time.tv_sec); +		if (now == NULL) +			goto fail; +		if (r == TIME_OOP) +			now->tm_sec += 1; +#else  		now_ = time(NULL);  		if (now_ == -1)  			goto fail;  		now = localtime(&now_);  		if (now == NULL)  			goto fail; +#endif  		digits[0] = mongo_ds[now->tm_hour / 10];  		digits[1] = mongo_ds[now->tm_hour % 10]; | 
