aboutsummaryrefslogtreecommitdiff
path: root/smash
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2023-02-14 17:09:59 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2023-02-14 17:09:59 +0100
commit7a98e998c5cda484611d19854649ab8535f503d4 (patch)
tree43f7dae6921ced5ee9001f1d31c662351678a718 /smash
parentc0178363472e162a7cb21e381c512979130dfdb0 (diff)
add simplet init system
Diffstat (limited to 'smash')
-rw-r--r--smash/exec.c39
-rw-r--r--smash/exec.h2
-rw-r--r--smash/main.c2
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();