mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-05 19:09:58 +08:00
Unwind some workarounds for lack of portable int64 format specifier
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
This commit is contained in:
parent
7b925e1270
commit
6a1cd8b923
@ -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)
|
||||
|
@ -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")));
|
||||
|
@ -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"),
|
||||
|
@ -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"),
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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]);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user