Complain if pg_restore is given both -d and -f options; this suggests
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 20 Oct 2003 21:05:12 +0000 (21:05 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 20 Oct 2003 21:05:12 +0000 (21:05 +0000)
the user is confused about whether -f is input or output file.

src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_restore.c

index 7096df3b95692fd6522003b5215c5f7e0b6031df..cd86b62d98fc2868a62bc2d3cfbf205a9c9c58db 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *             $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.78 2003/10/03 20:10:59 tgl Exp $
+ *             $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.79 2003/10/20 21:05:11 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -381,7 +381,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
        /*
         * Clean up & we're done.
         */
-       if (ropt->filename)
+       if (ropt->filename || ropt->compression)
                ResetOutput(AH, sav);
 
        if (ropt->useDB)
@@ -596,7 +596,7 @@ PrintTOCSummary(Archive *AHX, RestoreOptions *ropt)
        char       *fmtName;
 
        if (ropt->filename)
-               sav = SetOutput(AH, ropt->filename, ropt->compression);
+               sav = SetOutput(AH, ropt->filename, 0 /* no compression */);
 
        ahprintf(AH, ";\n; Archive created at %s", ctime(&AH->createDate));
        ahprintf(AH, ";     dbname: %s\n;     TOC Entries: %d\n;     Compression: %d\n",
@@ -1039,23 +1039,19 @@ OutputContext
 SetOutput(ArchiveHandle *AH, char *filename, int compression)
 {
        OutputContext sav;
-
-#ifdef HAVE_LIBZ
-       char            fmode[10];
-#endif
-       int                     fn = 0;
+       int                     fn;
 
        /* Replace the AH output file handle */
        sav.OF = AH->OF;
        sav.gzOut = AH->gzOut;
 
        if (filename)
-               fn = 0;
+               fn = -1;
        else if (AH->FH)
                fn = fileno(AH->FH);
        else if (AH->fSpec)
        {
-               fn = 0;
+               fn = -1;
                filename = AH->fSpec;
        }
        else
@@ -1065,27 +1061,25 @@ SetOutput(ArchiveHandle *AH, char *filename, int compression)
 #ifdef HAVE_LIBZ
        if (compression != 0)
        {
+               char            fmode[10];
+
+               /* Don't use PG_BINARY_x since this is zlib */
                sprintf(fmode, "wb%d", compression);
-               if (fn)
-               {
-                       AH->OF = gzdopen(dup(fn), fmode);       /* Don't use PG_BINARY_x
-                                                                                                * since this is zlib */
-               }
+               if (fn >= 0)
+                       AH->OF = gzdopen(dup(fn), fmode);
                else
                        AH->OF = gzopen(filename, fmode);
                AH->gzOut = 1;
        }
        else
-       {                                                       /* Use fopen */
 #endif
-               if (fn)
+       {                                                       /* Use fopen */
+               if (fn >= 0)
                        AH->OF = fdopen(dup(fn), PG_BINARY_W);
                else
                        AH->OF = fopen(filename, PG_BINARY_W);
                AH->gzOut = 0;
-#ifdef HAVE_LIBZ
        }
-#endif
 
        if (!AH->OF)
                die_horribly(AH, modulename, "could not open output file: %s\n", strerror(errno));
@@ -1104,7 +1098,8 @@ ResetOutput(ArchiveHandle *AH, OutputContext sav)
                res = fclose(AH->OF);
 
        if (res != 0)
-               die_horribly(AH, modulename, "could not close output file: %s\n", strerror(errno));
+               die_horribly(AH, modulename, "could not close output file: %s\n",
+                                        strerror(errno));
 
        AH->gzOut = sav.gzOut;
        AH->OF = sav.OF;
index 2414de8f5c939b6865ea8da105cdd492b788f2e6..33aafcd6c453d3f47a2a3c90eafffc67878fe374 100644 (file)
@@ -34,7 +34,7 @@
  *
  *
  * IDENTIFICATION
- *             $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_restore.c,v 1.52 2003/09/23 22:48:53 tgl Exp $
+ *             $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_restore.c,v 1.53 2003/10/20 21:05:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -78,7 +78,7 @@ main(int argc, char **argv)
        RestoreOptions *opts;
        int                     c;
        Archive    *AH;
-       char       *fileSpec = NULL;
+       char       *inputFileSpec;
        extern int      optind;
        extern char *optarg;
        static int      use_setsessauth = 0;
@@ -163,11 +163,7 @@ main(int argc, char **argv)
                                opts->create = 1;
                                break;
                        case 'd':
-                               if (strlen(optarg) != 0)
-                               {
-                                       opts->dbname = strdup(optarg);
-                                       opts->useDB = 1;
-                               }
+                               opts->dbname = strdup(optarg);
                                break;
                        case 'f':                       /* output file name */
                                opts->filename = strdup(optarg);
@@ -286,9 +282,23 @@ main(int argc, char **argv)
        }
 
        if (optind < argc)
-               fileSpec = argv[optind];
+               inputFileSpec = argv[optind];
        else
-               fileSpec = NULL;
+               inputFileSpec = NULL;
+
+       /* Should get at most one of -d and -f, else user is confused */
+       if (opts->dbname)
+       {
+               if (opts->filename)
+               {
+                       fprintf(stderr, _("%s: cannot specify both -d and -f output\n"),
+                                       progname);
+                       fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+                                       progname);
+                       exit(1);
+               }
+               opts->useDB = 1;
+       }
 
        opts->disable_triggers = disable_triggers;
 
@@ -320,7 +330,7 @@ main(int argc, char **argv)
                }
        }
 
-       AH = OpenArchive(fileSpec, opts->format);
+       AH = OpenArchive(inputFileSpec, opts->format);
 
        /* Let the archiver know how noisy to be */
        AH->verbose = opts->verbose;