diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-09-03 21:54:46 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-09-03 21:54:46 +0000 |
commit | d4b719878f5a08986d0a3dc493aad90d4466752e (patch) | |
tree | 64d7c96a59ae67227884cd26662eff01762edb6e /coreutils | |
parent | a2e1eea189981e03b2590c2cd59b9ae65a9cea4f (diff) | |
download | busybox-w32-d4b719878f5a08986d0a3dc493aad90d4466752e.tar.gz busybox-w32-d4b719878f5a08986d0a3dc493aad90d4466752e.tar.bz2 busybox-w32-d4b719878f5a08986d0a3dc493aad90d4466752e.zip |
kbd_mode: fix non-ASCII letters in comments
install: support -D
Diffstat (limited to 'coreutils')
-rw-r--r-- | coreutils/install.c | 64 |
1 files changed, 37 insertions, 27 deletions
diff --git a/coreutils/install.c b/coreutils/install.c index e99f1a3bd..69bf7dc55 100644 --- a/coreutils/install.c +++ b/coreutils/install.c | |||
@@ -4,9 +4,6 @@ | |||
4 | * SELinux support: by Yuichi Nakamura <ynakam@hitachisoft.jp> | 4 | * SELinux support: by Yuichi Nakamura <ynakam@hitachisoft.jp> |
5 | * | 5 | * |
6 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | 6 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. |
7 | * | ||
8 | * TODO: -d option, need a way of recursively making directories and changing | ||
9 | * owner/group, will probably modify bb_make_directory(...) | ||
10 | */ | 7 | */ |
11 | 8 | ||
12 | #include "libbb.h" | 9 | #include "libbb.h" |
@@ -53,7 +50,8 @@ static void setdefaultfilecon(const char *path) | |||
53 | 50 | ||
54 | if (lsetfilecon(path, scontext) < 0) { | 51 | if (lsetfilecon(path, scontext) < 0) { |
55 | if (errno != ENOTSUP) { | 52 | if (errno != ENOTSUP) { |
56 | bb_perror_msg("warning: failed to change context of %s to %s", path, scontext); | 53 | bb_perror_msg("warning: failed to change context" |
54 | " of %s to %s", path, scontext); | ||
57 | } | 55 | } |
58 | } | 56 | } |
59 | 57 | ||
@@ -75,7 +73,7 @@ int install_main(int argc, char **argv) | |||
75 | const char *uid_str; | 73 | const char *uid_str; |
76 | const char *mode_str; | 74 | const char *mode_str; |
77 | int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; | 75 | int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; |
78 | int flags; | 76 | int opts; |
79 | int min_args = 1; | 77 | int min_args = 1; |
80 | int ret = EXIT_SUCCESS; | 78 | int ret = EXIT_SUCCESS; |
81 | int isdir = 0; | 79 | int isdir = 0; |
@@ -87,15 +85,16 @@ int install_main(int argc, char **argv) | |||
87 | OPT_c = 1 << 0, | 85 | OPT_c = 1 << 0, |
88 | OPT_v = 1 << 1, | 86 | OPT_v = 1 << 1, |
89 | OPT_b = 1 << 2, | 87 | OPT_b = 1 << 2, |
90 | OPT_DIRECTORY = 1 << 3, | 88 | OPT_MKDIR_LEADING = 1 << 3, |
91 | OPT_PRESERVE_TIME = 1 << 4, | 89 | OPT_DIRECTORY = 1 << 4, |
92 | OPT_STRIP = 1 << 5, | 90 | OPT_PRESERVE_TIME = 1 << 5, |
93 | OPT_GROUP = 1 << 6, | 91 | OPT_STRIP = 1 << 6, |
94 | OPT_MODE = 1 << 7, | 92 | OPT_GROUP = 1 << 7, |
95 | OPT_OWNER = 1 << 8, | 93 | OPT_MODE = 1 << 8, |
94 | OPT_OWNER = 1 << 9, | ||
96 | #if ENABLE_SELINUX | 95 | #if ENABLE_SELINUX |
97 | OPT_SET_SECURITY_CONTEXT = 1 << 9, | 96 | OPT_SET_SECURITY_CONTEXT = 1 << 10, |
98 | OPT_PRESERVE_SECURITY_CONTEXT = 1 << 10, | 97 | OPT_PRESERVE_SECURITY_CONTEXT = 1 << 11, |
99 | #endif | 98 | #endif |
100 | }; | 99 | }; |
101 | 100 | ||
@@ -106,37 +105,38 @@ int install_main(int argc, char **argv) | |||
106 | /* -c exists for backwards compatibility, it's needed */ | 105 | /* -c exists for backwards compatibility, it's needed */ |
107 | /* -v is ignored ("print name of each created directory") */ | 106 | /* -v is ignored ("print name of each created directory") */ |
108 | /* -b is ignored ("make a backup of each existing destination file") */ | 107 | /* -b is ignored ("make a backup of each existing destination file") */ |
109 | flags = getopt32(argv, "cvb" "dpsg:m:o:" USE_SELINUX("Z:"), | 108 | opts = getopt32(argv, "cvb" "Ddpsg:m:o:" USE_SELINUX("Z:"), |
110 | &gid_str, &mode_str, &uid_str USE_SELINUX(, &scontext)); | 109 | &gid_str, &mode_str, &uid_str USE_SELINUX(, &scontext)); |
111 | argc -= optind; | 110 | argc -= optind; |
112 | argv += optind; | 111 | argv += optind; |
113 | 112 | ||
114 | #if ENABLE_SELINUX | 113 | #if ENABLE_SELINUX |
115 | if (flags & (OPT_PRESERVE_SECURITY_CONTEXT|OPT_SET_SECURITY_CONTEXT)) { | 114 | if (opts & (OPT_PRESERVE_SECURITY_CONTEXT|OPT_SET_SECURITY_CONTEXT)) { |
116 | selinux_or_die(); | 115 | selinux_or_die(); |
117 | use_default_selinux_context = 0; | 116 | use_default_selinux_context = 0; |
118 | if (flags & OPT_PRESERVE_SECURITY_CONTEXT) { | 117 | if (opts & OPT_PRESERVE_SECURITY_CONTEXT) { |
119 | copy_flags |= FILEUTILS_PRESERVE_SECURITY_CONTEXT; | 118 | copy_flags |= FILEUTILS_PRESERVE_SECURITY_CONTEXT; |
120 | } | 119 | } |
121 | if (flags & OPT_SET_SECURITY_CONTEXT) { | 120 | if (opts & OPT_SET_SECURITY_CONTEXT) { |
122 | setfscreatecon_or_die(scontext); | 121 | setfscreatecon_or_die(scontext); |
123 | copy_flags |= FILEUTILS_SET_SECURITY_CONTEXT; | 122 | copy_flags |= FILEUTILS_SET_SECURITY_CONTEXT; |
124 | } | 123 | } |
125 | } | 124 | } |
126 | #endif | 125 | #endif |
127 | 126 | ||
128 | /* preserve access and modification time, this is GNU behaviour, BSD only preserves modification time */ | 127 | /* preserve access and modification time, this is GNU behaviour, |
129 | if (flags & OPT_PRESERVE_TIME) { | 128 | * BSD only preserves modification time */ |
129 | if (opts & OPT_PRESERVE_TIME) { | ||
130 | copy_flags |= FILEUTILS_PRESERVE_STATUS; | 130 | copy_flags |= FILEUTILS_PRESERVE_STATUS; |
131 | } | 131 | } |
132 | mode = 0666; | 132 | mode = 0666; |
133 | if (flags & OPT_MODE) | 133 | if (opts & OPT_MODE) |
134 | bb_parse_mode(mode_str, &mode); | 134 | bb_parse_mode(mode_str, &mode); |
135 | uid = (flags & OPT_OWNER) ? get_ug_id(uid_str, xuname2uid) : getuid(); | 135 | uid = (opts & OPT_OWNER) ? get_ug_id(uid_str, xuname2uid) : getuid(); |
136 | gid = (flags & OPT_GROUP) ? get_ug_id(gid_str, xgroup2gid) : getgid(); | 136 | gid = (opts & OPT_GROUP) ? get_ug_id(gid_str, xgroup2gid) : getgid(); |
137 | 137 | ||
138 | last = argv[argc - 1]; | 138 | last = argv[argc - 1]; |
139 | if (!(flags & OPT_DIRECTORY)) { | 139 | if (!(opts & OPT_DIRECTORY)) { |
140 | argv[argc - 1] = NULL; | 140 | argv[argc - 1] = NULL; |
141 | min_args++; | 141 | min_args++; |
142 | 142 | ||
@@ -149,7 +149,7 @@ int install_main(int argc, char **argv) | |||
149 | 149 | ||
150 | while ((arg = *argv++) != NULL) { | 150 | while ((arg = *argv++) != NULL) { |
151 | char *dest = last; | 151 | char *dest = last; |
152 | if (flags & OPT_DIRECTORY) { | 152 | if (opts & OPT_DIRECTORY) { |
153 | dest = arg; | 153 | dest = arg; |
154 | /* GNU coreutils 6.9 does not set uid:gid | 154 | /* GNU coreutils 6.9 does not set uid:gid |
155 | * on intermediate created directories | 155 | * on intermediate created directories |
@@ -161,6 +161,16 @@ int install_main(int argc, char **argv) | |||
161 | } else { | 161 | } else { |
162 | if (isdir) | 162 | if (isdir) |
163 | dest = concat_path_file(last, basename(arg)); | 163 | dest = concat_path_file(last, basename(arg)); |
164 | if (opts & OPT_MKDIR_LEADING) { | ||
165 | char *slash = strrchr(dest, '/'); | ||
166 | if (slash) { | ||
167 | *slash = '\0'; | ||
168 | bb_make_directory(dest, 0755, FILEUTILS_RECUR); | ||
169 | /* errors are not checked. copy_file | ||
170 | * will fail if dir is not created. */ | ||
171 | *slash = '/'; | ||
172 | } | ||
173 | } | ||
164 | if (copy_file(arg, dest, copy_flags)) { | 174 | if (copy_file(arg, dest, copy_flags)) { |
165 | /* copy is not made */ | 175 | /* copy is not made */ |
166 | ret = EXIT_FAILURE; | 176 | ret = EXIT_FAILURE; |
@@ -169,7 +179,7 @@ int install_main(int argc, char **argv) | |||
169 | } | 179 | } |
170 | 180 | ||
171 | /* Set the file mode */ | 181 | /* Set the file mode */ |
172 | if ((flags & OPT_MODE) && chmod(dest, mode) == -1) { | 182 | if ((opts & OPT_MODE) && chmod(dest, mode) == -1) { |
173 | bb_perror_msg("can't change %s of %s", "permissions", dest); | 183 | bb_perror_msg("can't change %s of %s", "permissions", dest); |
174 | ret = EXIT_FAILURE; | 184 | ret = EXIT_FAILURE; |
175 | } | 185 | } |
@@ -178,13 +188,13 @@ int install_main(int argc, char **argv) | |||
178 | setdefaultfilecon(dest); | 188 | setdefaultfilecon(dest); |
179 | #endif | 189 | #endif |
180 | /* Set the user and group id */ | 190 | /* Set the user and group id */ |
181 | if ((flags & (OPT_OWNER|OPT_GROUP)) | 191 | if ((opts & (OPT_OWNER|OPT_GROUP)) |
182 | && lchown(dest, uid, gid) == -1 | 192 | && lchown(dest, uid, gid) == -1 |
183 | ) { | 193 | ) { |
184 | bb_perror_msg("can't change %s of %s", "ownership", dest); | 194 | bb_perror_msg("can't change %s of %s", "ownership", dest); |
185 | ret = EXIT_FAILURE; | 195 | ret = EXIT_FAILURE; |
186 | } | 196 | } |
187 | if (flags & OPT_STRIP) { | 197 | if (opts & OPT_STRIP) { |
188 | char *args[3]; | 198 | char *args[3]; |
189 | args[0] = (char*)"strip"; | 199 | args[0] = (char*)"strip"; |
190 | args[1] = dest; | 200 | args[1] = dest; |