X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=restore%2Frestore.c;h=bc38b655874b148c8e78f347a4ab8e5a6a287642;hb=60d46c352087c38c29a690d80b62441028579f35;hp=d438f41dd0813e02f407fbd520586a286cfad318;hpb=d8574d458324cdde27484485cb09e7c9b8fa1a77;p=dump.git diff --git a/restore/restore.c b/restore/restore.c index d438f41..bc38b65 100644 --- a/restore/restore.c +++ b/restore/restore.c @@ -2,7 +2,8 @@ * Ported to Linux's Second Extended File System as part of the * dump and restore backup suit * Remy Card , 1994-1997 - * Stelian Pop , 1999-2000 + * Stelian Pop , 1999-2000 + * Stelian Pop - AlcĂ´ve , 2000 */ /* @@ -40,9 +41,10 @@ #ifndef lint static const char rcsid[] = - "$Id: restore.c,v 1.9 2000/06/01 18:30:08 stelian Exp $"; + "$Id: restore.c,v 1.14 2001/03/20 10:02:48 stelian Exp $"; #endif /* not lint */ +#include #include #ifdef __linux__ @@ -71,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; @@ -87,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]; @@ -114,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) @@ -128,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; @@ -169,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))) { @@ -223,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; @@ -535,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++) { @@ -626,7 +633,7 @@ void compareleaves(void) { register struct entry *ep; - ino_t first; + dump_ino_t first; long curvol; first = lowerbnd(ROOTINO); @@ -694,7 +701,7 @@ void createleaves(char *symtabfile) { register struct entry *ep; - ino_t first; + dump_ino_t first; long curvol; if (command == 'R') { @@ -772,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; @@ -861,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))) { @@ -905,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++) { @@ -924,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;