Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixxing exit, memory managment and also removing tmini reference as i… #10

Merged
merged 1 commit into from
Aug 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading