install: shrink -D code. By Bernhard.
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 6 Sep 2008 14:35:08 +0000 (14:35 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 6 Sep 2008 14:35:08 +0000 (14:35 -0000)
function                                             old     new   delta
install_main                                         726     707     -19

coreutils/install.c

index 69bf7dc553ca4da112c1004fa73c0858c3111eee..2b796e2a17430ef6d6a8e4482eeae809c13b8741 100644 (file)
@@ -159,18 +159,15 @@ int install_main(int argc, char **argv)
                                goto next;
                        }
                } else {
-                       if (isdir)
-                               dest = concat_path_file(last, basename(arg));
                        if (opts & OPT_MKDIR_LEADING) {
-                               char *slash = strrchr(dest, '/');
-                               if (slash) {
-                                       *slash = '\0';
-                                       bb_make_directory(dest, 0755, FILEUTILS_RECUR);
-                                       /* errors are not checked. copy_file
-                                        * will fail if dir is not created. */
-                                       *slash = '/';
-                               }
+                               char *ddir = xstrdup(dest);
+                               bb_make_directory(dirname(ddir), 0755, FILEUTILS_RECUR);
+                               /* errors are not checked. copy_file
+                                * will fail if dir is not created. */
+                               free(ddir);
                        }
+                       if (isdir)
+                               dest = concat_path_file(last, basename(arg));
                        if (copy_file(arg, dest, copy_flags)) {
                                /* copy is not made */
                                ret = EXIT_FAILURE;