Changeset View
Changeset View
Standalone View
Standalone View
sbin/restore/tape.c
Show First 20 Lines • Show All 622 Lines • ▼ Show 20 Lines | case IFLNK: | ||||
buf = setupextattr(extsize); | buf = setupextattr(extsize); | ||||
getfile(xtrlnkfile, xtrattr, xtrlnkskip); | getfile(xtrlnkfile, xtrattr, xtrlnkskip); | ||||
if (pathlen == 0) { | if (pathlen == 0) { | ||||
vprintf(stdout, | vprintf(stdout, | ||||
"%s: zero length symbolic link (ignored)\n", name); | "%s: zero length symbolic link (ignored)\n", name); | ||||
return (GOOD); | return (GOOD); | ||||
} | } | ||||
if (linkit(lnkbuf, name, SYMLINK) == GOOD) { | if (linkit(lnkbuf, name, SYMLINK) == GOOD) { | ||||
if (extsize > 0) | |||||
set_extattr(-1, name, buf, extsize, SXA_LINK); | |||||
(void) lchown(name, uid, gid); | (void) lchown(name, uid, gid); | ||||
(void) lchmod(name, mode); | (void) lchmod(name, mode); | ||||
if (extsize > 0) | |||||
set_extattr(-1, name, buf, extsize, SXA_LINK); | |||||
(void) utimensat(AT_FDCWD, name, ctimep, | (void) utimensat(AT_FDCWD, name, ctimep, | ||||
AT_SYMLINK_NOFOLLOW); | AT_SYMLINK_NOFOLLOW); | ||||
(void) utimensat(AT_FDCWD, name, mtimep, | (void) utimensat(AT_FDCWD, name, mtimep, | ||||
AT_SYMLINK_NOFOLLOW); | AT_SYMLINK_NOFOLLOW); | ||||
(void) lchflags(name, flags); | (void) lchflags(name, flags); | ||||
return (GOOD); | return (GOOD); | ||||
} | } | ||||
return (FAIL); | return (FAIL); | ||||
case IFIFO: | case IFIFO: | ||||
vprintf(stdout, "extract fifo %s\n", name); | vprintf(stdout, "extract fifo %s\n", name); | ||||
if (Nflag) { | if (Nflag) { | ||||
skipfile(); | skipfile(); | ||||
return (GOOD); | return (GOOD); | ||||
} | } | ||||
if (uflag) | if (uflag) | ||||
(void) unlink(name); | (void) unlink(name); | ||||
if (mkfifo(name, 0600) < 0) { | if (mkfifo(name, 0600) < 0) { | ||||
fprintf(stderr, "%s: cannot create fifo: %s\n", | fprintf(stderr, "%s: cannot create fifo: %s\n", | ||||
name, strerror(errno)); | name, strerror(errno)); | ||||
skipfile(); | skipfile(); | ||||
return (FAIL); | return (FAIL); | ||||
} | } | ||||
(void) chown(name, uid, gid); | |||||
(void) chmod(name, mode); | |||||
if (extsize == 0) { | if (extsize == 0) { | ||||
skipfile(); | skipfile(); | ||||
} else { | } else { | ||||
buf = setupextattr(extsize); | buf = setupextattr(extsize); | ||||
getfile(xtrnull, xtrattr, xtrnull); | getfile(xtrnull, xtrattr, xtrnull); | ||||
set_extattr(-1, name, buf, extsize, SXA_FILE); | set_extattr(-1, name, buf, extsize, SXA_FILE); | ||||
} | } | ||||
(void) chown(name, uid, gid); | |||||
(void) chmod(name, mode); | |||||
(void) utimensat(AT_FDCWD, name, ctimep, 0); | (void) utimensat(AT_FDCWD, name, ctimep, 0); | ||||
(void) utimensat(AT_FDCWD, name, mtimep, 0); | (void) utimensat(AT_FDCWD, name, mtimep, 0); | ||||
(void) chflags(name, flags); | (void) chflags(name, flags); | ||||
return (GOOD); | return (GOOD); | ||||
case IFCHR: | case IFCHR: | ||||
case IFBLK: | case IFBLK: | ||||
vprintf(stdout, "extract special file %s\n", name); | vprintf(stdout, "extract special file %s\n", name); | ||||
if (Nflag) { | if (Nflag) { | ||||
skipfile(); | skipfile(); | ||||
return (GOOD); | return (GOOD); | ||||
} | } | ||||
if (uflag) | if (uflag) | ||||
(void) unlink(name); | (void) unlink(name); | ||||
if (mknod(name, (mode & (IFCHR | IFBLK)) | 0600, | if (mknod(name, (mode & (IFCHR | IFBLK)) | 0600, | ||||
(int)curfile.rdev) < 0) { | (int)curfile.rdev) < 0) { | ||||
fprintf(stderr, "%s: cannot create special file: %s\n", | fprintf(stderr, "%s: cannot create special file: %s\n", | ||||
name, strerror(errno)); | name, strerror(errno)); | ||||
skipfile(); | skipfile(); | ||||
return (FAIL); | return (FAIL); | ||||
} | } | ||||
(void) chown(name, uid, gid); | |||||
(void) chmod(name, mode); | |||||
if (extsize == 0) { | if (extsize == 0) { | ||||
skipfile(); | skipfile(); | ||||
} else { | } else { | ||||
buf = setupextattr(extsize); | buf = setupextattr(extsize); | ||||
getfile(xtrnull, xtrattr, xtrnull); | getfile(xtrnull, xtrattr, xtrnull); | ||||
set_extattr(-1, name, buf, extsize, SXA_FILE); | set_extattr(-1, name, buf, extsize, SXA_FILE); | ||||
} | } | ||||
(void) chown(name, uid, gid); | |||||
(void) chmod(name, mode); | |||||
(void) utimensat(AT_FDCWD, name, ctimep, 0); | (void) utimensat(AT_FDCWD, name, ctimep, 0); | ||||
(void) utimensat(AT_FDCWD, name, mtimep, 0); | (void) utimensat(AT_FDCWD, name, mtimep, 0); | ||||
(void) chflags(name, flags); | (void) chflags(name, flags); | ||||
return (GOOD); | return (GOOD); | ||||
case IFREG: | case IFREG: | ||||
vprintf(stdout, "extract file %s\n", name); | vprintf(stdout, "extract file %s\n", name); | ||||
if (Nflag) { | if (Nflag) { | ||||
skipfile(); | skipfile(); | ||||
return (GOOD); | return (GOOD); | ||||
} | } | ||||
if (uflag) | if (uflag) | ||||
(void) unlink(name); | (void) unlink(name); | ||||
if ((ofile = open(name, O_WRONLY | O_CREAT | O_TRUNC, | if ((ofile = open(name, O_WRONLY | O_CREAT | O_TRUNC, | ||||
0600)) < 0) { | 0600)) < 0) { | ||||
fprintf(stderr, "%s: cannot create file: %s\n", | fprintf(stderr, "%s: cannot create file: %s\n", | ||||
name, strerror(errno)); | name, strerror(errno)); | ||||
skipfile(); | skipfile(); | ||||
return (FAIL); | return (FAIL); | ||||
} | } | ||||
(void) fchown(ofile, uid, gid); | |||||
(void) fchmod(ofile, mode); | |||||
buf = setupextattr(extsize); | buf = setupextattr(extsize); | ||||
getfile(xtrfile, xtrattr, xtrskip); | getfile(xtrfile, xtrattr, xtrskip); | ||||
if (extsize > 0) | if (extsize > 0) | ||||
set_extattr(ofile, name, buf, extsize, SXA_FD); | set_extattr(ofile, name, buf, extsize, SXA_FD); | ||||
(void) fchown(ofile, uid, gid); | |||||
(void) fchmod(ofile, mode); | |||||
(void) futimens(ofile, ctimep); | (void) futimens(ofile, ctimep); | ||||
(void) futimens(ofile, mtimep); | (void) futimens(ofile, mtimep); | ||||
(void) fchflags(ofile, flags); | (void) fchflags(ofile, flags); | ||||
(void) close(ofile); | (void) close(ofile); | ||||
return (GOOD); | return (GOOD); | ||||
} | } | ||||
/* NOTREACHED */ | /* NOTREACHED */ | ||||
} | } | ||||
▲ Show 20 Lines • Show All 974 Lines • Show Last 20 Lines |