diff --git a/Makefile b/Makefile index d047165..fbb7fa9 100644 --- a/Makefile +++ b/Makefile @@ -3,10 +3,10 @@ # ::: :::::::: # # Makefile :+: :+: :+: # # +:+ +:+ +:+ # -# By: Jskehan +#+ +:+ +#+ # +# By: Jskehan +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/05/14 15:15:48 by iverniho #+# #+# # -# Updated: 2024/07/18 18:08:18 by Jskehan ### ########.fr # +# Updated: 2024/07/25 16:02:24 by Jskehan ### ########.fr # # # # **************************************************************************** # @@ -26,25 +26,37 @@ OBJ_DIR = ./obj/ READLINE = -lreadline SRC_DIR = ./src/main.c -SRC_TESTER_DIR = ./src/tester/ +SRC_BUILTIN_DIR = ./src/builtin/ +SRC_ENV_DIR = ./src/env/ +SRC_EXEC_DIR = ./src/exec/ +SRC_INIT_DIR = ./src/init/ SRC_PARS_DIR = ./src/parser/ -SRC_EXEC_DIR = ./src/execution/ -SRC_BUILTINS_DIR = ./src/builtins/ - - -SRC_PARS = parser.c prompt.c parser_utils.c expand_vars.c tokenization.c \ - set_redir_utils.c -SRC_EXEC = execution.c redirection.c here_doc.c error.c signal.c node_utils.c \ - builtin_cd.c builtin_functions.c builtin_utils.c path_resolution.c envp_functions.c - +SRC_REDIRECT_DIR = ./src/redirect/ +SRC_SIGNAL_DIR = ./src/signal/ +SRC_TESTER_DIR = ./src/tester/ +SRC_UTILS_DIR = ./src/utils/ + +SRC_BUILTIN = builtin_cd.c builtin_functions.c builtin_utils.c +SRC_ENV = envp_functions.c path_resolution.c +SRC_EXEC = execution.c +SRC_INIT = initilisation.c +SRC_PARS = parser.c prompt.c parser_utils.c expand_vars.c tokenization.c set_redir_utils.c +SRC_REDIRECT = here_doc.c redirection.c +SRC_SIGNAL = signal.c SRC_TESTER = libft_extra_tests.c execution_tests.c node_tester.c -SRC_BUILTINS = # cd.c echo.c env.c exit.c export.c pwd.c unset.c +SRC_UTILS = error.c node_utils.c utils.c + SRC = $(SRC_DIR) \ $(SRC_GNL) \ - $(addprefix $(SRC_PARS_DIR), $(SRC_PARS)) \ + $(addprefix $(SRC_BUILTIN_DIR), $(SRC_BUILTIN)) \ + $(addprefix $(SRC_ENV_DIR), $(SRC_ENV)) \ $(addprefix $(SRC_EXEC_DIR), $(SRC_EXEC)) \ + $(addprefix $(SRC_INIT_DIR), $(SRC_INIT)) \ + $(addprefix $(SRC_PARS_DIR), $(SRC_PARS)) \ + $(addprefix $(SRC_REDIRECT_DIR), $(SRC_REDIRECT)) \ $(addprefix $(SRC_TESTER_DIR), $(SRC_TESTER)) \ - $(addprefix $(SRC_BUILTINS_DIR), $(SRC_BUILTINS)) + $(addprefix $(SRC_SIGNAL_DIR), $(SRC_SIGNAL)) \ + $(addprefix $(SRC_UTILS_DIR), $(SRC_UTILS)) OBJ = $(patsubst %.c,$(OBJ_DIR)%.o,$(SRC)) diff --git a/includes/minishell.h b/includes/minishell.h index d8d548e..dec6051 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* minishell.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/14 15:11:41 by iverniho #+# #+# */ -/* Updated: 2024/07/19 16:14:47 by Jskehan ### ########.fr */ +/* Updated: 2024/07/25 16:03:18 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,13 +16,13 @@ # include "../lib/gnl/get_next_line.h" # include "../lib/libft/includes/libft.h" # include +# include +# include # include # include # include # include # include -# include -# include # include # include # include @@ -38,7 +38,7 @@ # define WRITE_END 1 extern volatile sig_atomic_t g_sigint_received; -extern volatile sig_atomic_t g_is_executing_command; +extern volatile sig_atomic_t g_is_executing_command; # define MINISHELL_ASCII \ "\ @@ -94,6 +94,7 @@ t_cmd *init_cmd(t_mini *mini); void setup_signal_handlers(void); void setup_child_signals(void); void handle_sigint(int sig); +void initialize_envp(t_mini **mini, char **envp); /* Error Handling */ void *mini_perror(char *str, char *str2, int fd); @@ -140,7 +141,7 @@ int get_here_doc(t_mini *mini, const char *limit, void libft_extra_tester(void); void print_nodes(t_list *node); void test_exec(void); -void test_heredoc(void); +void test_heredoc(void); void debug_print_command_parts(t_cmd *cmd); void debug_tokenized_input(char **tokenized_input); @@ -148,4 +149,5 @@ char *ft_getenv(const char *name, char **envp, int len); char **ft_setenv(const char *name, const char *value, char **envp, int overwrite); +char **copy_env(char **envp); #endif // MINISHELL_H diff --git a/lib/libft/libft.a b/lib/libft/libft.a new file mode 100644 index 0000000..65e06c6 Binary files /dev/null and b/lib/libft/libft.a differ diff --git a/lib/libft/obj/src/ft_atoi.o b/lib/libft/obj/src/ft_atoi.o new file mode 100644 index 0000000..98d7c94 Binary files /dev/null and b/lib/libft/obj/src/ft_atoi.o differ diff --git a/lib/libft/obj/src/ft_bzero.o b/lib/libft/obj/src/ft_bzero.o new file mode 100644 index 0000000..283753d Binary files /dev/null and b/lib/libft/obj/src/ft_bzero.o differ diff --git a/lib/libft/obj/src/ft_calloc.o b/lib/libft/obj/src/ft_calloc.o new file mode 100644 index 0000000..878bef1 Binary files /dev/null and b/lib/libft/obj/src/ft_calloc.o differ diff --git a/lib/libft/obj/src/ft_isalnum.o b/lib/libft/obj/src/ft_isalnum.o new file mode 100644 index 0000000..f1ba7cb Binary files /dev/null and b/lib/libft/obj/src/ft_isalnum.o differ diff --git a/lib/libft/obj/src/ft_isalpha.o b/lib/libft/obj/src/ft_isalpha.o new file mode 100644 index 0000000..1993e07 Binary files /dev/null and b/lib/libft/obj/src/ft_isalpha.o differ diff --git a/lib/libft/obj/src/ft_isascii.o b/lib/libft/obj/src/ft_isascii.o new file mode 100644 index 0000000..b4d302e Binary files /dev/null and b/lib/libft/obj/src/ft_isascii.o differ diff --git a/lib/libft/obj/src/ft_isdigit.o b/lib/libft/obj/src/ft_isdigit.o new file mode 100644 index 0000000..9bba9c5 Binary files /dev/null and b/lib/libft/obj/src/ft_isdigit.o differ diff --git a/lib/libft/obj/src/ft_isprint.o b/lib/libft/obj/src/ft_isprint.o new file mode 100644 index 0000000..89a9507 Binary files /dev/null and b/lib/libft/obj/src/ft_isprint.o differ diff --git a/lib/libft/obj/src/ft_itoa.o b/lib/libft/obj/src/ft_itoa.o new file mode 100644 index 0000000..c9c6314 Binary files /dev/null and b/lib/libft/obj/src/ft_itoa.o differ diff --git a/lib/libft/obj/src/ft_lstadd_back.o b/lib/libft/obj/src/ft_lstadd_back.o new file mode 100644 index 0000000..8db002d Binary files /dev/null and b/lib/libft/obj/src/ft_lstadd_back.o differ diff --git a/lib/libft/obj/src/ft_lstadd_front.o b/lib/libft/obj/src/ft_lstadd_front.o new file mode 100644 index 0000000..0328a83 Binary files /dev/null and b/lib/libft/obj/src/ft_lstadd_front.o differ diff --git a/lib/libft/obj/src/ft_lstclear.o b/lib/libft/obj/src/ft_lstclear.o new file mode 100644 index 0000000..1b56410 Binary files /dev/null and b/lib/libft/obj/src/ft_lstclear.o differ diff --git a/lib/libft/obj/src/ft_lstdelone.o b/lib/libft/obj/src/ft_lstdelone.o new file mode 100644 index 0000000..5d37b30 Binary files /dev/null and b/lib/libft/obj/src/ft_lstdelone.o differ diff --git a/lib/libft/obj/src/ft_lstiter.o b/lib/libft/obj/src/ft_lstiter.o new file mode 100644 index 0000000..702600d Binary files /dev/null and b/lib/libft/obj/src/ft_lstiter.o differ diff --git a/lib/libft/obj/src/ft_lstlast.o b/lib/libft/obj/src/ft_lstlast.o new file mode 100644 index 0000000..06fe1f4 Binary files /dev/null and b/lib/libft/obj/src/ft_lstlast.o differ diff --git a/lib/libft/obj/src/ft_lstmap.o b/lib/libft/obj/src/ft_lstmap.o new file mode 100644 index 0000000..0419616 Binary files /dev/null and b/lib/libft/obj/src/ft_lstmap.o differ diff --git a/lib/libft/obj/src/ft_lstnew.o b/lib/libft/obj/src/ft_lstnew.o new file mode 100644 index 0000000..cde8371 Binary files /dev/null and b/lib/libft/obj/src/ft_lstnew.o differ diff --git a/lib/libft/obj/src/ft_lstsize.o b/lib/libft/obj/src/ft_lstsize.o new file mode 100644 index 0000000..adec3cf Binary files /dev/null and b/lib/libft/obj/src/ft_lstsize.o differ diff --git a/lib/libft/obj/src/ft_memchr.o b/lib/libft/obj/src/ft_memchr.o new file mode 100644 index 0000000..5dc0d62 Binary files /dev/null and b/lib/libft/obj/src/ft_memchr.o differ diff --git a/lib/libft/obj/src/ft_memcmp.o b/lib/libft/obj/src/ft_memcmp.o new file mode 100644 index 0000000..96bff8b Binary files /dev/null and b/lib/libft/obj/src/ft_memcmp.o differ diff --git a/lib/libft/obj/src/ft_memcpy.o b/lib/libft/obj/src/ft_memcpy.o new file mode 100644 index 0000000..f6ed351 Binary files /dev/null and b/lib/libft/obj/src/ft_memcpy.o differ diff --git a/lib/libft/obj/src/ft_memmove.o b/lib/libft/obj/src/ft_memmove.o new file mode 100644 index 0000000..1cbf4f6 Binary files /dev/null and b/lib/libft/obj/src/ft_memmove.o differ diff --git a/lib/libft/obj/src/ft_memset.o b/lib/libft/obj/src/ft_memset.o new file mode 100644 index 0000000..3fb4234 Binary files /dev/null and b/lib/libft/obj/src/ft_memset.o differ diff --git a/lib/libft/obj/src/ft_putchar_fd.o b/lib/libft/obj/src/ft_putchar_fd.o new file mode 100644 index 0000000..1a610d1 Binary files /dev/null and b/lib/libft/obj/src/ft_putchar_fd.o differ diff --git a/lib/libft/obj/src/ft_putendl_fd.o b/lib/libft/obj/src/ft_putendl_fd.o new file mode 100644 index 0000000..40b4dc7 Binary files /dev/null and b/lib/libft/obj/src/ft_putendl_fd.o differ diff --git a/lib/libft/obj/src/ft_putnbr_fd.o b/lib/libft/obj/src/ft_putnbr_fd.o new file mode 100644 index 0000000..1219552 Binary files /dev/null and b/lib/libft/obj/src/ft_putnbr_fd.o differ diff --git a/lib/libft/obj/src/ft_putstr_fd.o b/lib/libft/obj/src/ft_putstr_fd.o new file mode 100644 index 0000000..49ddd4d Binary files /dev/null and b/lib/libft/obj/src/ft_putstr_fd.o differ diff --git a/lib/libft/obj/src/ft_realloc.o b/lib/libft/obj/src/ft_realloc.o new file mode 100644 index 0000000..1684deb Binary files /dev/null and b/lib/libft/obj/src/ft_realloc.o differ diff --git a/lib/libft/obj/src/ft_split.o b/lib/libft/obj/src/ft_split.o new file mode 100644 index 0000000..1517ce7 Binary files /dev/null and b/lib/libft/obj/src/ft_split.o differ diff --git a/lib/libft/obj/src/ft_strchr.o b/lib/libft/obj/src/ft_strchr.o new file mode 100644 index 0000000..66c044a Binary files /dev/null and b/lib/libft/obj/src/ft_strchr.o differ diff --git a/lib/libft/obj/src/ft_strdup.o b/lib/libft/obj/src/ft_strdup.o new file mode 100644 index 0000000..7dc9a65 Binary files /dev/null and b/lib/libft/obj/src/ft_strdup.o differ diff --git a/lib/libft/obj/src/ft_striteri.o b/lib/libft/obj/src/ft_striteri.o new file mode 100644 index 0000000..9417c3f Binary files /dev/null and b/lib/libft/obj/src/ft_striteri.o differ diff --git a/lib/libft/obj/src/ft_strjoin.o b/lib/libft/obj/src/ft_strjoin.o new file mode 100644 index 0000000..c01592a Binary files /dev/null and b/lib/libft/obj/src/ft_strjoin.o differ diff --git a/lib/libft/obj/src/ft_strlcat.o b/lib/libft/obj/src/ft_strlcat.o new file mode 100644 index 0000000..e4601c7 Binary files /dev/null and b/lib/libft/obj/src/ft_strlcat.o differ diff --git a/lib/libft/obj/src/ft_strlcpy.o b/lib/libft/obj/src/ft_strlcpy.o new file mode 100644 index 0000000..a853155 Binary files /dev/null and b/lib/libft/obj/src/ft_strlcpy.o differ diff --git a/lib/libft/obj/src/ft_strlen.o b/lib/libft/obj/src/ft_strlen.o new file mode 100644 index 0000000..43cab14 Binary files /dev/null and b/lib/libft/obj/src/ft_strlen.o differ diff --git a/lib/libft/obj/src/ft_strmapi.o b/lib/libft/obj/src/ft_strmapi.o new file mode 100644 index 0000000..1dd6827 Binary files /dev/null and b/lib/libft/obj/src/ft_strmapi.o differ diff --git a/lib/libft/obj/src/ft_strncmp.o b/lib/libft/obj/src/ft_strncmp.o new file mode 100644 index 0000000..20155fc Binary files /dev/null and b/lib/libft/obj/src/ft_strncmp.o differ diff --git a/lib/libft/obj/src/ft_strnstr.o b/lib/libft/obj/src/ft_strnstr.o new file mode 100644 index 0000000..083a591 Binary files /dev/null and b/lib/libft/obj/src/ft_strnstr.o differ diff --git a/lib/libft/obj/src/ft_strrchr.o b/lib/libft/obj/src/ft_strrchr.o new file mode 100644 index 0000000..1c70aff Binary files /dev/null and b/lib/libft/obj/src/ft_strrchr.o differ diff --git a/lib/libft/obj/src/ft_strtrim.o b/lib/libft/obj/src/ft_strtrim.o new file mode 100644 index 0000000..6d3d8df Binary files /dev/null and b/lib/libft/obj/src/ft_strtrim.o differ diff --git a/lib/libft/obj/src/ft_substr.o b/lib/libft/obj/src/ft_substr.o new file mode 100644 index 0000000..1b7af4e Binary files /dev/null and b/lib/libft/obj/src/ft_substr.o differ diff --git a/lib/libft/obj/src/ft_tolower.o b/lib/libft/obj/src/ft_tolower.o new file mode 100644 index 0000000..73d1c97 Binary files /dev/null and b/lib/libft/obj/src/ft_tolower.o differ diff --git a/lib/libft/obj/src/ft_toupper.o b/lib/libft/obj/src/ft_toupper.o new file mode 100644 index 0000000..5577081 Binary files /dev/null and b/lib/libft/obj/src/ft_toupper.o differ diff --git a/lib/libft/obj/src_extra/ft_1st_char_in_set_i.o b/lib/libft/obj/src_extra/ft_1st_char_in_set_i.o new file mode 100644 index 0000000..b70cc56 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_1st_char_in_set_i.o differ diff --git a/lib/libft/obj/src_extra/ft_2d_array_len.o b/lib/libft/obj/src_extra/ft_2d_array_len.o new file mode 100644 index 0000000..e6661d0 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_2d_array_len.o differ diff --git a/lib/libft/obj/src_extra/ft_add_row_2d_array.o b/lib/libft/obj/src_extra/ft_add_row_2d_array.o new file mode 100644 index 0000000..fbde592 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_add_row_2d_array.o differ diff --git a/lib/libft/obj/src_extra/ft_add_row_2d_array_i.o b/lib/libft/obj/src_extra/ft_add_row_2d_array_i.o new file mode 100644 index 0000000..3c2a7b1 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_add_row_2d_array_i.o differ diff --git a/lib/libft/obj/src_extra/ft_count_char.o b/lib/libft/obj/src_extra/ft_count_char.o new file mode 100644 index 0000000..fc38e07 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_count_char.o differ diff --git a/lib/libft/obj/src_extra/ft_duplicate_2d_array.o b/lib/libft/obj/src_extra/ft_duplicate_2d_array.o new file mode 100644 index 0000000..dd0f23b Binary files /dev/null and b/lib/libft/obj/src_extra/ft_duplicate_2d_array.o differ diff --git a/lib/libft/obj/src_extra/ft_free_2d_array.o b/lib/libft/obj/src_extra/ft_free_2d_array.o new file mode 100644 index 0000000..46ecf28 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_free_2d_array.o differ diff --git a/lib/libft/obj/src_extra/ft_is_only_special.o b/lib/libft/obj/src_extra/ft_is_only_special.o new file mode 100644 index 0000000..ec89d44 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_is_only_special.o differ diff --git a/lib/libft/obj/src_extra/ft_is_space.o b/lib/libft/obj/src_extra/ft_is_space.o new file mode 100644 index 0000000..05a1a58 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_is_space.o differ diff --git a/lib/libft/obj/src_extra/ft_is_special_symbol.o b/lib/libft/obj/src_extra/ft_is_special_symbol.o new file mode 100644 index 0000000..5182d8a Binary files /dev/null and b/lib/libft/obj/src_extra/ft_is_special_symbol.o differ diff --git a/lib/libft/obj/src_extra/ft_print_2d_array_fd.o b/lib/libft/obj/src_extra/ft_print_2d_array_fd.o new file mode 100644 index 0000000..96f5125 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_print_2d_array_fd.o differ diff --git a/lib/libft/obj/src_extra/ft_realloc_2d_array.o b/lib/libft/obj/src_extra/ft_realloc_2d_array.o new file mode 100644 index 0000000..d9cf69c Binary files /dev/null and b/lib/libft/obj/src_extra/ft_realloc_2d_array.o differ diff --git a/lib/libft/obj/src_extra/ft_splice_2d_array.o b/lib/libft/obj/src_extra/ft_splice_2d_array.o new file mode 100644 index 0000000..0e42901 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_splice_2d_array.o differ diff --git a/lib/libft/obj/src_extra/ft_strchr_i.o b/lib/libft/obj/src_extra/ft_strchr_i.o new file mode 100644 index 0000000..08ddf91 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_strchr_i.o differ diff --git a/lib/libft/obj/src_extra/ft_strcmp.o b/lib/libft/obj/src_extra/ft_strcmp.o new file mode 100644 index 0000000..27d80a9 Binary files /dev/null and b/lib/libft/obj/src_extra/ft_strcmp.o differ diff --git a/lib/libft/obj/src_extra/ft_strjoin_free.o b/lib/libft/obj/src_extra/ft_strjoin_free.o new file mode 100644 index 0000000..bf22d0d Binary files /dev/null and b/lib/libft/obj/src_extra/ft_strjoin_free.o differ diff --git a/minishell b/minishell new file mode 100755 index 0000000..8d70944 Binary files /dev/null and b/minishell differ diff --git a/src/execution/builtin_cd.c b/src/builtin/builtin_cd.c similarity index 100% rename from src/execution/builtin_cd.c rename to src/builtin/builtin_cd.c diff --git a/src/execution/builtin_functions.c b/src/builtin/builtin_functions.c similarity index 100% rename from src/execution/builtin_functions.c rename to src/builtin/builtin_functions.c diff --git a/src/execution/builtin_utils.c b/src/builtin/builtin_utils.c similarity index 94% rename from src/execution/builtin_utils.c rename to src/builtin/builtin_utils.c index 672f77e..c68bc28 100644 --- a/src/execution/builtin_utils.c +++ b/src/builtin/builtin_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* builtin_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: iverniho +#+ +:+ +#+ */ +/* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/16 10:43:33 by Jskehan #+# #+# */ -/* Updated: 2024/07/24 16:29:11 by iverniho ### ########.fr */ +/* Updated: 2024/07/25 15:07:38 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ @@ -59,4 +59,4 @@ void execute_builtin(t_mini *mini, t_cmd *cmd) // else if (ft_strcmp(cmd->full_command[0], "env") == 0) // mini_env(mini); mini->exit_status = 0; -} +} \ No newline at end of file diff --git a/src/execution/envp_functions.c b/src/env/envp_functions.c similarity index 80% rename from src/execution/envp_functions.c rename to src/env/envp_functions.c index f052882..c1cc66c 100644 --- a/src/execution/envp_functions.c +++ b/src/env/envp_functions.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* envp_functions.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/18 15:49:43 by Jskehan #+# #+# */ -/* Updated: 2024/07/19 16:40:25 by Jskehan ### ########.fr */ +/* Updated: 2024/07/25 15:26:40 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ @@ -78,3 +78,29 @@ char **ft_setenv(const char *name, const char *value, char **envp, printf("New environment variable added: %s=%s\n", name, value); return (new_envp_array); } + +char **copy_env(char **envp) +{ + int i; + char **new_envp; + + for (i = 0; envp[i]; i++) + ; + new_envp = malloc((i + 1) * sizeof(char *)); + if (!new_envp) + return (NULL); + for (i = 0; envp[i]; i++) + { + new_envp[i] = strdup(envp[i]); + if (!new_envp[i]) + { + // Free previously allocated memory in case of failure + while (i--) + free(new_envp[i]); + free(new_envp); + return (NULL); + } + } + new_envp[i] = NULL; + return (new_envp); +} \ No newline at end of file diff --git a/src/execution/path_resolution.c b/src/env/path_resolution.c similarity index 100% rename from src/execution/path_resolution.c rename to src/env/path_resolution.c diff --git a/src/execution/execution.c b/src/exec/execution.c similarity index 96% rename from src/execution/execution.c rename to src/exec/execution.c index dfffb78..6b9f88f 100644 --- a/src/execution/execution.c +++ b/src/exec/execution.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* execution.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: iverniho +#+ +:+ +#+ */ +/* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/16 10:52:13 by Jskehan #+# #+# */ -/* Updated: 2024/07/24 13:35:17 by iverniho ### ########.fr */ +/* Updated: 2024/07/25 15:08:07 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ @@ -137,4 +137,4 @@ void *check_to_fork(t_mini *mini, t_list *command) else mini->exit_status = 127; // Command not found or not executable return (""); -} +} \ No newline at end of file diff --git a/src/init/initilisation.c b/src/init/initilisation.c new file mode 100644 index 0000000..e22c9fd --- /dev/null +++ b/src/init/initilisation.c @@ -0,0 +1,77 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* initilisation.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: Jskehan +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/25 15:18:28 by Jskehan #+# #+# */ +/* Updated: 2024/07/25 16:03:26 by Jskehan ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + + +void initialize_envp(t_mini **mini, char **envp) +{ + char cwd[PATH_MAX]; + char *shlvl_str; + int shlvl; + + *mini = malloc(sizeof(t_mini)); + if (!*mini) + { + perror("Failed to allocate t_mini structure"); + exit(EXIT_FAILURE); + } + (*mini)->envp = copy_env(envp); + if (!(*mini)->envp) + { + // Handle memory allocation failure + perror("Failed to initialize environment variables"); + exit(EXIT_FAILURE); + } + // Set any additional required environment variables + if (getcwd(cwd, sizeof(cwd))) + { + (*mini)->envp = ft_setenv("PWD", cwd, (*mini)->envp, 1); + if (!(*mini)->envp) + { + perror("Failed to set PWD environment variable"); + exit(EXIT_FAILURE); + } + } + (*mini)->envp = ft_setenv("SHELL", "jackoshell", (*mini)->envp, 1); + + // Handle SHLVL + shlvl_str = ft_getenv("SHLVL", (*mini)->envp, strlen("SHLVL")); + if (shlvl_str) + { + shlvl = atoi(shlvl_str) + 1; + } + else + { + shlvl = 1; + } + char shlvl_value[12]; + snprintf(shlvl_value, sizeof(shlvl_value), "%d", shlvl); + (*mini)->envp = ft_setenv("SHLVL", shlvl_value, (*mini)->envp, 1); +} + +t_cmd *init_cmd(t_mini *mini) +{ + t_cmd *node; + + node = malloc(sizeof(t_cmd)); + if (!node) + return (NULL); + node->full_command = NULL; + node->command_path = NULL; + node->fd_in = 0; + node->fd_out = 1; + node->is_heredoc = 0; + node->is_append = 0; + node->mini = mini; + return (node); +} \ No newline at end of file diff --git a/src/main.c b/src/main.c index b89c497..f7a7c48 100644 --- a/src/main.c +++ b/src/main.c @@ -3,104 +3,15 @@ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/15 20:09:06 by Jskehan #+# #+# */ -/* Updated: 2024/07/19 13:46:45 by Jskehan ### ########.fr */ +/* Updated: 2024/07/25 16:03:23 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -char **copy_env(char **envp) -{ - int i; - char **new_envp; - - for (i = 0; envp[i]; i++) - ; - new_envp = malloc((i + 1) * sizeof(char *)); - if (!new_envp) - return (NULL); - for (i = 0; envp[i]; i++) - { - new_envp[i] = strdup(envp[i]); - if (!new_envp[i]) - { - // Free previously allocated memory in case of failure - while (i--) - free(new_envp[i]); - free(new_envp); - return (NULL); - } - } - new_envp[i] = NULL; - return (new_envp); -} - -void initialize_envp(t_mini **mini, char **envp) -{ - char cwd[PATH_MAX]; - char *shlvl_str; - int shlvl; - - *mini = malloc(sizeof(t_mini)); - if (!*mini) - { - perror("Failed to allocate t_mini structure"); - exit(EXIT_FAILURE); - } - (*mini)->envp = copy_env(envp); - if (!(*mini)->envp) - { - // Handle memory allocation failure - perror("Failed to initialize environment variables"); - exit(EXIT_FAILURE); - } - // Set any additional required environment variables - if (getcwd(cwd, sizeof(cwd))) - { - (*mini)->envp = ft_setenv("PWD", cwd, (*mini)->envp, 1); - if (!(*mini)->envp) - { - perror("Failed to set PWD environment variable"); - exit(EXIT_FAILURE); - } - } - (*mini)->envp = ft_setenv("SHELL", "jackoshell", (*mini)->envp, 1); - - // Handle SHLVL - shlvl_str = ft_getenv("SHLVL", (*mini)->envp, strlen("SHLVL")); - if (shlvl_str) - { - shlvl = atoi(shlvl_str) + 1; - } - else - { - shlvl = 1; - } - char shlvl_value[12]; - snprintf(shlvl_value, sizeof(shlvl_value), "%d", shlvl); - (*mini)->envp = ft_setenv("SHLVL", shlvl_value, (*mini)->envp, 1); -} - -t_cmd *init_cmd(t_mini *mini) -{ - t_cmd *node; - - node = malloc(sizeof(t_cmd)); - if (!node) - return (NULL); - node->full_command = NULL; - node->command_path = NULL; - node->fd_in = 0; - node->fd_out = 1; - node->is_heredoc = 0; - node->is_append = 0; - node->mini = mini; - return (node); -} - int main(int argc, char **argv, char **envp) { t_mini *mini; diff --git a/src/parser/expand_vars.c b/src/parser/expand_vars.c index e04b095..31ff030 100644 --- a/src/parser/expand_vars.c +++ b/src/parser/expand_vars.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* expand_vars.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: iverniho +#+ +:+ +#+ */ +/* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/07 17:40:44 by iverniho #+# #+# */ -/* Updated: 2024/07/24 16:36:11 by iverniho ### ########.fr */ +/* Updated: 2024/07/25 15:14:37 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ @@ -101,4 +101,4 @@ char **expand_vars(char **tokenizedInput, t_mini **mini) } } return (last_str); -} +} \ No newline at end of file diff --git a/src/parser/set_redir_utils.c b/src/parser/set_redir_utils.c index 0636929..36743d7 100644 --- a/src/parser/set_redir_utils.c +++ b/src/parser/set_redir_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* set_redir_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: iverniho +#+ +:+ +#+ */ +/* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/16 14:23:13 by Jskehan #+# #+# */ -/* Updated: 2024/07/24 13:32:59 by iverniho ### ########.fr */ +/* Updated: 2024/07/25 15:17:20 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ @@ -114,4 +114,4 @@ t_cmd *set_redir(t_cmd *node, char *input, char **full_command, int *i) node->full_command = ft_add_row_2d_array(node->full_command, input); } return (node); -} +} \ No newline at end of file diff --git a/src/execution/here_doc.c b/src/redirect/here_doc.c similarity index 100% rename from src/execution/here_doc.c rename to src/redirect/here_doc.c diff --git a/src/execution/redirection.c b/src/redirect/redirection.c similarity index 77% rename from src/execution/redirection.c rename to src/redirect/redirection.c index cc9d613..5ac9aa0 100644 --- a/src/execution/redirection.c +++ b/src/redirect/redirection.c @@ -6,7 +6,7 @@ /* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/10 14:08:23 by Jskehan #+# #+# */ -/* Updated: 2024/07/22 14:25:03 by Jskehan ### ########.fr */ +/* Updated: 2024/07/22 19:06:37 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,8 +24,7 @@ int get_fd(int oldfd, t_cmd *cmd, char *path) mini_perror("NDIR", path, 127); else if (!cmd->is_outfile && access(path, R_OK) == -1) mini_perror("NPERM", path, 126); - else if (cmd->is_outfile && access(path, W_OK) == -1 && access(path, - F_OK) == 0) + else if (cmd->is_outfile && access(path, W_OK) == -1 && access(path, F_OK) == 0) mini_perror("NPERM", path, 126); if (cmd->is_outfile && cmd->is_append) fd = open(path, O_CREAT | O_WRONLY | O_APPEND, 0666); @@ -91,27 +90,27 @@ t_mini *handle_here_doc(t_mini *mini, t_list *command, char **args, int *i) return (mini); } -void execute_command(t_cmd *cmd) -{ - // printf("Executing command: %s\n", cmd->full_command[0]); - for (int i = 0; cmd->full_command[i] != NULL; i++) - { - printf("Arg[%d]: %s\n", i, cmd->full_command[i]); - } - if (cmd->fd_in != -1) - { - printf("Redirecting input from fd: %d\n", cmd->fd_in); - dup2(cmd->fd_in, STDIN_FILENO); - close(cmd->fd_in); - } - if (cmd->fd_out != -1) - { - printf("Redirecting output to fd: %d\n", cmd->fd_out); - dup2(cmd->fd_out, STDOUT_FILENO); - close(cmd->fd_out); - } - execvp(cmd->full_command[0], cmd->full_command); - // If execvp fails - perror("execvp"); - exit(EXIT_FAILURE); -} +// void execute_command(t_cmd *cmd) +// { +// // printf("Executing command: %s\n", cmd->full_command[0]); +// for (int i = 0; cmd->full_command[i] != NULL; i++) +// { +// printf("Arg[%d]: %s\n", i, cmd->full_command[i]); +// } +// if (cmd->fd_in != -1) +// { +// printf("Redirecting input from fd: %d\n", cmd->fd_in); +// dup2(cmd->fd_in, STDIN_FILENO); +// close(cmd->fd_in); +// } +// if (cmd->fd_out != -1) +// { +// printf("Redirecting output to fd: %d\n", cmd->fd_out); +// dup2(cmd->fd_out, STDOUT_FILENO); +// close(cmd->fd_out); +// } +// execvp(cmd->full_command[0], cmd->full_command); +// // If execvp fails +// perror("execvp"); +// exit(EXIT_FAILURE); +// } diff --git a/src/execution/signal.c b/src/signal/signal.c similarity index 95% rename from src/execution/signal.c rename to src/signal/signal.c index e1bf64c..53e2bef 100644 --- a/src/execution/signal.c +++ b/src/signal/signal.c @@ -6,7 +6,7 @@ /* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/28 13:30:14 by Jskehan #+# #+# */ -/* Updated: 2024/07/22 14:10:39 by Jskehan ### ########.fr */ +/* Updated: 2024/07/22 15:33:44 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/execution/error.c b/src/utils/error.c similarity index 100% rename from src/execution/error.c rename to src/utils/error.c diff --git a/src/execution/node_utils.c b/src/utils/node_utils.c similarity index 100% rename from src/execution/node_utils.c rename to src/utils/node_utils.c diff --git a/src/execution/utils.c b/src/utils/utils.c similarity index 65% rename from src/execution/utils.c rename to src/utils/utils.c index ee72238..4bff0f4 100644 --- a/src/execution/utils.c +++ b/src/utils/utils.c @@ -3,23 +3,25 @@ /* ::: :::::::: */ /* utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: Jskehan +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/03 16:34:53 by Jskehan #+# #+# */ -/* Updated: 2024/07/03 16:35:07 by Jskehan ### ########.fr */ +/* Updated: 2024/07/25 16:03:42 by Jskehan ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -//not used but maybe used later! -void free_mini(t_mini *mini) +// not used but maybe used later! +void free_mini(t_mini *mini) { - if (mini->current_dir != NULL) - free(mini->current_dir); - if (mini->envp != NULL) - ft_free_2d_array(&mini->envp); - if (mini->node != NULL) - ft_lstclear(&mini->node, free); - free(mini); + if (mini->current_dir != NULL) + free(mini->current_dir); + if (mini->envp != NULL) + ft_free_2d_array(&mini->envp); + if (mini->node != NULL) + ft_lstclear(&mini->node, free); + free(mini); } + + \ No newline at end of file