]> git.wh0rd.org - dump.git/blobdiff - restore/restore.c
Changed ino_t to dump_ino_t.
[dump.git] / restore / restore.c
index 3eb6d93831a753606b4e78e410c489a9c52f0b27..bc38b655874b148c8e78f347a4ab8e5a6a287642 100644 (file)
@@ -2,8 +2,8 @@
  *     Ported to Linux's Second Extended File System as part of the
  *     dump and restore backup suit
  *     Remy Card <card@Linux.EU.Org>, 1994-1997
- *      Stelian Pop <pop@cybercable.fr>, 1999 
- *
+ *     Stelian Pop <pop@noos.fr>, 1999-2000
+ *     Stelian Pop <pop@noos.fr> - AlcĂ´ve <www.alcove.fr>, 2000
  */
 
 /*
  */
 
 #ifndef lint
-#if 0
-static char sccsid[] = "@(#)restore.c  8.3 (Berkeley) 9/13/94";
-#endif
 static const char rcsid[] =
-       "$Id: restore.c,v 1.4 1999/10/11 13:08:09 stelian Exp $";
+       "$Id: restore.c,v 1.14 2001/03/20 10:02:48 stelian Exp $";
 #endif /* not lint */
 
+#include <config.h>
 #include <sys/types.h>
 
 #ifdef __linux__
@@ -75,7 +73,7 @@ static char *keyval __P((int));
  * List entries on the tape.
  */
 long
-listfile(char *name, ino_t ino, int type)
+listfile(char *name, dump_ino_t ino, int type)
 {
        long descend = hflag ? GOOD : FAIL;
 
@@ -91,9 +89,9 @@ listfile(char *name, ino_t ino, int type)
  * Request that new entries be extracted.
  */
 long
-addfile(char *name, ino_t ino, int type)
+addfile(char *name, dump_ino_t ino, int type)
 {
-       register struct entry *ep;
+       register struct entry *ep, *np;
        long descend = hflag ? GOOD : FAIL;
        char buf[100];
 
@@ -118,6 +116,11 @@ addfile(char *name, ino_t ino, int type)
                        return (descend);
                }
                type |= LINK;
+               for (np = ep->e_links; np; np = np->e_links)
+                       if (strcmp(name, myname(np)) == 0) {
+                               np->e_flags |= NEW;
+                               return (descend);
+                       }
        }
        ep = addentry(name, ino, type);
        if (type == NODE)
@@ -132,7 +135,7 @@ addfile(char *name, ino_t ino, int type)
  */
 /* ARGSUSED */
 long
-deletefile(char *name, ino_t ino, int type)
+deletefile(char *name, dump_ino_t ino, int type)
 {
        long descend = hflag ? GOOD : FAIL;
        struct entry *ep;
@@ -173,7 +176,7 @@ void
 removeoldleaves(void)
 {
        register struct entry *ep, *nextep;
-       register ino_t i, mydirino;
+       register dump_ino_t i, mydirino;
 
        Vprintf(stdout, "Mark entries to be removed.\n");
        if ((ep = lookupino(WINO))) {
@@ -227,7 +230,7 @@ removeoldleaves(void)
  *     Renames are done at the same time.
  */
 long
-nodeupdates(char *name, ino_t ino, int type)
+nodeupdates(char *name, dump_ino_t ino, int type)
 {
        register struct entry *ep, *np, *ip;
        long descend = GOOD;
@@ -485,6 +488,7 @@ nodeupdates(char *name, ino_t ino, int type)
                if (compare_ignore_not_found) break;
                fprintf(stderr, "%s: (inode %lu) not found on tape\n",
                        name, (unsigned long)ino);
+               compare_errors = 1;
                break;
 
        /*
@@ -538,7 +542,7 @@ void
 findunreflinks(void)
 {
        register struct entry *ep, *np;
-       register ino_t i;
+       register dump_ino_t i;
 
        Vprintf(stdout, "Find unreferenced names.\n");
        for (i = ROOTINO; i < maxino; i++) {
@@ -614,8 +618,10 @@ removeoldnodes(void)
 static void
 compare_entry(struct entry *ep, int do_compare)
 {
-       if ((ep->e_flags & (NEW|EXTRACT)) == 0)
+       if ((ep->e_flags & (NEW|EXTRACT)) == 0) {
                badentry(ep, "unexpected file on tape");
+               compare_errors = 1;
+       }
        if (do_compare) (void) comparefile(myname(ep));
        ep->e_flags &= ~(NEW|EXTRACT);
 }
@@ -627,7 +633,7 @@ void
 compareleaves(void)
 {
        register struct entry *ep;
-       ino_t first;
+       dump_ino_t first;
        long curvol;
 
        first = lowerbnd(ROOTINO);
@@ -646,6 +652,7 @@ compareleaves(void)
                        if (ep == NULL)
                                panic("%d: bad first\n", first);
                        fprintf(stderr, "%s: not found on tape\n", myname(ep));
+                       compare_errors = 1;
                        ep->e_flags &= ~(NEW|EXTRACT);
                        first = lowerbnd(first);
                }
@@ -659,12 +666,15 @@ compareleaves(void)
                if (first != curfile.ino) {
                        fprintf(stderr, "expected next file %ld, got %lu\n",
                                (long)first, (unsigned long)curfile.ino);
+                       compare_errors = 1;
                        skipfile();
                        goto next;
                }
                ep = lookupino(curfile.ino);
-               if (ep == NULL)
+               if (ep == NULL) {
                        panic("unknown file on tape\n");
+                       compare_errors = 1;
+               }
                compare_entry(ep, 1);
                for (ep = ep->e_links; ep != NULL; ep = ep->e_links) {
                        compare_entry(ep, 0);
@@ -691,7 +701,7 @@ void
 createleaves(char *symtabfile)
 {
        register struct entry *ep;
-       ino_t first;
+       dump_ino_t first;
        long curvol;
 
        if (command == 'R') {
@@ -769,7 +779,7 @@ createleaves(char *symtabfile)
 void
 createfiles(void)
 {
-       register ino_t first, next, last;
+       register dump_ino_t first, next, last;
        register struct entry *ep;
        long curvol;
 
@@ -858,7 +868,7 @@ void
 createlinks(void)
 {
        register struct entry *np, *ep;
-       register ino_t i;
+       register dump_ino_t i;
        char name[BUFSIZ];
 
        if ((ep = lookupino(WINO))) {
@@ -902,7 +912,7 @@ void
 checkrestore(void)
 {
        register struct entry *ep;
-       register ino_t i;
+       register dump_ino_t i;
 
        Vprintf(stdout, "Check the symbol table.\n");
        for (i = WINO; i < maxino; i++) {
@@ -921,7 +931,7 @@ checkrestore(void)
  * A paranoid check that things are as they should be.
  */
 long
-verifyfile(char *name, ino_t ino, int type)
+verifyfile(char *name, dump_ino_t ino, int type)
 {
        struct entry *np, *ep;
        long descend = GOOD;