add -p flag, similar to cp(1)
This commit is contained in:
parent
ddb60058ff
commit
710d4c153b
@ -1,4 +1,4 @@
|
||||
.\" $NetBSD: install.1,v 1.10 1997/10/20 03:32:25 lukem Exp $
|
||||
.\" $NetBSD: install.1,v 1.11 1998/09/28 08:16:15 christos Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1987, 1990, 1993
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
@ -41,7 +41,7 @@
|
||||
.Nd install binaries
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl cs
|
||||
.Op Fl cps
|
||||
.Op Fl f Ar flags
|
||||
.Op Fl g Ar group
|
||||
.Op Fl l Ar linkflags
|
||||
@ -49,7 +49,7 @@
|
||||
.Op Fl o Ar owner
|
||||
.Ar file1 file2
|
||||
.Nm ""
|
||||
.Op Fl cs
|
||||
.Op Fl cps
|
||||
.Op Fl f Ar flags
|
||||
.Op Fl g Ar group
|
||||
.Op Fl l Ar linkflags
|
||||
@ -59,7 +59,7 @@
|
||||
\&...
|
||||
.Ar fileN directory
|
||||
.Nm ""
|
||||
.Fl d
|
||||
.Fl pd
|
||||
.Op Fl m Ar mode
|
||||
.Op Fl o Ar owner
|
||||
.Op Fl g Ar group
|
||||
@ -118,6 +118,8 @@ are:
|
||||
are hard links for files on the same filesystem, symbolic otherwise.
|
||||
.It Fl o
|
||||
Specify an owner.
|
||||
.It Fl p
|
||||
Preserve the source files access and modification times.
|
||||
.It Fl s
|
||||
.Nm
|
||||
exec's the command
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: xinstall.c,v 1.25 1998/02/20 09:27:21 mycroft Exp $ */
|
||||
/* $NetBSD: xinstall.c,v 1.26 1998/09/28 08:16:15 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1987, 1993
|
||||
@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1987, 1993\n\
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)xinstall.c 8.1 (Berkeley) 7/21/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: xinstall.c,v 1.25 1998/02/20 09:27:21 mycroft Exp $");
|
||||
__RCSID("$NetBSD: xinstall.c,v 1.26 1998/09/28 08:16:15 christos Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -68,7 +68,7 @@ __RCSID("$NetBSD: xinstall.c,v 1.25 1998/02/20 09:27:21 mycroft Exp $");
|
||||
|
||||
struct passwd *pp;
|
||||
struct group *gp;
|
||||
int docopy, dodir, dostrip, dolink;
|
||||
int docopy, dodir, dostrip, dolink, dopreserve;
|
||||
int mode = S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH;
|
||||
char pathbuf[MAXPATHLEN];
|
||||
uid_t uid;
|
||||
@ -106,11 +106,14 @@ main(argc, argv)
|
||||
char *flags = NULL, *to_name, *group = NULL, *owner = NULL;
|
||||
|
||||
iflags = 0;
|
||||
while ((ch = getopt(argc, argv, "cf:g:l:m:o:sd")) != -1)
|
||||
while ((ch = getopt(argc, argv, "cdf:g:l:m:o:ps")) != -1)
|
||||
switch((char)ch) {
|
||||
case 'c':
|
||||
docopy = 1;
|
||||
break;
|
||||
case 'd':
|
||||
dodir = 1;
|
||||
break;
|
||||
case 'f':
|
||||
flags = optarg;
|
||||
if (string_to_flags(&flags, &fset, NULL))
|
||||
@ -120,20 +123,6 @@ main(argc, argv)
|
||||
case 'g':
|
||||
group = optarg;
|
||||
break;
|
||||
case 'm':
|
||||
if (!(set = setmode(optarg)))
|
||||
errx(1, "%s: invalid file mode", optarg);
|
||||
mode = getmode(set, 0);
|
||||
break;
|
||||
case 'o':
|
||||
owner = optarg;
|
||||
break;
|
||||
case 's':
|
||||
dostrip = 1;
|
||||
break;
|
||||
case 'd':
|
||||
dodir = 1;
|
||||
break;
|
||||
case 'l':
|
||||
for (p = optarg; *p; p++)
|
||||
switch (*p) {
|
||||
@ -162,6 +151,20 @@ main(argc, argv)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'm':
|
||||
if (!(set = setmode(optarg)))
|
||||
errx(1, "%s: invalid file mode", optarg);
|
||||
mode = getmode(set, 0);
|
||||
break;
|
||||
case 'o':
|
||||
owner = optarg;
|
||||
break;
|
||||
case 'p':
|
||||
dopreserve = 1;
|
||||
break;
|
||||
case 's':
|
||||
dostrip = 1;
|
||||
break;
|
||||
case '?':
|
||||
default:
|
||||
usage();
|
||||
@ -395,6 +398,18 @@ install(from_name, to_name, fset, flags)
|
||||
warn("%s: chflags", to_name);
|
||||
}
|
||||
|
||||
/*
|
||||
* Preserve the date of the source file.
|
||||
*/
|
||||
if (dopreserve) {
|
||||
struct timeval tv[2];
|
||||
|
||||
TIMESPEC_TO_TIMEVAL(&tv[0], &from_sb.st_atimespec);
|
||||
TIMESPEC_TO_TIMEVAL(&tv[1], &from_sb.st_mtimespec);
|
||||
if (futimes(to_fd, tv) == -1)
|
||||
warn("%s: futimes", to_name);
|
||||
}
|
||||
|
||||
(void)close(to_fd);
|
||||
if (!docopy && !devnull && unlink(from_name))
|
||||
err(1, "%s", from_name);
|
||||
|
Loading…
Reference in New Issue
Block a user