fix invalid read with quotes functions
+ ft_free_cmd_arr()
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
/* By: lperrey <lperrey@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2021/10/08 02:59:58 by lperrey #+# #+# */
|
||||
/* Updated: 2021/11/13 04:20:43 by lperrey ### ########.fr */
|
||||
/* Updated: 2021/11/14 00:35:59 by lperrey ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -44,6 +44,7 @@ int builtin_echo(int argc, char *argv[], t_all *c);
|
||||
|
||||
// Free
|
||||
int free_exit(t_all *c, int exit_status);
|
||||
void ft_free_cmd_arr(t_cmd **cmd_arr);
|
||||
|
||||
// Generic
|
||||
char *ft_strjoinfree(char *s1, char *s2);
|
||||
|
||||
24
srcs/free.c
24
srcs/free.c
@@ -6,7 +6,7 @@
|
||||
/* By: lperrey <lperrey@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2021/10/10 23:53:17 by lperrey #+# #+# */
|
||||
/* Updated: 2021/10/30 14:18:09 by lperrey ### ########.fr */
|
||||
/* Updated: 2021/11/14 04:48:49 by lperrey ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -18,8 +18,30 @@ int free_exit(t_all *c, int exit_status)
|
||||
free(c->prompt);
|
||||
ft_lstclear((t_list **)&c->token_list, free); // a voir avec Hugo, il y a un truc qui me semble superflu dans la fonction
|
||||
ft_free_2d_arr(c->envp);
|
||||
ft_free_cmd_arr(c->cmd_arr);
|
||||
if (c->termios_changed)
|
||||
tcsetattr(STDIN_FILENO, TCSANOW, &c->ori_termios);
|
||||
rl_clear_history();
|
||||
exit(exit_status);
|
||||
}
|
||||
|
||||
void ft_free_cmd_arr(t_cmd **cmd_arr)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!cmd_arr)
|
||||
return ;
|
||||
i = 0;
|
||||
while (cmd_arr[i])
|
||||
{
|
||||
ft_free_2d_arr(cmd_arr[i]->argv);
|
||||
if (cmd_arr[i]->fd_in != STDIN_FILENO && cmd_arr[i]->fd_in > 0)
|
||||
if (close(cmd_arr[i]->fd_in) == -1)
|
||||
perror("close()");
|
||||
if (cmd_arr[i]->fd_out != STDOUT_FILENO && cmd_arr[i]->fd_out > 0)
|
||||
if (close(cmd_arr[i]->fd_out) == -1)
|
||||
perror("close()");
|
||||
i++;
|
||||
}
|
||||
ft_free_2d_arr(cmd_arr);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ static size_t count_word(char const *s, char c)
|
||||
{
|
||||
while (quote_state_change("e_state, &s[i]))
|
||||
i++;
|
||||
if (s[i] != c || quote_state)
|
||||
if (s[i] && (s[i] != c || quote_state))
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@@ -152,7 +152,7 @@ static void fill_arr(char const *s, char c, char **str_arr)
|
||||
{
|
||||
while (quote_state_change("e_state, &s[i]))
|
||||
str_arr[arr_i][char_i++] = s[i++];
|
||||
if (s[i] != c || quote_state)
|
||||
if (s[i] && (s[i] != c || quote_state))
|
||||
str_arr[arr_i][char_i++] = s[i++];
|
||||
}
|
||||
str_arr[arr_i][char_i] = '\0'; //superflu si ft_calloc
|
||||
|
||||
@@ -37,7 +37,8 @@ char *ft_strdup_quotes(const char *s)
|
||||
{
|
||||
while (quote_state_change("e_state, &s[i]))
|
||||
i++;
|
||||
dup[i_dup++] = s[i++];
|
||||
if (s[i])
|
||||
dup[i_dup++] = s[i++];
|
||||
}
|
||||
return (dup);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: lperrey <lperrey@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2021/10/24 10:52:40 by lperrey #+# #+# */
|
||||
/* Updated: 2021/11/13 05:13:40 by lperrey ### ########.fr */
|
||||
/* Updated: 2021/11/14 00:35:42 by lperrey ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -39,26 +39,6 @@ void save_redirections_words(t_token *t)
|
||||
}
|
||||
}
|
||||
|
||||
void ft_free_cmd_arr(t_cmd **cmd_arr)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (cmd_arr[i])
|
||||
{
|
||||
if (cmd_arr[i]->argv)
|
||||
ft_free_2d_arr(cmd_arr[i]->argv);
|
||||
if (cmd_arr[i]->fd_in != STDIN_FILENO && cmd_arr[i]->fd_in > 0)
|
||||
if (close(cmd_arr[i]->fd_in) == -1)
|
||||
perror("close()");
|
||||
if (cmd_arr[i]->fd_out != STDOUT_FILENO && cmd_arr[i]->fd_out > 0)
|
||||
if (close(cmd_arr[i]->fd_out) == -1)
|
||||
perror("close()");
|
||||
i++;
|
||||
}
|
||||
ft_free_2d_arr(cmd_arr);
|
||||
}
|
||||
|
||||
t_cmd **parsing(t_token *token_list)
|
||||
{
|
||||
t_cmd **cmd_arr;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: lperrey <lperrey@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2021/10/04 05:59:26 by lperrey #+# #+# */
|
||||
/* Updated: 2021/11/08 05:16:48 by lperrey ### ########.fr */
|
||||
/* Updated: 2021/11/14 03:59:01 by lperrey ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -45,6 +45,8 @@ void shell_loop(t_all *c)
|
||||
// Bien penser à mettre les ptr à NULL aprés free en cas d'erreur (pour ne pas double free si appel à free_exit())
|
||||
// Exec Pipeline
|
||||
//execute_cmd(c->envp, c->cmd_arr);
|
||||
ft_free_cmd_arr(c->cmd_arr);
|
||||
c->cmd_arr = NULL;
|
||||
}
|
||||
else if (!line_input)
|
||||
write(1, "\n", 1);
|
||||
|
||||
Reference in New Issue
Block a user