47 lines
714 B
C
47 lines
714 B
C
#include "minishell.h"
|
|
|
|
static void handle_line(t_shell *sh, char *line)
|
|
{
|
|
int error = 0;
|
|
t_token *toks = NULL;
|
|
t_pipeline *p = NULL;
|
|
|
|
toks = lex_line(line, &error);
|
|
if (error)
|
|
{
|
|
free_tokens(toks);
|
|
return;
|
|
}
|
|
p = parse_tokens(toks, &error);
|
|
free_tokens(toks);
|
|
if (error || !p)
|
|
{
|
|
free_pipeline(p);
|
|
return;
|
|
}
|
|
if (expand_pipeline(p, sh) != 0)
|
|
{
|
|
free_pipeline(p);
|
|
return;
|
|
}
|
|
sh->exit_status = execute_pipeline(p, sh);
|
|
sh->last_status = sh->exit_status;
|
|
free_pipeline(p);
|
|
}
|
|
|
|
void ms_loop(t_shell *sh)
|
|
{
|
|
char *line;
|
|
|
|
while (!sh->exit_requested)
|
|
{
|
|
line = readline(MS_PROMPT);
|
|
if (!line)
|
|
break;
|
|
if (line[0] != '\0')
|
|
add_history(line);
|
|
handle_line(sh, line);
|
|
free(line);
|
|
}
|
|
}
|