diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2014-05-19 16:23:50 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2014-05-19 16:23:50 +0200 |
commit | 17f8418ea75410c3fbf9c9558f50f22cb8808e3e (patch) | |
tree | 9b9a7d6296ffb77c8b855eb34b8cbf03b960e005 /coreutils/install.c | |
parent | 539e2802ebd2680602de0a2c76069b7f555392d9 (diff) | |
download | busybox-w32-17f8418ea75410c3fbf9c9558f50f22cb8808e3e.tar.gz busybox-w32-17f8418ea75410c3fbf9c9558f50f22cb8808e3e.tar.bz2 busybox-w32-17f8418ea75410c3fbf9c9558f50f22cb8808e3e.zip |
Add conditional support for -v / --verbose
With FEATURE_VERBOSE off, practically no size change.
With it on:
function old new delta
remove_file 493 556 +63
install_main 719 765 +46
bb_make_directory 383 419 +36
rmdir_main 162 191 +29
copy_file 1516 1544 +28
mv_main 502 525 +23
cmp_main 677 693 +16
bbconfig_config_bz2 5264 5279 +15
mkdir_main 158 168 +10
install_longopts 66 76 +10
rm_main 167 175 +8
nexpr 840 846 +6
scan_tree 275 280 +5
fsck_main 1807 1811 +4
ed_main 2541 2545 +4
expand_one_var 1574 1575 +1
swap_on_off_main 420 418 -2
parse_command 1443 1440 -3
redirect 1279 1274 -5
do_load 946 918 -28
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 16/4 up/down: 304/-38) Total: 266 bytes
Based on the patch by Igor Živković.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
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); |