install: strip before mode/uid/gid is set, not after.
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 21 Feb 2010 15:55:29 +0000 (16:55 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 21 Feb 2010 15:55:29 +0000 (16:55 +0100)
function                                             old     new   delta
install_main                                         694     716     +22
basename                                              21       -     -21

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/install.c

index e9682990ddb9cbe889cbf7e2a57c0ac84893e505..803afe6173a9ae01a9fd5bd9802f8b9b87dd49f7 100644 (file)
@@ -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);