From e0bb44c9080f16aa5612fb75cd2e36379358103b Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Mon, 27 Nov 2023 10:59:21 +0800 Subject: [PATCH 1/2] isobusfs_cmn: isobusfs_print_timestamp(): always use 64-bit for time stamp formatting Using C99 `unsigned long long` to format `struct timeval`'s `tv_sec` and `tv_usec`, fix incorrect print under some 32bit platform which using time64. --- isobusfs/isobusfs_cmn.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/isobusfs/isobusfs_cmn.c b/isobusfs/isobusfs_cmn.c index d1414c1..a6c7c96 100644 --- a/isobusfs/isobusfs_cmn.c +++ b/isobusfs/isobusfs_cmn.c @@ -258,9 +258,9 @@ static void isobusfs_print_timestamp(struct isobusfs_err_msg *emsg, if (!(cur->tv_sec | cur->tv_nsec)) return; - fprintf(stderr, " %s: %lu s %lu us (seq=%u/%u, send=%u)", - name, cur->tv_sec, cur->tv_nsec / 1000, - stats->tskey_sch, stats->tskey_ack, stats->send); + fprintf(stderr, " %s: %llu s %llu us (seq=%u/%u, send=%u)", + name, (unsigned long long)cur->tv_sec, (unsigned long long)cur->tv_nsec / 1000, + stats->tskey_sch, stats->tskey_ack, stats->send); fprintf(stderr, "\n"); } From 1405a90e8b71cf0677d26eb78ed267d2500c15ff Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Wed, 29 May 2024 14:26:40 +0200 Subject: [PATCH 2/2] j1939spy: main(): fix shift-count-overflow error Fix the following error, by converting recvflags into a 64 bit type. | /home/j1939spy.c: In function 'main': | /home/j1939spy.c:248:36: error: left shift count >= width of type [-Werror=shift-count-overflow] | 248 | if (recvflags & (1 << SCM_TIMESTAMP)) { | | ^~ --- j1939spy.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/j1939spy.c b/j1939spy.c index 2d751d3..dc260da 100644 --- a/j1939spy.c +++ b/j1939spy.c @@ -99,7 +99,7 @@ int main(int argc, char **argv) int filter = 0; uint8_t priority, dst_addr; uint64_t dst_name; - long recvflags; + uint64_t recvflags; /* argument parsing */ while ((opt = getopt_long(argc, argv, optstring, long_opts, NULL)) != -1) @@ -230,11 +230,11 @@ int main(int argc, char **argv) case SOL_SOCKET: if (cmsg->cmsg_type == SCM_TIMESTAMP) { memcpy(&tdut, CMSG_DATA(cmsg), sizeof(tdut)); - recvflags |= 1 << cmsg->cmsg_type; + recvflags |= 1ULL << cmsg->cmsg_type; } break; case SOL_CAN_J1939: - recvflags |= 1 << cmsg->cmsg_type; + recvflags |= 1ULL << cmsg->cmsg_type; if (cmsg->cmsg_type == SCM_J1939_DEST_ADDR) dst_addr = *CMSG_DATA(cmsg); else if (cmsg->cmsg_type == SCM_J1939_DEST_NAME) @@ -245,7 +245,7 @@ int main(int argc, char **argv) } } - if (recvflags & (1 << SCM_TIMESTAMP)) { + if (recvflags & (1ULL << SCM_TIMESTAMP)) { if ('z' == s.time) { if (!tref.tv_sec) tref = tdut; @@ -270,9 +270,9 @@ abs_time: } } printf(" %s ", libj1939_addr2str(&src)); - if (recvflags & (1 << SCM_J1939_DEST_NAME)) + if (recvflags & (1ULL << SCM_J1939_DEST_NAME)) printf("%016llx ", (unsigned long long)dst_name); - else if (recvflags & (1 << SCM_J1939_DEST_ADDR)) + else if (recvflags & (1ULL << SCM_J1939_DEST_ADDR)) printf("%02x ", dst_addr); else printf("- ");