Add -p flag for install tool

This commit is contained in:
Erik van der Kouwe 2010-01-27 07:47:29 +00:00
parent c8a11b5453
commit 3e583f4c04
2 changed files with 21 additions and 5 deletions

View File

@ -60,6 +60,7 @@ void deallocate(void *mem)
int lflag= 0; /* Make a hard link if possible. */ int lflag= 0; /* Make a hard link if possible. */
int cflag= 0; /* Copy if you can't link, otherwise symlink. */ int cflag= 0; /* Copy if you can't link, otherwise symlink. */
int dflag= 0; /* Create a directory. */ int dflag= 0; /* Create a directory. */
int pflag= 0; /* Preserve timestamps. */
int strip= 0; /* Strip the copy. */ int strip= 0; /* Strip the copy. */
char **compress= nil; /* Compress utility to make a compressed executable. */ char **compress= nil; /* Compress utility to make a compressed executable. */
char *zcat= nil; /* Line one to decompress. */ char *zcat= nil; /* Line one to decompress. */
@ -169,6 +170,17 @@ void makedir(char *dir, int mode, int owner, int group)
/* Set the mode again, chown may have wrecked it. */ /* Set the mode again, chown may have wrecked it. */
(void) chmod(dir, mode); (void) chmod(dir, mode);
} }
if (pflag) {
struct utimbuf ubuf;
ubuf.actime= st.st_atime;
ubuf.modtime= st.st_mtime;
if (utime(dir, &ubuf) < 0 && errno != EPERM) {
report(dir); return;
}
}
} }
} }
@ -382,7 +394,7 @@ void copylink(char *source, char *dest, int mode, int owner, int group)
/* Set the mode again, chown may have wrecked it. */ /* Set the mode again, chown may have wrecked it. */
(void) chmod(dest, mode); (void) chmod(dest, mode);
} }
if (!change) { if (!change || pflag) {
struct utimbuf ubuf; struct utimbuf ubuf;
ubuf.actime= dst.st_atime; ubuf.actime= dst.st_atime;
@ -398,8 +410,8 @@ void usage(void)
{ {
fprintf(stderr, "\ fprintf(stderr, "\
Usage:\n\ Usage:\n\
install [-lcsz#] [-o owner] [-g group] [-m mode] [-S stack] [file1] file2\n\ install [-lcpsz#] [-o owner] [-g group] [-m mode] [-S stack] [file1] file2\n\
install [-lcsz#] [-o owner] [-g group] [-m mode] [-S stack] file ... dir\n\ install [-lcpsz#] [-o owner] [-g group] [-m mode] [-S stack] file ... dir\n\
install -d [-o owner] [-g group] [-m mode] directory\n"); install -d [-o owner] [-g group] [-m mode] directory\n");
exit(1); exit(1);
} }
@ -447,6 +459,7 @@ void main(int argc, char **argv)
case 'c': cflag= 1; break; case 'c': cflag= 1; break;
case 's': strip= 1; break; case 's': strip= 1; break;
case 'd': dflag= 1; break; case 'd': dflag= 1; break;
case 'p': pflag= 1; break;
case 'z': case 'z':
if (compress == nil) { if (compress == nil) {
compress= COMPRESS; compress= COMPRESS;

View File

@ -5,7 +5,7 @@ install \- install files
.in +5 .in +5
.ti -5 .ti -5
.B install .B install
.RB [ \-lcsz\fIN\fP "] [" \-o .RB [ \-lcpsz\fIN\fP "] [" \-o
.IR owner ] .IR owner ]
.RB [ \-g .RB [ \-g
.IR group ] .IR group ]
@ -18,7 +18,7 @@ install \- install files
.br .br
.ti -5 .ti -5
.B install .B install
.RB [ \-lcsz\fIN\fP "] [" \-o .RB [ \-lcpsz\fIN\fP "] [" \-o
.IR owner ] .IR owner ]
.RB [ \-g .RB [ \-g
.IR group ] .IR group ]
@ -80,6 +80,9 @@ is not given. With
.BR \-l , .BR \-l ,
the file is copied if the link fails. the file is copied if the link fails.
.TP .TP
.B \-p
Preserve timestamp on source file or directory.
.TP
.B \-s .B \-s
Strip the destination file of its symbol table, Strip the destination file of its symbol table,
.I if .I if