Unbreak pg_resetxlog -l.
authorRobert Haas <rhaas@postgresql.org>
Mon, 25 Jun 2012 17:58:38 +0000 (13:58 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 25 Jun 2012 17:58:38 +0000 (13:58 -0400)
Fujii Masao

src/bin/pg_resetxlog/pg_resetxlog.c

index 7e9864dd4d3cdd551c9860eee03feaf6d8072c49..3e337ee902ea12907845ef2b82a4afbba1c4d656 100644 (file)
@@ -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: