X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=restore%2Fsymtab.c;h=06548bcee6e5a84c7bbd0e8eae6c614eb877b57d;hp=8cd384c51dd36a7f2ba622f75f0214bdf93fd268;hb=26ce8fc8f42b8cdd92e9eaadae48be256813b001;hpb=741eb2042c0ebc165d6aeadfd4396882d340adb2 diff --git a/restore/symtab.c b/restore/symtab.c index 8cd384c..06548bc 100644 --- a/restore/symtab.c +++ b/restore/symtab.c @@ -37,7 +37,7 @@ #ifndef lint static const char rcsid[] = - "$Id: symtab.c,v 1.23 2004/12/14 14:07:58 stelian Exp $"; + "$Id: symtab.c,v 1.26 2005/07/07 08:47:16 stelian Exp $"; #endif /* not lint */ /* @@ -50,6 +50,7 @@ static const char rcsid[] = */ #include +#include #include #include @@ -189,9 +190,16 @@ lookupname(char *name) char *np, *cp; char buf[MAXPATHLEN]; + ep = lookupino(ROOTINO); + cp = name; + if (*cp == '.') + ++cp; + if (*cp == '/') + ++cp; + if (*cp == '\0') + return ep; - ep = lookupino(ROOTINO); while (ep != NULL) { for (np = buf; *cp != '/' && *cp != '\0' && np < &buf[sizeof(buf)]; ) @@ -202,8 +210,7 @@ lookupname(char *name) oldep = ep; - if (strcmp(ep->e_name, buf) != 0 && - ep->e_entries != NULL) { + if (ep->e_entries != NULL) { ep = ep->e_entries[dir_hash(buf)]; for ( ; ep != NULL; ep = ep->e_sibling) @@ -548,7 +555,7 @@ dumpsymtable(char *filename, long checkpt) Vprintf(stdout, "Check pointing the restore\n"); if (Nflag) return; - if ((fd = fopen(filename, "w")) == NULL) { + if ((fd = FOPEN(filename, "w")) == NULL) { warn("fopen"); panic("cannot create save file %s for symbol table\n", filename); @@ -648,7 +655,7 @@ initsymtable(char *filename) struct entry *ep; struct entry *baseep, *lep; struct symtableheader hdr; - struct stat stbuf; + struct STAT stbuf; long i; int fd; @@ -663,11 +670,11 @@ initsymtable(char *filename) ep->e_flags |= NEW; return; } - if ((fd = open(filename, O_RDONLY, 0)) < 0) { + if ((fd = OPEN(filename, O_RDONLY, 0)) < 0) { warn("open"); errx(1, "cannot open symbol table file %s", filename); } - if (fstat(fd, &stbuf) < 0) { + if (FSTAT(fd, &stbuf) < 0) { warn("stat"); errx(1, "cannot stat symbol table file %s", filename); } @@ -706,8 +713,10 @@ initsymtable(char *filename) panic("initsymtable called from command %c\n", command); break; } - resizemaps(maxino, hdr.maxino); - maxino = hdr.maxino; + if (hdr.maxino > maxino) { + resizemaps(maxino, hdr.maxino); + maxino = hdr.maxino; + } entrytblsize = hdr.entrytblsize; entry = (struct entry **) (base + tblsize - (entrytblsize * sizeof(struct entry *)));