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
<inttypes.h>'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
This commit is contained in:
Tom Lane 2020-06-24 15:47:30 -04:00
parent b8fd4e02c6
commit 235c0f6eed
1 changed files with 14 additions and 1 deletions

View File

@ -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 <inttypes.h> 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)
{