From: Stelian P. <ste...@fr...> - 2002-04-19 10:46:26
|
On Thu, Apr 18, 2002 at 02:14:49PM -0700, Andy Mentges wrote: > Heres the log. Ok, second try. The previous patch abused the beginning of tape duplicate records skipping routine in order to skip over several volumes. It did work, but at the same time it confused the control flow in restore routines (since we have recursion in getvol -> readtape -> getvol -> readtape etc). This second patch has a different approach: it doesn't mess with the skipping routines and leaves the job to the extraction routines to correctly skip over the maps. Please try it over the pristine 0.4b28 source (= remove the previous patch !!!) and report back. Stelian. Index: tape.c =================================================================== RCS file: /cvsroot/dump/dump/restore/tape.c,v retrieving revision 1.60 diff -u -r1.60 tape.c --- tape.c 4 Apr 2002 08:20:23 -0000 1.60 +++ tape.c 19 Apr 2002 10:39:32 -0000 @@ -431,6 +431,8 @@ if (nextvol == 1) { tapesread = 0; gettingfile = 0; + tpblksread = 0; + blksread = 0; } if (pipein) { if (nextvol != 1) @@ -587,8 +589,6 @@ goto again; } tapesread |= 1 << volno; - 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. @@ -603,10 +603,10 @@ #endif /* !HAVE_ZLIB && !HAVE_BZLIB */ } Dprintf(stdout, "read %ld recs, tape starts with %ld\n", - tpblksread, (long)tmpbuf.c_firstrec); + tpblksread - 1, (long)tmpbuf.c_firstrec); if (tmpbuf.c_type == TS_TAPE && (tmpbuf.c_flags & DR_NEWHEADER)) { if (!wantnext) { - tpblksread = tmpbuf.c_firstrec; + tpblksread = tmpbuf.c_firstrec + 1; for (i = tmpbuf.c_count; i > 0; i--) readtape(buf); } else if (tmpbuf.c_firstrec > 0 && -- Stelian Pop <ste...@fr...> Alcove - http://www.alcove.com |