postgres.git / summary / log / commit / refs

commit    0d7066bc7f2010a4998f073690ea1eed2525fb60
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Wed Jun 24 19:47:30 2020 +0000
First released in: 14.0, 9.5.23, 9.6.19, 10.14, 11.9, 12.4, 13.0

    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


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 e5a3ca26f42..10c5b4bfb5b 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 <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) { [parent: dda25c599fcf]