From db239d6dee574448bb5fa8eee1a0c3f3b3278f1e Mon Sep 17 00:00:00 2001 From: adjoly Date: Sun, 4 Aug 2024 18:18:07 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D=20wip:?= =?UTF-8?q?=20Working=20but=20not=20entirely?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/parsing.h | 2 +- readline.supp | 16 ++++++++++++++++ src/exec/heredoc.c | 2 +- src/main.c | 2 +- src/parsing/get_redir_fd.c | 22 ++++++++++++++++++---- src/parsing/open_redir.c | 6 +++--- src/parsing/tokenizer/__to_redir.c | 6 +++++- src/parsing/tokenizer/__to_token.c | 19 ++++++++++++++++++- src/parsing/tokenizer/tokenizer.c | 3 ++- src/utils/free_list.c | 6 +++--- 10 files changed, 68 insertions(+), 16 deletions(-) diff --git a/include/parsing.h b/include/parsing.h index 4b2848c..8c240e7 100644 --- a/include/parsing.h +++ b/include/parsing.h @@ -6,7 +6,7 @@ /* By: mmoussou + Memcheck:Leak + match-leak-kinds: reachable + ... + obj:/nix/store/znz0yrnzmfz6can2kng3anp5gkjrwf0y-ncurses-6.4/bin/clear + fun:(below main) +} { Memcheck:Leak @@ -51,3 +59,11 @@ obj:/usr/bin/ls fun:(below main) } +{ + + Memcheck:Leak + ... + obj:/nix/store/204ak4443zipfr2yi6y5wal05bck1qqg-coreutils-9.3/bin/coreutils + fun:(below main) +} + diff --git a/src/exec/heredoc.c b/src/exec/heredoc.c index a86531c..7b51835 100644 --- a/src/exec/heredoc.c +++ b/src/exec/heredoc.c @@ -6,7 +6,7 @@ /* By: mmoussou +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/30 10:48:41 by adjoly #+# #+# */ -/* Updated: 2024/07/30 19:03:54 by adjoly ### ########.fr */ +/* Updated: 2024/08/03 18:43:13 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,6 +24,20 @@ void parsing_msg(t_cmd *cmd) send_error_parsing(ERROR_NO_FILE); } +t_cmd *init_cmd(void) +{ + t_cmd *cmd; + + cmd = ft_calloc(sizeof(t_cmd), 1); + if (!cmd) + return (NULL); + cmd->infile = -2; + cmd->outfile = -2; + cmd->argv = NULL; + cmd->cmd = NULL; + return (cmd); +} + t_cmd *get_redir_fd(void *content, t_list *tmp) { t_redir_sign sign[2]; @@ -31,7 +45,7 @@ t_cmd *get_redir_fd(void *content, t_list *tmp) sign[0] = INFILE; sign[1] = OUTFILE; - cmd = ft_calloc(sizeof(t_cmd), 1); + cmd = init_cmd(); if (!cmd) return (NULL); while (tmp) @@ -45,9 +59,9 @@ t_cmd *get_redir_fd(void *content, t_list *tmp) } tmp = tmp->next; } - if (sign[0] == INFILE) + if (sign[0] == INFILE || cmd->outfile == -1) cmd->outfile = STDOUT_FILENO; - if (sign[1] == OUTFILE) + if (sign[1] == OUTFILE || cmd->infile == -1) cmd->infile = STDIN_FILENO; cmd = split_cmd(((t_token *)content)->argv, cmd); return (cmd); diff --git a/src/parsing/open_redir.c b/src/parsing/open_redir.c index 22f9855..0a90ed9 100644 --- a/src/parsing/open_redir.c +++ b/src/parsing/open_redir.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/30 15:56:53 by adjoly #+# #+# */ -/* Updated: 2024/07/14 17:32:34 by adjoly ### ########.fr */ +/* Updated: 2024/08/03 18:44:03 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,9 +18,9 @@ t_redir_sign __close_unused_fd(t_cmd *cmd, t_redir_sign sign) { - if (cmd->outfile != 0 && sign >= 2) + if (cmd->outfile > 1 && sign >= 2) close(cmd->outfile); - else if (cmd->infile != 0 && sign < 2) + else if (cmd->infile > 1 && sign < 2) close(cmd->infile); return (sign); } diff --git a/src/parsing/tokenizer/__to_redir.c b/src/parsing/tokenizer/__to_redir.c index 7004b3c..c8bd28f 100644 --- a/src/parsing/tokenizer/__to_redir.c +++ b/src/parsing/tokenizer/__to_redir.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/25 15:06:15 by adjoly #+# #+# */ -/* Updated: 2024/07/30 19:08:20 by adjoly ### ########.fr */ +/* Updated: 2024/08/04 12:53:17 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,6 +23,8 @@ char *__redir_filename_cpy(char *redir_s) char *tmp; tmp = ft_calloc(__get_len_arg(redir_s) + 1, sizeof(char)); + if (!tmp) + return (NULL); __cpy_arg(tmp, redir_s); tmp = format_quotes_string(tmp); return (tmp); @@ -33,6 +35,8 @@ t_redirection *__to_redir(char *redir_s) t_redirection *redir; redir = ft_calloc(sizeof(t_redirection), 1); + if (!redir) + return (NULL); redir->sign = __to_redir_sign(redir_s); redir->file_name = NULL; if (redir->sign == OUT_APPEND || redir->sign == HEREDOC) diff --git a/src/parsing/tokenizer/__to_token.c b/src/parsing/tokenizer/__to_token.c index eca7f60..48ddcea 100644 --- a/src/parsing/tokenizer/__to_token.c +++ b/src/parsing/tokenizer/__to_token.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/20 21:05:04 by adjoly #+# #+# */ -/* Updated: 2024/07/30 19:07:22 by adjoly ### ########.fr */ +/* Updated: 2024/08/04 12:52:25 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,17 @@ size_t __get_len_arg(char *s); +bool check_argvcontent(char *argv) +{ + if (!argv) + return (false); + while (*argv && ft_isspace(*argv)) + argv++; + if (!*argv) + return (true); + return (false); +} + size_t __get_sizeof_redir(char *redir_s, t_redirection *redir) { size_t i; @@ -57,7 +68,13 @@ t_token *__to_token(char *cmd) else { token->argv = ft_strjoin_free(token->argv, ft_substr(tmp, 0, 1)); + if (check_argvcontent(token->argv)) + { + free(token->argv); + token->argv = NULL; + } } + tmp++; } return (token); diff --git a/src/parsing/tokenizer/tokenizer.c b/src/parsing/tokenizer/tokenizer.c index faa2254..038244c 100644 --- a/src/parsing/tokenizer/tokenizer.c +++ b/src/parsing/tokenizer/tokenizer.c @@ -6,12 +6,13 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/18 20:13:50 by adjoly #+# #+# */ -/* Updated: 2024/06/30 13:12:38 by adjoly ### ########.fr */ +/* Updated: 2024/08/04 16:16:59 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "tokenizer.h" #include "parsing.h" +#include t_list *tokenizer(char *readline) { diff --git a/src/utils/free_list.c b/src/utils/free_list.c index e5c8bce..a59593c 100644 --- a/src/utils/free_list.c +++ b/src/utils/free_list.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/04 20:10:35 by adjoly #+# #+# */ -/* Updated: 2024/08/01 19:15:44 by adjoly ### ########.fr */ +/* Updated: 2024/08/04 16:58:07 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,9 +42,9 @@ void free_cmd(void *content) cmd = (t_cmd *)content; if (!cmd) return ; - if (cmd->infile != STDIN_FILENO && cmd->infile != -1) + if (cmd->infile > 1) close(cmd->infile); - if (cmd->outfile != STDOUT_FILENO && cmd->outfile != -1) + if (cmd->outfile > 1) close(cmd->outfile); if (cmd->cmd) free(cmd->cmd);