From: Stelian Pop Date: Thu, 23 Jul 2009 14:10:38 +0000 (+0000) Subject: Fix restore of files spanning on the first and second volumes of a dump. X-Git-Tag: release_0_4b43~14 X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=commitdiff_plain;h=4cef8778dc5913718fc8a1963fd58993c14657ba;hp=62614cf50e5f719954f23b7a9819a70b2d3ec44c Fix restore of files spanning on the first and second volumes of a dump. --- diff --git a/CHANGES b/CHANGES index 3e0e7c4..8d217dd 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -$Id: CHANGES,v 1.303 2009/07/23 09:34:07 stelian Exp $ +$Id: CHANGES,v 1.304 2009/07/23 14:10:38 stelian Exp $ Changes between versions 0.4b42 and 0.4b43 (released ?????????????) =================================================================== @@ -7,6 +7,12 @@ Changes between versions 0.4b42 and 0.4b43 (released ?????????????) (> 2 GB). Thanks to X DUGi for reporting the bug (Sourceforge bug #2820629) +2. Fix 'restore -x' in multi-volume mode, which caused files being + spanned on the first and second volumes to be incorrectly extracted. + Thanks to Adam Tkac for reporting the bug. + (there may be several bug reports about this issue, including + Sourceforge bug #2117008, RedHat bugs #232415 and #444958). + Changes between versions 0.4b41 and 0.4b42 (released June 18, 2009) =================================================================== diff --git a/restore/tape.c b/restore/tape.c index 3d673b6..b779fd7 100644 --- a/restore/tape.c +++ b/restore/tape.c @@ -42,7 +42,7 @@ #ifndef lint static const char rcsid[] = - "$Id: tape.c,v 1.92 2007/02/22 20:16:23 stelian Exp $"; + "$Id: tape.c,v 1.93 2009/07/23 14:10:39 stelian Exp $"; #endif /* not lint */ #include @@ -474,7 +474,6 @@ getvol(long nextvol) if (nextvol == 1) { tapesread = 0; gettingfile = 0; - tpblksread = 0; blksread = 0; } if (pipein) { @@ -1333,7 +1332,11 @@ loop: break; } } - if (gethead(&spcl) == GOOD && size > 0) { + while (gethead(&spcl) != GOOD) { + fprintf(stderr, "Incorrect block for %s at %ld blocks\n", + curfile.name, (long)blksread); + } + if (size > 0) { if (spcl.c_type == TS_ADDR) goto loop; Dprintf(stdout,