From 7a98e998c5cda484611d19854649ab8535f503d4 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Tue, 14 Feb 2023 17:09:59 +0100 Subject: add simplet init system --- smash/exec.c | 39 +++------------------------------------ smash/exec.h | 2 +- smash/main.c | 2 +- 3 files changed, 5 insertions(+), 38 deletions(-) (limited to 'smash') 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(); -- cgit v1.2.3-70-g09d2