aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/minishell.h5
-rw-r--r--src/main.c22
-rw-r--r--src/parser/parser.c24
-rw-r--r--src/signal.c2
-rw-r--r--src/utils.c18
5 files changed, 40 insertions, 31 deletions
diff --git a/include/minishell.h b/include/minishell.h
index 4bcd681..573ac29 100644
--- a/include/minishell.h
+++ b/include/minishell.h
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/26 15:33:51 by cacharle #+# #+# */
-/* Updated: 2020/08/27 20:34:44 by charles ### ########.fr */
+/* Updated: 2020/09/09 14:04:00 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -136,7 +136,6 @@ int utils_directory_iter(
size_t utils_var_end(char *name);
bool utils_valid_identifier(char *name);
bool utils_start_with_valid_identifier(char *name);
-
-void print_prompt(void);
+void print_prompt(void);
#endif
diff --git a/src/main.c b/src/main.c
index b3ef218..6a0d36a 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/08/28 17:16:18 by charles ### ########.fr */
+/* Updated: 2020/09/09 14:20:41 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -29,15 +29,11 @@ void tok_lst_debug(t_tok_lst *tokens);
/*
** TODO
** $?
-** pipeline
+** concurrent pipeline
** cmd variable preprocess
** PATH with no permission, link and other file system fun stuff
-** escape lexer ------- ok
-** escape split preprocessing (escaped spaces)
** signal on whole line instead of single command
-** parsing error ------ ok
** env local to current minishell process
-** BETTER ERROR HANDLING IS BECOMING URGENT (spagetti code everywhere)
*/
bool env_set_default(t_env env, char *key, char *value)
@@ -75,9 +71,9 @@ int main(int argc, char **argv, char **envp)
// env_export(env, "_", env_exec_path);
g_last_status_code = 0;
- /* signal(SIGINT, signal_sigint); */
- /* signal(SIGQUIT, signal_sigquit); */
- /* signal(SIGTERM, signal_sigterm); */
+ signal(SIGINT, signal_sigint);
+ signal(SIGQUIT, signal_sigquit);
+ signal(SIGTERM, signal_sigterm);
char *last_slash = ft_strrchr(argv[0], '/');
if (last_slash == NULL)
@@ -118,12 +114,12 @@ int main(int argc, char **argv, char **envp)
int ret;
char *line;
- ft_putstr_fd("> ", STDERR_FILENO);
+ print_prompt();
while ((ret = ft_getline(STDOUT_FILENO, &line)) == FTGL_OK)
{
if (*line == '\0')
{
- ft_putstr_fd("> ", STDERR_FILENO);
+ print_prompt();
continue;
}
t_tok_lst *lex_out = lexer(line);
@@ -135,14 +131,14 @@ int main(int argc, char **argv, char **envp)
return (1);
if (parser_out->syntax_error)
{
- ft_putstr_fd("> ", STDERR_FILENO);
+ print_prompt();
continue;
}
int fds[2] = {MS_NO_FD, MS_NO_FD};
int eval_out = eval(fds, env, path, parser_out->ast);
(void)eval_out;
- ft_putstr_fd("> ", STDERR_FILENO);
+ print_prompt();
}
if (ret != FTGL_EOF)
return (1);
diff --git a/src/parser/parser.c b/src/parser/parser.c
index a0c76d2..c486c1e 100644
--- a/src/parser/parser.c
+++ b/src/parser/parser.c
@@ -6,7 +6,7 @@
/* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/06/17 18:09:04 by nahaddac #+# #+# */
-/* Updated: 2020/08/28 10:40:03 by charles ### ########.fr */
+/* Updated: 2020/09/09 13:40:49 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -108,24 +108,30 @@ t_parsed *parse_op(t_tok_lst *input)
t_parsed *parse_expr(t_tok_lst *input)
{
+ t_parsed *parsed;
t_parsed *tmp;
t_ast *ast;
if (input->tag & TAG_PARENT_OPEN)
{
- if (!(tmp = parse_op(input->next)) || tmp->syntax_error)
- return (tmp);
- input = tmp->rest;
+ if (!(parsed = parse_op(input->next)) || parsed->syntax_error)
+ return (parsed);
+ input = parsed->rest;
if (input == NULL || !(input->tag & TAG_PARENT_CLOSE))
return (parsed_error("syntax error expected token\n"));
input = input->next;
ast = ast_new(AST_PARENT);
- ast->parent_ast = tmp->ast;
- tmp->ast = ast;
+ ast->parent_ast = parsed->ast;
+ parsed->ast = ast;
while (input != NULL && input->tag & TAG_IS_REDIR)
- parse_redir(input, &tmp->ast->redirs);
- tmp->rest = input;
- return (tmp);
+ {
+ tmp = parse_redir(input, &parsed->ast->redirs);
+ if (tmp == NULL || tmp->syntax_error)
+ return (tmp);
+ input = tmp->rest;
+ }
+ parsed->rest = input;
+ return (parsed);
}
return (parse_cmd(input));
}
diff --git a/src/signal.c b/src/signal.c
index 50e07e7..e40df26 100644
--- a/src/signal.c
+++ b/src/signal.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/07/16 09:16:16 by charles #+# #+# */
-/* Updated: 2020/07/16 09:18:21 by charles ### ########.fr */
+/* Updated: 2020/09/09 14:10:40 by charles ### ########.fr */
/* */
/* ************************************************************************** */
diff --git a/src/utils.c b/src/utils.c
index ce05d7c..d511195 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -6,7 +6,7 @@
/* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/28 11:56:31 by cacharle #+# #+# */
-/* Updated: 2020/08/20 14:45:14 by charles ### ########.fr */
+/* Updated: 2020/09/09 14:05:53 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -91,9 +91,17 @@ bool utils_start_with_valid_identifier(char *name)
return (ret);
}
-// TODO find a way to flush without fflush
-void print_prompt(void)
+void print_prompt(void)
{
- printf("\033[0;32m%s\033[0m$ ", getcwd(NULL, 0));
- fflush(stdout);
+ char cwd[PATH_MAX + 1];
+
+ ft_bzero(cwd, PATH_MAX + 1);
+ if (getcwd(cwd, PATH_MAX) == NULL)
+ {
+ ft_putstr_fd("$ ", STDERR_FILENO);
+ return ;
+ }
+ ft_putstr_fd("\033[0;32m", STDERR_FILENO);
+ ft_putstr_fd(cwd, STDERR_FILENO);
+ ft_putstr_fd("\033[0m$ ", STDERR_FILENO);
}