diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-02-14 17:09:59 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-02-14 17:09:59 +0100 |
| commit | 7a98e998c5cda484611d19854649ab8535f503d4 (patch) | |
| tree | 43f7dae6921ced5ee9001f1d31c662351678a718 /smash | |
| parent | c0178363472e162a7cb21e381c512979130dfdb0 (diff) | |
add simplet init system
Diffstat (limited to 'smash')
| -rw-r--r-- | smash/exec.c | 39 | ||||
| -rw-r--r-- | smash/exec.h | 2 | ||||
| -rw-r--r-- | smash/main.c | 2 |
3 files changed, 5 insertions, 38 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); } diff --git a/smash/exec.h b/smash/exec.h index 74780b0..83f826f 100644 --- a/smash/exec.h +++ b/smash/exec.h @@ -1,6 +1,6 @@ #ifndef EXEC_H #define EXEC_H -void exec(char *line); +void execute_line(char *line); #endif diff --git a/smash/main.c b/smash/main.c index cf5f47f..efc7bd1 100644 --- a/smash/main.c +++ b/smash/main.c @@ -49,7 +49,7 @@ int main(int argc, char *argv[]) line_length = cstr_length(line_exec); if (line_length > 0) { - exec(line_exec); + execute_line(line_exec); } cleanup_variable_line_context(); |