diff options
Diffstat (limited to 'sh.c')
-rw-r--r-- | sh.c | 24 |
1 files changed, 7 insertions, 17 deletions
@@ -1193,6 +1193,7 @@ static int runCommand(struct job *newJob, struct jobSet *jobList, int inBg, int | |||
1193 | char** argv=newJob->progs[i].argv; | 1193 | char** argv=newJob->progs[i].argv; |
1194 | for(argc_l=0;*argv!=NULL; argv++, argc_l++); | 1194 | for(argc_l=0;*argv!=NULL; argv++, argc_l++); |
1195 | applet_name=a->name; | 1195 | applet_name=a->name; |
1196 | optind = 1; | ||
1196 | exit((*(a->main)) (argc_l, newJob->progs[i].argv)); | 1197 | exit((*(a->main)) (argc_l, newJob->progs[i].argv)); |
1197 | } | 1198 | } |
1198 | a++; | 1199 | a++; |
@@ -1393,26 +1394,15 @@ int shell_main(int argc_l, char **argv_l) | |||
1393 | // builtin_source("/etc/profile"); | 1394 | // builtin_source("/etc/profile"); |
1394 | //} | 1395 | //} |
1395 | 1396 | ||
1396 | while ((opt = getopt(argc, argv, "cx")) > 0) { | 1397 | while ((opt = getopt(argc_l, argv_l, "cx")) > 0) { |
1397 | switch (opt) { | 1398 | switch (opt) { |
1398 | case 'c': | 1399 | case 'c': |
1399 | input = NULL; | 1400 | input = NULL; |
1400 | local_pending_command = (char *) calloc(BUFSIZ, sizeof(char)); | 1401 | if (local_pending_command != 0) |
1401 | if (local_pending_command == 0) { | 1402 | fatalError("multiple -c arguments\n"); |
1402 | fatalError("sh: out of memory\n"); | 1403 | local_pending_command = xstrdup(argv[optind]); |
1403 | } | 1404 | optind++; |
1404 | for(; optind<argc; optind++) | 1405 | argv = argv+optind; |
1405 | { | ||
1406 | if (strlen(local_pending_command) + strlen(argv[optind]) >= BUFSIZ) { | ||
1407 | local_pending_command = realloc(local_pending_command, | ||
1408 | strlen(local_pending_command) + strlen(argv[optind])); | ||
1409 | if (local_pending_command==NULL) | ||
1410 | fatalError("command too long\n"); | ||
1411 | } | ||
1412 | strcat(local_pending_command, argv[optind]); | ||
1413 | if ( (optind + 1) < argc) | ||
1414 | strcat(local_pending_command, " "); | ||
1415 | } | ||
1416 | break; | 1406 | break; |
1417 | #ifdef BB_FEATURE_SH_ENVIRONMENT | 1407 | #ifdef BB_FEATURE_SH_ENVIRONMENT |
1418 | case 'x': | 1408 | case 'x': |