diff options
Diffstat (limited to 'smash/exec.c')
| -rw-r--r-- | smash/exec.c | 39 |
1 files changed, 3 insertions, 36 deletions
diff --git a/smash/exec.c b/smash/exec.c index 779fccd..8c20126 100644 --- a/smash/exec.c +++ b/smash/exec.c @@ -3,7 +3,6 @@ #include "builtin.h" #include "variable.h" -#include "../lib/sys/execve.h" #include "../lib/sys/fork.h" #include "../lib/sys/wait4.h" #include "../lib/sys/pipe.h" @@ -15,6 +14,7 @@ #include "../lib/env/env.h" #include "../lib/malloc/malloc.h" #include "../lib/list/list.h" +#include "../lib/exec/exec.h" void print_call(char **argv) { @@ -25,40 +25,7 @@ void print_call(char **argv) } } -void __execenv(const char **argv) -{ - const char *path = getenv("PATH"); - const char *end; - char *filename; - - while (*path) { - end = path; - - while (*end && *end != ':') ++end; - - filename = malloc((end - path) + cstr_length(argv[0]) + 2); - - for (int i = 0; i < end - path; ++i) - filename[i] = path[i]; - - filename[end - path] = '/'; - - for (int i = 0; i < cstr_length(argv[0]) + 1; ++i) - filename[(end - path) + i + 1] = argv[0][i]; - - execve(filename, argv, getenvp()); - free(filename); - - path = end; - - if (*path == ':') - ++path; - } - - execve(argv[0], argv, getenvp()); -} - -void exec(char *line) +void execute_line(char *line) { expression_list_t *exps = new_expression_from_line(line); expression_list_t *exp = exps; @@ -96,7 +63,7 @@ void exec(char *line) close(pipefd[1][PIPE_OUT]); close(pipefd[1][PIPE_IN]); - __execenv((const char **)argv); + exec((const char **)argv); wff(STDERR_FD, "command not found: %s\n", argv[0]); exit(-1); } |