]> git.wh0rd.org - dump.git/blobdiff - restore/tape.c
Fixed the compressed multi-volume dump + restore.
[dump.git] / restore / tape.c
index a8616a1069eaf3b7a90635bc523c6b4a716fffd6..8864e2ae9ffb5b0e274450baea263b70e5502f94 100644 (file)
@@ -46,7 +46,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: tape.c,v 1.42 2001/07/18 12:54:06 stelian Exp $";
+       "$Id: tape.c,v 1.45 2001/07/20 09:01:46 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -379,11 +379,12 @@ setup(void)
 void
 getvol(long nextvol)
 {
-       long newvol = 0, savecnt = 0, wantnext = 0, i;
+       long newvol = 0, wantnext = 0, i;
+       long saved_blksread = 0, saved_tpblksread = 0;
        union u_spcl tmpspcl;
 #      define tmpbuf tmpspcl.s_spcl
        char buf[TP_BSIZE];
-       int haderror = 0, bot_code;
+       int haderror = 0, bot_code = 1;
 
        if (nextvol == 1) {
                tapesread = 0;
@@ -396,7 +397,8 @@ getvol(long nextvol)
                        return;
                goto gethdr;
        }
-       savecnt = blksread;
+       saved_blksread = blksread;
+       saved_tpblksread = tpblksread;
 again:
        if (pipein)
                exit(1); /* pipes do not get a second chance */
@@ -494,17 +496,22 @@ gethdr:
        volno = newvol;
        setdumpnum();
        FLUSHTAPEBUF();
+       findtapeblksize();
        if (gethead(&tmpbuf) == FAIL) {
                Dprintf(stdout, "header read failed at %ld blocks\n", (long)blksread);
                fprintf(stderr, "tape is not dump tape\n");
                volno = 0;
                haderror = 1;
+               blksread = saved_blksread;
+               tpblksread = saved_tpblksread;
                goto again;
        }
        if (tmpbuf.c_volume != volno) {
                fprintf(stderr, "Wrong volume (%d)\n", tmpbuf.c_volume);
                volno = 0;
                haderror = 1;
+               blksread = saved_blksread;
+               tpblksread = saved_tpblksread;
                goto again;
        }
        if (tmpbuf.c_date != dumpdate || tmpbuf.c_ddate != dumptime) {
@@ -513,10 +520,13 @@ gethdr:
                fprintf(stderr, "\twanted: %s", ctime(&dumpdate));
                volno = 0;
                haderror = 1;
+               blksread = saved_blksread;
+               tpblksread = saved_tpblksread;
                goto again;
        }
        tapesread |= 1 << volno;
-       blksread = savecnt;
+       blksread = saved_blksread;
+       tpblksread = saved_tpblksread;
        /*
         * If continuing from the previous volume, skip over any
         * blocks read already at the end of the previous volume.