pps-tools: use %lld in printf for 64-bit time_t

musl 1.2.0 switched to use 64-bit time_t everywhere, including 32-bit
architectures, causing garbage values to be printed from ppswatch and
ppstest.

Use the correct format string for the affected printf statements and
explicitly cast to long long to avoid potential compatibility issues
with 32-bit glibc.

Signed-off-by: Matt Merhar <mattmerhar@protonmail.com>
This commit is contained in:
Matt Merhar 2023-11-08 13:19:00 -05:00 committed by Rosen Penev
parent af1ad467ae
commit 2a5ad04756
2 changed files with 32 additions and 1 deletions

View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=pps-tools
PKG_VERSION:=1.0.2
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_SOURCE_URL:=https://codeload.github.com/redlab-i/pps-tools/tar.gz/v$(PKG_VERSION)?
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz

View File

@ -0,0 +1,31 @@
--- a/ppstest.c
+++ b/ppstest.c
@@ -110,13 +110,13 @@ retry:
}
printf("source %d - "
- "assert %ld.%09ld, sequence: %ld - "
- "clear %ld.%09ld, sequence: %ld\n",
+ "assert %lld.%09ld, sequence: %ld - "
+ "clear %lld.%09ld, sequence: %ld\n",
i,
- infobuf.assert_timestamp.tv_sec,
+ (long long)infobuf.assert_timestamp.tv_sec,
infobuf.assert_timestamp.tv_nsec,
infobuf.assert_sequence,
- infobuf.clear_timestamp.tv_sec,
+ (long long)infobuf.clear_timestamp.tv_sec,
infobuf.clear_timestamp.tv_nsec, infobuf.clear_sequence);
fflush(stdout);
--- a/ppswatch.c
+++ b/ppswatch.c
@@ -145,7 +145,7 @@ int fetch_source(pps_handle_t handle, in
if (max_divergence < div)
max_divergence = div;
if (div >= margin) {
- printf("timestamp: %ld, sequence: %ld, offset: % 6ld\n", ts.tv_sec, seq, ts.tv_nsec);
+ printf("timestamp: %lld, sequence: %ld, offset: % 6ld\n", (long long)ts.tv_sec, seq, ts.tv_nsec);
fflush(stdout);
overflows++;
curr_unsync++;