]> git.wh0rd.org - dump.git/blobdiff - restore/symtab.c
kill "register".
[dump.git] / restore / symtab.c
index 740165b241631814a54eef7c65ef1ea7ea04e6c3..99312acaeb83a3172d4ebabd41933bab690a78a1 100644 (file)
@@ -2,7 +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-2000
+ *     Stelian Pop <stelian@popies.net>, 1999-2000
+ *     Stelian Pop <stelian@popies.net> - AlcĂ´ve <www.alcove.com>, 2000-2002
  */
 
 /*
@@ -40,7 +41,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: symtab.c,v 1.8 2000/03/01 10:16:05 stelian Exp $";
+       "$Id: symtab.c,v 1.18 2002/01/25 15:09:00 stelian Exp $";
 #endif /* not lint */
 
 /*
@@ -52,12 +53,18 @@ static const char rcsid[] =
  * are needed, by calling "myname".
  */
 
+#include <config.h>
 #include <sys/param.h>
 #include <sys/stat.h>
 
 #ifdef __linux__
 #include <sys/time.h>
+#include <time.h>
+#ifdef HAVE_EXT2FS_EXT2_FS_H
+#include <ext2fs/ext2_fs.h>
+#else
 #include <linux/ext2_fs.h>
+#endif
 #include <bsdcompat.h>
 #else  /* __linux__ */
 #include <ufs/ufs/dinode.h>
@@ -89,7 +96,7 @@ static const char rcsid[] =
 static struct entry **entry;
 static long entrytblsize;
 
-static void             addino __P((ino_t, struct entry *));
+static void             addino __P((dump_ino_t, struct entry *));
 static struct entry    *lookupparent __P((char *));
 static void             removeentry __P((struct entry *));
 
@@ -97,9 +104,9 @@ static void           removeentry __P((struct entry *));
  * Look up an entry by inode number
  */
 struct entry *
-lookupino(ino_t inum)
+lookupino(dump_ino_t inum)
 {
-       register struct entry *ep;
+       struct entry *ep;
 
        if (inum < WINO || inum >= maxino)
                return (NULL);
@@ -113,7 +120,7 @@ lookupino(ino_t inum)
  * Add an entry into the entry table
  */
 static void
-addino(ino_t inum, struct entry *np)
+addino(dump_ino_t inum, struct entry *np)
 {
        struct entry **epp;
 
@@ -133,9 +140,9 @@ addino(ino_t inum, struct entry *np)
  * Delete an entry from the entry table
  */
 void
-deleteino(ino_t inum)
+deleteino(dump_ino_t inum)
 {
-       register struct entry *next;
+       struct entry *next;
        struct entry **prev;
 
        if (inum < WINO || inum >= maxino)
@@ -158,8 +165,8 @@ deleteino(ino_t inum)
 struct entry *
 lookupname(char *name)
 {
-       register struct entry *ep;
-       register char *np, *cp;
+       struct entry *ep;
+       char *np, *cp;
        char buf[MAXPATHLEN];
 
        cp = name;
@@ -209,7 +216,7 @@ lookupparent(char *name)
 char *
 myname(struct entry *ep)
 {
-       register char *cp;
+       char *cp;
        static char namebuf[MAXPATHLEN];
 
        for (cp = &namebuf[MAXPATHLEN - 2]; cp > &namebuf[ep->e_namlen]; ) {
@@ -234,9 +241,9 @@ static struct entry *freelist = NULL;
  * add an entry to the symbol table
  */
 struct entry *
-addentry(char *name, ino_t inum, int type)
+addentry(char *name, dump_ino_t inum, int type)
 {
-       register struct entry *np, *ep;
+       struct entry *np, *ep;
 
        if (freelist != NULL) {
                np = freelist;
@@ -245,7 +252,7 @@ addentry(char *name, ino_t inum, int type)
        } else {
                np = (struct entry *)calloc(1, sizeof(struct entry));
                if (np == NULL)
-                       panic("no memory to extend symbol table\n");
+                       errx(1, "no memory to extend symbol table");
        }
        np->e_type = type & ~LINK;
        ep = lookupparent(name);
@@ -284,8 +291,8 @@ addentry(char *name, ino_t inum, int type)
 void
 freeentry(struct entry *ep)
 {
-       register struct entry *np;
-       ino_t inum;
+       struct entry *np;
+       dump_ino_t inum;
 
        if (ep->e_flags != REMOVED)
                badentry(ep, "not marked REMOVED");
@@ -355,7 +362,7 @@ moveentry(struct entry *ep, char *newname)
 static void
 removeentry(struct entry *ep)
 {
-       register struct entry *np;
+       struct entry *np;
 
        np = ep->e_parent;
        if (np->e_entries == ep) {
@@ -414,7 +421,7 @@ savename(char *name)
        } else {
                cp = malloc((unsigned)allocsize(len));
                if (cp == NULL)
-                       panic("no space for string table\n");
+                       errx(1, "no space for string table");
        }
        (void) strcpy(cp, name);
        return (cp);
@@ -444,8 +451,9 @@ struct symtableheader {
        int32_t entrytblsize;
        time_t  dumptime;
        time_t  dumpdate;
-       ino_t   maxino;
+       dump_ino_t maxino;
        int32_t ntrec;
+       int32_t zflag;
 };
 
 /*
@@ -454,8 +462,8 @@ struct symtableheader {
 void
 dumpsymtable(char *filename, long checkpt)
 {
-       register struct entry *ep, *tep;
-       register ino_t i;
+       struct entry *ep, *tep;
+       dump_ino_t i;
        struct entry temp, *tentry;
        long mynum = 1, stroff = 0;
        FILE *fd;
@@ -524,6 +532,7 @@ dumpsymtable(char *filename, long checkpt)
        hdr.dumptime = dumptime;
        hdr.dumpdate = dumpdate;
        hdr.ntrec = ntrec;
+       hdr.zflag = zflag;
        (void) fwrite((char *)&hdr, sizeof(struct symtableheader), 1, fd);
        if (ferror(fd)) {
                warn("fwrite");
@@ -541,11 +550,11 @@ initsymtable(char *filename)
 {
        char *base;
        long tblsize;
-       register struct entry *ep;
+       struct entry *ep;
        struct entry *baseep, *lep;
        struct symtableheader hdr;
        struct stat stbuf;
-       register long i;
+       long i;
        int fd;
 
        Vprintf(stdout, "Initialize symbol table.\n");
@@ -554,27 +563,27 @@ initsymtable(char *filename)
                entry = (struct entry **)
                        calloc((unsigned)entrytblsize, sizeof(struct entry *));
                if (entry == (struct entry **)NULL)
-                       panic("no memory for entry table\n");
+                       errx(1, "no memory for entry table");
                ep = addentry(".", ROOTINO, NODE);
                ep->e_flags |= NEW;
                return;
        }
        if ((fd = open(filename, O_RDONLY, 0)) < 0) {
                warn("open");
-               panic("cannot open symbol table file %s\n", filename);
+               errx(1, "cannot open symbol table file %s", filename);
        }
        if (fstat(fd, &stbuf) < 0) {
                warn("stat");
-               panic("cannot stat symbol table file %s\n", filename);
+               errx(1, "cannot stat symbol table file %s", filename);
        }
        tblsize = stbuf.st_size - sizeof(struct symtableheader);
        base = calloc(sizeof(char), (unsigned)tblsize);
        if (base == NULL)
-               panic("cannot allocate space for symbol table\n");
+               errx(1, "cannot allocate space for symbol table");
        if (read(fd, base, (int)tblsize) < 0 ||
            read(fd, (char *)&hdr, sizeof(struct symtableheader)) < 0) {
                warn("read");
-               panic("cannot read symbol table file %s\n", filename);
+               errx(1, "cannot read symbol table file %s", filename);
        }
        switch (command) {
        case 'r':
@@ -593,6 +602,7 @@ initsymtable(char *filename)
                curfile.action = SKIP;
                dumptime = hdr.dumptime;
                dumpdate = hdr.dumpdate;
+               zflag = hdr.zflag;
                if (!bflag)
                        newtapebuf(hdr.ntrec);
                getvol(hdr.volno);