summaryrefslogtreecommitdiff
path: root/coreutils/install.c
diff options
context:
space:
mode:
authorDenys Vlasenko2010-02-21 16:55:29 +0100
committerDenys Vlasenko2010-02-21 16:55:29 +0100
commit43d9747f6e3c46fd230fe89344a9ebe4afd8eff5 (patch)
tree636ca45766acf200f8519c74587aa6825380f3d3 /coreutils/install.c
parent8ce1dc03c1b2b61e51527b987579c09c991cc4b2 (diff)
downloadbusybox-43d9747f6e3c46fd230fe89344a9ebe4afd8eff5.zip
busybox-43d9747f6e3c46fd230fe89344a9ebe4afd8eff5.tar.gz
install: strip before mode/uid/gid is set, not after.
function old new delta install_main 694 716 +22 basename 21 - -21 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils/install.c')
-rw-r--r--coreutils/install.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/coreutils/install.c b/coreutils/install.c
index e968299..803afe6 100644
--- a/coreutils/install.c
+++ b/coreutils/install.c
@@ -167,12 +167,23 @@ int install_main(int argc, char **argv)
free(ddir);
}
if (isdir)
- dest = concat_path_file(last, basename(arg));
- if (copy_file(arg, dest, copy_flags)) {
+ dest = concat_path_file(last, bb_basename(arg));
+ if (copy_file(arg, dest, copy_flags) != 0) {
/* copy is not made */
ret = EXIT_FAILURE;
goto next;
}
+ if (opts & OPT_STRIP) {
+ char *args[4];
+ args[0] = (char*)"strip";
+ args[1] = (char*)"-p"; /* -p --preserve-dates */
+ args[2] = dest;
+ args[3] = NULL;
+ if (spawn_and_wait(args)) {
+ bb_perror_msg("strip");
+ ret = EXIT_FAILURE;
+ }
+ }
}
/* Set the file mode (always, not only with -m).
@@ -192,16 +203,6 @@ int install_main(int argc, char **argv)
bb_perror_msg("can't change %s of %s", "ownership", dest);
ret = EXIT_FAILURE;
}
- if (opts & OPT_STRIP) {
- char *args[3];
- args[0] = (char*)"strip";
- args[1] = dest;
- args[2] = NULL;
- if (spawn_and_wait(args)) {
- bb_perror_msg("strip");
- ret = EXIT_FAILURE;
- }
- }
next:
if (ENABLE_FEATURE_CLEAN_UP && isdir)
free(dest);