Merge branch 'master' into sadjigui

This commit is contained in:
kinou-p 2022-04-09 19:21:54 +02:00
commit 86d4bbcd25
6 changed files with 79 additions and 60 deletions

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/03/09 22:33:49 by apommier #+# #+# */ /* Created: 2022/03/09 22:33:49 by apommier #+# #+# */
/* Updated: 2022/04/09 04:59:53 by apommier ### ########.fr */ /* Updated: 2022/04/09 18:48:25 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -75,7 +75,7 @@ char *get_command(char **exec, char **env);
//free_cmd //free_cmd
void free_cmd(t_cmd *cmd); void free_cmd(t_cmd *cmd);
void exit_shell(t_cmd *cmd, char **env); void exit_shell(t_cmd *cmd);
//redirection.c set redirection and input good //redirection.c set redirection and input good
char *set_redirection(t_s_cmd *cmd, char *line, int index); char *set_redirection(t_s_cmd *cmd, char *line, int index);
@ -91,10 +91,10 @@ void register_env(t_s_cmd *cmd, char *variable);
void ft_env(t_s_cmd *cmd, char **env); void ft_env(t_s_cmd *cmd, char **env);
int find_pwd(t_s_cmd *cmd); int find_pwd(t_s_cmd *cmd);
void init_s_cmd(t_s_cmd *cmd, char **env); void init_s_cmd(t_s_cmd *cmd, char **env);
int tab_len(char **tab); int tab_len(char **tab);
int find_len(char *input, int i, char c); int find_len(char *input, int i, char c);
//void lone_export(t_s_cmd *cmd); void lone_export(t_s_cmd *cmd);
//void find_variable(char *variable, t_s_cmd *cmd); void find_variable(char *variable, t_s_cmd *cmd);
//real builtin //real builtin
void ft_env(t_s_cmd *cmd, char **env); void ft_env(t_s_cmd *cmd, char **env);

View File

@ -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/09 04:47:37 by apommier ### ########.fr */ /* Updated: 2022/04/09 19:19:30 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,7 +14,14 @@
void crtl_c(int num) void crtl_c(int num)
{ {
// close(0); int tmpin;
tmpin = dup(0);
num = 0;
close(0);
//dup2(tmpin, 0);
//close(tmpin);
printf("\n"); printf("\n");
rl_replace_line("", 0); rl_replace_line("", 0);
rl_on_new_line(); rl_on_new_line();
@ -23,47 +30,12 @@ void crtl_c(int num)
void sig_quit(int num) void sig_quit(int num)
{ {
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); //exit(0);
} }
void print_prompt(char **path)
{
char *input;
t_cmd *cmd;
int i;
input = 0;
i = 0;
cmd = 0;
while (1)
{
i = 0;
input = readline("\033[1;31m~$ \033[0m");
if (!input)
exit_shell(cmd, path);
add_history(input);
if (!ft_strcmp("exit", input) && input)
{
free(input);
exit_shell(cmd, path);
}
if (ft_strlen(input) && next_space(input, 0) && input)
{
cmd = set_cmd(input, path);
if (cmd)
{
cmd->err_var = 0;
execute(cmd, path);
path = cmd->env;
free_cmd(cmd);
}
}
free(input);
}
}
char **ft_dup_double(char **env) char **ft_dup_double(char **env)
{ {
char **new_tab; char **new_tab;
@ -83,6 +55,44 @@ char **ft_dup_double(char **env)
return (new_tab); return (new_tab);
} }
void print_prompt(char **path)
{
char *input;
t_cmd *cmd;
int i;
char **swap;
input = 0;
i = 0;
cmd = 0;
while (1)
{
i = 0;
input = readline("\033[1;31m~$ \033[0m");
if (!input)
exit_shell(cmd);
add_history(input);
if (!ft_strcmp("exit", input) && input)
{
free(input);
exit_shell(cmd);
}
if (ft_strlen(input) && next_space(input, 0) && input)
{
cmd = set_cmd(input, path);
if (cmd)
{
cmd->err_var = 0;
execute(cmd, path);
path = ft_dup_double(cmd->env);
free_cmd(cmd);
cmd = 0;
}
}
free(input);
}
}
int main(int ac, char **av, char **path) int main(int ac, char **av, char **path)
{ {
char **env; char **env;

View File

@ -6,18 +6,19 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/03/09 12:33:30 by apommier #+# #+# */ /* Created: 2022/03/09 12:33:30 by apommier #+# #+# */
/* Updated: 2022/04/09 04:48:22 by apommier ### ########.fr */ /* Updated: 2022/04/09 19:19:58 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../includes/minishell.h" #include "../../includes/minishell.h"
void exit_shell(t_cmd *cmd, char **env) void exit_shell(t_cmd *cmd)
{ {
int i; int i;
i = 0; i = 0;
free_double(cmd->env); if (cmd)
free_double(cmd->env);
clear_history(); clear_history();
//print_double_fd(cmd->s_cmds[0]->env, 1); //print_double_fd(cmd->s_cmds[0]->env, 1);
ft_putstr_fd("exit\n", 1); ft_putstr_fd("exit\n", 1);
@ -43,6 +44,7 @@ void free_cmd(t_cmd *cmd)
free(cmd->s_cmds[i]); free(cmd->s_cmds[i]);
i++; i++;
} }
free_double(cmd->env);
free_double(cmd->path); free_double(cmd->path);
free(cmd->s_cmds); free(cmd->s_cmds);
free(cmd); free(cmd);

View File

@ -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/09 04:53:02 by apommier ### ########.fr */ /* Updated: 2022/04/09 18:47:25 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -54,7 +54,7 @@ t_s_cmd *set_s_cmd(char *line, t_cmd *cmd, int index)
return (s_cmd); return (s_cmd);
} }
t_cmd *split_cmd(t_cmd *cmd, char **cmds, char **env) t_cmd *split_cmd(t_cmd *cmd, char **cmds)
{ {
int i; int i;
@ -100,7 +100,7 @@ t_cmd *set_cmd(char *input, char **env)
//cmd->outfile = 0; //cmd->outfile = 0;
//cmd->infile = 0; //cmd->infile = 0;
cmd->nb_s_cmd = double_size(cmds); cmd->nb_s_cmd = double_size(cmds);
cmd = split_cmd(cmd, cmds, env); //split each cmd into args in s_cmd cmd = split_cmd(cmd, cmds); //split each cmd into args in s_cmd
free(cmds); free(cmds);
if (cmd) if (cmd)
{ {

View File

@ -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/06 16:18:01 by apommier ### ########.fr */ /* Updated: 2022/04/09 19:04:35 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -37,7 +37,7 @@ char *cut_str(char *str, int start, int end)
return (str); return (str);
} }
char *get_word(char *str, int start, int end) char *get_word(char *str, int start)
{ {
char *new; char *new;
//char *swap; //char *swap;
@ -87,7 +87,7 @@ char *set_input(char *line, t_s_cmd *cmd, int index)
i++; i++;
while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i]) while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i])
i++; i++;
cmd->infile = get_word(line, word_index, i); cmd->infile = get_word(line, word_index);
line = cut_str(line, index, i); line = cut_str(line, index, i);
return (line); return (line);
} }
@ -108,7 +108,7 @@ char *set_output(char *line, t_s_cmd *cmd, int index)
i++; i++;
while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i]) while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i])
i++; i++;
cmd->outfile = get_word(line, index, i); cmd->outfile = get_word(line, index);
line = cut_str(line, index, i); line = cut_str(line, index, i);
return (line); return (line);
} }
@ -178,7 +178,7 @@ char **add_line(char **tab, char *line)
if (tab) if (tab)
size = double_size(tab); size = double_size(tab);
//printf("size= %d\n", size); //printf("size= %d\n", size);
ret = ft_calloc(size + 1, sizeof(char*)); ret = ft_calloc(size + 2, sizeof(char*));
if (!ret) if (!ret)
{ {
// if (tab) // if (tab)
@ -191,10 +191,10 @@ char **add_line(char **tab, char *line)
ret[i] = ft_strjoin(tab[i], 0); ret[i] = ft_strjoin(tab[i], 0);
i++; i++;
} }
ret[i] = line; ret[i] = ft_strjoin(line, 0);
ret[i + 1] = 0; ret[i + 1] = 0;
//if (tab) if (tab)
// free_double(tab); free_double(tab);
return(ret); return(ret);
} }
@ -216,7 +216,10 @@ char *set_heredoc(int index, char **in)
file_name = ft_strjoin(".heredoc", 0); file_name = ft_strjoin(".heredoc", 0);
fd = open(file_name, O_RDWR | O_CREAT | O_TRUNC, 0666); fd = open(file_name, O_RDWR | O_CREAT | O_TRUNC, 0666);
if (fd > 0) if (fd > 0)
{
print_double_fd(in, fd); print_double_fd(in, fd);
free_double(in);
}
close(fd); close(fd);
return (file_name); return (file_name);
} }
@ -234,15 +237,19 @@ void wait_prompt(t_s_cmd *cmd, int index)
ft_putstr_fd("> ", 0); ft_putstr_fd("> ", 0);
input = get_next_line(0); input = get_next_line(0);
//printf("input = -%s-\n", input); //printf("input = -%s-\n", input);
if (!input)
return ;
input[ft_strlen(input) - 1] = 0; input[ft_strlen(input) - 1] = 0;
//printf("input2 = -%s-\n", input); //printf("input2 = -%s-\n", input);
history = add_line(history, input); if (ft_strcmp(input, cmd->infile))
history = add_line(history, input);
//print_double(history); //print_double(history);
} }
//print_double(history); //print_double(history);
//free_double(history); //free_double(history);
free(input); free(input);
free(cmd->infile); free(cmd->infile);
cmd->infile = 0;//option?
cmd->infile = set_heredoc(index, history); cmd->infile = set_heredoc(index, history);
//cmd->infile = 0; //cmd->infile = 0;
cmd->in_type = 0; cmd->in_type = 0;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/03/11 16:35:37 by apommier #+# #+# */ /* Created: 2022/03/11 16:35:37 by apommier #+# #+# */
/* Updated: 2022/04/09 04:34:47 by apommier ### ########.fr */ /* Updated: 2022/04/09 19:16:39 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */