aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-09-11 19:18:17 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-09-11 19:18:17 +0200
commit9446bb78646bef4e3449a59a9e01118b025402bf (patch)
treea078d7f9244c90ffcc00e493cacee5595c054dbb
parent98990d5195e93154abbfd16eaa9d1fcc3572bc5c (diff)
downloadminishell-9446bb78646bef4e3449a59a9e01118b025402bf.tar.gz
minishell-9446bb78646bef4e3449a59a9e01118b025402bf.tar.bz2
minishell-9446bb78646bef4e3449a59a9e01118b025402bf.zip
Removing command local variable
-rw-r--r--include/eval.h9
-rw-r--r--include/lexer.h32
m---------minishell_test0
-rw-r--r--src/eval/cmd.c35
-rw-r--r--src/eval/variable.c42
-rw-r--r--src/lexer/tok_lst.c20
-rw-r--r--src/main.c4
7 files changed, 39 insertions, 103 deletions
diff --git a/include/eval.h b/include/eval.h
index 7139f34..b799c26 100644
--- a/include/eval.h
+++ b/include/eval.h
@@ -6,7 +6,7 @@
/* By: charles <charles@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 17:05:30 by charles #+# #+# */
-/* Updated: 2020/09/10 14:14:56 by charles ### ########.fr */
+/* Updated: 2020/09/11 19:10:30 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -35,7 +35,6 @@ typedef struct
char *exec_path;
char **argv;
t_env env;
- t_env env_local;
t_builtin_entry *builtin;
} t_fork_param_cmd;
@@ -74,10 +73,4 @@ bool exec_is_path(char *exec_name);
bool exec_is_valid(char *exec_path);
char *exec_search_path(t_path path, char *path_var, char *exec_name);
-/*
-** variable.c
-*/
-
-bool variable_extract(t_tok_lst **argv, t_env env, t_env env_local);
-
#endif
diff --git a/include/lexer.h b/include/lexer.h
index fd8972e..7e1bf06 100644
--- a/include/lexer.h
+++ b/include/lexer.h
@@ -6,7 +6,7 @@
/* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/06/19 10:51:26 by nahaddac #+# #+# */
-/* Updated: 2020/09/10 06:17:43 by nahaddac ### ########.fr */
+/* Updated: 2020/09/11 19:17:06 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -16,7 +16,26 @@
# include <stdlib.h>
# include "libft_lst.h"
# include "libft_str.h"
-// # include "minishell.h"
+
+/*
+** \brief token tags (type of token)
+** \param TAG_AND &&
+** \param TAG_END ;
+** \param TAG_OR ||
+** \param TAG_PIPE |
+** \param TAG_REDIR_IN <
+** \param TAG_REDIR_OUT >
+** \param TAG_REDIR_APPEND >>
+** \param TAG_PARENT_OPEN (
+** \param TAG_PARENT_CLOSE )
+** \param TAG_STR unquoted string
+** \param TAG_STR_DOUBLE string quoted with "
+** \param TAG_STR_SINGLE string quoted with '
+** \param TAG_STICK token is sticked to the next one
+** \param TAG_IS_STR all of string tags
+** \param TAG_IS_REDIR all of redirection tags
+** \param TAG_IS_SEP all of separator tags
+*/
enum e_tok
{
@@ -44,7 +63,13 @@ enum e_tok
*/
/*
-** \warning DO NOT change the order of the fields
+** \brief Token list struct
+** \param content token string content
+** \param next next token in the list (NULL if end)
+** \param tag token tag
+** \warning DO NOT change the order of the fields
+** (they are in the same order as t_ftlst so
+** that t_ftlst functions can be used on this struct aswell)
*/
typedef struct s_tok_lst
@@ -61,7 +86,6 @@ t_tok_lst *tok_lst_push_front(t_tok_lst **tokens, t_tok_lst *pushed);
void *tok_lst_destroy(t_tok_lst **tokens, void (*del)(void*));
t_tok_lst *tok_lst_last(t_tok_lst *tokens);
t_tok_lst *tok_lst_uncons(t_tok_lst **tokens);
-t_tok_lst *tok_lst_take_sticked(t_tok_lst **tokens);
/*
** lexer.c
diff --git a/minishell_test b/minishell_test
-Subproject c0b1a90cf9c52a0c9b1623ac695516031d5ccdb
+Subproject 7e8af919fad194f69e52a7b7529cebba635d422
diff --git a/src/eval/cmd.c b/src/eval/cmd.c
index 36e5a00..44f22b6 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/09/10 20:32:13 by charles ### ########.fr */
+/* Updated: 2020/09/11 19:10:20 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -56,12 +56,12 @@ int forked_cmd(void *void_param)
struct stat statbuf;
param = void_param;
- ft_vecpop(param->env_local, NULL);
- if (ft_vecswallow_at(param->env, param->env->size - 1, param->env_local) == NULL)
- {
- ft_vecdestroy(param->env_local, free);
- return (EVAL_FATAL);
- }
+ /* ft_vecpop(param->env_local, NULL); */
+ /* if (ft_vecswallow_at(param->env, param->env->size - 1, param->env_local) == NULL) */
+ /* { */
+ /* ft_vecdestroy(param->env_local, free); */
+ /* return (EVAL_FATAL); */
+ /* } */
if (param->builtin != NULL)
return (param->builtin->func(param->argv, param->env));
else
@@ -92,26 +92,6 @@ int eval_cmd(int fds[2], t_env env, t_path path, t_ast *ast)
if ((status = redir_extract(&ast->redirs, env, fds)) != 0)
return (status);
- if ((param.env_local = env_from_array((char*[]){NULL})) == NULL)
- return (EVAL_FATAL);
- if (!variable_extract(&ast->cmd_argv, env, param.env_local))
- return (EVAL_FATAL);
-
- /* 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 = 0; */
- /* return (0); */
- /* } */
if ((argv = preprocess(&ast->cmd_argv, env)) == NULL)
{
@@ -140,7 +120,6 @@ int eval_cmd(int fds[2], t_env env, t_path path, t_ast *ast)
param.env = env;
status = fork_wrap(fds, &param, &forked_cmd);
ft_split_destroy(argv);
- ft_vecdestroy(param.env_local, free);
g_last_status = status;
return (status);
}
diff --git a/src/eval/variable.c b/src/eval/variable.c
deleted file mode 100644
index 2b6d7cf..0000000
--- a/src/eval/variable.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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));
-}
diff --git a/src/lexer/tok_lst.c b/src/lexer/tok_lst.c
index 83f50bf..debeb9a 100644
--- a/src/lexer/tok_lst.c
+++ b/src/lexer/tok_lst.c
@@ -6,7 +6,7 @@
/* By: charles <me@cacharle.xyz> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/08/27 09:32:58 by charles #+# #+# */
-/* Updated: 2020/09/09 18:10:26 by charles ### ########.fr */
+/* Updated: 2020/09/11 19:11:20 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -70,21 +70,3 @@ t_tok_lst *tok_lst_uncons(t_tok_lst **tokens)
poped->next = NULL;
return (poped);
}
-
-t_tok_lst *tok_lst_take_sticked(t_tok_lst **tokens)
-{
- t_tok_lst *start;
- t_tok_lst *curr;
-
- if (*tokens == NULL)
- return (NULL);
- start = *tokens;
- curr = *tokens;
- while (curr->tag & TAG_STICK && curr->tag & TAG_IS_STR)
- curr = curr->next;
- /* if (curr->tag & TAG_IS_STR) */
- /* curr = curr->next; */
- *tokens = curr->next;
- curr->next = NULL;
- return (start);
-}
diff --git a/src/main.c b/src/main.c
index e8275f5..5089a6f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,7 +6,7 @@
/* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */
-/* Updated: 2020/09/10 20:26:19 by charles ### ########.fr */
+/* Updated: 2020/09/11 19:18:00 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -29,9 +29,9 @@ void tok_lst_debug(t_tok_lst *tokens);
/*
** TODO
** $?
+** pipe make 2 new children
** concurrent pipeline
** signal on whole line instead of single command
-** env local to current minishell process
*/
bool env_set_default(t_env env, char *key, char *value)