Unwind some workarounds for lack of portable int64 format specifier
authorPeter Eisentraut <peter@eisentraut.org>
Thu, 6 Jun 2019 12:14:29 +0000 (14:14 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Thu, 4 Jul 2019 15:01:43 +0000 (17:01 +0200)
Because there is no portable int64/uint64 format specifier and we
can't stick macros like INT64_FORMAT into the middle of a translatable
string, we have been using various workarounds that put the number to
be printed into a string buffer first.  Now that we always use our own
sprintf(), we can rely on %lld and %llu to work, so we can use those.

This patch undoes this workaround in a few places where it was
egregiously verbose.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/CAH2-Wz%3DWbNxc5ob5NJ9yqo2RMJ0q4HXDS30GVCobeCvC9A1L9A%40mail.gmail.com

src/backend/access/transam/xlogreader.c
src/backend/replication/basebackup.c
src/bin/pg_controldata/pg_controldata.c
src/bin/pg_resetwal/pg_resetwal.c
src/bin/pg_rewind/libpq_fetch.c
src/bin/pg_test_timing/pg_test_timing.c

index 88be7fe022395819156a67165a6a770500d38e0b..41dae916b46875083f04fc0f8ce14fbb87b218d7 100644 (file)
@@ -783,20 +783,10 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
        if (state->system_identifier &&
            longhdr->xlp_sysid != state->system_identifier)
        {
-           char        fhdrident_str[32];
-           char        sysident_str[32];
-
-           /*
-            * Format sysids separately to keep platform-dependent format code
-            * out of the translatable message string.
-            */
-           snprintf(fhdrident_str, sizeof(fhdrident_str), UINT64_FORMAT,
-                    longhdr->xlp_sysid);
-           snprintf(sysident_str, sizeof(sysident_str), UINT64_FORMAT,
-                    state->system_identifier);
            report_invalid_record(state,
-                                 "WAL file is from different database system: WAL file database system identifier is %s, pg_control database system identifier is %s",
-                                 fhdrident_str, sysident_str);
+                                 "WAL file is from different database system: WAL file database system identifier is %llu, pg_control database system identifier is %llu",
+                                 (unsigned long long) longhdr->xlp_sysid,
+                                 (unsigned long long) state->system_identifier);
            return false;
        }
        else if (longhdr->xlp_seg_size != state->wal_segment_size)
index c2978a949ad81df5f2d353f521d007c17fb804fc..7a1b38466b8eb299eb490a18b6898b3bc9228c98 100644 (file)
@@ -106,7 +106,7 @@ static TimestampTz throttled_last;
 static XLogRecPtr startptr;
 
 /* Total number of checksum failures during base backup. */
-static int64 total_checksum_failures;
+static long long int total_checksum_failures;
 
 /* Do not verify checksums. */
 static bool noverify_checksums = false;
@@ -607,14 +607,9 @@ perform_base_backup(basebackup_options *opt)
    if (total_checksum_failures)
    {
        if (total_checksum_failures > 1)
-       {
-           char        buf[64];
-
-           snprintf(buf, sizeof(buf), INT64_FORMAT, total_checksum_failures);
-
            ereport(WARNING,
-                   (errmsg("%s total checksum verification failures", buf)));
-       }
+                   (errmsg("%lld total checksum verification failures", total_checksum_failures)));
+
        ereport(ERROR,
                (errcode(ERRCODE_DATA_CORRUPTED),
                 errmsg("checksum verification failure during base backup")));
index d955b97c0b80bb0fc4e89a515d95c82e9ab33b8a..390ea0a93974a73dce05dab759695932632b5dfe 100644 (file)
@@ -99,7 +99,6 @@ main(int argc, char *argv[])
    time_t      time_tmp;
    char        pgctime_str[128];
    char        ckpttime_str[128];
-   char        sysident_str[32];
    char        mock_auth_nonce_str[MOCK_AUTH_NONCE_LEN * 2 + 1];
    const char *strftime_fmt = "%c";
    const char *progname;
@@ -222,13 +221,6 @@ main(int argc, char *argv[])
    else
        strcpy(xlogfilename, _("???"));
 
-   /*
-    * Format system_identifier and mock_authentication_nonce separately to
-    * keep platform-dependent format code out of the translatable message
-    * string.
-    */
-   snprintf(sysident_str, sizeof(sysident_str), UINT64_FORMAT,
-            ControlFile->system_identifier);
    for (i = 0; i < MOCK_AUTH_NONCE_LEN; i++)
        snprintf(&mock_auth_nonce_str[i * 2], 3, "%02x",
                 (unsigned char) ControlFile->mock_authentication_nonce[i]);
@@ -237,8 +229,8 @@ main(int argc, char *argv[])
           ControlFile->pg_control_version);
    printf(_("Catalog version number:               %u\n"),
           ControlFile->catalog_version_no);
-   printf(_("Database system identifier:           %s\n"),
-          sysident_str);
+   printf(_("Database system identifier:           %llu\n"),
+          (unsigned long long) ControlFile->system_identifier);
    printf(_("Database cluster state:               %s\n"),
           dbState(ControlFile->state));
    printf(_("pg_control last modified:             %s\n"),
index 2734f873187ac4589788d508ae03e166629ef2fb..ff0f8ea5e7714cd071f0098c1aaa005a0c7ea051 100644 (file)
@@ -748,26 +748,17 @@ GuessControlValues(void)
 static void
 PrintControlValues(bool guessed)
 {
-   char        sysident_str[32];
-
    if (guessed)
        printf(_("Guessed pg_control values:\n\n"));
    else
        printf(_("Current pg_control values:\n\n"));
 
-   /*
-    * Format system_identifier separately to keep platform-dependent format
-    * code out of the translatable message string.
-    */
-   snprintf(sysident_str, sizeof(sysident_str), UINT64_FORMAT,
-            ControlFile.system_identifier);
-
    printf(_("pg_control version number:            %u\n"),
           ControlFile.pg_control_version);
    printf(_("Catalog version number:               %u\n"),
           ControlFile.catalog_version_no);
-   printf(_("Database system identifier:           %s\n"),
-          sysident_str);
+   printf(_("Database system identifier:           %llu\n"),
+          (unsigned long long) ControlFile.system_identifier);
    printf(_("Latest checkpoint's TimeLineID:       %u\n"),
           ControlFile.checkPointCopy.ThisTimeLineID);
    printf(_("Latest checkpoint's full_page_writes: %s\n"),
index d6cbe23926ac95970735dbe96db6268045809b6a..37eccc31266db9e0e1e66332532e31219bb5535b 100644 (file)
@@ -251,7 +251,6 @@ receiveFileChunks(const char *sql)
        char       *filename;
        int         filenamelen;
        int64       chunkoff;
-       char        chunkoff_str[32];
        int         chunksize;
        char       *chunk;
 
@@ -327,13 +326,8 @@ receiveFileChunks(const char *sql)
            continue;
        }
 
-       /*
-        * Separate step to keep platform-dependent format code out of
-        * translatable strings.
-        */
-       snprintf(chunkoff_str, sizeof(chunkoff_str), INT64_FORMAT, chunkoff);
-       pg_log_debug("received chunk for file \"%s\", offset %s, size %d",
-                    filename, chunkoff_str, chunksize);
+       pg_log_debug("received chunk for file \"%s\", offset %lld, size %d",
+                    filename, (long long int) chunkoff, chunksize);
 
        open_target_file(filename, false);
 
index 6e2fd1ab8c7abfdb6898b3fc98dbe2f0122c98da..e14802372bd6aa8fee7cf8f30d0779d50d3338b4 100644 (file)
@@ -18,7 +18,7 @@ static uint64 test_timing(int32);
 static void output(uint64 loop_count);
 
 /* record duration in powers of 2 microseconds */
-int64      histogram[32];
+long long int histogram[32];
 
 int
 main(int argc, char *argv[])
@@ -190,14 +190,8 @@ output(uint64 loop_count)
           Max(10, len3), header3);
 
    for (i = 0; i <= max_bit; i++)
-   {
-       char        buf[100];
-
-       /* lame hack to work around INT64_FORMAT deficiencies */
-       snprintf(buf, sizeof(buf), INT64_FORMAT, histogram[i]);
-       printf("%*ld    %*.5f %*s\n",
+       printf("%*ld    %*.5f %*lld\n",
               Max(6, len1), 1l << i,
               Max(10, len2) - 1, (double) histogram[i] * 100 / loop_count,
-              Max(10, len3), buf);
-   }
+              Max(10, len3), histogram[i]);
 }