diff --git a/.gitignore b/.gitignore index b0b390f..0d0d178 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ .cache/ .cache compile_commands.json +/minishell_tester diff --git a/Makefile b/Makefile index ec145a4..4c95615 100644 --- a/Makefile +++ b/Makefile @@ -3,17 +3,17 @@ # ::: :::::::: # # Makefile :+: :+: :+: # # +:+ +:+ +:+ # -# By: Jskehan +#+ +:+ +#+ # +# By: iverniho +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/05/14 15:15:48 by iverniho #+# #+# # -# Updated: 2024/08/02 16:19:19 by Jskehan ### ########.fr # +# Updated: 2024/08/02 18:04:41 by iverniho ### ########.fr # # # # **************************************************************************** # NAME = minishell CC = cc -CFLAGS = -Wall -Wextra -Werror -fsanitize=address -g +CFLAGS = -Wall -Wextra -Werror #-fsanitize=address -g LIBFT = ./lib/libft/ diff --git a/includes/minishell.h b/includes/minishell.h index 38947ea..5194c2b 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* minishell.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/14 15:11:41 by iverniho #+# #+# */ -/* Updated: 2024/08/02 17:16:17 by Jskehan ### ########.fr */ +/* Updated: 2024/08/05 12:54:54 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,8 +31,10 @@ # define NEWLINE_ERR "minishell> syntax error near unexpected token `newline'" # define SYNTAX_ERR "minishell> syntax error near unexpected token " # define NO_FILE_ERR "minishell> No such file or directory: " -# define CMD_NOT_FOUND "minishell> command not found: " +# define CMD_NOT_FOUND ": command not found" # define PERM_ERR "minishell> permission denied: " +# define NUM_REQ "numeric argument required" +# define NOT_VALID_ID " not a valid identifier" # define READ_END 0 # define WRITE_END 1 @@ -65,20 +67,20 @@ extern volatile sig_atomic_t g_is_executing_command; typedef struct s_signals { - volatile sig_atomic_t sigint_received; - volatile sig_atomic_t is_executing_command; -} t_signals; + volatile sig_atomic_t sigint_received; + volatile sig_atomic_t is_executing_command; +} t_signals; typedef struct s_mini { - char **envp; - t_list *node; - char *current_dir; - int exit_status; - t_signals signals; -} t_mini; + char **envp; + t_list *node; + char *current_dir; + int exit_status; + t_signals signals; +} t_mini; -extern t_mini *g_mini; +extern t_mini *g_mini; typedef struct s_cmd { @@ -102,7 +104,6 @@ typedef struct s_cmd t_cmd *init_cmd(t_mini *mini); void init_mini(t_mini *mini); void free_mini(t_mini *mini); -void free_cmd(void *cmd_ptr); void setup_signal_handlers(void); void setup_child_signals(void); void handle_sigint(int sig); @@ -142,9 +143,12 @@ void execute_builtin(t_mini *mini, t_cmd *cmd); int check_after_equal(char *str); int add_env_key(char *str, t_mini *mini, int len); int is_special_char_in_env(char *str); -void replace_value(char *key, char *value, - t_mini *mini); +void replace_value(char *key, char *value, t_mini *mini); int is_already_exist(char *key, t_mini *mini); +void show_last_command_status(t_mini *mini, char **str); +int is_special_char_export(char c); +int is_all_num(char *str); + /* Built-in Commands */ int mini_cd(char **args, t_mini *mini); @@ -171,4 +175,9 @@ char *ft_getenv(const char *name, char **envp, char **ft_setenv(const char *name, const char *value, char **envp, int overwrite); char **copy_env(char **envp); + +///temporary +void ft_error1(int error, char *arg, int exit_code, char *message); +int check_special_in_key(char *str); + #endif // MINISHELL_H diff --git a/lib/libft/src_extra/ft_is_special_symbol.c b/lib/libft/src_extra/ft_is_special_symbol.c index 5d00780..c9996ad 100644 --- a/lib/libft/src_extra/ft_is_special_symbol.c +++ b/lib/libft/src_extra/ft_is_special_symbol.c @@ -6,7 +6,7 @@ /* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/07 17:35:34 by iverniho #+# #+# */ -/* Updated: 2024/06/07 17:35:47 by iverniho ### ########.fr */ +/* Updated: 2024/08/04 15:12:53 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,3 +16,17 @@ int ft_is_special_symbol(char c) { return (c == '|' || c == '<' || c == '>'); } + +int is_special_char_export(char c) +{ + char *prohibited_chars; + + prohibited_chars = "!@#$%^&*()-+=|\\{}[]:;\"'<>,.?/"; + while (*prohibited_chars) { + if (c == *prohibited_chars) { + return 1; + } + prohibited_chars++; + } + return 0; +} diff --git a/minishell_tester b/minishell_tester new file mode 160000 index 0000000..67d136e --- /dev/null +++ b/minishell_tester @@ -0,0 +1 @@ +Subproject commit 67d136e972d97ae2d3e5db8f4e3998618523e479 diff --git a/src/builtin/builtin_cd.c b/src/builtin/builtin_cd.c index cf74a58..5cfa1ac 100644 --- a/src/builtin/builtin_cd.c +++ b/src/builtin/builtin_cd.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* builtin_cd.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/18 18:06:33 by Jskehan #+# #+# */ -/* Updated: 2024/07/19 16:40:12 by Jskehan ### ########.fr */ +/* Updated: 2024/08/02 15:43:45 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/builtin/builtin_functions.c b/src/builtin/builtin_functions.c index 98f4dd9..51e437b 100644 --- a/src/builtin/builtin_functions.c +++ b/src/builtin/builtin_functions.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* builtin_functions.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/16 10:40:36 by Jskehan #+# #+# */ -/* Updated: 2024/07/18 18:07:01 by Jskehan ### ########.fr */ +/* Updated: 2024/08/05 11:46:14 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,10 +27,18 @@ void mini_echo(t_cmd *cmd) } while (cmd->full_command[i]) { - ft_putstr_fd(cmd->full_command[i], 1); - if (cmd->full_command[i + 1]) - ft_putstr_fd(" ", 1); - i++; + if (ft_strcmp(cmd->full_command[i], "$?") == 0) + { + show_last_command_status(cmd->mini, cmd->full_command); + return ; + } + else + { + ft_putstr_fd(cmd->full_command[i], 1); + if (cmd->full_command[i + 1]) + ft_putstr_fd(" ", 1); + i++; + } } if (newline) ft_putstr_fd("\n", 1); @@ -53,15 +61,57 @@ void mini_pwd(void) perror("getcwd"); } } +// void mini_exit(char **args, t_mini *mini) +// { +// int exit_status; + +// if (args[1]) +// exit_status = ft_atoi(args[1]); +// else +// exit_status = mini->exit_status; +// // For example: free allocated memory, close file descriptors, etc. +// exit(exit_status); +// } +int ft_isdigit_str(char *str) +{ + int i; + + i = 0; + if (str[i] == '-' || str[i] == '+') + i++; + while (str[i]) + { + if (!ft_isdigit(str[i])) + return (0); + i++; + } + return (1); +} + // Handle the `exit` built-in command void mini_exit(char **args, t_mini *mini) { int exit_status; - if (args[1]) + (void)mini; + exit_status = g_mini->exit_status; + if (ft_2d_array_len(args) > 2) + { + // ft_putstr_fd("minishell: exit: too many arguments\n", STDERR_FILENO); + // mini_perror("too many arguments", "exit", 2); + ft_error1(8, NULL, 1, "too many arguments"); + exit(1); + } + else if (!ft_isdigit_str(args[1])) + { + // mini_perror("numeric argument required", args[1], 2); + ft_error1(7, args[1], 2, "numeric argument required"); + exit(2); + } + else if (args[1]) exit_status = ft_atoi(args[1]); else - exit_status = mini->exit_status; + exit_status = g_mini->exit_status; // For example: free allocated memory, close file descriptors, etc. exit(exit_status); } diff --git a/src/builtin/builtin_utils.c b/src/builtin/builtin_utils.c index 8aaf9ff..490986a 100644 --- a/src/builtin/builtin_utils.c +++ b/src/builtin/builtin_utils.c @@ -6,7 +6,7 @@ /* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/16 10:43:33 by Jskehan #+# #+# */ -/* Updated: 2024/07/28 16:04:01 by iverniho ### ########.fr */ +/* Updated: 2024/08/04 16:29:27 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,9 +33,16 @@ int is_builtin(t_cmd *cmd) return (0); } -void show_last_command_status(t_mini *mini) +void show_last_command_status(t_mini *mini, char **str) { - ft_putnbr_fd(mini->exit_status, STDOUT_FILENO); + (void)mini; + if (ft_2d_array_len(str) == 1) + { + ft_putstr_fd(ft_itoa(g_mini->exit_status), STDERR_FILENO); + ft_putstr_fd(": command not found\n", STDERR_FILENO); + return ; + } + ft_putnbr_fd(g_mini->exit_status, STDOUT_FILENO); ft_putchar_fd('\n', STDOUT_FILENO); } @@ -51,12 +58,12 @@ void execute_builtin(t_mini *mini, t_cmd *cmd) else if (ft_strcmp(cmd->full_command[0], "exit") == 0) mini_exit(cmd->full_command, mini); else if (ft_strcmp(cmd->full_command[0], "$?") == 0) - show_last_command_status(mini); + show_last_command_status(mini, cmd->full_command); else if (ft_strcmp(cmd->full_command[0], "export") == 0) - mini_export(cmd->full_command, mini); + return (mini_export(cmd->full_command, mini)); else if (ft_strcmp(cmd->full_command[0], "unset") == 0) mini_unset(cmd->full_command, mini); else if (ft_strcmp(cmd->full_command[0], "env") == 0) mini_env(mini); - mini->exit_status = 0; + g_mini->exit_status = 0; } diff --git a/src/env/additional_env.c b/src/env/additional_env.c index 076694c..82aad0a 100644 --- a/src/env/additional_env.c +++ b/src/env/additional_env.c @@ -6,7 +6,7 @@ /* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/27 17:12:47 by iverniho #+# #+# */ -/* Updated: 2024/08/02 15:37:51 by iverniho ### ########.fr */ +/* Updated: 2024/08/05 13:00:26 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -89,6 +89,13 @@ void mini_export(char **args, t_mini *mini) if (ft_2d_array_len(args) < 2) return (export_with_no_args(mini)); + if (is_special_char_in_env(*(args + 1))) + { + g_mini->exit_status = 1; + return ; + } + if (ft_strlen(args[1]) == 1 && args[1][0] == '=') + return (ft_error1(9, args[1], 1, NOT_VALID_ID)); if ((!ft_strchr(*(args + 1), '=')) || (!check_after_equal(*(args + 1)))) if (add_env_key(*(args + 1), mini, ft_2d_array_len(mini->envp) + 1)) return ; diff --git a/src/env/env_utils.c b/src/env/env_utils.c index dea323f..ec4d79e 100644 --- a/src/env/env_utils.c +++ b/src/env/env_utils.c @@ -6,7 +6,7 @@ /* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/28 15:47:19 by iverniho #+# #+# */ -/* Updated: 2024/07/28 16:18:13 by iverniho ### ########.fr */ +/* Updated: 2024/08/05 12:48:02 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,11 +36,48 @@ void mini_unset(char **args, t_mini *mini) } //checks if there is anything after '=' +// int check_after_equal(char *str) +// { +// int i; +// // int marker; + +// // marker = 0; +// i = 0; +// while (str[i++] != '\0') +// { +// if (is_special_char_export(str[i]) && marker == 0) +// return (g_mini->exit_status = 1, 0); +// if (str[i] == '=') +// { +// // marker = 1; +// if (str[i + 1] == '\0') +// return (0); +// } +// } +// return (1); +// } + +int check_special_in_key(char *str) +{ + int i; + + i = -1; + while (str[++i] != '\0') + { + if (is_special_char_export(str[i])) + return (g_mini->exit_status = 1, 1); + if (str[i] == '=') + return (0); + } + return (0); +} + int check_after_equal(char *str) { int i; i = 0; + while (str[i++] != '\0') { if (str[i] == '=') @@ -85,12 +122,14 @@ int add_env_key(char *str, t_mini *mini, int len) int is_special_char_in_env(char *str) { int i; + int marker; + marker = 0; i = 0; while (str[i] != '\0') { - if (ft_isalpha(str[i]) || (i > 0 && ft_isdigit(str[i])) \ - || str[i] == '_' || str[i] == '=') + if (((ft_isalpha(str[i]) || (i > 0 && ft_isdigit(str[i])) \ + || str[i] == '_' || str[i] == '=')) && (!is_special_char_export(str[i])) ) i++; else if (str[i] == '=') return (0); @@ -99,6 +138,7 @@ int is_special_char_in_env(char *str) ft_putstr_fd("minishell> export: `", 2); ft_putstr_fd(str, 2); ft_putstr_fd("': not a valid identifier\n", 2); + g_mini->exit_status = 1; return (1); } } diff --git a/src/env/path_resolution.c b/src/env/path_resolution.c index b0bc223..41337ee 100644 --- a/src/env/path_resolution.c +++ b/src/env/path_resolution.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* path_resolution.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/16 15:23:12 by Jskehan #+# #+# */ -/* Updated: 2024/07/22 14:24:35 by Jskehan ### ########.fr */ +/* Updated: 2024/08/04 16:04:59 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,7 +23,7 @@ char *resolve_command_path(char *command, t_mini **mini) { if (access(command, X_OK) == 0) return (strdup(command)); - return (NULL); + return (g_mini->exit_status = 126, NULL); } path_env = find_var("PATH", mini); if (!path_env) @@ -57,6 +57,7 @@ char *resolve_command_path(char *command, t_mini **mini) i++; } ft_free_2d_array(&paths); + g_mini->exit_status = 127; // printf("Command path not found for: %s\n", command); // Debug print return (NULL); } diff --git a/src/exec/execution.c b/src/exec/execution.c index 6ea175b..7d4c2a5 100644 --- a/src/exec/execution.c +++ b/src/exec/execution.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* execution.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/16 10:52:13 by Jskehan #+# #+# */ -/* Updated: 2024/08/02 14:44:29 by Jskehan ### ########.fr */ +/* Updated: 2024/08/05 11:49:49 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -137,7 +137,7 @@ void exec_pipes(t_mini *mini, t_list *commands) int num_cmds; int pipes[128][2]; // Define a maximum number of pipes pid_t pid; - int i; + int i; t_cmd *cmd; num_cmds = ft_lstsize(commands); @@ -184,14 +184,11 @@ void *check_to_fork(t_mini *mini, t_list *commands) return (NULL); } if (!cmd->full_command && cmd->is_heredoc == 1) - { - mini->exit_status = 127; // Command not found - return (NULL); - } + return (mini->exit_status = 127, NULL);// Command not found cmd->command_path = resolve_command_path(cmd->full_command[0], &mini); if (cmd->command_path && access(cmd->command_path, X_OK) == 0) exec_pipes(mini, commands); else - mini->exit_status = 127; // Command not found or not executable + ft_error1(4, cmd->full_command[0], 127, cmd->full_command[0]); return (NULL); } diff --git a/src/main.c b/src/main.c index 367d0d0..24e4293 100644 --- a/src/main.c +++ b/src/main.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/15 20:09:06 by Jskehan #+# #+# */ -/* Updated: 2024/08/02 16:17:12 by Jskehan ### ########.fr */ +/* Updated: 2024/08/02 17:59:05 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,13 +23,14 @@ int main(int argc, char **argv, char **envp) initialize_envp(&mini, envp); init_mini(mini); g_mini = mini; + setup_signal_handlers(); //--------------TESTING---------------- // test_exec(); // test_heredoc(); // libft_extra_tester(); //--------------!TESTING---------------- - printf("%s\n", MINISHELL_ASCII); + // printf("%s\n", MINISHELL_ASCII); prompt_loop(mini); // char *str = get_next_line(0); // printf("%s\n", str); diff --git a/src/parser/expand_vars.c b/src/parser/expand_vars.c index 31ff030..9c60fcb 100644 --- a/src/parser/expand_vars.c +++ b/src/parser/expand_vars.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* expand_vars.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/07 17:40:44 by iverniho #+# #+# */ -/* Updated: 2024/07/25 15:14:37 by Jskehan ### ########.fr */ +/* Updated: 2024/08/02 17:28:22 by iverniho ### ########.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/parser_utils.c b/src/parser/parser_utils.c index 81743a1..47dfb86 100644 --- a/src/parser/parser_utils.c +++ b/src/parser/parser_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* parser_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/07 17:38:35 by iverniho #+# #+# */ -/* Updated: 2024/07/16 14:22:58 by Jskehan ### ########.fr */ +/* Updated: 2024/08/05 12:53:42 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -148,3 +148,47 @@ void ft_error(int error, char *arg) else if (error == 6) ft_putendl_fd(ft_strjoin(SYNTAX_ERR, add_quotes(arg)), 2); } + +void ft_error1(int error, char *arg, int exit_code, char *message) +{ + if (error == 1) + ft_putendl_fd(NEWLINE_ERR, 2); + else if (error == 2) + ft_putendl_fd(SYNTAX_ERR, 2); + else if (error == 3) + { + ft_putendl_fd(NO_FILE_ERR, 2); + g_mini->exit_status = exit_code; + } + else if (error == 4) + { + ft_putstr_fd(message, 2); + ft_putendl_fd(CMD_NOT_FOUND, 2); + g_mini->exit_status = exit_code; + } + else if (error == 5) + ft_putendl_fd(PERM_ERR, 2); + else if (error == 6) + ft_putendl_fd(ft_strjoin(SYNTAX_ERR, add_quotes(arg)), 2); + else if (error == 7) + { + ft_putstr_fd("minishell> exit: ", STDERR_FILENO); + ft_putendl_fd(NUM_REQ, 2); + g_mini->exit_status = exit_code; + } + else if (error == 8) + { + ft_putstr_fd("minishell> exit: ", STDERR_FILENO); + ft_putendl_fd(message, 2); + g_mini->exit_status = exit_code; + } + else if (error == 9) + { + ft_putstr_fd("minishell> export: ", STDERR_FILENO); + + ft_putendl_fd(ft_strjoin(add_quotes(arg), message), 2); + // ft_putstr_fd("minishell> ", STDERR_FILENO); + // ft_putendl_fd(message, 2); + g_mini->exit_status = exit_code; + } +} diff --git a/src/parser/tokenization.c b/src/parser/tokenization.c index 2b0fef3..635b746 100644 --- a/src/parser/tokenization.c +++ b/src/parser/tokenization.c @@ -63,6 +63,8 @@ static void define_symbol_len(int *len, char index1, char index2) void allocate_and_copy_token(char **tokens, int token_count, const char *str, int i, int c) { tokens[token_count] = malloc((c + 1) * sizeof(char)); + if (!tokens[token_count]) + return ; ft_strlcpy(tokens[token_count], &str[i], c + 1); tokens[token_count][c] = '\0'; } diff --git a/src/redirect/set_redir_utils.c b/src/redirect/set_redir_utils.c index 36743d7..40aca77 100644 --- a/src/redirect/set_redir_utils.c +++ b/src/redirect/set_redir_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* set_redir_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/16 14:23:13 by Jskehan #+# #+# */ -/* Updated: 2024/07/25 15:17:20 by Jskehan ### ########.fr */ +/* Updated: 2024/08/05 11:55:43 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,21 +18,22 @@ Error handling for file access: - '>' : permission denied (W_OK == -1) - '>>': permission denied (W_OK == -1) */ - static int check_access(char *path, int mode) { if (mode == 1) // Read mode { if (access(path, F_OK) == -1) - return (ft_error(3, NULL), 0); + return (ft_error1(3, NULL, 127, NULL), 0); else if (access(path, R_OK) == -1) - return (ft_error(5, NULL), 0); + return (ft_error1(5, NULL, 1, NULL), 0); + // return (ft_error(5, NULL), 0); return (1); } else if (mode == 2) // Write mode { if (access(path, W_OK) == -1 && access(path, F_OK) != -1) - return (ft_error(5, NULL), 0); + return (ft_error1(5, NULL, 1, NULL), 0); + // return (ft_error(5, NULL), 0); return (1); } return (1); @@ -114,4 +115,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/utils/error.c b/src/utils/error.c index 616b0da..3fa4008 100644 --- a/src/utils/error.c +++ b/src/utils/error.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* error.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/14 14:06:08 by Jskehan #+# #+# */ -/* Updated: 2024/07/09 13:09:18 by Jskehan ### ########.fr */ +/* Updated: 2024/08/04 17:17:24 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,9 +16,9 @@ void *mini_perror(char *str, char *str2, int fd) { // ditry hack to see whats going on :-) - perror("fuuu"); + // perror("fuuu"); fd = 2; - ft_putstr_fd("minishell: ", fd); + ft_putstr_fd("minishell> ", fd); ft_putstr_fd(str, fd); if (str2) { diff --git a/src/utils/prompt.c b/src/utils/prompt.c index e1ebaa7..088ec0e 100644 --- a/src/utils/prompt.c +++ b/src/utils/prompt.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* prompt.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/15 21:09:11 by Jskehan #+# #+# */ -/* Updated: 2024/08/02 17:16:02 by Jskehan ### ########.fr */ +/* Updated: 2024/08/02 17:10:53 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ @@ -34,12 +34,13 @@ t_list *create_nodes(char **input, t_mini *mini) commands = NULL; cur_command = NULL; i = -1; + (void)mini; while (input && input[++i]) { handle_command_node(input, &commands, &cur_command, &i, mini); if (i == -2) { - ft_lstclear(&commands, free_cmd); + ft_lstclear(&commands, free); ft_free_2d_array(&input); return (NULL); } diff --git a/src/utils/utils.c b/src/utils/utils.c index 3e6b13d..b3fd955 100644 --- a/src/utils/utils.c +++ b/src/utils/utils.c @@ -3,27 +3,15 @@ /* ::: :::::::: */ /* utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: Jskehan +#+ +:+ +#+ */ +/* By: iverniho +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/03 16:34:53 by Jskehan #+# #+# */ -/* Updated: 2024/08/02 17:11:43 by Jskehan ### ########.fr */ +/* Updated: 2024/08/04 17:11:32 by iverniho ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -void free_cmd(void *cmd_ptr) -{ - t_cmd *cmd; - - cmd = (t_cmd *)cmd_ptr; - if (cmd->full_command) - ft_free_2d_array(&cmd->full_command); - if (cmd->command_path) - free(cmd->command_path); - free(cmd); -} - // not used but maybe used later! void free_mini(t_mini *mini) { @@ -32,7 +20,19 @@ void free_mini(t_mini *mini) if (mini->envp != NULL) ft_free_2d_array(&mini->envp); if (mini->node != NULL) - ft_lstclear(&mini->node, free_cmd); - // Use free_cmd to free the content of each node + ft_lstclear(&mini->node, free); free(mini); } + +int is_all_num(char *str) +{ + int i; + + i = -1; + while (str[++i]) + { + if (!ft_isdigit(str[i])) + return (0); + } + return (1); +}