diff --git a/Makefile b/Makefile index ef90273..9713b68 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ NAME := seyshell -CC := gcc +CC := gcc CFLAGS := -Wall -Wextra -Werror -g OBJ_DIR := obj SRC_DIR := src diff --git a/src/exec.c b/src/exec.c index f5ddf01..4d273ec 100644 --- a/src/exec.c +++ b/src/exec.c @@ -1,3 +1,28 @@ #include "exec.h" +#include +#include -void execute_cmd(void) {} \ No newline at end of file +int is_builtin_cmd(char *executable) { + (void)executable; + return 0; +} + +int execute_cmd(char **args) { + if (!is_builtin_cmd(args[0])) { + int pid = fork(); + if (pid == -1) + return -1; + + if (pid == 0) { + // Ce que va exécuter l'enfant + int status_code = execvp(args[0], args); + perror("seyshell"); + return status_code; + } else { + // Ce que va exécuter le parent + int status; + waitpid(pid, &status, WUNTRACED); + } + } + return 1; +} \ No newline at end of file diff --git a/src/exec.h b/src/exec.h index 67b8ed1..677d6dd 100644 --- a/src/exec.h +++ b/src/exec.h @@ -1,4 +1,6 @@ #pragma once +#include +#include -int is_builtin_cmd(void); -void execute_cmd(void); \ No newline at end of file +int is_builtin_cmd(char *executable); +int execute_cmd(char **args); \ No newline at end of file diff --git a/src/main.c b/src/main.c index de5de76..5032213 100644 --- a/src/main.c +++ b/src/main.c @@ -5,11 +5,8 @@ int main(int argc, char *argv[], char *envp[]) { (void)argc; (void)argv; + (void)envp; - int index = 0; - while (envp[index]) { - printf("%s\n", envp[index++]); - } shell_loop(); return EXIT_SUCCESS; diff --git a/src/parsing.c b/src/parsing.c index 2d67ecc..4841ddf 100644 --- a/src/parsing.c +++ b/src/parsing.c @@ -3,6 +3,7 @@ #include "exec.h" #include #include +#include #include char *read_line() { @@ -29,8 +30,23 @@ char *read_line() { } char **split_line(char *line) { - (void)line; - return NULL; + char **args = malloc(BUFSIZE * sizeof(char *)); + int i = 0; + if (args == NULL) { + dprintf(STDERR_FILENO, "Allocation error"); + exit(EXIT_FAILURE); + } + + char *token = strtok(line, " "); + + while (token != NULL) { + args[i] = token; + i++; + token = strtok(NULL, " "); + } + args[i++] = NULL; + + return args; } void shell_loop(void) { @@ -41,11 +57,10 @@ void shell_loop(void) { do { dprintf(STDOUT_FILENO, "> "); line = read_line(); - dprintf(STDOUT_FILENO, "%s\n", line); args = split_line(line); - execute_cmd(); + status = execute_cmd(args); - // free(line); + free(line); free(args); } while (status); }