Fix compiler warning in fe-trace.c for MSVC
authorDavid Rowley <drowley@postgresql.org>
Tue, 6 Apr 2021 06:33:40 +0000 (18:33 +1200)
committerDavid Rowley <drowley@postgresql.org>
Tue, 6 Apr 2021 06:33:40 +0000 (18:33 +1200)
It seems that in MSVC timeval's tv_sec field is of type long.
localtime() takes a time_t pointer.  Since long is 32-bit even on 64-bit
builds in MSVC, passing a long pointer instead of the correct time_t
pointer generated a compiler warning.  Fix that.

Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/CAApHDvoRG25X_=ZCGSPb4KN_j2iu=G2uXsRSg8NBZeuhkOSETg@mail.gmail.com

src/interfaces/libpq/fe-trace.c

index 9a4595f5c874cd1e9b9b6953e2d424387c9e4f24..51b01fd40e5dea62a67dfd8a61cb6467024fcbb1 100644 (file)
@@ -80,11 +80,20 @@ static void
 pqTraceFormatTimestamp(char *timestr, size_t ts_len)
 {
        struct timeval tval;
+       time_t          now;
 
        gettimeofday(&tval, NULL);
+
+       /*
+        * MSVC's implementation of timeval uses a long for tv_sec, however,
+        * localtime() expects a time_t pointer.  Here we'll assign tv_sec to a
+        * local time_t variable so that we pass localtime() the correct pointer
+        * type.
+        */
+       now = tval.tv_sec;
        strftime(timestr, ts_len,
                         "%Y-%m-%d %H:%M:%S",
-                        localtime(&tval.tv_sec));
+                        localtime(&now));
        /* append microseconds */
        snprintf(timestr + strlen(timestr), ts_len - strlen(timestr),
                         ".%06u", (unsigned int) (tval.tv_usec));