diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 029c1d76ce..d5934f2e2b 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -204,10 +204,20 @@ static void progress_report(int tablespacenum, const char *filename) { int percent = (int) ((totaldone / 1024) * 100 / totalsize); + char totaldone_str[32]; + char totalsize_str[32]; if (percent > 100) percent = 100; + /* + * Separate step to keep platform-dependent format code out of translatable + * strings. And we only test for INT64_FORMAT availability in snprintf, + * not fprintf. + */ + snprintf(totaldone_str, sizeof(totaldone_str), INT64_FORMAT, totaldone / 1024); + snprintf(totalsize_str, sizeof(totalsize_str), INT64_FORMAT, totalsize); + if (verbose) { if (!filename) @@ -217,21 +227,23 @@ progress_report(int tablespacenum, const char *filename) * call) */ fprintf(stderr, - INT64_FORMAT "/" INT64_FORMAT " kB (100%%) %d/%d tablespaces %35s\r", - totaldone / 1024, totalsize, - tablespacenum, tablespacecount, ""); + ngettext("%s/%s kB (100%%), %d/%d tablespace %35s\r", + "%s/%s kB (100%%), %d/%d tablespaces %35s\r", + tablespacecount), + totaldone_str, totalsize_str, tablespacenum, tablespacecount, ""); else fprintf(stderr, - INT64_FORMAT "/" INT64_FORMAT " kB (%d%%) %d/%d tablespaces (%-30.30s)\r", - totaldone / 1024, totalsize, - percent, - tablespacenum, tablespacecount, filename); + ngettext("%s/%s kB (%d%%), %d/%d tablespace (%-30.30s)\r", + "%s/%s kB (%d%%), %d/%d tablespaces (%-30.30s)\r", + tablespacecount), + totaldone_str, totalsize_str, percent, tablespacenum, tablespacecount, filename); } else - fprintf(stderr, INT64_FORMAT "/" INT64_FORMAT " kB (%d%%) %d/%d tablespaces\r", - totaldone / 1024, totalsize, - percent, - tablespacenum, tablespacecount); + fprintf(stderr, + ngettext("%s/%s kB (%d%%), %d/%d tablespace\r", + "%s/%s kB (%d%%), %d/%d tablespaces\r", + tablespacecount), + totaldone_str, totalsize_str, percent, tablespacenum, tablespacecount); }