Fixed the compressed multi-volume dump + restore.
authorStelian Pop <stelian@popies.net>
Fri, 20 Jul 2001 09:01:44 +0000 (09:01 +0000)
committerStelian Pop <stelian@popies.net>
Fri, 20 Jul 2001 09:01:44 +0000 (09:01 +0000)
CHANGES
dump/tape.c
restore/tape.c

diff --git a/CHANGES b/CHANGES
index c2280dd6f0abee6b4f9457b1700a775d3a79aab4..002456fd22829384375da8f34a9838ee59cb38f0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,4 @@
-$Id: CHANGES,v 1.125 2001/07/19 09:03:44 stelian Exp $
+$Id: CHANGES,v 1.126 2001/07/20 09:01:44 stelian Exp $
 
 Changes between versions 0.4b22 and 0.4b23 (released ????????????)
 ==================================================================
@@ -49,6 +49,8 @@ Changes between versions 0.4b22 and 0.4b23 (released ????????????)
 12.    Added the -E option to dump which specify a file containing
        inode numbers to exclude from the dump.
 
+13.    Fixed the compressed multi-volume dump + restore.
+
 Changes between versions 0.4b21 and 0.4b22 (released May 12, 2001)
 ==================================================================
 
index a0910f4f5d5943993d3b7d30f5f1b829e773c169..f048a78bb6f7fc1b4f7787ad5ce9bf872d8fbbec 100644 (file)
@@ -41,7 +41,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: tape.c,v 1.51 2001/07/18 13:12:33 stelian Exp $";
+       "$Id: tape.c,v 1.52 2001/07/20 09:01:46 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -112,7 +112,7 @@ long long tapea_bytes = 0;  /* bytes_written at start of current volume */
 
 static ssize_t atomic_read __P((int, void *, size_t));
 static ssize_t atomic_write __P((int, const void *, size_t));
-static void doslave __P((int, int));
+static void doslave __P((int, int, int));
 static void enslave __P((void));
 static void flushtape __P((void));
 static void killall __P((void));
@@ -448,7 +448,7 @@ flushtape(void)
        blocksthisvol += ntrec;
        if (!pipeout && !unlimited) {
                if (blocksperfile) {
-                       if ( compressed ? csize >= blocksperfile * 1024
+                       if ( compressed ? csize + writesize >= blocksperfile * 1024
                                        : blocksthisvol >= blocksperfile ) {
                                close_rewind();
                                startnewtape(0);
@@ -968,7 +968,7 @@ enslave(void)
                            != sizeof i)
                                quit("master/slave protocol botched 3\n");
 #endif
-                       doslave(cmd[0], i);
+                       doslave(cmd[0], i, (slaves[i].pid == slp->pid));
                        Exit(X_FINOK);
                }
                else
@@ -1014,7 +1014,7 @@ killall(void)
  * slaves.
  */
 static void
-doslave(int cmd, int slave_number)
+doslave(int cmd, int slave_number, int first)
 {
        register int nread;
        int nextslave, size, eot_count, bufsize;
@@ -1022,7 +1022,7 @@ doslave(int cmd, int slave_number)
        char *buffer;
 #ifdef HAVE_ZLIB
        struct tapebuf *comp_buf = NULL;
-       int compresult, do_compress = slave_number > 0;
+       int compresult, do_compress = !first;
        unsigned long worklen;
 #endif /* HAVE_ZLIB */
        struct slave_results returns;
index 08bb3757e7b638ece4d9f09048abb9d9072df6a5..8864e2ae9ffb5b0e274450baea263b70e5502f94 100644 (file)
@@ -46,7 +46,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: tape.c,v 1.44 2001/07/18 14:57:46 stelian Exp $";
+       "$Id: tape.c,v 1.45 2001/07/20 09:01:46 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -496,6 +496,7 @@ 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");