]> granicus.if.org Git - postgresql/commitdiff
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]);
 }