]> git.dkaiser.de - 42/minishell.git/commitdiff
Fix parser bugs
authorDominik Kaiser <dkaiser@2-C-5.42heilbronn.de>
Sun, 11 Aug 2024 10:15:40 +0000 (12:15 +0200)
committerDominik Kaiser <dkaiser@2-C-5.42heilbronn.de>
Sun, 11 Aug 2024 10:15:40 +0000 (12:15 +0200)
Makefile
src/collect_redirs.c
src/parse_cmd.c
src/tokenizer.c

index 3450e3c4edecc8a316b6a023136b8d055c36cd31..d4778bf06b51277a314e0f6bc6d47f357d7f152b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ HEADERS =  -I include -I $(LIB_DIR)/libft
 VPATH   := src
 SRC     := main.c debug_tools.c init.c signal_handling.c repl.c new_token.c \
            free_token.c new_node.c free_node.c tokenizer.c parser.c \
-           parse_cmd.c print_ast.c
+           parse_cmd.c collect_assigns.c collect_redirs.c print_ast.c
 
 OBJ_DIR := _obj
 OBJ     := $(addprefix $(OBJ_DIR)/, $(SRC:%.c=%.o))
index 76b08da46f78ba58612d463acde197e40e1be4eb..d50bec4b2facde16cc0f8ed2cf24e1b53e43dc88 100644 (file)
@@ -6,13 +6,13 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/08/02 13:49:31 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/08/02 15:21:04 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/08/11 12:12:16 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "minishell.h"
 
-static void            collect_redir(t_token **tokens, t_redirection *result,
+static t_token *collect_redir(t_token **tokens, t_redirection *result,
                                        t_token *cur);
 static void            set_redir(t_redirection *redir, int type, char *specifier);
 static int             is_output_redir(int i);
@@ -31,7 +31,7 @@ t_redirection *collect_redirs(t_token **tokens)
        while (cur != NULL && cur->next != NULL)
        {
                if (cur->type == REDIR_TOKEN && cur->next->type == STRING_TOKEN)
-                       collect_redir(tokens, result, cur);
+                       cur = collect_redir(tokens, result, cur);
                else if (cur->type == REDIR_TOKEN)
                {
                        dbg("TODO: Add parsing errmsg");
@@ -43,7 +43,8 @@ t_redirection *collect_redirs(t_token **tokens)
        return (result);
 }
 
-static void    collect_redir(t_token **tokens, t_redirection *result, t_token *cur)
+static t_token *collect_redir(t_token **tokens, t_redirection *result,
+               t_token *cur)
 {
        set_redir(&result[is_output_redir(cur->content.redir_type)],
                cur->content.redir_type, cur->next->content.string);
@@ -57,7 +58,11 @@ static void  collect_redir(t_token **tokens, t_redirection *result, t_token *cur)
                free_token_and_connect(cur->previous);
        }
        else
+       {
                free_token(cur);
+               return (NULL);
+       }
+       return (cur);
 }
 
 static void    set_redir(t_redirection *redir, int type, char *specifier)
index 068a4c1a6ca4381f77640e9cc52e33f50b8f14c8..eb70f0df5333ecf78a7c3f05b67fc566a6688d75 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/07/08 15:06:25 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/08/02 14:22:32 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/08/11 12:14:11 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -34,11 +34,8 @@ static char  **collect_args(t_token **tokens)
 
        cur = *tokens;
        i = 0;
-       while (cur != NULL)
-       {
-               i++;
+       while (cur != NULL && ++i)
                cur = cur->next;
-       }
        result = malloc(sizeof(char *) * (i + 1));
        if (result == NULL)
                return (free_tokens(*tokens), NULL);
@@ -46,10 +43,11 @@ static char **collect_args(t_token **tokens)
        i = 0;
        while (cur != NULL && cur->type == STRING_TOKEN)
        {
+               if (cur->previous)
+                       free_token(cur->previous);
                result[i] = cur->content.string;
                i++;
                cur = cur->next;
-               free_token(cur->previous);
        }
        result[i] = NULL;
        return (result);
index 34685ace77667a188813f719ec4e1a84ee014af3..efbf72324fab68ba177e4defba73ded336e55301 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: chuhlig <chuhlig@student.42.fr>            +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/06/28 20:55:50 by chuhlig           #+#    #+#             */
-/*   Updated: 2024/08/09 15:40:00 by chuhlig          ###   ########.fr       */
+/*   Updated: 2024/08/11 11:40:35 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -110,4 +110,6 @@ void        tokenizer(char *s, t_token **token_list)
                        pos = i + 1;
                }
        }
+       while ((*token_list)->previous)
+               *token_list = (*token_list)->previous;
 }