X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=restore%2Fdirs.c;h=eb90558ef7369819fa66eaaef4da5d86d2a3d5a1;hb=d6967896bc4e18f9b4359a2ef5be5c0f1bcc456a;hp=30cec66e4a88a0df239ac1eb2ad38b0fd3a22591;hpb=ddd2ef55b78a62c4bc3daad18bef8a90e85a2052;p=dump.git diff --git a/restore/dirs.c b/restore/dirs.c index 30cec66..eb90558 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 - * + * Stelian Pop , 1999-2000 + * Stelian Pop - AlcĂ´ve , 2000 */ /* @@ -45,13 +45,11 @@ */ #ifndef lint -#if 0 -static char sccsid[] = "@(#)dirs.c 8.7 (Berkeley) 5/1/95"; -#endif static const char rcsid[] = - "$Id: dirs.c,v 1.3 1999/10/11 12:59:19 stelian Exp $"; + "$Id: dirs.c,v 1.13 2000/12/21 11:14:54 stelian Exp $"; #endif /* not lint */ +#include #include #include #include @@ -211,12 +209,13 @@ extractdirs(int genmode) curfile.action = USING; ip = curfile.dip; if (ip == NULL || (ip->di_mode & IFMT) != IFDIR) { - (void) fclose(df); + if ( fclose(df) == EOF ) + err(1, "cannot write to file %s", dirfile); dirp = opendirfile(dirfile); if (dirp == NULL) warn("opendirfile"); - if (mf != NULL) - (void) fclose(mf); + if (mf != NULL && fclose(mf) == EOF ) + err(1, "cannot write to file %s", dirfile); i = dirlookup(dot); if (i == 0) panic("Root directory is not on tape\n"); @@ -383,10 +382,6 @@ putdir(char *buf, size_t size) if (Bcvt) swabst((u_char *)"is", (u_char *) dp); if (oldinofmt && dp->d_ino != 0) { -#ifdef __linux__ - if (Bcvt) - swabst((u_char *)"s", (u_char *)&dp->d_namlen); -#else # if BYTE_ORDER == BIG_ENDIAN if (Bcvt) dp->d_namlen = dp->d_type; @@ -394,16 +389,8 @@ putdir(char *buf, size_t size) if (!Bcvt) dp->d_namlen = dp->d_type; # endif -#endif /* __linux__ */ dp->d_type = DT_UNKNOWN; } -#ifdef __linux__ - /* - * Horrible hack to read FreeBSD 2.0 dumps - */ - if (!oldinofmt) - swabst((u_char *)"6bs", (u_char *) dp); -#endif /* __linux__ */ #ifdef DIRDEBUG printf ("reclen = %d, namlen = %d, type = %d\n", dp->d_reclen, dp->d_namlen, dp->d_type); @@ -412,7 +399,7 @@ putdir(char *buf, size_t size) if ((dp->d_reclen & 0x3) != 0 || dp->d_reclen > i || dp->d_reclen < DIRSIZ(0, dp) || - dp->d_namlen > NAME_MAX) { + dp->d_namlen > MAXNAMLEN) { Vprintf(stdout, "Mangled directory: "); if ((dp->d_reclen & 0x3) != 0) Vprintf(stdout, @@ -421,10 +408,10 @@ putdir(char *buf, size_t size) Vprintf(stdout, "reclen less than DIRSIZ (%d < %d) ", dp->d_reclen, DIRSIZ(0, dp)); - if (dp->d_namlen > NAME_MAX) + if (dp->d_namlen > MAXNAMLEN) Vprintf(stdout, "reclen name too big (%d > %d) ", - dp->d_namlen, NAME_MAX); + dp->d_namlen, MAXNAMLEN); Vprintf(stdout, "\n"); loc += i; continue; @@ -454,7 +441,8 @@ putent(struct direct *dp) if (dirloc + dp->d_reclen > DIRBLKSIZ) { ((struct direct *)(dirbuf + prev))->d_reclen = DIRBLKSIZ - prev; - (void) fwrite(dirbuf, 1, DIRBLKSIZ, df); + if ( fwrite(dirbuf, 1, DIRBLKSIZ, df) != DIRBLKSIZ ) + err(1,"cannot write to file %s", dirfile); dirloc = 0; } memmove(dirbuf + dirloc, dp, (size_t)dp->d_reclen); @@ -469,8 +457,11 @@ static void flushent(void) { ((struct direct *)(dirbuf + prev))->d_reclen = DIRBLKSIZ - prev; - (void) fwrite(dirbuf, (int)dirloc, 1, df); + if ( fwrite(dirbuf, (int)dirloc, 1, df) != 1 ) + err(1, "cannot write to file %s", dirfile); seekpt = ftell(df); + if (seekpt == -1) + err(1, "cannot write to file %s", dirfile); dirloc = 0; } @@ -658,10 +649,11 @@ setdirmodes(int flags) cp = myname(ep); (void) chown(cp, node.uid, node.gid); (void) chmod(cp, node.mode); + if (node.flags) #ifdef __linux__ - (void) setflags(cp, node.flags); + (void) fsetflags(cp, node.flags); #else - (void) chflags(cp, node.flags); + (void) chflags(cp, node.flags); #endif utimes(cp, node.timep); ep->e_flags &= ~NEW; @@ -762,7 +754,8 @@ allocinotab(ino_t ino, struct dinode *dip, long seekpt) node.flags = dip->di_flags; node.uid = dip->di_uid; node.gid = dip->di_gid; - (void) fwrite((char *)&node, 1, sizeof(struct modeinfo), mf); + if ( fwrite((char *)&node, 1, sizeof(struct modeinfo), mf) != sizeof(struct modeinfo) ) + err(1,"cannot write to file %s", modefile); return (itp); }