make ft_split_safe and environment safe
This commit is contained in:
parent
b671ded205
commit
0f2040cb9f
@ -6,7 +6,7 @@
|
||||
/* By: marvin <marvin@student.42.fr> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/04 16:13:13 by whaffman #+# #+# */
|
||||
/* Updated: 2025/03/01 12:51:53 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/03/01 14:13:46 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -36,13 +36,13 @@
|
||||
|
||||
# ifndef DBG
|
||||
# define DBG
|
||||
# endif
|
||||
# endif // DBG
|
||||
|
||||
# ifdef NOPROMPT
|
||||
# define PROMPT "$"
|
||||
# else
|
||||
# define PROMPT 0
|
||||
# endif
|
||||
# endif // NOPROMPT
|
||||
|
||||
# ifdef NOBANNER
|
||||
# define NOBANNER 1
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/05 16:06:35 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/28 14:10:11 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/03/02 22:05:22 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -27,8 +27,10 @@ char *ft_substr_safe(t_minishell *msh,
|
||||
const char *str, unsigned int start, size_t len);
|
||||
char *ft_strjoin_safe(t_minishell *msh,
|
||||
const char *s1, const char *s2);
|
||||
char **ft_split_safe(t_minishell *msh, const char *s, char c);
|
||||
void *malloc_safe(t_minishell *msh, size_t size);
|
||||
void free_safe(t_minishell *msh, void **ptr);
|
||||
void ft_free_arr_safe(t_minishell *msh, char **arr);
|
||||
void free_freelist(t_minishell *msh);
|
||||
void ft_lstclear_safe(t_minishell *msh,
|
||||
t_list **lst, void (*del)(t_minishell *msh, void *));
|
||||
|
||||
25
sources.mk
25
sources.mk
@ -11,15 +11,16 @@ redirect_process_heredoc.c print_freelist.c print_commands.c main.c \
|
||||
token_new.c token_char_convert.c token_parse.c token_type_convert.c \
|
||||
signal_init.c.c signal.c history_write.c prompt.c history_load.c \
|
||||
free_command_list.c free_minishell.c ft_lstnew_safe.c free_safe.c \
|
||||
free_lexer.c print_banner.c check_malloc.c free_freelist.c \
|
||||
ft_lstclear_safe.c error_msg.c free_token_list.c malloc_safe.c \
|
||||
free_minishell_line.c ft_strdup_safe.c free_token.c ft_substr_safe.c \
|
||||
init_minishell.c ft_strjoin_safe.c expander_allocate_memory.c \
|
||||
expander_parse_string.c expander_parse_variables.c \
|
||||
expander_expand_dollar.c expander_is_character.c \
|
||||
expander_get_variable.c executor_open_fds.c executor_count_fds.c \
|
||||
executor_fork.c executor_absolute_path.c executor_execute_pipeline.c \
|
||||
executor_child.c executor_close_fds.c executor_create_redirects.c \
|
||||
executor_create_pipes.c builtin_export.c simple_builtins.c \
|
||||
builtin_router.c is_builtin.c builtin_unset.c builtin_env.c \
|
||||
builtin_cd.c builtin_pwd.c builtin_exit.c builtin_echo.c \
|
||||
free_lexer.c ft_free_arr_safe.c print_banner.c check_malloc.c \
|
||||
free_freelist.c ft_lstclear_safe.c ft_split_safe.c error_msg.c \
|
||||
free_token_list.c malloc_safe.c free_minishell_line.c \
|
||||
ft_strdup_safe.c free_token.c ft_substr_safe.c init_minishell.c \
|
||||
ft_strjoin_safe.c expander_allocate_memory.c expander_parse_string.c \
|
||||
expander_parse_variables.c expander_expand_dollar.c \
|
||||
expander_is_character.c expander_get_variable.c executor_open_fds.c \
|
||||
executor_count_fds.c executor_fork.c executor_absolute_path.c \
|
||||
executor_execute_pipeline.c executor_child.c executor_close_fds.c \
|
||||
executor_create_redirects.c executor_create_pipes.c builtin_export.c \
|
||||
simple_builtins.c builtin_router.c is_builtin.c builtin_unset.c \
|
||||
builtin_env.c builtin_cd.c builtin_pwd.c builtin_exit.c \
|
||||
builtin_echo.c \
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/20 11:32:53 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/26 15:49:16 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/03/02 21:35:02 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -24,7 +24,8 @@ int builtin_export(t_minishell *msh, t_command *cmd)
|
||||
arr = ft_split(cmd->args[i], '=');
|
||||
if (arr[1] == NULL)
|
||||
{
|
||||
ft_free_arr(arr);
|
||||
ft_free_arr_safe(msh, arr);
|
||||
DBG;
|
||||
i++;
|
||||
continue ;
|
||||
}
|
||||
@ -36,7 +37,8 @@ int builtin_export(t_minishell *msh, t_command *cmd)
|
||||
}
|
||||
else
|
||||
environment_add(msh, arr[0], arr[1]);
|
||||
ft_free_arr(arr);
|
||||
ft_free_arr_safe(msh, arr);
|
||||
DBG
|
||||
}
|
||||
return (SUCCESS);
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/04 16:13:59 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/26 16:09:15 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/03/02 22:07:17 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -27,7 +27,7 @@ void environment_free_list(t_minishell *msh)
|
||||
else
|
||||
next = NULL;
|
||||
environment_free(msh, (*lst)->content);
|
||||
free(*lst);
|
||||
free_safe(msh, (void **)lst);
|
||||
*lst = next;
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/05 15:52:33 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/26 16:09:26 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/03/02 22:05:43 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -20,11 +20,11 @@ int environment_parse(t_minishell *msh, char **envp)
|
||||
return (FAILURE);
|
||||
while (*envp != NULL)
|
||||
{
|
||||
env = ft_split(*envp, '=');
|
||||
env = ft_split_safe(msh, *envp, '=');
|
||||
if (!env)
|
||||
return (FAILURE);
|
||||
environment_add(msh, env[0], env[1]);
|
||||
ft_free_arr(env);
|
||||
ft_free_arr_safe(msh, env);
|
||||
envp++;
|
||||
}
|
||||
return (SUCCESS);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: willem <willem@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/08 13:52:08 by willem #+# #+# */
|
||||
/* Updated: 2025/02/26 16:09:35 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/03/01 14:24:19 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -24,5 +24,5 @@ void environment_print(t_minishell *msh)
|
||||
printf("%s\n", arr[i]);
|
||||
i++;
|
||||
}
|
||||
ft_free_arr(arr);
|
||||
ft_free_arr_safe(msh, arr);
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: willem <willem@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/08 17:00:24 by willem #+# #+# */
|
||||
/* Updated: 2025/02/26 16:09:42 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/03/01 14:24:46 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -61,5 +61,5 @@ char *executor_absolute_path(t_minishell *msh, char *cmd)
|
||||
return (executable);
|
||||
i++;
|
||||
}
|
||||
return (ft_free_arr(path), NULL);
|
||||
return (ft_free_arr_safe(msh, path), NULL);
|
||||
}
|
||||
|
||||
26
src/utils/ft_free_arr_safe.c
Normal file
26
src/utils/ft_free_arr_safe.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* ft_free_arr_safe.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/03/01 14:20:45 by whaffman #+# #+# */
|
||||
/* Updated: 2025/03/01 14:26:58 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "minishell.h"
|
||||
|
||||
void ft_free_arr_safe(t_minishell *msh, char **arr)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (arr[i] != NULL)
|
||||
{
|
||||
free_safe(msh, (void **)&arr[i]);
|
||||
i++;
|
||||
}
|
||||
free_safe(msh, (void **)&arr);
|
||||
}
|
||||
53
src/utils/ft_split_safe.c
Normal file
53
src/utils/ft_split_safe.c
Normal file
@ -0,0 +1,53 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* ft_split_safe.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/03/02 21:58:06 by whaffman #+# #+# */
|
||||
/* Updated: 2025/03/02 22:04:08 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "minishell.h"
|
||||
|
||||
static void *free_arr_safe(t_minishell *msh, int n, char ***arr)
|
||||
{
|
||||
while (n-- > 0)
|
||||
{
|
||||
free_safe(msh, (void**) &(*arr)[n]);
|
||||
DBG;
|
||||
}
|
||||
free_safe(msh,(void**) arr);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
char **ft_split_safe(t_minishell *msh, char const *s, char c)
|
||||
{
|
||||
char **result;
|
||||
int n;
|
||||
int i;
|
||||
int j;
|
||||
|
||||
result = malloc_safe(msh, (ft_count_words(s, c) + 1) * sizeof(char *));
|
||||
if (!result)
|
||||
return (NULL);
|
||||
i = 0;
|
||||
n = 0;
|
||||
while (s[i])
|
||||
{
|
||||
j = 0;
|
||||
while (s[i] == c)
|
||||
i++;
|
||||
while (s[i + j] && s[i + j] != c)
|
||||
j++;
|
||||
if (j)
|
||||
result[n] = ft_substr_safe(msh, s, i, j);
|
||||
if (j && !result[n++])
|
||||
return (free_arr_safe(msh, n, &result));
|
||||
i += j;
|
||||
}
|
||||
result[n] = NULL;
|
||||
return (result);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user