]> git.wh0rd.org - dump.git/blobdiff - restore/tape.c
Another set of fixes for file not found at end of tape.
[dump.git] / restore / tape.c
index fb5c816e974ad6c3a6406d8d7d6282dece01fb97..4b4f7362ccf6a97713c9edcfd7b8e315cf1f543a 100644 (file)
@@ -46,7 +46,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: tape.c,v 1.46 2001/08/16 15:24:22 stelian Exp $";
+       "$Id: tape.c,v 1.50 2001/12/24 15:53:41 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -97,7 +97,7 @@ int           noresyncmesg = 0;
 #endif /* USE_QFA */
 static long    fssize = MAXBSIZE;
 static int     mt = -1;
-static int     pipein = 0;
+int            pipein = 0;
 static int     magtapein = 0;          /* input is from magtape */
 static char    magtape[MAXPATHLEN];
 static char    magtapeprefix[MAXPATHLEN];
@@ -432,12 +432,16 @@ again:
                        fprintf(stderr, "\n");
                }
                do      {
-                       fprintf(stderr, "Specify next volume #: ");
+                       fprintf(stderr, "Specify next volume # (none if no more volumes): ");
                        (void) fflush(stderr);
                        (void) fgets(buf, TP_BSIZE, terminal);
                } while (!feof(terminal) && buf[0] == '\n');
                if (feof(terminal))
                        exit(1);
+               if (!strcmp(buf, "none\n")) {
+                       terminateinput();
+                       return;
+               }
                newvol = atoi(buf);
                if (newvol <= 0) {
                        fprintf(stderr,
@@ -1492,6 +1496,9 @@ readtape_comprfile(char *buf)
 
        /* read the block prefix */
        ret = read_a_block(mt, tapebuf, PREFIXSIZE, &rl);
+
+       if (Vflag && (ret == 0 || rl < PREFIXSIZE  ||  tpb->length == 0))
+               ret = 0;
        if (ret <= 0)
                goto readerr;
 
@@ -1926,13 +1933,15 @@ setmagtapein(void) {
                /* need to know if input is really from a tape */
 #ifdef RRESTORE
                if (host)
-                       magtapein = rmtioctl(MTNOP, 1) != -1;
+                       magtapein = !lflag;
                else
 #endif
                        magtapein = ioctl(mt, MTIOCGET, (char *)&mt_stat) == 0;
        }
 
-       Vprintf(stdout,"Input is from %s\n", magtapein? "tape": "file/pipe");
+       Vprintf(stdout,"Input is from %s\n", 
+                       magtapein ? "tape" :
+                       Vflag ? "multi-volume (no tape)" : "file/pipe");
 }
 
 /*