diff --git a/Makefile b/Makefile index efc03a2..4530439 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: qmennen +#+ # # +#+ # # Created: 2024/10/15 11:48:46 by whaffman #+# #+# # -# Updated: 2025/02/05 16:02:39 by whaffman ######## odam.nl # +# Updated: 2025/02/08 17:13:50 by willem ######## odam.nl # # # # **************************************************************************** # @@ -22,7 +22,7 @@ LIBFT = $(LIBFT_PATH)/libft.a OBJ_PATH = obj -VPATH = src:src/environment:src/prompt:src/lexer:src/token:src/utils +VPATH = src:src/environment:src/prompt:src/lexer:src/token:src/utils:src/executor SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o)) @@ -40,6 +40,7 @@ ifeq ($(UNAME_S),Linux) endif all: $(NAME) + echo $(SOURCES) $(NAME): $(LIBFT) $(OBJECTS) $(CC) $(CFLAGS) $(OBJECTS) $(LDLIBS) -o $(NAME) diff --git a/inc/minishell.h b/inc/minishell.h index df1d28f..0bef049 100644 --- a/inc/minishell.h +++ b/inc/minishell.h @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/04 16:13:13 by whaffman #+# #+# */ -/* Updated: 2025/02/08 19:45:37 by willem ######## odam.nl */ +/* Updated: 2025/02/11 14:06:12 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ diff --git a/src/utils/simple_builtins.c b/src/utils/simple_builtins.c index 8000d36..5dd9faa 100644 --- a/src/utils/simple_builtins.c +++ b/src/utils/simple_builtins.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/05 16:21:39 by whaffman #+# #+# */ -/* Updated: 2025/02/08 19:46:26 by willem ######## odam.nl */ +/* Updated: 2025/02/11 14:06:03 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -38,7 +38,7 @@ void builtin_export(t_minishell *minishell) environment_add(&(minishell->environment), arr[0], arr[1]); ft_free_arr(arr); tmp = tmp->next; - } + } } @@ -53,10 +53,36 @@ static int cmp_value(t_list *list, char *str) return (FALSE); } +void fork_execve(t_minishell *minishell, char *path, char **argv) +{ + pid_t pid; + int status; + + pid = fork(); + if (pid == 0) + { + execve(path, argv, environment_get_arr(minishell->environment)); + while (*argv != NULL) + printf("%s\n", *argv++); + printf("minishell->: %s: %s\n", path, strerror(errno)); + exit(EXIT_FAILURE); + } + else if (pid < 0) + { + printf("minishell: %s\n", strerror(errno)); + } + else + { + free(path); + ft_free_arr(argv); + waitpid(pid, &status, 0); + printf("exit status of pid(%d): %d\n", pid, (((status) & 0xff00) >> 8)); + } +} + void simple_builtins(t_minishell *minishell) { char *path; - if (cmp_value(minishell->tokens, "clear")) printf("\033[2J\033[1;1H"); else if (cmp_value(minishell->tokens, "env")) @@ -76,7 +102,8 @@ void simple_builtins(t_minishell *minishell) else { printf("found excutable: %s\n", path); - free(path); + fork_execve(minishell, path, ft_split(((t_token *)minishell->tokens->content)->value, ' ')); } } + }