From 7de73fefc378cc42b9ed1115b3afa409d0250a48 Mon Sep 17 00:00:00 2001 From: Christian Eggers Date: Tue, 2 Jun 2020 15:01:20 +0200 Subject: [PATCH] Fix printf if time_t is long long On some platforms, time_t has recently switched from "long" to "long long" [1]. For these platforms it is necessary to use "%lld" as printf format specifier because the ABI differs between "long" and "long long". I found no way for creating something similar to PRId64 for time_t. No idea how to determine whether it's "long" or "long long". So I cast everything to "long long" instead. [1] https://git.musl-libc.org/cgit/musl/commit/?id=38143339646a4ccce8afe298c34467767c899f51 Signed-off-by: Christian Eggers --- phc_ctl.c | 8 ++++---- print.c | 8 ++++---- unicast_client.c | 4 ++-- unicast_service.c | 16 ++++++++-------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/phc_ctl.c b/phc_ctl.c index 149ee9e4..91913426 100644 --- a/phc_ctl.c +++ b/phc_ctl.c @@ -197,8 +197,8 @@ static int do_set(clockid_t clkid, int cmdc, char *cmdv[]) strerror(errno)); return -1; } else { - pr_notice("set clock time to %ld.%09ld or %s", - ts.tv_sec, ts.tv_nsec, ctime(&ts.tv_sec)); + pr_notice("set clock time to %lld.%09ld or %s", + (long long)ts.tv_sec, ts.tv_nsec, ctime(&ts.tv_sec)); } return args_to_eat; @@ -215,8 +215,8 @@ static int do_get(clockid_t clkid, int cmdc, char *cmdv[]) return -1; } else { - pr_notice("clock time is %ld.%09lu or %s", - ts.tv_sec, ts.tv_nsec, ctime(&ts.tv_sec)); + pr_notice("clock time is %lld.%09lu or %s", + (long long)ts.tv_sec, ts.tv_nsec, ctime(&ts.tv_sec)); } /* get operation does not require any arguments */ diff --git a/print.c b/print.c index 6c48e1e3..c428895c 100644 --- a/print.c +++ b/print.c @@ -73,16 +73,16 @@ void print(int level, char const *format, ...) if (verbose) { f = level >= LOG_NOTICE ? stdout : stderr; - fprintf(f, "%s[%ld.%03ld]: %s%s%s\n", + fprintf(f, "%s[%lld.%03ld]: %s%s%s\n", progname ? progname : "", - ts.tv_sec, ts.tv_nsec / 1000000, + (long long)ts.tv_sec, ts.tv_nsec / 1000000, message_tag ? message_tag : "", message_tag ? " " : "", buf); fflush(f); } if (use_syslog) { - syslog(level, "[%ld.%03ld] %s%s%s", - ts.tv_sec, ts.tv_nsec / 1000000, + syslog(level, "[%lld.%03ld] %s%s%s", + (long long)ts.tv_sec, ts.tv_nsec / 1000000, message_tag ? message_tag : "", message_tag ? " " : "", buf); } diff --git a/unicast_client.c b/unicast_client.c index 67e50cef..98ccc89b 100644 --- a/unicast_client.c +++ b/unicast_client.c @@ -207,7 +207,7 @@ static void unicast_client_set_renewal(struct port *p, long duration) { struct timespec now; - long tmo; + time_t tmo; if (clock_gettime(CLOCK_MONOTONIC, &now)) { pr_err("clock_gettime failed: %m"); @@ -217,7 +217,7 @@ static void unicast_client_set_renewal(struct port *p, tmo = now.tv_sec + duration; if (!master->renewal_tmo || tmo < master->renewal_tmo) { master->renewal_tmo = tmo; - pr_debug("port %d: renewal timeout at %ld", portnum(p), tmo); + pr_debug("port %d: renewal timeout at %lld", portnum(p), (long long)tmo); } } diff --git a/unicast_service.c b/unicast_service.c index ec5ee6ca..d42c5493 100644 --- a/unicast_service.c +++ b/unicast_service.c @@ -209,9 +209,9 @@ static void unicast_service_extend(struct unicast_client_address *client, tmo = now.tv_sec + req->durationField; if (tmo > client->grant_tmo) { client->grant_tmo = tmo; - pr_debug("%s grant of 0x%x extended to %ld", + pr_debug("%s grant of 0x%x extended to %lld", pid2str(&client->portIdentity), - client->message_types, tmo); + client->message_types, (long long)tmo); } } @@ -226,8 +226,8 @@ static int unicast_service_rearm_timer(struct port *p) interval = pqueue_peek(p->unicast_service->queue); if (interval) { tmo.it_value = interval->tmo; - pr_debug("arming timer tmo={%ld,%ld}", - interval->tmo.tv_sec, interval->tmo.tv_nsec); + pr_debug("arming timer tmo={%lld,%ld}", + (long long)interval->tmo.tv_sec, interval->tmo.tv_nsec); } else { pr_debug("stopping unicast service timer"); } @@ -499,8 +499,8 @@ int unicast_service_timer(struct port *p) while ((interval = pqueue_peek(p->unicast_service->queue)) != NULL) { - pr_debug("peek i={2^%d} tmo={%ld,%ld}", interval->log_period, - interval->tmo.tv_sec, interval->tmo.tv_nsec); + pr_debug("peek i={2^%d} tmo={%lld,%ld}", interval->log_period, + (long long)interval->tmo.tv_sec, interval->tmo.tv_nsec); if (timespec_compare(&now, &interval->tmo) > 0) { break; @@ -519,8 +519,8 @@ int unicast_service_timer(struct port *p) } interval_increment(interval); - pr_debug("next i={2^%d} tmo={%ld,%ld}", interval->log_period, - interval->tmo.tv_sec, interval->tmo.tv_nsec); + pr_debug("next i={2^%d} tmo={%lld,%ld}", interval->log_period, + (long long)interval->tmo.tv_sec, interval->tmo.tv_nsec); pqueue_insert(p->unicast_service->queue, interval); }