From 9a0abc6288eadc9c872c99ab1523e171bd806a59 Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Tue, 23 Aug 1994 17:38:48 -0800 Subject: [PATCH] set file flags; add restoration of FIFO's SCCS-vsn: sbin/restore/tape.c 8.4 --- usr/src/sbin/restore/tape.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/usr/src/sbin/restore/tape.c b/usr/src/sbin/restore/tape.c index 0597c4b353..f539cfff06 100644 --- a/usr/src/sbin/restore/tape.c +++ b/usr/src/sbin/restore/tape.c @@ -11,7 +11,7 @@ */ #ifndef lint -static char sccsid[] = "@(#)tape.c 8.3 (Berkeley) %G%"; +static char sccsid[] = "@(#)tape.c 8.4 (Berkeley) %G%"; #endif /* not lint */ #include @@ -474,7 +474,8 @@ int extractfile(name) char *name; { - int mode; + int flags; + mode_t mode; struct timeval timep[2]; struct entry *ep; @@ -485,6 +486,7 @@ extractfile(name) timep[1].tv_sec = curfile.dip->di_mtime.ts_sec; timep[1].tv_usec = curfile.dip->di_mtime.ts_nsec / 1000; mode = curfile.dip->di_mode; + flags = curfile.dip->di_flags; switch (mode & IFMT) { default: @@ -534,6 +536,26 @@ extractfile(name) } (void) chown(name, curfile.dip->di_uid, curfile.dip->di_gid); (void) chmod(name, mode); + (void) chflags(name, flags); + skipfile(); + utimes(name, timep); + return (GOOD); + + case IFIFO: + vprintf(stdout, "extract fifo %s\n", name); + if (Nflag) { + skipfile(); + return (GOOD); + } + if (mkfifo(name, mode) < 0) { + fprintf(stderr, "%s: cannot create fifo: %s\n", + name, strerror(errno)); + skipfile(); + return (FAIL); + } + (void) chown(name, curfile.dip->di_uid, curfile.dip->di_gid); + (void) chmod(name, mode); + (void) chflags(name, flags); skipfile(); utimes(name, timep); return (GOOD); @@ -552,6 +574,7 @@ extractfile(name) } (void) fchown(ofile, curfile.dip->di_uid, curfile.dip->di_gid); (void) fchmod(ofile, mode); + (void) fchflags(ofile, flags); getfile(xtrfile, xtrskip); (void) close(ofile); utimes(name, timep); -- 2.20.1