aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_resetxlog/pg_resetxlog.c25
1 files 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: