diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 22 | ||||
| -rw-r--r-- | src/parser/parser.c | 24 | ||||
| -rw-r--r-- | src/signal.c | 2 | ||||
| -rw-r--r-- | src/utils.c | 18 |
4 files changed, 38 insertions, 28 deletions
@@ -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); } |
