From 235c0f6eed2d9f5650f9b6ee0c51601792eff8e4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 24 Jun 2020 15:47:30 -0400 Subject: [PATCH] Fix compiler warning induced by commit d8b15eeb8. I forgot that INT64_FORMAT can't be used with sscanf on Windows. Use the same trick of sscanf'ing into a temp variable as we do in some other places in zic.c. The upstream IANA code avoids the portability problem by relying on 's SCNdFAST64 macro. Once we're requiring C99 in all branches, we should do likewise and drop this set of diffs from upstream. For now, though, a hack seems fine, since we do not actually care about leapseconds anyway. Discussion: https://postgr.es/m/4e5d1a5b-143e-e70e-a99d-a3b01c1ae7c3@2ndquadrant.com --- src/timezone/zic.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/timezone/zic.c b/src/timezone/zic.c index e5a3ca26f4..10c5b4bfb5 100644 --- a/src/timezone/zic.c +++ b/src/timezone/zic.c @@ -1292,7 +1292,20 @@ infile(const char *name) if (nfields == 0) { if (name == leapsec && *buf == '#') - sscanf(buf, "#expires " INT64_FORMAT, &comment_leapexpires); + { + /* + * PG: INT64_FORMAT isn't portable for sscanf, so be content + * with scanning a "long". Once we are requiring C99 in all + * live branches, it'd be sensible to adopt upstream's + * practice of using the macros. But for now, we + * don't actually use this code, and it won't overflow before + * 2038 anyway. + */ + long cl_tmp; + + sscanf(buf, "#expires %ld", &cl_tmp); + comment_leapexpires = cl_tmp; + } } else if (wantcont) {