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: