"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Christian Weisgerber <naddy@mips.inka.de>
Subject:
gotwebd: another format specifier mismatch
To:
gameoftrees@openbsd.org
Date:
Sun, 17 Jul 2022 16:32:20 +0200

Download raw body.

Thread
gotweb_get_time_str() has a variable time_t diff_time that is fed
to a printf() function seven times.  We could cast it to long long
each time, but that is ugly.  Maybe change the variable type instead?

As seen on FreeBSD:

gotweb.c:2788:8: warning: format specifies type 'long long' but the argument has
 type 'long' [-Wformat]
                            (diff_time / 60 / 60 / 24 / 365), years) == -1)
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gotweb.c:2792:8: warning: format specifies type 'long long' but the argument has
 type 'long' [-Wformat]
                            (diff_time / 60 / 60 / 24 / (365 / 12)),
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gotweb.c:2797:8: warning: format specifies type 'long long' but the argument has
 type 'long' [-Wformat]
                            (diff_time / 60 / 60 / 24 / 7), weeks) == -1)
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gotweb.c:2801:8: warning: format specifies type 'long long' but the argument has
 type 'long' [-Wformat]
                            (diff_time / 60 / 60 / 24), days) == -1)
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
gotweb.c:2805:8: warning: format specifies type 'long long' but the argument has
 type 'long' [-Wformat]
                            (diff_time / 60 / 60), hours) == -1)
                            ^~~~~~~~~~~~~~~~~~~~~
gotweb.c:2808:38: warning: format specifies type 'long long' but the argument ha
s type 'long' [-Wformat]
                        if (asprintf(repo_age, "%lld %s", (diff_time / 60),
                                                ~~~~      ^~~~~~~~~~~~~~~~
                                                %ld
gotweb.c:2812:38: warning: format specifies type 'long long' but the argument has type 'time_t' (aka 'long') [-Wformat]
                        if (asprintf(repo_age, "%lld %s", diff_time,
                                                ~~~~      ^~~~~~~~~
                                                %ld
7 warnings generated.


diff /home/naddy/got
commit - d6267a62d388995cbc79bb58ce9db7946fda0554
path + /home/naddy/got
blob - 1f77113aefd24cce886b89debd8d60dc71eca3fd
file + gotwebd/gotweb.c
--- gotwebd/gotweb.c
+++ gotwebd/gotweb.c
@@ -2768,7 +2768,7 @@ const struct got_error *
 gotweb_get_time_str(char **repo_age, time_t committer_time, int ref_tm)
 {
 	struct tm tm;
-	time_t diff_time;
+	long long diff_time;
 	const char *years = "years ago", *months = "months ago";
 	const char *weeks = "weeks ago", *days = "days ago";
 	const char *hours = "hours ago",  *minutes = "minutes ago";

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de