main refactoring
This commit is contained in:
parent
1c8148af3f
commit
6efd4c7e1f
16 changed files with 90 additions and 63 deletions
|
|
@ -266,6 +266,7 @@ line-editing/resize.c\
|
||||||
main/data_exit.c\
|
main/data_exit.c\
|
||||||
main/data_init.c\
|
main/data_init.c\
|
||||||
main/data_singleton.c\
|
main/data_singleton.c\
|
||||||
|
main/error_msg.c\
|
||||||
main/ft_putast.c\
|
main/ft_putast.c\
|
||||||
main/instruction_free.c\
|
main/instruction_free.c\
|
||||||
main/main.c\
|
main/main.c\
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/14 22:59:57 by jhalford #+# #+# */
|
/* Created: 2017/03/14 22:59:57 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/15 21:55:22 by jhalford ### ########.fr */
|
/* Updated: 2017/03/16 14:19:03 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -19,11 +19,11 @@
|
||||||
|
|
||||||
# define BT_EXPORT_LP (1 << 0)
|
# define BT_EXPORT_LP (1 << 0)
|
||||||
|
|
||||||
# define MATHERR_0 "{red}math : invalid number of arguments{eoc}\n"
|
# define MATHERR_0 "math : invalid number of arguments\n"
|
||||||
# define MATHERR_1 "{red}math : invalid variable name{eoc}\n"
|
# define MATHERR_1 "math : invalid variable name\n"
|
||||||
# define MATHERR_2 "{red}math : invalid operator{eoc}\n"
|
# define MATHERR_2 "math : invalid operator\n"
|
||||||
# define MATHERR_3 "{red}math : invalid operand{eoc}\n"
|
# define MATHERR_3 "math : invalid operand\n"
|
||||||
# define MATHERR_4 "{red}math : division by 0{eoc}\n"
|
# define MATHERR_4 "math : division by 0\n"
|
||||||
|
|
||||||
t_execf *is_builtin(t_process *p);
|
t_execf *is_builtin(t_process *p);
|
||||||
int builtin_export(const char *path, char *const av[], char *const envp[]);
|
int builtin_export(const char *path, char *const av[], char *const envp[]);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/23 10:35:44 by gwojda #+# #+# */
|
/* Created: 2017/01/23 10:35:44 by gwojda #+# #+# */
|
||||||
/* Updated: 2017/03/16 12:10:24 by gwojda ### ########.fr */
|
/* Updated: 2017/03/16 13:55:48 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -155,7 +155,7 @@ void ft_c(void);
|
||||||
void ft_x(void);
|
void ft_x(void);
|
||||||
void ft_v(void);
|
void ft_v(void);
|
||||||
void ft_read_it(int input, size_t *pos, char **str);
|
void ft_read_it(int input, size_t *pos, char **str);
|
||||||
int readline(int fd, int prompt, char **input);
|
int readline(int prompt, char **input);
|
||||||
int ft_completion(int ret);
|
int ft_completion(int ret);
|
||||||
|
|
||||||
struct termios *ft_save_termios(int save);
|
struct termios *ft_save_termios(int save);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */
|
/* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/15 16:35:42 by gwojda ### ########.fr */
|
/* Updated: 2017/03/16 14:15:02 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -51,10 +51,11 @@ int shell_init(int ac, char **av);
|
||||||
void shell_exit(void);
|
void shell_exit(void);
|
||||||
int data_init(int ac, char **av);
|
int data_init(int ac, char **av);
|
||||||
void data_exit(void);
|
void data_exit(void);
|
||||||
|
int error_msg(char *msg);
|
||||||
|
|
||||||
int instruction_free(t_list **token, t_parser *parser,
|
int instruction_free(
|
||||||
t_btree **ast);
|
t_list **token, t_btree **ast, t_lexer *lexer, t_parser *parser);
|
||||||
void content_free(void *data, size_t content_size);
|
/* void content_free(void *data, size_t content_size); */
|
||||||
|
|
||||||
char *ft_putast(void *node);
|
char *ft_putast(void *node);
|
||||||
void ft_putast2(void *node);
|
void ft_putast2(void *node);
|
||||||
|
|
|
||||||
|
|
@ -59,10 +59,9 @@ struct s_errormatch
|
||||||
char *error;
|
char *error;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern t_aggrematch g_aggrematch[];
|
/* extern t_aggrematch g_aggrematch[]; */
|
||||||
extern t_prodmatch g_prodmatch[];
|
/* extern t_prodmatch g_prodmatch[]; */
|
||||||
extern t_stackmatch g_stackmatch[];
|
/* extern t_stackmatch g_stackmatch[]; */
|
||||||
extern t_errormatch g_errormatch[];
|
|
||||||
|
|
||||||
void parser_init(t_parser *parser);
|
void parser_init(t_parser *parser);
|
||||||
int ft_parse(t_btree **ast, t_list **token, t_parser *parser);
|
int ft_parse(t_btree **ast, t_list **token, t_parser *parser);
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 0c1dbf5b89c99612c49d6fd63dd25d0310bad3d9
|
Subproject commit 04b8d5cd090e86b0f9d8160b01e49d43666deddf
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 11:57:53 by jhalford #+# #+# */
|
/* Created: 2016/12/03 11:57:53 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/15 20:55:40 by ariard ### ########.fr */
|
/* Updated: 2017/03/16 14:17:57 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 10:58:49 by ariard #+# #+# */
|
/* Created: 2017/03/07 10:58:49 by ariard #+# #+# */
|
||||||
/* Updated: 2017/03/15 21:02:59 by ariard ### ########.fr */
|
/* Updated: 2017/03/16 14:18:05 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@ static int get_value(char **var, char **value)
|
||||||
char *temp;
|
char *temp;
|
||||||
|
|
||||||
if (!word_is_assignment(var))
|
if (!word_is_assignment(var))
|
||||||
return (ft_error_message(MATHERR_1));
|
return (error_msg(MATHERR_1));
|
||||||
temp = ft_sstrstr(data_singleton()->local_var, *var);
|
temp = ft_sstrstr(data_singleton()->local_var, *var);
|
||||||
if (temp)
|
if (temp)
|
||||||
{
|
{
|
||||||
|
|
@ -54,7 +54,7 @@ static int do_math(char **value, char *operator, char *operand)
|
||||||
else
|
else
|
||||||
ope2 = 0;
|
ope2 = 0;
|
||||||
if ((operator[0] == '/' || operator[0] == '%') && ope2 == 0)
|
if ((operator[0] == '/' || operator[0] == '%') && ope2 == 0)
|
||||||
return (ft_error_message(MATHERR_4));
|
return (error_msg(MATHERR_4));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ope1 = (operator[0] == '+') ? ope1 + ope2 : ope1;
|
ope1 = (operator[0] == '+') ? ope1 + ope2 : ope1;
|
||||||
|
|
@ -78,7 +78,7 @@ int builtin_math(const char *path, char *const av[], char *const envp[])
|
||||||
(void)path;
|
(void)path;
|
||||||
(void)envp;
|
(void)envp;
|
||||||
if (!av || !av[1] || !av[2] || !av[3] || av[4])
|
if (!av || !av[1] || !av[2] || !av[3] || av[4])
|
||||||
return (ft_error_message(MATHERR_0));
|
return (error_msg(MATHERR_0));
|
||||||
init_math(&var, &value, &operator, &operand);
|
init_math(&var, &value, &operator, &operand);
|
||||||
var = av[1];
|
var = av[1];
|
||||||
if (get_value(&var, &value) == -1)
|
if (get_value(&var, &value) == -1)
|
||||||
|
|
@ -86,10 +86,10 @@ int builtin_math(const char *path, char *const av[], char *const envp[])
|
||||||
operator = av[2];
|
operator = av[2];
|
||||||
if (!(ft_strlen(operator) == 1 && (operator[0] == '+' || operator[0] == '-'
|
if (!(ft_strlen(operator) == 1 && (operator[0] == '+' || operator[0] == '-'
|
||||||
|| operator[0] == '/' || operator[0] == '*' || operator[0] == '%')))
|
|| operator[0] == '/' || operator[0] == '*' || operator[0] == '%')))
|
||||||
return (ft_error_message(MATHERR_2));
|
return (error_msg(MATHERR_2));
|
||||||
operand = av[3];
|
operand = av[3];
|
||||||
if (!ft_stris(operand, &ft_isdigit))
|
if (!ft_stris(operand, &ft_isdigit))
|
||||||
return (ft_error_message(MATHERR_3));
|
return (error_msg(MATHERR_3));
|
||||||
if (do_math(&value, operator, operand) == -1)
|
if (do_math(&value, operator, operand) == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
builtin_setenv("setenv", (char *[]){"local", var, value, 0}, data_singleton()->local_var);
|
builtin_setenv("setenv", (char *[]){"local", var, value, 0}, data_singleton()->local_var);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/29 16:04:18 by jhalford #+# #+# */
|
/* Created: 2016/11/29 16:04:18 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/15 18:06:06 by jhalford ### ########.fr */
|
/* Updated: 2017/03/16 14:01:26 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 17:48:10 by jhalford #+# #+# */
|
/* Created: 2016/12/13 17:48:10 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/15 18:11:49 by jhalford ### ########.fr */
|
/* Updated: 2017/03/16 13:54:18 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/02 15:17:28 by gwojda #+# #+# */
|
/* Created: 2017/02/02 15:17:28 by gwojda #+# #+# */
|
||||||
/* Updated: 2017/03/16 10:17:13 by gwojda ### ########.fr */
|
/* Updated: 2017/03/16 14:05:00 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,18 +6,18 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */
|
/* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */
|
||||||
/* Updated: 2017/03/15 03:52:15 by wescande ### ########.fr */
|
/* Updated: 2017/03/16 14:06:39 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
|
|
||||||
int readline(int fd, int prompt, char **input)
|
int readline(int prompt, char **input)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!SH_IS_INTERACTIVE(data_singleton()->opts))
|
if (!SH_IS_INTERACTIVE(data_singleton()->opts))
|
||||||
return ((ret = get_next_line(fd, input)) >= 0 ? !ret : ret);
|
return ((ret = get_next_line(STDIN, input)) >= 0 ? !ret : ret);
|
||||||
readline_init(prompt);
|
readline_init(prompt);
|
||||||
*input = ft_read_stdin();
|
*input = ft_read_stdin();
|
||||||
if (STR)
|
if (STR)
|
||||||
|
|
|
||||||
19
42sh/src/main/error_msg.c
Normal file
19
42sh/src/main/error_msg.c
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* error_msg.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2017/03/16 14:14:47 by jhalford #+# #+# */
|
||||||
|
/* Updated: 2017/03/16 14:17:29 by jhalford ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "minishell.h"
|
||||||
|
|
||||||
|
int error_msg(char *msg)
|
||||||
|
{
|
||||||
|
ft_dprintf(2, "{red}%s{eoc}\n", msg);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
@ -6,13 +6,13 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/15 15:54:59 by gwojda #+# #+# */
|
/* Created: 2017/03/15 15:54:59 by gwojda #+# #+# */
|
||||||
/* Updated: 2017/03/15 16:49:10 by gwojda ### ########.fr */
|
/* Updated: 2017/03/16 14:13:33 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
|
|
||||||
int instruction_free(t_list **token, t_parser *parser, t_btree **ast)
|
int instruction_free(t_list **token, t_btree **ast, t_lexer *lexer, t_parser *parser)
|
||||||
{
|
{
|
||||||
ft_lstdel(token, &token_free);
|
ft_lstdel(token, &token_free);
|
||||||
token = NULL;
|
token = NULL;
|
||||||
|
|
@ -20,6 +20,7 @@ int instruction_free(t_list **token, t_parser *parser, t_btree **ast)
|
||||||
btree_del(ast, &ft_lst_cfree);
|
btree_del(ast, &ft_lst_cfree);
|
||||||
ft_lstdel(&data_singleton()->heredoc_queue, &redir_free);
|
ft_lstdel(&data_singleton()->heredoc_queue, &redir_free);
|
||||||
ft_lstdel(&data_singleton()->exec.op_stack, &ft_lst_cfree);
|
ft_lstdel(&data_singleton()->exec.op_stack, &ft_lst_cfree);
|
||||||
|
ft_strdel(&lexer->str);
|
||||||
free(parser->new_sym);
|
free(parser->new_sym);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,35 +6,30 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/15 17:55:12 by jhalford ### ########.fr */
|
/* Updated: 2017/03/16 14:10:44 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
|
|
||||||
int handle_instruction(int fd)
|
static int handle_instruction( t_list **token,
|
||||||
|
t_btree **ast,
|
||||||
|
t_lexer lexer,
|
||||||
|
t_parser parser)
|
||||||
{
|
{
|
||||||
t_list *token;
|
|
||||||
t_list *ltoken;
|
t_list *ltoken;
|
||||||
t_lexer lexer;
|
|
||||||
t_parser parser;
|
|
||||||
t_btree *ast;
|
|
||||||
char *str;
|
char *str;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
lexer_init(&lexer);
|
|
||||||
parser_init(&parser);
|
|
||||||
token = NULL;
|
|
||||||
ast = NULL;
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if ((ret = readline(fd, get_lexer_stack(lexer) ||
|
if ((ret = readline(get_lexer_stack(lexer) ||
|
||||||
parser.state == UNDEFINED || lexer.state == HEREDOC, &str)))
|
parser.state == UNDEFINED || lexer.state == HEREDOC, &str)))
|
||||||
{
|
{
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
return (parser.state == UNDEFINED ? error_eof(&token,
|
return (parser.state == UNDEFINED ? error_eof(token,
|
||||||
&parser, &ast) : 1);
|
&parser, ast) : 1);
|
||||||
}
|
}
|
||||||
if (lexer.state == HEREDOC)
|
if (lexer.state == HEREDOC)
|
||||||
{
|
{
|
||||||
|
|
@ -44,21 +39,21 @@ int handle_instruction(int fd)
|
||||||
ft_strappend(&lexer.str, str);
|
ft_strappend(&lexer.str, str);
|
||||||
if (get_lexer_stack(lexer) == BACKSLASH)
|
if (get_lexer_stack(lexer) == BACKSLASH)
|
||||||
pop(&lexer.stack);
|
pop(&lexer.stack);
|
||||||
ltoken = ft_lstlast(token);
|
ltoken = ft_lstlast(*token);
|
||||||
if (lexer_lex(token ? <oken : &token, &lexer))
|
if (lexer_lex(token ? <oken : token, &lexer))
|
||||||
return (1);
|
return (1);
|
||||||
if (get_lexer_stack(lexer) > 2)
|
if (get_lexer_stack(lexer) > 2)
|
||||||
continue ;
|
continue ;
|
||||||
lexer.state = DEFAULT;
|
lexer.state = DEFAULT;
|
||||||
if (get_reserved_words(&token))
|
if (get_reserved_words(token))
|
||||||
return (1);
|
return (1);
|
||||||
token_print(token);
|
token_print(*token);
|
||||||
if (insert_newline(&token))
|
if (insert_newline(token))
|
||||||
return (1);
|
return (1);
|
||||||
if (ft_parse(&ast, &token, &parser))
|
if (ft_parse(ast, token, &parser))
|
||||||
continue ;
|
continue ;
|
||||||
if (parser.state == ERROR)
|
if (parser.state == ERROR)
|
||||||
error_syntax(&token, &parser, &ast);
|
error_syntax(token, &parser, ast);
|
||||||
lexer.state = data_singleton()->heredoc_queue ? HEREDOC : 0;
|
lexer.state = data_singleton()->heredoc_queue ? HEREDOC : 0;
|
||||||
if (lexer.state)
|
if (lexer.state)
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -67,16 +62,14 @@ int handle_instruction(int fd)
|
||||||
else if (parser.state == ERROR && SH_IS_INTERACTIVE(data_singleton()->opts))
|
else if (parser.state == ERROR && SH_IS_INTERACTIVE(data_singleton()->opts))
|
||||||
{
|
{
|
||||||
ft_add_str_in_history(lexer.str);
|
ft_add_str_in_history(lexer.str);
|
||||||
return (error_syntax(&token, &parser, &ast));
|
return (error_syntax(token, &parser, ast));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* btree_print(STDBUG, ast, &ft_putast); */
|
/* btree_print(STDBUG, ast, &ft_putast); */
|
||||||
if (ft_exec(&ast))
|
if (ft_exec(ast))
|
||||||
return (2);
|
return (2);
|
||||||
instruction_free(&token, &parser, &ast);
|
|
||||||
if (SH_IS_INTERACTIVE(data_singleton()->opts) && *lexer.str)
|
if (SH_IS_INTERACTIVE(data_singleton()->opts) && *lexer.str)
|
||||||
ft_add_str_in_history(lexer.str);
|
ft_add_str_in_history(lexer.str);
|
||||||
ft_strdel(&lexer.str);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -118,6 +111,10 @@ int get_input_fd(char **av)
|
||||||
int main(int ac, char **av)
|
int main(int ac, char **av)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
t_list *token;
|
||||||
|
t_lexer lexer;
|
||||||
|
t_parser parser;
|
||||||
|
t_btree *ast;
|
||||||
|
|
||||||
g_argv = av;
|
g_argv = av;
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
|
|
@ -126,9 +123,16 @@ int main(int ac, char **av)
|
||||||
return (1);
|
return (1);
|
||||||
if ((fd = get_input_fd(av)) < 0)
|
if ((fd = get_input_fd(av)) < 0)
|
||||||
return (1);
|
return (1);
|
||||||
|
dup2_close(fd, STDIN);
|
||||||
|
lexer_init(&lexer);
|
||||||
|
parser_init(&parser);
|
||||||
|
token = NULL;
|
||||||
|
ast = NULL;
|
||||||
DG("JOBC is %s, fd=[%i]", SH_HAS_JOBC(data_singleton()->opts)?"ON":"OFF", fd);
|
DG("JOBC is %s, fd=[%i]", SH_HAS_JOBC(data_singleton()->opts)?"ON":"OFF", fd);
|
||||||
while (handle_instruction(fd) == 0)
|
while (handle_instruction(&token, &ast, lexer, parser) == 0)
|
||||||
;
|
{
|
||||||
|
instruction_free(&token, &ast, &lexer, &parser);
|
||||||
|
}
|
||||||
builtin_exit(NULL, NULL, NULL);
|
builtin_exit(NULL, NULL, NULL);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 20:15:35 by ariard #+# #+# */
|
/* Created: 2017/02/09 20:15:35 by ariard #+# #+# */
|
||||||
/* Updated: 2017/03/15 04:12:31 by wescande ### ########.fr */
|
/* Updated: 2017/03/16 14:12:14 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
|
|
||||||
t_errormatch g_errormatch[] =
|
static t_errormatch g_errormatch[] =
|
||||||
{
|
{
|
||||||
{TK_NEWLINE, "newline"},
|
{TK_NEWLINE, "newline"},
|
||||||
{TK_SEMI, ";"},
|
{TK_SEMI, ";"},
|
||||||
|
|
@ -57,6 +57,8 @@ int error_syntax(t_list **lst, t_parser *parser,
|
||||||
t_token *token;
|
t_token *token;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
(void)parser;
|
||||||
|
(void)ast;
|
||||||
if (!*lst)
|
if (!*lst)
|
||||||
return (0);
|
return (0);
|
||||||
token = (*lst)->content;
|
token = (*lst)->content;
|
||||||
|
|
@ -67,19 +69,19 @@ int error_syntax(t_list **lst, t_parser *parser,
|
||||||
{
|
{
|
||||||
ft_dprintf(2, "syntax error near unexpected token « %s »\n",
|
ft_dprintf(2, "syntax error near unexpected token « %s »\n",
|
||||||
g_errormatch[i].error);
|
g_errormatch[i].error);
|
||||||
instruction_free(lst, parser, ast);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
ft_dprintf(2, "syntax error near unexpected token « %s »\n", token->data);
|
ft_dprintf(2, "syntax error near unexpected token « %s »\n", token->data);
|
||||||
instruction_free(lst, parser, ast);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int error_eof(t_list **lst, t_parser *parser, t_btree **ast)
|
int error_eof(t_list **lst, t_parser *parser, t_btree **ast)
|
||||||
{
|
{
|
||||||
|
(void)lst;
|
||||||
|
(void)parser;
|
||||||
|
(void)ast;
|
||||||
ft_putstr_fd("syntax error near unexpected EOF", 2);
|
ft_putstr_fd("syntax error near unexpected EOF", 2);
|
||||||
instruction_free(lst, parser, ast);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue