From 87b90103930d83d74baa998866b0995cb8887d51 Mon Sep 17 00:00:00 2001 From: Christopher Uhlig Date: Sat, 25 Jan 2025 13:01:10 +0100 Subject: fixed leaks in tokenizer and collectargs also fixed seg for < > and improved value add by $ use --- src/parse_cmd.c | 99 ++++++++++++++++++--------------------------------------- 1 file changed, 31 insertions(+), 68 deletions(-) (limited to 'src/parse_cmd.c') diff --git a/src/parse_cmd.c b/src/parse_cmd.c index a978c99..5f9e36d 100644 --- a/src/parse_cmd.c +++ b/src/parse_cmd.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/08 15:06:25 by dkaiser #+# #+# */ -/* Updated: 2025/01/23 18:04:50 by chuhlig ### ########.fr */ +/* Updated: 2025/01/25 11:36:09 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,16 +21,10 @@ t_node *parse_cmd(t_token *tokens, t_env **env) t_list *create_files; create_files = NULL; - printf("parse_cmd\n"); - print_token_list(tokens); - redirs = collect_redirs(&tokens, *env, &create_files);// takes pos next to pipe or first token - printf("parse_cmdafter collect redir\n"); - print_token_list(tokens);// still existing tokenlist + redirs = collect_redirs(&tokens, *env, &create_files); if (redirs == NULL) return (NULL); args = collect_args(&tokens, env); - printf("parse_cmdafter collect args\n"); - // print_token_list(tokens);//here it gone if (args == NULL) { free(redirs); @@ -39,64 +33,33 @@ t_node *parse_cmd(t_token *tokens, t_env **env) return (new_cmd_node(args, redirs, create_files)); } -// static char **collect_args(t_token **tokens, t_env **env) -// { -// t_token *cur; -// char **result; -// int i; -// t_token *next; - -// cur = *tokens; -// i = 0; -// while (cur != NULL && ++i) -// cur = cur->next; -// result = malloc(sizeof(char *) * (i + 1)); -// if (result == NULL) -// return (free_tokens(*tokens), NULL); -// cur = *tokens; -// i = 0; -// while (cur != NULL && cur->type == STRING_TOKEN) -// { -// next = cur->next; -// if (cur->previous) -// free_token(cur->previous); -// result[i] = format_string(cur->content.string, *env, ft_atoi("0")); -// i++; -// if (cur->next == NULL) -// free_token(cur); -// cur = next; -// } -// result[i] = NULL; -// return (result); -// } - -static char **collect_args(t_token **tokens, t_env **env) { - t_token *cur; - char **result; - int i; - t_token *next; +static char **collect_args(t_token **tokens, t_env **env) +{ + t_token *cur; + char **result; + int i; + t_token *next; - cur = *tokens; - i = 0; - while (cur != NULL && ++i) - cur = cur->next; - result = malloc(sizeof(char *) * (i + 1)); - if (result == NULL) - return (free_tokens(*tokens), NULL); - cur = *tokens; - i = 0; - while (cur != NULL && cur->type == STRING_TOKEN) { - next = cur->next; - result[i] = format_string(cur->content.string, *env, ft_atoi("0")); - i++; - if (cur->previous) - cur->previous->next = cur->next; - if (cur->next) - cur->next->previous = cur->previous; - free_token(cur); - cur = next; - } - result[i] = NULL; - *tokens = cur; // Update the head of the token list - return (result); -}// need to later the rest of the tokenlist + cur = *tokens; + i = 0; + while (cur != NULL && ++i) + cur = cur->next; + result = malloc(sizeof(char *) * (i + 1)); + if (result == NULL) + return (free_tokens(*tokens), NULL); + cur = *tokens; + i = 0; + while (cur != NULL && cur->type == STRING_TOKEN) + { + next = cur->next; + if (cur->previous) + free_token2(cur->previous); + result[i] = format_string(cur->content.string, *env, ft_atoi("0")); + i++; + if (cur->next == NULL) + free_token2(cur); + cur = next; + } + result[i] = NULL; + return (result); +} -- cgit v1.2.3