aboutsummaryrefslogtreecommitdiff
path: root/smash/exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'smash/exec.c')
-rw-r--r--smash/exec.c39
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);
}