Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f9b622e

Browse files
author
Maksim Milyutin
committed
Fix xid format for 32-bit systems
1 parent 7618b10 commit f9b622e

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

src/backend/bootstrap/bootstrap.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,14 +250,14 @@ AuxiliaryProcessMain(int argc, char *argv[])
250250
bootstrap_data_checksum_version = PG_DATA_CHECKSUM_VERSION;
251251
break;
252252
case 'm':
253-
if (sscanf(optarg, "%lx", &start_mx_id) != 1)
253+
if (sscanf(optarg, HEX_XID_FMT, &start_mx_id) != 1)
254254
{
255255
fprintf(stderr, "%s: invalid hex value of multixact-id\n", progname);
256256
exit(1);
257257
}
258258
break;
259259
case 'o':
260-
if (sscanf(optarg, "%ld", &start_mx_offset) != 1)
260+
if (sscanf(optarg, XID_FMT, &start_mx_offset) != 1)
261261
{
262262
fprintf(stderr, "%s: invalid decimal value of multixact-offset\n", progname);
263263
exit(1);
@@ -267,7 +267,7 @@ AuxiliaryProcessMain(int argc, char *argv[])
267267
strlcpy(OutputFileName, optarg, MAXPGPATH);
268268
break;
269269
case 'X':
270-
if (sscanf(optarg, "%lx", &start_xid) != 1)
270+
if (sscanf(optarg, HEX_XID_FMT, &start_xid) != 1)
271271
{
272272
fprintf(stderr, "%s: invalid hex value of xid\n", progname);
273273
exit(1);

src/bin/initdb/initdb.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,7 +1538,7 @@ bootstrap_template1(void)
15381538
unsetenv("PGCLIENTENCODING");
15391539

15401540
snprintf(cmd, sizeof(cmd),
1541-
"\"%s\" --boot -x1 %s %s %lx %s %lx %s %ld %s %s",
1541+
"\"%s\" --boot -x1 %s %s " HEX_XID_FMT " %s " HEX_XID_FMT " %s " XID_FMT " %s %s",
15421542
backend_exec,
15431543
data_checksums ? "-k" : "",
15441544
"-X", start_xid,
@@ -3469,7 +3469,7 @@ main(int argc, char *argv[])
34693469
printf(_("Running in debug mode.\n"));
34703470
break;
34713471
case 'm':
3472-
if (sscanf(optarg, "%lx", &start_mx_id) != 1)
3472+
if (sscanf(optarg, HEX_XID_FMT, &start_mx_id) != 1)
34733473
{
34743474
fprintf(stderr, "%s: invalid hex value of multixact-id\n", progname);
34753475
exit(1);
@@ -3483,7 +3483,7 @@ main(int argc, char *argv[])
34833483
do_sync = false;
34843484
break;
34853485
case 'o':
3486-
if (sscanf(optarg, "%ld", &start_mx_offset) != 1)
3486+
if (sscanf(optarg, XID_FMT, &start_mx_offset) != 1)
34873487
{
34883488
fprintf(stderr, "%s: invalid decimal value of multixact-offset\n", progname);
34893489
exit(1);
@@ -3535,7 +3535,7 @@ main(int argc, char *argv[])
35353535
xlog_dir = pg_strdup(optarg);
35363536
break;
35373537
case 'x':
3538-
if (sscanf(optarg, "%lx", &start_xid) != 1)
3538+
if (sscanf(optarg, HEX_XID_FMT, &start_xid) != 1)
35393539
{
35403540
fprintf(stderr, "%s: invalid hex value of xid\n", progname);
35413541
exit(1);

src/include/c.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ typedef uint64 SubTransactionId;
407407
#define TopSubTransactionId ((SubTransactionId) 1)
408408

409409
#define XID_FMT UINT64_FORMAT
410+
#define HEX_XID_FMT "%" INT64_MODIFIER "x"
410411

411412
/* MultiXactId must be equivalent to TransactionId, to fit in t_xmax */
412413
typedef TransactionId MultiXactId;

0 commit comments

Comments
 (0)