X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=restore%2Fdirs.c;h=b987b6999bc69f09343201e2f596ed23db5e23fe;hb=9a0f7d31d8848683face512dcabfc03949c78fb2;hp=b049f49007801c6caa8c70d755b38ecce9dbc860;hpb=63a9cb032e8772bd71314d1dfad4af6913e17805;p=debian%2Fdump diff --git a/restore/dirs.c b/restore/dirs.c index b049f49..b987b69 100644 --- a/restore/dirs.c +++ b/restore/dirs.c @@ -42,7 +42,7 @@ #ifndef lint static const char rcsid[] = - "$Id: dirs.c,v 1.32 2005/05/02 15:10:46 stelian Exp $"; + "$Id: dirs.c,v 1.36 2010/06/11 11:19:17 stelian Exp $"; #endif /* not lint */ #include @@ -495,7 +495,7 @@ putent(struct direct *dp) if (dirloc + dp->d_reclen > DIRBLKSIZ) { ((struct direct *)(dirbuf + prev))->d_reclen = DIRBLKSIZ - prev; - if ( fwrite(dirbuf, 1, DIRBLKSIZ, df) != DIRBLKSIZ ) + if ( fwrite(dirbuf, DIRBLKSIZ, 1, df) != 1 ) err(1,"cannot write to file %s", dirfile); dirloc = 0; } @@ -673,7 +673,7 @@ setdirmodes(int flags) fprintf(stderr, "directory mode, owner, and times not set\n"); return; } - mf = fopen(modefile, "r"); + mf = FOPEN(modefile, "r"); if (mf == NULL) { warn("fopen"); fprintf(stderr, "cannot open mode file %s\n", modefile); @@ -683,13 +683,17 @@ setdirmodes(int flags) clearerr(mf); for (;;) { char xattr[XATTR_MAXSIZE]; - (void) fread((char *)&node, 1, sizeof(struct modeinfo), mf); - if (feof(mf)) - break; - if (node.xattr) { - (void) fread(xattr, 1, XATTR_MAXSIZE, mf); + if (fread((char *)&node, sizeof(struct modeinfo), 1, mf) != 1) { if (feof(mf)) break; + err(1, "fread"); + } + if (node.xattr) { + if (fread(xattr, XATTR_MAXSIZE, 1, mf) != 1) { + if (feof(mf)) + break; + err(1, "fread"); + } } ep = lookupino(node.ino); if (command == 'i' || command == 'x') { @@ -708,8 +712,13 @@ setdirmodes(int flags) panic("cannot find directory inode %d\n", node.ino); } else { cp = myname(ep); - (void) chown(cp, node.uid, node.gid); + if (chown(cp, node.uid, node.gid) < 0) + warn("chown"); (void) chmod(cp, node.mode); + utimes(cp, node.timep); + if (node.xattr) + xattr_extract(cp, xattr); + ep->e_flags &= ~NEW; if (node.flags) #ifdef __linux__ (void) lsetflags(cp, node.flags); @@ -719,10 +728,6 @@ setdirmodes(int flags) (void) chflags(cp, node.flags); #endif #endif - utimes(cp, node.timep); - if (node.xattr) - xattr_extract(cp, xattr); - ep->e_flags &= ~NEW; } } if (ferror(mf)) @@ -747,7 +752,7 @@ comparedirmodes(void) fprintf(stderr, "directory mode, owner, and times not set\n"); return; } - mf = fopen(modefile, "r"); + mf = FOPEN(modefile, "r"); if (mf == NULL) { warn("fopen"); fprintf(stderr, "cannot open mode file %s\n", modefile); @@ -757,22 +762,26 @@ comparedirmodes(void) clearerr(mf); for (;;) { char xattr[XATTR_MAXSIZE]; - (void) fread((char *)&node, 1, sizeof(struct modeinfo), mf); - if (feof(mf)) - break; - if (node.xattr) { - (void) fread(xattr, 1, XATTR_MAXSIZE, mf); + if (fread((char *)&node, sizeof(struct modeinfo), 1, mf) != 1) { if (feof(mf)) break; + err(1, "fread"); + } + if (node.xattr) { + if (fread(xattr, XATTR_MAXSIZE, 1, mf) != 1) { + if (feof(mf)) + break; + err(1, "fread"); + } } ep = lookupino(node.ino); if (ep == NULL) { panic("cannot find directory inode %d\n", node.ino); } else { - cp = myname(ep); struct STAT sb; unsigned long newflags; + cp = myname(ep); if (LSTAT(cp, &sb) < 0) { warn("unable to stat %s", cp); do_compare_error; @@ -928,10 +937,10 @@ savemodeinfo(dump_ino_t ino, struct dinode *dip, char *xattr) { node.uid = dip->di_uid; node.gid = dip->di_gid; node.xattr = xattr ? 1 : 0; - if ( fwrite((char *)&node, 1, sizeof(struct modeinfo), mf) != sizeof(struct modeinfo) ) + if ( fwrite((char *)&node, sizeof(struct modeinfo), 1, mf) != 1 ) err(1,"cannot write to file %s", modefile); if (xattr) - if ( fwrite(xattr, 1, XATTR_MAXSIZE, mf) != XATTR_MAXSIZE) + if ( fwrite(xattr, XATTR_MAXSIZE, 1, mf) != 1 ) err(1,"cannot write to file %s", modefile); }