X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=restore%2Fdirs.c;h=bf1583be85fc9c4e79e8e54fe96217c3beb71496;hb=ed7c25a371480f96746518a4c4d4bb932ae16b77;hp=b15b1d0a6d1282594b0752b2ba78bf45f05c7955;hpb=e4a8bde40a6d8319d1b28e054e1a419ba3df2363;p=dump.git diff --git a/restore/dirs.c b/restore/dirs.c index b15b1d0..bf1583b 100644 --- a/restore/dirs.c +++ b/restore/dirs.c @@ -2,8 +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 - Alcôve , 2000 + * Stelian Pop , 1999-2000 + * Stelian Pop - Alcôve , 2000-2002 */ /* @@ -46,7 +46,7 @@ #ifndef lint static const char rcsid[] = - "$Id: dirs.c,v 1.15 2001/06/18 10:58:28 stelian Exp $"; + "$Id: dirs.c,v 1.20 2002/06/25 19:00:38 stelian Exp $"; #endif /* not lint */ #include @@ -140,7 +140,7 @@ struct odirect { char d_name[ODIRSIZ]; }; -#ifdef __linux__ +#if defined(__linux__) || defined(sunos) static struct inotab *allocinotab __P((dump_ino_t, struct new_bsd_inode *, long)); #else static struct inotab *allocinotab __P((dump_ino_t, struct dinode *, long)); @@ -164,11 +164,11 @@ static struct direct *searchdir __P((dump_ino_t, char *)); void extractdirs(int genmode) { - register int i; -#ifdef __linux__ - register struct new_bsd_inode *ip; + int i; +#if defined(__linux__) || defined(sunos) + struct new_bsd_inode *ip; #else - register struct dinode *ip; + struct dinode *ip; #endif struct inotab *itp; struct direct nulldir; @@ -252,8 +252,8 @@ skipdirs(void) void treescan(char *pname, dump_ino_t ino, long (*todo) __P((char *, dump_ino_t, int))) { - register struct inotab *itp; - register struct direct *dp; + struct inotab *itp; + struct direct *dp; int namelen; long bpt; char locname[MAXPATHLEN + 1]; @@ -325,7 +325,11 @@ pathsearch(const char *pathname) while (*path == '/') path++; dp = NULL; +#ifdef __linux__ while ((name = strsep(&path, "/")) != NULL && *name /* != NULL */) { +#else + while ((name = strtok_r(NULL, "/", &path)) != NULL && *name /* != NULL */) { +#endif if ((dp = searchdir(ino, name)) == NULL) return (NULL); ino = dp->d_ino; @@ -340,8 +344,8 @@ pathsearch(const char *pathname) static struct direct * searchdir(dump_ino_t inum, char *name) { - register struct direct *dp; - register struct inotab *itp; + struct direct *dp; + struct inotab *itp; int len; itp = inotablookup(inum); @@ -364,9 +368,9 @@ static void putdir(char *buf, size_t size) { struct direct cvtbuf; - register struct odirect *odp; + struct odirect *odp; struct odirect *eodp; - register struct direct *dp; + struct direct *dp; long loc, i; if (cvtflag) { @@ -393,6 +397,8 @@ putdir(char *buf, size_t size) if (!Bcvt) dp->d_namlen = dp->d_type; # endif + if (dp->d_namlen == 0 && dp->d_type != 0) + dp->d_namlen = dp->d_type; dp->d_type = DT_UNKNOWN; } #ifdef DIRDEBUG @@ -431,9 +437,9 @@ putdir(char *buf, size_t size) /* * These variables are "local" to the following two functions. */ -char dirbuf[DIRBLKSIZ]; -long dirloc = 0; -long prev = 0; +static char dirbuf[DIRBLKSIZ]; +static long dirloc = 0; +static long prev = 0; /* * add a new directory entry to a file. @@ -509,7 +515,7 @@ rst_seekdir(RST_DIR *dirp, long loc, long base) struct direct * rst_readdir(RST_DIR *dirp) { - register struct direct *dp; + struct direct *dp; for (;;) { if (dirp->dd_loc == 0) { @@ -590,8 +596,8 @@ rst_telldir(RST_DIR *dirp) static RST_DIR * opendirfile(const char *name) { - register RST_DIR *dirp; - register int fd; + RST_DIR *dirp; + int fd; if ((fd = open(name, O_RDONLY)) == -1) return (NULL); @@ -643,7 +649,8 @@ setdirmodes(int flags) ep->e_flags &= ~NEW; continue; } - if (node.ino == ROOTINO && + if ((flags & FORCE) == 0 && + node.ino == ROOTINO && reply("set owner/mode for '.'") == FAIL) continue; } @@ -674,7 +681,7 @@ setdirmodes(int flags) int genliteraldir(char *name, dump_ino_t ino) { - register struct inotab *itp; + struct inotab *itp; int ofile, dp, i, size; char buf[BUFSIZ]; @@ -730,7 +737,7 @@ allocinotab(dump_ino_t ino, struct new_bsd_inode *dip, long seekpt) allocinotab(dump_ino_t ino, struct dinode *dip, long seekpt) #endif { - register struct inotab *itp; + struct inotab *itp; struct modeinfo node; itp = calloc(1, sizeof(struct inotab)); @@ -769,7 +776,7 @@ allocinotab(dump_ino_t ino, struct dinode *dip, long seekpt) static struct inotab * inotablookup(dump_ino_t ino) { - register struct inotab *itp; + struct inotab *itp; for (itp = inotab[INOHASH(ino)]; itp != NULL; itp = itp->t_next) if (itp->t_ino == ino)