X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=restore%2Ftape.c;h=02892464bdd4d73572e119cfb7ece65a359615a3;hb=9ce5361de22147d955c6603d8915c68cb1009256;hp=b779fd72517dd904a17b3430cd2a8d90790e4081;hpb=4cef8778dc5913718fc8a1963fd58993c14657ba;p=dump.git diff --git a/restore/tape.c b/restore/tape.c index b779fd7..0289246 100644 --- a/restore/tape.c +++ b/restore/tape.c @@ -42,7 +42,7 @@ #ifndef lint static const char rcsid[] = - "$Id: tape.c,v 1.93 2009/07/23 14:10:39 stelian Exp $"; + "$Id: tape.c,v 1.95 2009/12/04 16:29:18 stelian Exp $"; #endif /* not lint */ #include @@ -891,21 +891,23 @@ extractfile(struct entry *ep, int doremove) } case IFIFO: + { + uid_t luid = curfile.dip->di_uid; + gid_t lgid = curfile.dip->di_gid; + Vprintf(stdout, "extract fifo %s\n", name); - if (Nflag) { - skipfile(); + skipfile(); + if (Nflag) return (GOOD); - } if (! (spcl.c_flags & DR_METAONLY)) { if (uflag && !Nflag) (void)unlink(name); if (mkfifo(name, mode) < 0) { warn("%s: cannot create fifo", name); - skipfile(); return (FAIL); } } - (void) chown(name, curfile.dip->di_uid, curfile.dip->di_gid); + (void) chown(name, luid, lgid); (void) chmod(name, mode); extractattr(name); utimes(name, timep); @@ -922,26 +924,28 @@ extractfile(struct entry *ep, int doremove) (void) chflags(name, flags); #endif #endif - skipfile(); return (GOOD); - + } case IFCHR: case IFBLK: + { + uid_t luid = curfile.dip->di_uid; + gid_t lgid = curfile.dip->di_gid; + int lrdev = (int)curfile.dip->di_rdev; + Vprintf(stdout, "extract special file %s\n", name); - if (Nflag) { - skipfile(); + skipfile(); + if (Nflag) return (GOOD); - } if (! (spcl.c_flags & DR_METAONLY)) { if (uflag) (void)unlink(name); - if (mknod(name, mode, (int)curfile.dip->di_rdev) < 0) { + if (mknod(name, mode, lrdev) < 0) { warn("%s: cannot create special file", name); - skipfile(); return (FAIL); } } - (void) chown(name, curfile.dip->di_uid, curfile.dip->di_gid); + (void) chown(name, luid, lgid); (void) chmod(name, mode); extractattr(name); utimes(name, timep); @@ -964,9 +968,8 @@ extractfile(struct entry *ep, int doremove) } #endif #endif - skipfile(); return (GOOD); - + } case IFREG: { uid_t luid = curfile.dip->di_uid;