Fix compiler warning induced by commit d8b15eeb8.
authorTom Lane
Wed, 24 Jun 2020 19:47:30 +0000 (15:47 -0400)
committerTom Lane
Wed, 24 Jun 2020 19:47:30 +0000 (15:47 -0400)
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

index e5a3ca26f42e0b9474261313db8e391f36e31fa9..10c5b4bfb5b55e517383ec2698527ac26f3e74b1 100644 (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  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)
        {