Merge branch 'master' into sadjigui
This commit is contained in:
commit
c1520f2728
48
srcs/main.c
48
srcs/main.c
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/06 13:27:11 by apommier #+# #+# */
|
/* Created: 2022/03/06 13:27:11 by apommier #+# #+# */
|
||||||
/* Updated: 2022/04/17 19:26:30 by apommier ### ########.fr */
|
/* Updated: 2022/04/18 09:24:25 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -26,7 +26,18 @@ void sig_quit(int num)
|
|||||||
{
|
{
|
||||||
num = 0;
|
num = 0;
|
||||||
ft_putstr_fd("\b \b\b \b", 1);
|
ft_putstr_fd("\b \b\b \b", 1);
|
||||||
printf("quit num= %d\n", num);
|
//printf("quit num= %d\n", num);
|
||||||
|
//exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sig_quit2(int num)
|
||||||
|
{
|
||||||
|
num = 0;
|
||||||
|
//ft_putchar_fd(127, 1);
|
||||||
|
//ft_putchar_fd(127, 1);
|
||||||
|
ft_putstr_fd("\b \b\b \b", 1);
|
||||||
|
ft_putstr_fd("sigquit2\n", 1);
|
||||||
|
//printf("sig_quit2\n");
|
||||||
//exit(0);
|
//exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,11 +64,24 @@ void print_prompt(char **path)
|
|||||||
{
|
{
|
||||||
char *input;
|
char *input;
|
||||||
t_cmd *cmd;
|
t_cmd *cmd;
|
||||||
int err_var;
|
//int tmpin = dup(0);
|
||||||
|
//int tmpout = dup(1);
|
||||||
|
int err_var;
|
||||||
|
struct sigaction test;
|
||||||
|
|
||||||
|
memset(&test, 0, sizeof(test));
|
||||||
|
test.sa_handler = &sig_quit;
|
||||||
|
test.sa_flags = 0;
|
||||||
input = 0;
|
input = 0;
|
||||||
err_var = 0;
|
err_var = 0;
|
||||||
cmd = 0;
|
cmd = 0;
|
||||||
|
if (sigaction(SIGQUIT, &test, 0) == -1)
|
||||||
|
{
|
||||||
|
printf("Minishell: sigaction error\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
/*else
|
||||||
|
printf("sigaction good\n");*/
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
input = readline("\033[1;31m~$ \033[0m");
|
input = readline("\033[1;31m~$ \033[0m");
|
||||||
@ -67,18 +91,14 @@ void print_prompt(char **path)
|
|||||||
exit_shell(cmd, 0);
|
exit_shell(cmd, 0);
|
||||||
}
|
}
|
||||||
add_history(input);
|
add_history(input);
|
||||||
/*if (!ft_strcmp("exit", input) && input)
|
|
||||||
{
|
|
||||||
free(input);
|
|
||||||
exit_shell(cmd);
|
|
||||||
}*/
|
|
||||||
if (ft_strlen(input) && next_space(input, 0) && input)
|
if (ft_strlen(input) && next_space(input, 0) && input)
|
||||||
{
|
{
|
||||||
cmd = set_cmd(input, path, err_var);
|
cmd = set_cmd(input, path, err_var);
|
||||||
//path = ft_dup_double(path);
|
//path = ft_dup_double(path);
|
||||||
free_double(path);
|
|
||||||
if (cmd)
|
if (cmd)
|
||||||
{
|
{
|
||||||
|
free_double(path);
|
||||||
//cmd->err_var = 0;
|
//cmd->err_var = 0;
|
||||||
execute(cmd, cmd->env);
|
execute(cmd, cmd->env);
|
||||||
err_var = cmd->err_var;
|
err_var = cmd->err_var;
|
||||||
@ -88,7 +108,13 @@ void print_prompt(char **path)
|
|||||||
cmd = 0;
|
cmd = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
/*close(0);
|
||||||
|
close(1);
|
||||||
|
dup2(tmpin, 0);
|
||||||
|
dup2(tmpout, 1);*/
|
||||||
ft_putstr_fd("Minishell: error while parsing command\n", 2);
|
ft_putstr_fd("Minishell: error while parsing command\n", 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
free(input);
|
free(input);
|
||||||
}
|
}
|
||||||
@ -97,7 +123,7 @@ void print_prompt(char **path)
|
|||||||
int main(int ac, char **av, char **path)
|
int main(int ac, char **av, char **path)
|
||||||
{
|
{
|
||||||
char **env;
|
char **env;
|
||||||
|
|
||||||
if (!isatty(0))
|
if (!isatty(0))
|
||||||
{
|
{
|
||||||
printf("Not today\n");
|
printf("Not today\n");
|
||||||
@ -112,7 +138,7 @@ int main(int ac, char **av, char **path)
|
|||||||
}
|
}
|
||||||
printf("---MINISHELL START---\n");
|
printf("---MINISHELL START---\n");
|
||||||
signal(SIGINT, crtl_c);
|
signal(SIGINT, crtl_c);
|
||||||
|
//signal(SIGQUIT, sig_quit);
|
||||||
print_prompt(env);
|
print_prompt(env);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/04/02 18:51:31 by apommier #+# #+# */
|
/* Created: 2022/04/02 18:51:31 by apommier #+# #+# */
|
||||||
/* Updated: 2022/04/18 03:16:38 by apommier ### ########.fr */
|
/* Updated: 2022/04/18 06:32:01 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -91,6 +91,11 @@ void exec_cmd(t_cmd *cmd, char **env, int *fdpipe)
|
|||||||
ft_putstr_fd("Minishell: command not found: ", 2);
|
ft_putstr_fd("Minishell: command not found: ", 2);
|
||||||
ft_putstr_fd(cmd->current_s_cmd->cmd + 1, 2);
|
ft_putstr_fd(cmd->current_s_cmd->cmd + 1, 2);
|
||||||
ft_putstr_fd("\n", 2);
|
ft_putstr_fd("\n", 2);
|
||||||
|
close(0);
|
||||||
|
close(1);
|
||||||
|
close(cmd->tmpin);
|
||||||
|
close(cmd->tmpout);
|
||||||
|
free_cmd(cmd);
|
||||||
exit(127);
|
exit(127);
|
||||||
}
|
}
|
||||||
if (-1 == execve(cmd->current_s_cmd->cmd, cmd->current_s_cmd->args, env))
|
if (-1 == execve(cmd->current_s_cmd->cmd, cmd->current_s_cmd->args, env))
|
||||||
@ -138,8 +143,8 @@ void execute(t_cmd *cmd, char **env)
|
|||||||
fdin = dup(tmpin);
|
fdin = dup(tmpin);
|
||||||
while(cmd->current_s_cmd)
|
while(cmd->current_s_cmd)
|
||||||
{
|
{
|
||||||
if (i > 0 )
|
//if (i != 0)
|
||||||
close(fdout);
|
// close(fdout);
|
||||||
cmd->current_s_cmd->child = 1;
|
cmd->current_s_cmd->child = 1;
|
||||||
fdout = -1;
|
fdout = -1;
|
||||||
if (i > 0 && cmd->current_s_cmd->infile)
|
if (i > 0 && cmd->current_s_cmd->infile)
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/08 15:19:42 by apommier #+# #+# */
|
/* Created: 2022/03/08 15:19:42 by apommier #+# #+# */
|
||||||
/* Updated: 2022/04/17 02:08:41 by apommier ### ########.fr */
|
/* Updated: 2022/04/18 13:22:46 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -33,7 +33,10 @@ t_s_cmd *set_s_cmd(char *line, int index)
|
|||||||
//printf("before redirect\n");
|
//printf("before redirect\n");
|
||||||
line = set_redirection(s_cmd, line, index);//SET REDIRECTION
|
line = set_redirection(s_cmd, line, index);//SET REDIRECTION
|
||||||
if (!line)
|
if (!line)
|
||||||
|
{
|
||||||
|
free(s_cmd);
|
||||||
return (0);
|
return (0);
|
||||||
|
}
|
||||||
split_line = ft_split_with_quote(line, ' ');
|
split_line = ft_split_with_quote(line, ' ');
|
||||||
//parse_quote(cmd);
|
//parse_quote(cmd);
|
||||||
//print_double_fd(split_line, 0);
|
//print_double_fd(split_line, 0);
|
||||||
@ -69,6 +72,7 @@ t_cmd *split_cmd(t_cmd *cmd, char **cmds)
|
|||||||
cmd->s_cmds[i] = set_s_cmd(cmds[i], i);
|
cmd->s_cmds[i] = set_s_cmd(cmds[i], i);
|
||||||
if (!cmd->s_cmds[i])
|
if (!cmd->s_cmds[i])
|
||||||
{
|
{
|
||||||
|
printf("no cmd in splitcmd\n");
|
||||||
free_cmd(cmd);
|
free_cmd(cmd);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -126,8 +130,11 @@ t_cmd *set_cmd(char *input, char **env, int nb)
|
|||||||
cmd = split_cmd(cmd, cmds); //split each cmd into args in s_cmd
|
cmd = split_cmd(cmd, cmds); //split each cmd into args in s_cmd
|
||||||
//printf("end split cdm\n");
|
//printf("end split cdm\n");
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
//free_cmd(cmd);
|
{
|
||||||
|
free(cmds);
|
||||||
|
//printf("no cmd\n");
|
||||||
return (0);
|
return (0);
|
||||||
|
}
|
||||||
parse_quote(cmd);
|
parse_quote(cmd);
|
||||||
free(cmds);
|
free(cmds);
|
||||||
if (cmd)
|
if (cmd)
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/04/09 23:58:21 by apommier #+# #+# */
|
/* Created: 2022/04/09 23:58:21 by apommier #+# #+# */
|
||||||
/* Updated: 2022/04/16 13:47:49 by apommier ### ########.fr */
|
/* Updated: 2022/04/18 06:43:23 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -141,23 +141,24 @@ char *change_var(t_cmd *big_cmd, char *cmd, int *index)
|
|||||||
while (cmd[i] && (ft_isalnum(cmd[i]) || cmd[i] == '_' || cmd[i] == '?'))
|
while (cmd[i] && (ft_isalnum(cmd[i]) || cmd[i] == '_' || cmd[i] == '?'))
|
||||||
i++;
|
i++;
|
||||||
swap = ft_substr(cmd, *index + 1, i - *index - 1);
|
swap = ft_substr(cmd, *index + 1, i - *index - 1);
|
||||||
//printf("swap= -%s-\n", swap);
|
|
||||||
var = get_var(big_cmd, swap);
|
var = get_var(big_cmd, swap);
|
||||||
//printf("var -%s-\n", var);
|
free(swap);
|
||||||
swap2 = ft_strdup(cmd + i);
|
swap2 = ft_strdup(cmd + i);
|
||||||
cmd[*index] = 0;
|
cmd[*index] = 0;
|
||||||
ret = ft_strjoin(cmd, var);
|
ret = ft_strjoin(cmd, var);
|
||||||
|
free(cmd);
|
||||||
*index += ft_strlen(var) - 1;
|
*index += ft_strlen(var) - 1;
|
||||||
free(var);
|
free(var);
|
||||||
var = ret;
|
var = ret;
|
||||||
ret = ft_strjoin(ret, swap2);
|
ret = ft_strjoin(ret, swap2);
|
||||||
//printf("change_var -%s-\n", ret);
|
free(swap2);
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *set_var(t_cmd *big_cmd, char *cmd)
|
char *set_var(t_cmd *big_cmd, char *cmd)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
char *del;
|
||||||
|
|
||||||
//printf("set_var\n");
|
//printf("set_var\n");
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -192,7 +193,9 @@ char *set_var(t_cmd *big_cmd, char *cmd)
|
|||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
del = cmd;
|
||||||
cmd = del_char(cmd, &i);
|
cmd = del_char(cmd, &i);
|
||||||
|
free(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
//i++;
|
//i++;
|
||||||
@ -210,14 +213,18 @@ int parse_quote(t_cmd *cmd)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
char *swap;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (cmd->s_cmds[i])
|
while (cmd->s_cmds[i])
|
||||||
{
|
{
|
||||||
j = -1;
|
j = -1;
|
||||||
while (cmd->s_cmds[i]->args[++j])
|
while (cmd->s_cmds[i]->args[++j])
|
||||||
{
|
{
|
||||||
|
swap = cmd->s_cmds[i]->args[j];
|
||||||
cmd->s_cmds[i]->args[j] = set_var(cmd, cmd->s_cmds[i]->args[j]);
|
cmd->s_cmds[i]->args[j] = set_var(cmd, cmd->s_cmds[i]->args[j]);
|
||||||
|
if (cmd->s_cmds[i]->args[j] != swap)
|
||||||
|
free(swap);
|
||||||
}
|
}
|
||||||
//printf("parse quote -%s-\n", cmd->s_cmds[i]->args[0]);
|
//printf("parse quote -%s-\n", cmd->s_cmds[i]->args[0]);
|
||||||
if (!is_builtin(cmd->s_cmds[i]->args[0]))
|
if (!is_builtin(cmd->s_cmds[i]->args[0]))
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/09 15:18:58 by apommier #+# #+# */
|
/* Created: 2022/03/09 15:18:58 by apommier #+# #+# */
|
||||||
/* Updated: 2022/04/17 10:25:03 by apommier ### ########.fr */
|
/* Updated: 2022/04/18 12:50:33 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -233,9 +233,10 @@ void sig_heredoc(int num)
|
|||||||
num = 0;
|
num = 0;
|
||||||
struct sigaction base;
|
struct sigaction base;
|
||||||
|
|
||||||
|
memset(&base, 0, sizeof(base));
|
||||||
base.sa_handler = &crtl_c;
|
base.sa_handler = &crtl_c;
|
||||||
base.sa_flags = 0;
|
base.sa_flags = 0;
|
||||||
close(1);
|
//close(1);
|
||||||
//printf("sig_heredoc\n");
|
//printf("sig_heredoc\n");
|
||||||
if (sigaction(SIGINT, &base, 0) == -1)
|
if (sigaction(SIGINT, &base, 0) == -1)
|
||||||
{
|
{
|
||||||
@ -251,9 +252,10 @@ int wait_prompt(t_s_cmd *cmd, int index)
|
|||||||
char **history;
|
char **history;
|
||||||
char *in;
|
char *in;
|
||||||
char *dup;
|
char *dup;
|
||||||
|
char *del;
|
||||||
struct sigaction test;
|
struct sigaction test;
|
||||||
|
|
||||||
|
memset(&test, 0, sizeof(test));
|
||||||
test.sa_handler = &sig_heredoc;
|
test.sa_handler = &sig_heredoc;
|
||||||
test.sa_flags = 0;
|
test.sa_flags = 0;
|
||||||
|
|
||||||
@ -273,21 +275,32 @@ int wait_prompt(t_s_cmd *cmd, int index)
|
|||||||
while (i == 0 || (input && ft_strlen(input) && ft_strcmp(input, in)))
|
while (i == 0 || (input && ft_strlen(input) && ft_strcmp(input, in)))
|
||||||
{
|
{
|
||||||
i = 1;
|
i = 1;
|
||||||
|
if (input)
|
||||||
|
free(input);
|
||||||
ft_putstr_fd("> ", 0);
|
ft_putstr_fd("> ", 0);
|
||||||
input = get_next_line(0);
|
input = get_next_line(0);
|
||||||
//input = readline("");
|
//input = readline("");
|
||||||
//printf("input= -%s-", input);
|
//printf("input= -%s-", input);
|
||||||
if (!input)
|
if (!input)
|
||||||
|
{
|
||||||
|
free(in);
|
||||||
|
free_double(history);
|
||||||
return (0);
|
return (0);
|
||||||
|
}
|
||||||
//input[ft_strlen(input) - 1] = 0;
|
//input[ft_strlen(input) - 1] = 0;
|
||||||
if (ft_strcmp(input, in))
|
if (ft_strcmp(input, in))
|
||||||
{
|
{
|
||||||
dup = ft_strdup(input);
|
dup = ft_strdup(input);
|
||||||
dup[ft_strlen(input) - 1] = 0;
|
dup[ft_strlen(input) - 1] = 0;
|
||||||
|
del = dup;
|
||||||
dup = set_var(cmd->big_cmd, dup);
|
dup = set_var(cmd->big_cmd, dup);
|
||||||
history = add_line(history, dup);
|
history = add_line(history, dup);
|
||||||
|
if (dup != del)
|
||||||
|
free(del);
|
||||||
|
free(dup);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free(in);
|
||||||
free(input);
|
free(input);
|
||||||
//free(cmd->infile);
|
//free(cmd->infile);
|
||||||
//cmd->infile = 0;//option?
|
//cmd->infile = 0;//option?
|
||||||
@ -316,7 +329,11 @@ char *set_redirection(t_s_cmd *cmd, char *line, int index)
|
|||||||
if (cmd->in_type == 1)
|
if (cmd->in_type == 1)
|
||||||
{
|
{
|
||||||
if (!wait_prompt(cmd, index))
|
if (!wait_prompt(cmd, index))
|
||||||
|
{
|
||||||
|
free(line);
|
||||||
|
//printf("no waitpromt\n");
|
||||||
return (0);
|
return (0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user