From a6427f1f478b0bf43d1b861ee4053e2e8bc6118b Mon Sep 17 00:00:00 2001 From: Robert Haas <rhaas@postgresql.org> Date: Mon, 25 Jun 2012 13:58:38 -0400 Subject: [PATCH] Unbreak pg_resetxlog -l. Fujii Masao --- src/bin/pg_resetxlog/pg_resetxlog.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/bin/pg_resetxlog/pg_resetxlog.c b/src/bin/pg_resetxlog/pg_resetxlog.c index 7e9864dd4d3..3e337ee902e 100644 --- a/src/bin/pg_resetxlog/pg_resetxlog.c +++ b/src/bin/pg_resetxlog/pg_resetxlog.c @@ -86,9 +86,13 @@ main(int argc, char *argv[]) Oid set_oid = 0; MultiXactId set_mxid = 0; MultiXactOffset set_mxoff = (MultiXactOffset) -1; - uint32 minXlogTli = 0; + uint32 minXlogTli = 0, + minXlogId = 0, + minXlogSeg = 0; XLogSegNo minXlogSegNo = 0; char *endptr; + char *endptr2; + char *endptr3; char *DataDir; int fd; char path[MAXPGPATH]; @@ -200,13 +204,28 @@ main(int argc, char *argv[]) break; case 'l': - if (strspn(optarg, "01234567890ABCDEFabcdef") != 24) + minXlogTli = strtoul(optarg, &endptr, 0); + if (endptr == optarg || *endptr != ',') { fprintf(stderr, _("%s: invalid argument for option -l\n"), progname); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); } - XLogFromFileName(optarg, &minXlogTli, &minXlogSegNo); + minXlogId = strtoul(endptr + 1, &endptr2, 0); + if (endptr2 == endptr + 1 || *endptr2 != ',') + { + fprintf(stderr, _("%s: invalid argument for option -l\n"), progname); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); + exit(1); + } + minXlogSeg = strtoul(endptr2 + 1, &endptr3, 0); + if (endptr3 == endptr2 + 1 || *endptr3 != '\0') + { + fprintf(stderr, _("%s: invalid argument for option -l\n"), progname); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); + exit(1); + } + minXlogSegNo = (uint64) minXlogId * XLogSegmentsPerXLogId + minXlogSeg; break; default: -- GitLab