diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2013-02-28 10:22:49 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2013-02-28 10:22:49 +0100 |
| commit | 1e43a381b20f74ff3ff911daa28c9c9c799bcd82 (patch) | |
| tree | d8f687758083eaf116bcaea83df4058695f2fefb /debianutils | |
| parent | 0496e824a5b97edc9991f62c7c74f9b24b16edc7 (diff) | |
| download | busybox-w32-1e43a381b20f74ff3ff911daa28c9c9c799bcd82.tar.gz busybox-w32-1e43a381b20f74ff3ff911daa28c9c9c799bcd82.tar.bz2 busybox-w32-1e43a381b20f74ff3ff911daa28c9c9c799bcd82.zip | |
run-parts: stop providing incompatible short options
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'debianutils')
| -rw-r--r-- | debianutils/run_parts.c | 57 |
1 files changed, 25 insertions, 32 deletions
diff --git a/debianutils/run_parts.c b/debianutils/run_parts.c index 6be83edf9..916aa90e0 100644 --- a/debianutils/run_parts.c +++ b/debianutils/run_parts.c | |||
| @@ -21,26 +21,24 @@ | |||
| 21 | * taken from debian-utils. I've only removed the long options and the | 21 | * taken from debian-utils. I've only removed the long options and the |
| 22 | * report mode. As the original run-parts support only long options, I've | 22 | * report mode. As the original run-parts support only long options, I've |
| 23 | * broken compatibility because the BusyBox policy doesn't allow them. | 23 | * broken compatibility because the BusyBox policy doesn't allow them. |
| 24 | * The supported options are: | ||
| 25 | * -t test. Print the name of the files to be executed, without | ||
| 26 | * execute them. | ||
| 27 | * -a ARG argument. Pass ARG as an argument the program executed. It can | ||
| 28 | * be repeated to pass multiple arguments. | ||
| 29 | * -u MASK umask. Set the umask of the program executed to MASK. | ||
| 30 | * -e exit as soon as a script returns with a non-zero exit code | ||
| 31 | */ | 24 | */ |
| 32 | 25 | ||
| 33 | //usage:#define run_parts_trivial_usage | 26 | //usage:#define run_parts_trivial_usage |
| 34 | //usage: "[-t"IF_FEATURE_RUN_PARTS_FANCY("l")"] [-a ARG]... [-u MASK] [-e] DIRECTORY" | 27 | //usage: "[-a ARG]... [-u UMASK] " |
| 28 | //usage: IF_FEATURE_RUN_PARTS_LONG_OPTIONS("[--reverse] [--test] [-−exit−on−error] "IF_FEATURE_RUN_PARTS_FANCY("[--list] ")) | ||
| 29 | //usage: "DIRECTORY" | ||
| 35 | //usage:#define run_parts_full_usage "\n\n" | 30 | //usage:#define run_parts_full_usage "\n\n" |
| 36 | //usage: "Run a bunch of scripts in DIRECTORY\n" | 31 | //usage: "Run a bunch of scripts in DIRECTORY\n" |
| 37 | //usage: "\n -t Dry run" | 32 | //usage: "\n -a ARG Pass ARG as argument to scripts" |
| 33 | //usage: "\n -u UMASK Set UMASK before running scripts" | ||
| 34 | //usage: IF_FEATURE_RUN_PARTS_LONG_OPTIONS( | ||
| 35 | //usage: "\n -−reverse Reverse execution order" | ||
| 36 | //usage: "\n --test Dry run" | ||
| 37 | //usage: "\n -−exit−on−error Exit if a script exits with non-zero" | ||
| 38 | //usage: IF_FEATURE_RUN_PARTS_FANCY( | 38 | //usage: IF_FEATURE_RUN_PARTS_FANCY( |
| 39 | //usage: "\n -l Print names of matching files even if they are not executable" | 39 | //usage: "\n --list Print names of matching files even if they are not executable" |
| 40 | //usage: ) | ||
| 40 | //usage: ) | 41 | //usage: ) |
| 41 | //usage: "\n -a ARG Pass ARG as argument to programs" | ||
| 42 | //usage: "\n -u MASK Set umask to MASK before running programs" | ||
| 43 | //usage: "\n -e Exit as soon as a script returns with a non-zero exit code" | ||
| 44 | //usage: | 42 | //usage: |
| 45 | //usage:#define run_parts_example_usage | 43 | //usage:#define run_parts_example_usage |
| 46 | //usage: "$ run-parts -a start /etc/init.d\n" | 44 | //usage: "$ run-parts -a start /etc/init.d\n" |
| @@ -72,20 +70,15 @@ struct globals { | |||
| 72 | enum { NUM_CMD = (COMMON_BUFSIZE - sizeof(G)) / sizeof(cmd[0]) - 1 }; | 70 | enum { NUM_CMD = (COMMON_BUFSIZE - sizeof(G)) / sizeof(cmd[0]) - 1 }; |
| 73 | 71 | ||
| 74 | enum { | 72 | enum { |
| 75 | OPT_r = (1 << 0), | 73 | OPT_a = (1 << 0), |
| 76 | OPT_a = (1 << 1), | 74 | OPT_u = (1 << 1), |
| 77 | OPT_u = (1 << 2), | 75 | OPT_r = (1 << 2) * ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS, |
| 78 | OPT_t = (1 << 3), | 76 | OPT_t = (1 << 3) * ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS, |
| 79 | OPT_e = (1 << 4), | 77 | OPT_e = (1 << 4) * ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS, |
| 80 | OPT_l = (1 << 5) * ENABLE_FEATURE_RUN_PARTS_FANCY, | 78 | OPT_l = (1 << 5) * ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS |
| 79 | * ENABLE_FEATURE_RUN_PARTS_FANCY, | ||
| 81 | }; | 80 | }; |
| 82 | 81 | ||
| 83 | #if ENABLE_FEATURE_RUN_PARTS_FANCY | ||
| 84 | #define list_mode (option_mask32 & OPT_l) | ||
| 85 | #else | ||
| 86 | #define list_mode 0 | ||
| 87 | #endif | ||
| 88 | |||
| 89 | /* Is this a valid filename (upper/lower alpha, digits, | 82 | /* Is this a valid filename (upper/lower alpha, digits, |
| 90 | * underscores, and hyphens only?) | 83 | * underscores, and hyphens only?) |
| 91 | */ | 84 | */ |
| @@ -113,7 +106,7 @@ static int FAST_FUNC act(const char *file, struct stat *statbuf, void *args UNUS | |||
| 113 | if (depth == 2 | 106 | if (depth == 2 |
| 114 | && ( !(statbuf->st_mode & (S_IFREG | S_IFLNK)) | 107 | && ( !(statbuf->st_mode & (S_IFREG | S_IFLNK)) |
| 115 | || invalid_name(file) | 108 | || invalid_name(file) |
| 116 | || (!list_mode && access(file, X_OK) != 0)) | 109 | || (!(option_mask32 & OPT_l) && access(file, X_OK) != 0)) |
| 117 | ) { | 110 | ) { |
| 118 | return SKIP; | 111 | return SKIP; |
| 119 | } | 112 | } |
| @@ -129,12 +122,12 @@ static int FAST_FUNC act(const char *file, struct stat *statbuf, void *args UNUS | |||
| 129 | static const char runparts_longopts[] ALIGN1 = | 122 | static const char runparts_longopts[] ALIGN1 = |
| 130 | "arg\0" Required_argument "a" | 123 | "arg\0" Required_argument "a" |
| 131 | "umask\0" Required_argument "u" | 124 | "umask\0" Required_argument "u" |
| 132 | "test\0" No_argument "t" | ||
| 133 | "exit-on-error\0" No_argument "e" | ||
| 134 | #if ENABLE_FEATURE_RUN_PARTS_FANCY | ||
| 135 | "list\0" No_argument "l" | ||
| 136 | "reverse\0" No_argument "r" | ||
| 137 | //TODO: "verbose\0" No_argument "v" | 125 | //TODO: "verbose\0" No_argument "v" |
| 126 | "reverse\0" No_argument "\xf0" | ||
| 127 | "test\0" No_argument "\xf1" | ||
| 128 | "exit-on-error\0" No_argument "\xf2" | ||
| 129 | #if ENABLE_FEATURE_RUN_PARTS_FANCY | ||
| 130 | "list\0" No_argument "\xf3" | ||
| 138 | #endif | 131 | #endif |
| 139 | ; | 132 | ; |
| 140 | #endif | 133 | #endif |
| @@ -154,7 +147,7 @@ int run_parts_main(int argc UNUSED_PARAM, char **argv) | |||
| 154 | #endif | 147 | #endif |
| 155 | /* We require exactly one argument: the directory name */ | 148 | /* We require exactly one argument: the directory name */ |
| 156 | opt_complementary = "=1:a::"; | 149 | opt_complementary = "=1:a::"; |
| 157 | getopt32(argv, "ra:u:te"IF_FEATURE_RUN_PARTS_FANCY("l"), &arg_list, &umask_p); | 150 | getopt32(argv, "a:u:", &arg_list, &umask_p); |
| 158 | 151 | ||
| 159 | umask(xstrtou_range(umask_p, 8, 0, 07777)); | 152 | umask(xstrtou_range(umask_p, 8, 0, 07777)); |
| 160 | 153 | ||
