diff options
| author | Christopher Uhlig | 2024-10-17 15:32:43 +0200 |
|---|---|---|
| committer | Christopher Uhlig | 2024-10-17 15:32:43 +0200 |
| commit | c1ac406e52fe273a0e14b0f079b522e58c04acd3 (patch) | |
| tree | 05d2a6c6c838ade625baf9a13e3a6ff0a3663739 /src/parse_cmd.c | |
| parent | 9298e72de61af5311678c656c12fc177589671a7 (diff) | |
| parent | 92bdbf67adaf09d1c831db3cee9456e9c447063f (diff) | |
| download | minishell-c1ac406e52fe273a0e14b0f079b522e58c04acd3.tar.gz minishell-c1ac406e52fe273a0e14b0f079b522e58c04acd3.zip | |
Merge branch 'env' of https://github.com/dpu-kaiser/minishell into env
Diffstat (limited to 'src/parse_cmd.c')
| -rw-r--r-- | src/parse_cmd.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/parse_cmd.c b/src/parse_cmd.c new file mode 100644 index 0000000..2755cae --- /dev/null +++ b/src/parse_cmd.c @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parse_cmd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/08 15:06:25 by dkaiser #+# #+# */ +/* Updated: 2024/08/11 12:20:06 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static char **collect_args(t_token **tokens); + +t_node *parse_cmd(t_token *tokens) +{ + char **args; + t_redirection *redirs; + + redirs = collect_redirs(&tokens); + args = collect_args(&tokens); + return (new_cmd_node(args, redirs)); +} + +static char **collect_args(t_token **tokens) +{ + t_token *cur; + char **result; + int i; + + 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) + { + if (cur->previous) + free_token(cur->previous); + result[i] = cur->content.string; + i++; + cur = cur->next; + } + result[i] = NULL; + return (result); +} |
