diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-09-09 18:24:53 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-09-09 18:24:53 +0200 |
| commit | c8c72449733f064f86b8a7c0b1284b6196fff0e3 (patch) | |
| tree | e347b900dd39c7518c37564058494ab8a0a59e23 /src/eval | |
| parent | 4238485a4e26a9d15541708bfc38bfede9bbe7d2 (diff) | |
| download | minishell-c8c72449733f064f86b8a7c0b1284b6196fff0e3.tar.gz minishell-c8c72449733f064f86b8a7c0b1284b6196fff0e3.tar.bz2 minishell-c8c72449733f064f86b8a7c0b1284b6196fff0e3.zip | |
Re Added cmd variable
Diffstat (limited to 'src/eval')
| -rw-r--r-- | src/eval/cmd.c | 23 | ||||
| -rw-r--r-- | src/eval/variable.c | 42 |
2 files changed, 64 insertions, 1 deletions
diff --git a/src/eval/cmd.c b/src/eval/cmd.c index ccb4cc2..5130a45 100644 --- a/src/eval/cmd.c +++ b/src/eval/cmd.c @@ -6,7 +6,7 @@ /* By: charles <charles@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/14 10:41:31 by charles #+# #+# */ -/* Updated: 2020/08/28 16:54:48 by charles ### ########.fr */ +/* Updated: 2020/09/09 17:40:54 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -94,9 +94,30 @@ int eval_cmd(int fds[2], t_env env, t_path path, t_ast *ast) char **argv; if (!redir_extract(&ast->redirs, env, fds)) + { + ast->redirs = NULL; return (-1); + } + ast->redirs = NULL; if ((param.env_local = env_from_array((char*[]){NULL})) == NULL) return (-1); + variable_extract(&ast->cmd_argv, env, param.env_local); + + /* char **strs = preprocess(&start, env); */ + /* */ + /* if (env_export(env_local, id, strs[0]) == NULL) */ + /* return (-1); */ + /* if (ast->cmd_argv == NULL) // FIXME special env not passed to child processes */ + /* { */ + /* ft_vecpop(param.env_local, NULL); */ + /* if (ft_vecswallow_at(env, env->size - 1, param.env_local) == NULL) */ + /* { */ + /* ft_vecdestroy(param.env_local, free); */ + /* return (-1); */ + /* } */ + /* g_last_status_code = 0; */ + /* return (0); */ + /* } */ if ((argv = preprocess(&ast->cmd_argv, env)) == NULL) { diff --git a/src/eval/variable.c b/src/eval/variable.c new file mode 100644 index 0000000..2b6d7cf --- /dev/null +++ b/src/eval/variable.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* variable.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <me@cacharle.xyz> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/09/09 17:12:14 by charles #+# #+# */ +/* Updated: 2020/09/09 18:22:43 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "eval.h" + +bool variable_extract(t_tok_lst **argv, t_env env, t_env env_local) +{ + char *key; + t_tok_lst *value_tokens; + char **strs; + + if (*argv == NULL || !((*argv)->tag & TAG_STR) + || !utils_start_with_valid_identifier((*argv)->content)) + return (true); + + key = (*argv)->content; + (*argv)->content = ft_strchr(key, '='); + *(*argv)->content = '\0'; + (*argv)->content++; + (*argv)->content = ft_strdup((*argv)->content); + + /* printf("|%s| |%s|\n", key, (*argv)->content); */ + /* if (*(*argv)->content == '\0') */ + /* { */ + /* ft_lstpop_front((t_ftlst**)argv, NULL); */ + /* return (true); */ + /* } */ + value_tokens = tok_lst_take_sticked(argv); + strs = preprocess(&value_tokens, env); + if (env_export(env_local, key, strs[0]) == NULL) + return (false); + return (variable_extract(argv, env, env_local)); +} |
