diff options
Diffstat (limited to 'coreutils/install.c')
-rw-r--r-- | coreutils/install.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/coreutils/install.c b/coreutils/install.c index 445497f9a..6c88ae11c 100644 --- a/coreutils/install.c +++ b/coreutils/install.c | |||
@@ -28,6 +28,9 @@ | |||
28 | 28 | ||
29 | #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS | 29 | #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS |
30 | static const char install_longopts[] ALIGN1 = | 30 | static const char install_longopts[] ALIGN1 = |
31 | IF_FEATURE_VERBOSE( | ||
32 | "verbose\0" No_argument "v" | ||
33 | ) | ||
31 | "directory\0" No_argument "d" | 34 | "directory\0" No_argument "d" |
32 | "preserve-timestamps\0" No_argument "p" | 35 | "preserve-timestamps\0" No_argument "p" |
33 | "strip\0" No_argument "s" | 36 | "strip\0" No_argument "s" |
@@ -89,6 +92,7 @@ int install_main(int argc, char **argv) | |||
89 | const char *gid_str; | 92 | const char *gid_str; |
90 | const char *uid_str; | 93 | const char *uid_str; |
91 | const char *mode_str; | 94 | const char *mode_str; |
95 | int mkdir_flags = FILEUTILS_RECUR; | ||
92 | int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; | 96 | int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; |
93 | int opts; | 97 | int opts; |
94 | int min_args = 1; | 98 | int min_args = 1; |
@@ -120,7 +124,6 @@ int install_main(int argc, char **argv) | |||
120 | #endif | 124 | #endif |
121 | opt_complementary = "s--d:d--s" IF_FEATURE_INSTALL_LONG_OPTIONS(IF_SELINUX(":Z--\xff:\xff--Z")); | 125 | opt_complementary = "s--d:d--s" IF_FEATURE_INSTALL_LONG_OPTIONS(IF_SELINUX(":Z--\xff:\xff--Z")); |
122 | /* -c exists for backwards compatibility, it's needed */ | 126 | /* -c exists for backwards compatibility, it's needed */ |
123 | /* -v is ignored ("print name of each created directory") */ | ||
124 | /* -b is ignored ("make a backup of each existing destination file") */ | 127 | /* -b is ignored ("make a backup of each existing destination file") */ |
125 | opts = getopt32(argv, "cvb" "Ddpsg:m:o:" IF_SELINUX("Z:"), | 128 | opts = getopt32(argv, "cvb" "Ddpsg:m:o:" IF_SELINUX("Z:"), |
126 | &gid_str, &mode_str, &uid_str IF_SELINUX(, &scontext)); | 129 | &gid_str, &mode_str, &uid_str IF_SELINUX(, &scontext)); |
@@ -141,6 +144,11 @@ int install_main(int argc, char **argv) | |||
141 | } | 144 | } |
142 | #endif | 145 | #endif |
143 | 146 | ||
147 | if ((opts & OPT_v) && FILEUTILS_VERBOSE) { | ||
148 | mkdir_flags |= FILEUTILS_VERBOSE; | ||
149 | copy_flags |= FILEUTILS_VERBOSE; | ||
150 | } | ||
151 | |||
144 | /* preserve access and modification time, this is GNU behaviour, | 152 | /* preserve access and modification time, this is GNU behaviour, |
145 | * BSD only preserves modification time */ | 153 | * BSD only preserves modification time */ |
146 | if (opts & OPT_PRESERVE_TIME) { | 154 | if (opts & OPT_PRESERVE_TIME) { |
@@ -171,14 +179,14 @@ int install_main(int argc, char **argv) | |||
171 | /* GNU coreutils 6.9 does not set uid:gid | 179 | /* GNU coreutils 6.9 does not set uid:gid |
172 | * on intermediate created directories | 180 | * on intermediate created directories |
173 | * (only on last one) */ | 181 | * (only on last one) */ |
174 | if (bb_make_directory(dest, 0755, FILEUTILS_RECUR)) { | 182 | if (bb_make_directory(dest, 0755, mkdir_flags)) { |
175 | ret = EXIT_FAILURE; | 183 | ret = EXIT_FAILURE; |
176 | goto next; | 184 | goto next; |
177 | } | 185 | } |
178 | } else { | 186 | } else { |
179 | if (opts & OPT_MKDIR_LEADING) { | 187 | if (opts & OPT_MKDIR_LEADING) { |
180 | char *ddir = xstrdup(dest); | 188 | char *ddir = xstrdup(dest); |
181 | bb_make_directory(dirname(ddir), 0755, FILEUTILS_RECUR); | 189 | bb_make_directory(dirname(ddir), 0755, mkdir_flags); |
182 | /* errors are not checked. copy_file | 190 | /* errors are not checked. copy_file |
183 | * will fail if dir is not created. */ | 191 | * will fail if dir is not created. */ |
184 | free(ddir); | 192 | free(ddir); |