From 2a5ad04756e45e6d9d944a14253979e5300f95e3 Mon Sep 17 00:00:00 2001 From: Matt Merhar Date: Wed, 8 Nov 2023 13:19:00 -0500 Subject: [PATCH] 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 --- utils/pps-tools/Makefile | 2 +- .../pps-tools/patches/001-time_t_64bit.patch | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 utils/pps-tools/patches/001-time_t_64bit.patch diff --git a/utils/pps-tools/Makefile b/utils/pps-tools/Makefile index 5ac3dc5fe..cbcb82be8 100644 --- a/utils/pps-tools/Makefile +++ b/utils/pps-tools/Makefile @@ -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 diff --git a/utils/pps-tools/patches/001-time_t_64bit.patch b/utils/pps-tools/patches/001-time_t_64bit.patch new file mode 100644 index 000000000..aacd8bea5 --- /dev/null +++ b/utils/pps-tools/patches/001-time_t_64bit.patch @@ -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++;