Re: [PATCH 4/6] *.h: add a few missing __attribute__((format))
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Jul 11, 2021, 23:05 UTC
- Message-ID
- <877dhw4exj.fsf@evledraar.gmail.com>
- In-Reply-To
- <patch-4.6-3bf8637c16a-20210710T084445Z-avarab@gmail.com>
On Sat, Jul 10 2021, Ævar Arnfjörð Bjarmason wrote:
So this:
Show 20 quoted lines
> [...] > For strbuf_addftime() let's add a strftime() format checker. Our > function understands the non-portable %z and %Z, see > c3fbf81a853 (strbuf: let strbuf_addftime handle %z and %Z itself, > 2017-06-15). > > That might be an issue in theory, but in practice we have existing > codepath that supplies a fixed string to strbuf_addftime(). We're > unlikely to run into the "%z" and "%Z" case at all, since it's used by > date.c and passed via e.g. "git log --date=<format>". > [...] > /** > @@ -425,6 +426,7 @@ void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap); > * `suppress_tz_name`, when set, expands %Z internally to the empty > * string rather than passing it to `strftime`. > */ > +__attribute__((format (strftime, 2, 0))) > void strbuf_addftime(struct strbuf *sb, const char *fmt, > const struct tm *tm, int tz_offset, > int suppress_tz_name);
Fails with compat/mingw.[ch] doing:
[...]
compat/mingw.c:#undef strftime
compat/mingw.c-size_t mingw_strftime(char *s, size_t max,
compat/mingw.c- const char *format, const struct tm *tm)
[...]
compat/mingw.h:#define strftime mingw_strftime
[...]What's a good macro idiom to dig oneself out of that hole? The only similar thing I could find was NORETURN in git-compat-util.h being defined differently on various platforms, and then things like:
+#if !defined(__MINGW32__) && !defined(_MSC_VER) __attribute__((format (strftime, 2, 0))) +#endif
Which seems to work, and may be the simplest workaround...