check interactive commands more closely; add `what' command
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Wed, 22 Oct 1986 08:35:16 +0000 (00:35 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Wed, 22 Oct 1986 08:35:16 +0000 (00:35 -0800)
SCCS-vsn: sbin/restore/interactive.c 5.4

usr/src/sbin/restore/interactive.c

index 3c1223d..3804e57 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)interactive.c      5.3 (Berkeley) %G%";
+static char sccsid[] = "@(#)interactive.c      5.4 (Berkeley) %G%";
 #endif not lint
 
 #include "restore.h"
 #endif not lint
 
 #include "restore.h"
@@ -66,6 +66,8 @@ loop:
         * Add elements to the extraction list.
         */
        case 'a':
         * Add elements to the extraction list.
         */
        case 'a':
+               if (strncmp(cmd, "add", strlen(cmd)) != 0)
+                       goto bad;
                ino = dirlookup(name);
                if (ino == 0)
                        break;
                ino = dirlookup(name);
                if (ino == 0)
                        break;
@@ -77,6 +79,8 @@ loop:
         * Change working directory.
         */
        case 'c':
         * Change working directory.
         */
        case 'c':
+               if (strncmp(cmd, "cd", strlen(cmd)) != 0)
+                       goto bad;
                ino = dirlookup(name);
                if (ino == 0)
                        break;
                ino = dirlookup(name);
                if (ino == 0)
                        break;
@@ -90,6 +94,8 @@ loop:
         * Delete elements from the extraction list.
         */
        case 'd':
         * Delete elements from the extraction list.
         */
        case 'd':
+               if (strncmp(cmd, "delete", strlen(cmd)) != 0)
+                       goto bad;
                np = lookupname(name);
                if (np == NIL || (np->e_flags & NEW) == 0) {
                        fprintf(stderr, "%s: not on extraction list\n", name);
                np = lookupname(name);
                if (np == NIL || (np->e_flags & NEW) == 0) {
                        fprintf(stderr, "%s: not on extraction list\n", name);
@@ -101,6 +107,8 @@ loop:
         * Extract the requested list.
         */
        case 'e':
         * Extract the requested list.
         */
        case 'e':
+               if (strncmp(cmd, "extract", strlen(cmd)) != 0)
+                       goto bad;
                createfiles();
                createlinks();
                setdirmodes();
                createfiles();
                createlinks();
                setdirmodes();
@@ -112,8 +120,10 @@ loop:
         * List available commands.
         */
        case 'h':
         * List available commands.
         */
        case 'h':
+               if (strncmp(cmd, "help", strlen(cmd)) != 0)
+                       goto bad;
        case '?':
        case '?':
-               fprintf(stderr, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
+               fprintf(stderr, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
                        "Available commands are:\n",
                        "\tls [arg] - list directory\n",
                        "\tcd arg - change directory\n",
                        "Available commands are:\n",
                        "\tls [arg] - list directory\n",
                        "\tcd arg - change directory\n",
@@ -125,6 +135,7 @@ loop:
                        "\textract - extract requested files\n",
                        "\tsetmodes - set modes of requested directories\n",
                        "\tquit - immediately exit program\n",
                        "\textract - extract requested files\n",
                        "\tsetmodes - set modes of requested directories\n",
                        "\tquit - immediately exit program\n",
+                       "\twhat - list dump header information\n",
                        "\tverbose - toggle verbose flag",
                        " (useful with ``ls'')\n",
                        "\thelp or `?' - print this list\n",
                        "\tverbose - toggle verbose flag",
                        " (useful with ``ls'')\n",
                        "\thelp or `?' - print this list\n",
@@ -135,6 +146,8 @@ loop:
         * List a directory.
         */
        case 'l':
         * List a directory.
         */
        case 'l':
+               if (strncmp(cmd, "ls", strlen(cmd)) != 0)
+                       goto bad;
                ino = dirlookup(name);
                if (ino == 0)
                        break;
                ino = dirlookup(name);
                if (ino == 0)
                        break;
@@ -144,6 +157,8 @@ loop:
         * Print current directory.
         */
        case 'p':
         * Print current directory.
         */
        case 'p':
+               if (strncmp(cmd, "pwd", strlen(cmd)) != 0)
+                       goto bad;
                if (curdir[1] == '\0')
                        fprintf(stderr, "/\n");
                else
                if (curdir[1] == '\0')
                        fprintf(stderr, "/\n");
                else
@@ -153,12 +168,19 @@ loop:
         * Quit.
         */
        case 'q':
         * Quit.
         */
        case 'q':
+               if (strncmp(cmd, "quit", strlen(cmd)) != 0)
+                       goto bad;
+               return;
        case 'x':
        case 'x':
+               if (strncmp(cmd, "xit", strlen(cmd)) != 0)
+                       goto bad;
                return;
        /*
         * Toggle verbose mode.
         */
        case 'v':
                return;
        /*
         * Toggle verbose mode.
         */
        case 'v':
+               if (strncmp(cmd, "verbose", strlen(cmd)) != 0)
+                       goto bad;
                if (vflag) {
                        fprintf(stderr, "verbose mode off\n");
                        vflag = 0;
                if (vflag) {
                        fprintf(stderr, "verbose mode off\n");
                        vflag = 0;
@@ -171,12 +193,24 @@ loop:
         * Just restore requested directory modes.
         */
        case 's':
         * Just restore requested directory modes.
         */
        case 's':
+               if (strncmp(cmd, "setmodes", strlen(cmd)) != 0)
+                       goto bad;
                setdirmodes();
                break;
                setdirmodes();
                break;
+       /*
+        * Print out dump header information.
+        */
+       case 'w':
+               if (strncmp(cmd, "what", strlen(cmd)) != 0)
+                       goto bad;
+               printdumpinfo();
+               break;
        /*
         * Turn on debugging.
         */
        case 'D':
        /*
         * Turn on debugging.
         */
        case 'D':
+               if (strncmp(cmd, "Debug", strlen(cmd)) != 0)
+                       goto bad;
                if (dflag) {
                        fprintf(stderr, "debugging mode off\n");
                        dflag = 0;
                if (dflag) {
                        fprintf(stderr, "debugging mode off\n");
                        dflag = 0;
@@ -189,6 +223,7 @@ loop:
         * Unknown command.
         */
        default:
         * Unknown command.
         */
        default:
+       bad:
                fprintf(stderr, "%s: unknown command; type ? for help\n", cmd);
                break;
        }
                fprintf(stderr, "%s: unknown command; type ? for help\n", cmd);
                break;
        }