]> git.dkaiser.de - 42/minishell.git/commitdiff
Fix collect_redirs and start refactoring heredoc
authorDominik Kaiser <dkaiser@3-H-6.42heilbronn.de>
Wed, 15 Jan 2025 17:55:47 +0000 (18:55 +0100)
committerDominik Kaiser <dkaiser@3-H-6.42heilbronn.de>
Wed, 15 Jan 2025 17:55:47 +0000 (18:55 +0100)
src/collect_redirs.c
src/read_heredoc.c

index 2947c52ce0a7e3c88e6910b145385b04c6788a10..4decda73c75727113081c7e4200cc41c30c564e5 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: chuhlig <chuhlig@student.42.fr>            +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/08/02 13:49:31 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/15 18:33:36 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/15 18:54:42 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -16,7 +16,8 @@ static void           collect_and_check_redir(t_redirection *result, t_token **cur,
                                        t_env *env);
 static void            set_redir(t_redirection *redir, int type, char *spec,
                                        t_env *env);
-static char            *get_heredoc_data(t_token *cur);
+static int             set_heredoc_data(t_token *cur, t_redirection *result,
+                                       t_env *env);
 
 t_redirection  *collect_redirs(t_token **tokens, t_env *env)
 {
@@ -62,7 +63,8 @@ static void   collect_and_check_redir(t_redirection *result, t_token **cur,
                str = ft_strdup((*cur)->next->content.string);
        if ((*cur)->content.redir_type == INPUT_LIMITER)
        {
-               set_redir(&result[0], INPUT_LIMITER, get_heredoc_data(*cur), env);
+               if (!set_heredoc_data(*cur, result, env))
+                       return ;
        }
        else if ((*cur)->content.redir_type == INPUT_FILE)
                set_redir(&result[0], INPUT_FILE, str, env);
@@ -81,19 +83,21 @@ static void collect_and_check_redir(t_redirection *result, t_token **cur,
                *cur = NULL;
 }
 
-static char    *get_heredoc_data(t_token *cur)
+static int     set_heredoc_data(t_token *cur, t_redirection *result, t_env *env)
 {
        char    *heredoc_data;
 
+       heredoc_data = NULL;
        if (cur->content.redir_type == INPUT_LIMITER)
        {
                heredoc_data = read_heredoc(cur->next->content.string);
                if (!heredoc_data)
                {
                        perror("Heredoc allocation failed");
-                       return ;
+                       return (0);
                }
                set_redir(&result[0], INPUT_LIMITER, heredoc_data, env);
        }
-       return (heredoc_data);
+       set_redir(&result[0], INPUT_LIMITER, heredoc_data, env);
+       return (1);
 }
index 78efbd796ea26874f354254e04e66de27b8cd8b4..4b45b1474e64bed913440a184cc249c895f5b896 100644 (file)
@@ -6,12 +6,14 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/15 18:22:09 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/15 18:22:52 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/15 18:43:20 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "minishell.h"
 
+static char    *concat_str(char *temp, char *line);
+
 char   *read_heredoc(char *delimiter)
 {
        char    *line;
@@ -44,11 +46,16 @@ char        *read_heredoc(char *delimiter)
                }
                else
                        temp[0] = '\0';
-               ft_strcat(temp, line);
-               ft_strcat(temp, "\n");
-               result = temp;
+               result = concat_str(temp, line);
                total_length += line_length;
-               free(line);
        }
        return (result);
 }
+
+static char    *concat_str(char *temp, char *line)
+{
+       ft_strcat(temp, line);
+       ft_strcat(temp, "\n");
+       free(line);
+       return (temp);
+}