-$Id: CHANGES,v 1.149 2001/12/24 12:28:38 stelian Exp $
+$Id: CHANGES,v 1.150 2001/12/24 12:31:12 stelian Exp $
Changes between versions 0.4b25 and 0.4b26 (released ?????????????????)
=======================================================================
a one letter subdirectory. Thanks to Chris Siebenmann
<cks@utcc.utoronto.ca> for reporting the bug.
+3. Fixed several restore bugs occuring when trying to
+ restore some missing files on the tape. Thanks to Chris
+ Siebenmann <cks@utcc.utoronto.ca> for reporting the bug.
+
Changes between versions 0.4b24 and 0.4b25 (released November 17, 2001)
=======================================================================
#ifndef lint
static const char rcsid[] =
- "$Id: restore.c,v 1.18 2001/06/18 10:58:28 stelian Exp $";
+ "$Id: restore.c,v 1.19 2001/12/24 12:31:12 stelian Exp $";
#endif /* not lint */
#include <config.h>
curvol = volno;
}
}
+ /*
+ * If we encounter the end of the tape and the next available
+ * file is not the one which we expect then we have missed one
+ * or more files. Since we do not request files that were not
+ * on the tape, the lost files must have been due to a tape
+ * read error, or a file that was removed while the dump was
+ * in progress.
+ */
+ first = lowerbnd(first);
+ while (first < curfile.ino) {
+ ep = lookupino(first);
+ if (ep == NULL)
+ panic("%d: bad first\n", first);
+ fprintf(stderr, "%s: (inode %lu) not found on tape\n",
+ myname(ep), (unsigned long)first);
+ compare_errors = 1;
+ ep->e_flags &= ~(NEW|EXTRACT);
+ first = lowerbnd(first);
+ }
}
/*
ep = lookupino(first);
if (ep == NULL)
panic("%d: bad first\n", first);
- fprintf(stderr, "%s: not found on tape\n", myname(ep));
+ fprintf(stderr, "%s: (inode %lu) not found on tape\n",
+ myname(ep), (unsigned long)first);
ep->e_flags &= ~(NEW|EXTRACT);
first = lowerbnd(first);
}
curvol = volno;
}
}
+ /*
+ * If we encounter the end of the tape and the next available
+ * file is not the one which we expect then we have missed one
+ * or more files. Since we do not request files that were not
+ * on the tape, the lost files must have been due to a tape
+ * read error, or a file that was removed while the dump was
+ * in progress.
+ */
+ first = lowerbnd(first);
+ while (first < curfile.ino) {
+ ep = lookupino(first);
+ if (ep == NULL)
+ panic("%d: bad first\n", first);
+ fprintf(stderr, "%s: (inode %lu) not found on tape\n",
+ myname(ep), (unsigned long)first);
+ compare_errors = 1;
+ ep->e_flags &= ~(NEW|EXTRACT);
+ first = lowerbnd(first);
+ }
}
/*
while (curfile.ino > last) {
curfile.action = SKIP;
getvol((long)0);
+ if (curfile.ino == maxino) {
+ next = lowerbnd(next);
+ while (next < curfile.ino) {
+ ep = lookupino(next);
+ if (ep == NULL)
+ panic("corrupted symbol table\n");
+ fprintf(stderr, "%s: (inode %lu) not found on tape\n",
+ myname(ep), (unsigned long)next);
+ ep->e_flags &= ~NEW;
+ next = lowerbnd(next);
+ }
+ return;
+ }
skipmaps();
skipdirs();
}
ep = lookupino(next);
if (ep == NULL)
panic("corrupted symbol table\n");
- fprintf(stderr, "%s: not found on tape\n", myname(ep));
+ fprintf(stderr, "%s: (inode %lu) not found on tape\n",
+ myname(ep), (unsigned long)next);
ep->e_flags &= ~NEW;
next = lowerbnd(next);
}
#ifndef lint
static const char rcsid[] =
- "$Id: tape.c,v 1.48 2001/11/16 14:09:07 stelian Exp $";
+ "$Id: tape.c,v 1.49 2001/12/24 12:31:12 stelian Exp $";
#endif /* not lint */
#include <config.h>
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,