summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--coreutils/install.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/coreutils/install.c b/coreutils/install.c
index 69bf7dc55..2b796e2a1 100644
--- a/coreutils/install.c
+++ b/coreutils/install.c
@@ -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;