diff options
| author | landley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-06-13 19:01:30 +0000 |
|---|---|---|
| committer | landley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-06-13 19:01:30 +0000 |
| commit | bbc91b82657260fee94d6db9d6d26020748f2f7f (patch) | |
| tree | 23ffed53db9b0179e4983a385549d2fcf920bf68 | |
| parent | 760dc1ba26095a97869b83c8fd1b379848902fae (diff) | |
| download | busybox-w32-bbc91b82657260fee94d6db9d6d26020748f2f7f.tar.gz busybox-w32-bbc91b82657260fee94d6db9d6d26020748f2f7f.tar.bz2 busybox-w32-bbc91b82657260fee94d6db9d6d26020748f2f7f.zip | |
Patch from Shaun Jackman to detect "name=value" variable assignments. Random
cleanup at the end by me to make some unrelated #ifdefs go away...
git-svn-id: svn://busybox.net/trunk/busybox@15378 69ca8d6d-28ef-0310-b511-8ec308f3f277
| -rw-r--r-- | shell/lash.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/shell/lash.c b/shell/lash.c index 216db8a7e..eebb2f8a2 100644 --- a/shell/lash.c +++ b/shell/lash.c | |||
| @@ -1182,9 +1182,12 @@ static int parse_command(char **command_ptr, struct job *job, int *inbg) | |||
| 1182 | static int pseudo_exec(struct child_prog *child) | 1182 | static int pseudo_exec(struct child_prog *child) |
| 1183 | { | 1183 | { |
| 1184 | struct built_in_command *x; | 1184 | struct built_in_command *x; |
| 1185 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL | 1185 | |
| 1186 | char *name; | 1186 | /* Check if the command sets an environment variable. */ |
| 1187 | #endif | 1187 | if( strchr(child->argv[0], '=') != NULL ) { |
| 1188 | child->argv[1] = child->argv[0]; | ||
| 1189 | _exit(builtin_export(child)); | ||
| 1190 | } | ||
| 1188 | 1191 | ||
| 1189 | /* Check if the command matches any of the non-forking builtins. | 1192 | /* Check if the command matches any of the non-forking builtins. |
| 1190 | * Depending on context, this might be redundant. But it's | 1193 | * Depending on context, this might be redundant. But it's |
| @@ -1204,7 +1207,7 @@ static int pseudo_exec(struct child_prog *child) | |||
| 1204 | _exit (x->function(child)); | 1207 | _exit (x->function(child)); |
| 1205 | } | 1208 | } |
| 1206 | } | 1209 | } |
| 1207 | #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL | 1210 | |
| 1208 | /* Check if the command matches any busybox internal | 1211 | /* Check if the command matches any busybox internal |
| 1209 | * commands ("applets") here. Following discussions from | 1212 | * commands ("applets") here. Following discussions from |
| 1210 | * November 2000 on busybox@busybox.net, don't use | 1213 | * November 2000 on busybox@busybox.net, don't use |
| @@ -1216,17 +1219,15 @@ static int pseudo_exec(struct child_prog *child) | |||
| 1216 | * /bin/foo invocation will fork and exec /bin/foo, even if | 1219 | * /bin/foo invocation will fork and exec /bin/foo, even if |
| 1217 | * /bin/foo is a symlink to busybox. | 1220 | * /bin/foo is a symlink to busybox. |
| 1218 | */ | 1221 | */ |
| 1219 | name = child->argv[0]; | ||
| 1220 | 1222 | ||
| 1221 | { | 1223 | if (ENABLE_FEATURE_SH_STANDALONE_SHELL) { |
| 1222 | char** argv_l=child->argv; | 1224 | char **argv_l = child->argv; |
| 1223 | int argc_l; | 1225 | int argc_l; |
| 1224 | 1226 | ||
| 1225 | for(argc_l=0;*argv_l!=NULL; argv_l++, argc_l++); | 1227 | for(argc_l=0; *argv_l; argv_l++, argc_l++); |
| 1226 | optind = 1; | 1228 | optind = 1; |
| 1227 | run_applet_by_name(name, argc_l, child->argv); | 1229 | run_applet_by_name(child->argv[0], argc_l, child->argv); |
| 1228 | } | 1230 | } |
| 1229 | #endif | ||
| 1230 | 1231 | ||
| 1231 | execvp(child->argv[0], child->argv); | 1232 | execvp(child->argv[0], child->argv); |
| 1232 | 1233 | ||
