Skip to content

Commit

Permalink
Merge pull request #10 from jackoske/ahh
Browse files Browse the repository at this point in the history
fixxing exit, memory managment and also removing tmini reference as i…
  • Loading branch information
VernihoraIvan authored Aug 5, 2024
2 parents 8ef3d84 + 54fb25a commit c991d3d
Show file tree
Hide file tree
Showing 24 changed files with 461 additions and 428 deletions.
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: iverniho <iverniho@student.42.fr> +#+ +:+ +#+ #
# By: Jskehan <jskehan@student.42Berlin.de> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/05/14 15:15:48 by iverniho #+# #+# #
# Updated: 2024/08/02 18:04:41 by iverniho ### ########.fr #
# Updated: 2024/08/05 18:50:53 by Jskehan ### ########.fr #
# #
# **************************************************************************** #

NAME = minishell

CC = cc
CFLAGS = -Wall -Wextra -Werror #-fsanitize=address -g
CFLAGS = -Wall -Wextra -Werror -fsanitize=address -g

LIBFT = ./lib/libft/

Expand Down
50 changes: 25 additions & 25 deletions includes/minishell.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
/* ::: :::::::: */
/* minishell.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: iverniho <iverniho@student.42.fr> +#+ +:+ +#+ */
/* By: Jskehan <jskehan@student.42Berlin.de> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/14 15:11:41 by iverniho #+# #+# */
/* Updated: 2024/08/05 12:54:54 by iverniho ### ########.fr */
/* Updated: 2024/08/05 19:02:31 by Jskehan ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down Expand Up @@ -101,20 +101,22 @@ typedef struct s_cmd
/* ************************************************************************** */

/* Initialization and Setup */
t_cmd *init_cmd(t_mini *mini);
t_cmd *init_cmd(void);
void init_mini(t_mini *mini);
void free_mini(t_mini *mini);
void free_mini(t_mini **mini);
void init_envp(char **envp);
void free_cmd(void *cmd_ptr);
void setup_signal_handlers(void);
void setup_child_signals(void);
void handle_sigint(int sig);
void initialize_envp(t_mini **mini, char **envp);
void initialize_envp(char **envp);

/* Error Handling */
void *mini_perror(char *str, char *str2, int fd);
void ft_error(int error, char *arg);

/* Input Handling and Parsing */
char **tokenize_input(char *input, t_mini **mini);
char **tokenize_input(char *input);
char **tokenize_special_symbols(const char *str,
int i, int token_count);
char **split_by_spaces(char *input, int w_count);
Expand All @@ -125,43 +127,41 @@ int quotes_closed(char *line);
int ft_alloc_len(char const *s1);

/* Variable Expansion and Environment Handling */
char *find_var(char *var, t_mini **mini);
char *find_var(char *var);
char **find_env_var_and_replace(char *var,
t_mini **mini, char **tokenizedInput);
char **expand_vars(char **tokenizedInput,
t_mini **mini);
char **tokenizedInput);
char **expand_vars(char **tokenizedInput);
char **ft_remove_quotes(char **tokenizedInput);

/* Command Handling */
void *check_to_fork(t_mini *mini, t_list *command);
void *check_to_fork(t_list *command);
t_cmd *set_redir(t_cmd *node, char *input,
char **full_command, int *i);
char *resolve_command_path(char *command,
t_mini **mini);
char *resolve_command_path(char *command);
int is_builtin(t_cmd *cmd);
void execute_builtin(t_mini *mini, t_cmd *cmd);
void execute_builtin(t_cmd *cmd);
int check_after_equal(char *str);
int add_env_key(char *str, t_mini *mini, int len);
int add_env_key(char *str, int len);
int is_special_char_in_env(char *str);
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);
void replace_value(char *key, char *value);
int is_already_exist(char *key);
void show_last_command_status(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);
int mini_cd(char **args);
void mini_echo(t_cmd *cmd);
void mini_pwd(void);
void mini_exit(char **args, t_mini *mini);
void mini_export(char **args, t_mini *mini);
void mini_env(t_mini *mini);
void mini_unset(char **args, t_mini *mini);
void mini_exit(char **args);
void mini_export(char **args);
void mini_env(void);
void mini_unset(char **args);

/* Execution and Testing */
void prompt_loop(t_mini *mini);
int get_here_doc(t_mini *mini, const char *limit,
void prompt_loop(void);
int get_here_doc(const char *limit,
const char *warn);
void libft_extra_tester(void);
void print_nodes(t_list *node);
Expand Down
4 changes: 2 additions & 2 deletions lib/libft/includes/libft.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: Jskehan <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/11/19 17:37:54 by iverniho #+# #+# */
/* Updated: 2024/07/09 12:13:08 by Jskehan ### ########.fr */
/* Updated: 2024/08/05 18:53:05 by Jskehan ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down Expand Up @@ -80,7 +80,7 @@ int ft_print_2d_array_fd(char **array, int fd);
void ft_free_2d_array(char ***array);
void ft_copy_2d_array_i(char ***dest, char **src, int index);
char **ft_duplicate_2d_array(char **array);
char **ft_add_row_2d_array(char **array, char *row);
char **ft_add_row_2d_array(char **array, char *row, int free_row);
char **ft_add_row_2d_array_i(char ***out, char *row, int i);
char **ft_splice_2d_array(char **dest, char **src, int i);
char **ft_realloc_2d_array(char **array, int new_size);
Expand Down
31 changes: 24 additions & 7 deletions lib/libft/src_extra/ft_add_row_2d_array.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: Jskehan <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/28 17:06:28 by Jskehan #+# #+# */
/* Updated: 2024/06/07 16:49:39 by Jskehan ### ########.fr */
/* Updated: 2024/08/05 18:52:52 by Jskehan ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -24,12 +24,26 @@
*
* Note: The array must be NULL-terminated.
*/
char **ft_add_row_2d_array(char **array, char *row)
#include "libft.h"

/**
* Function: ft_add_row_2d_array
* -----------------------------
* Adds a row to a 2D array.
*
* @param array: A pointer to a 2D array.
* @param row: The row to add.
* @param free_row: A flag indicating whether to free the row after adding.
*
* @return: The new 2D array with the added row.
*
* Note: The array must be NULL-terminated.
*/
char **ft_add_row_2d_array(char **array, char *row, int free_row)
{
int i;
char **new_array;

i = 0;
if (!row)
return (array);
if (!array)
Expand All @@ -39,17 +53,20 @@ char **ft_add_row_2d_array(char **array, char *row)
return (NULL);
new_array[0] = ft_strdup(row);
new_array[1] = NULL;
if (free_row)
free(row);
return (new_array);
}
while (array[i])
i++;
for (i = 0; array[i]; i++)
;
new_array = ft_calloc(i + 2, sizeof(char *));
if (!new_array)
return (NULL);
i = -1;
while (array[++i])
for (i = 0; array[i]; i++)
new_array[i] = ft_strdup(array[i]);
new_array[i] = ft_strdup(row);
if (free_row)
free(row);
new_array[i + 1] = NULL;
ft_free_2d_array(&array);
return (new_array);
Expand Down
16 changes: 8 additions & 8 deletions src/builtin/builtin_cd.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
/* ::: :::::::: */
/* builtin_cd.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: iverniho <iverniho@student.42.fr> +#+ +:+ +#+ */
/* By: Jskehan <jskehan@student.42Berlin.de> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/18 18:06:33 by Jskehan #+# #+# */
/* Updated: 2024/08/02 15:43:45 by iverniho ### ########.fr */
/* Updated: 2024/08/05 17:47:20 by Jskehan ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down Expand Up @@ -101,18 +101,18 @@ static int go_to_path(int option, t_mini *mini)
}

// The `cd` built-in command implementation
int mini_cd(char **args, t_mini *mini)
int mini_cd(char **args)
{
int cd_ret;
char *newpwd;

if (!args[1])
return (go_to_path(0, mini));
return (go_to_path(0, g_mini));
if (ft_strcmp(args[1], "-") == 0)
cd_ret = go_to_path(1, mini);
cd_ret = go_to_path(1, g_mini);
else
{
if (update_oldpwd(mini) != 0)
if (update_oldpwd(g_mini) != 0)
return (1);
cd_ret = chdir(args[1]);
if (cd_ret < 0)
Expand All @@ -127,8 +127,8 @@ int mini_cd(char **args, t_mini *mini)
perror("getcwd");
return (1);
}
mini->envp = ft_setenv("PWD", newpwd, mini->envp, 1);
mini->current_dir = newpwd;
g_mini->envp = ft_setenv("PWD", newpwd, g_mini->envp, 1);
g_mini->current_dir = newpwd;
// printf("Current directory: %s\n", mini->current_dir);
free(newpwd);
return (0);
Expand Down
17 changes: 7 additions & 10 deletions src/builtin/builtin_functions.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
/* ::: :::::::: */
/* builtin_functions.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: iverniho <iverniho@student.42.fr> +#+ +:+ +#+ */
/* By: Jskehan <jskehan@student.42Berlin.de> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/16 10:40:36 by Jskehan #+# #+# */
/* Updated: 2024/08/05 11:46:14 by iverniho ### ########.fr */
/* Updated: 2024/08/05 18:50:05 by Jskehan ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -29,7 +29,7 @@ void mini_echo(t_cmd *cmd)
{
if (ft_strcmp(cmd->full_command[i], "$?") == 0)
{
show_last_command_status(cmd->mini, cmd->full_command);
show_last_command_status(cmd->full_command);
return ;
}
else
Expand Down Expand Up @@ -76,6 +76,8 @@ int ft_isdigit_str(char *str)
{
int i;

if (!str)
return (0);
i = 0;
if (str[i] == '-' || str[i] == '+')
i++;
Expand All @@ -89,29 +91,24 @@ int ft_isdigit_str(char *str)
}

// Handle the `exit` built-in command
void mini_exit(char **args, t_mini *mini)
void mini_exit(char **args)
{
int exit_status;

(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]))
else if (args[1] && !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 = g_mini->exit_status;
// For example: free allocated memory, close file descriptors, etc.
exit(exit_status);
}
21 changes: 10 additions & 11 deletions src/builtin/builtin_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
/* ::: :::::::: */
/* builtin_utils.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: iverniho <iverniho@student.42.fr> +#+ +:+ +#+ */
/* By: Jskehan <jskehan@student.42Berlin.de> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/16 10:43:33 by Jskehan #+# #+# */
/* Updated: 2024/08/05 14:06:29 by iverniho ### ########.fr */
/* Updated: 2024/08/05 17:48:29 by Jskehan ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -33,9 +33,8 @@ int is_builtin(t_cmd *cmd)
return (0);
}

void show_last_command_status(t_mini *mini, char **str)
void show_last_command_status(char **str)
{
(void)mini;
if (ft_2d_array_len(str) == 1)
{
ft_putstr_fd(ft_itoa(g_mini->exit_status), STDERR_FILENO);
Expand All @@ -47,23 +46,23 @@ void show_last_command_status(t_mini *mini, char **str)
}

// Execute built-in commands
void execute_builtin(t_mini *mini, t_cmd *cmd)
void execute_builtin(t_cmd *cmd)
{
if (ft_strcmp(cmd->full_command[0], "echo") == 0)
return (mini_echo(cmd));
else if (ft_strcmp(cmd->full_command[0], "pwd") == 0)
mini_pwd();
else if (ft_strcmp(cmd->full_command[0], "cd") == 0)
g_mini->exit_status = mini_cd(cmd->full_command, mini);
g_mini->exit_status = mini_cd(cmd->full_command);
else if (ft_strcmp(cmd->full_command[0], "exit") == 0)
mini_exit(cmd->full_command, mini);
mini_exit(cmd->full_command);
else if (ft_strcmp(cmd->full_command[0], "$?") == 0)
show_last_command_status(mini, cmd->full_command);
show_last_command_status(cmd->full_command);
else if (ft_strcmp(cmd->full_command[0], "export") == 0)
return (mini_export(cmd->full_command, mini));
return (mini_export(cmd->full_command));
else if (ft_strcmp(cmd->full_command[0], "unset") == 0)
mini_unset(cmd->full_command, mini);
mini_unset(cmd->full_command);
else if (ft_strcmp(cmd->full_command[0], "env") == 0)
mini_env(mini);
mini_env();
g_mini->exit_status = 0;
}
Loading

0 comments on commit c991d3d

Please sign in to comment.