did some slight norming (200 lines of norminette and i'm not even done yet... :c)
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/05 18:20:21 by marde-vr #+# #+# */
|
/* Created: 2024/03/05 18:20:21 by marde-vr #+# #+# */
|
||||||
/* Updated: 2024/04/22 13:40:49 by marde-vr ### ########.fr */
|
/* Updated: 2024/04/22 19:39:03 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ int cmd_is_builtin(t_msh *msh, char *cmd_token)
|
|||||||
if (!cmd_token)
|
if (!cmd_token)
|
||||||
return (0);
|
return (0);
|
||||||
else if ((msh->in_type == PIPE || msh->out_type == PIPE)
|
else if ((msh->in_type == PIPE || msh->out_type == PIPE)
|
||||||
&& cmd_is_forkable_builtin(cmd_token))
|
&& cmd_is_forkable_builtin(cmd_token))
|
||||||
return (1);
|
return (1);
|
||||||
else if (!ft_strcmp(cmd_token, "cd"))
|
else if (!ft_strcmp(cmd_token, "cd"))
|
||||||
g_return_code = cd(msh->tokens);
|
g_return_code = cd(msh->tokens);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/05 18:22:15 by marde-vr #+# #+# */
|
/* Created: 2024/03/05 18:22:15 by marde-vr #+# #+# */
|
||||||
/* Updated: 2024/04/19 14:42:50 by tomoron ### ########.fr */
|
/* Updated: 2024/04/22 19:32:11 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ void remove_command_from_msh(t_msh *msh)
|
|||||||
while (msh->cmds && !is_cmd_type(msh->cmds))
|
while (msh->cmds && !is_cmd_type(msh->cmds))
|
||||||
msh->cmds = msh->cmds->next;
|
msh->cmds = msh->cmds->next;
|
||||||
while (msh->cmds && (is_cmd_type(msh->cmds) || is_input_type(msh->cmds)
|
while (msh->cmds && (is_cmd_type(msh->cmds) || is_input_type(msh->cmds)
|
||||||
|| is_output_type(msh->cmds)))
|
|| is_output_type(msh->cmds)))
|
||||||
msh->cmds = msh->cmds->next;
|
msh->cmds = msh->cmds->next;
|
||||||
tmp = msh->cmds;
|
tmp = msh->cmds;
|
||||||
while (tmp && !is_cmd_type(tmp))
|
while (tmp && !is_cmd_type(tmp))
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/28 13:50:14 by tomoron #+# #+# */
|
/* Created: 2024/03/28 13:50:14 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/22 19:18:52 by marde-vr ### ########.fr */
|
/* Updated: 2024/04/22 19:55:41 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -26,28 +26,22 @@ void get_redirections(t_msh *msh, t_cmd *cmds)
|
|||||||
if (!get_out_type(msh, cmds))
|
if (!get_out_type(msh, cmds))
|
||||||
get_in_type(msh, cmds);
|
get_in_type(msh, cmds);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
printf("in_type:");
|
|
||||||
print_cmd_type(msh->in_type, 0);
|
|
||||||
printf("\nout_type:");
|
|
||||||
print_cmd_type(msh->out_type, 0);
|
|
||||||
printf("\n");*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
t_cmd *get_next_command(t_cmd *cmd)
|
t_cmd *get_next_command(t_cmd *cmd)
|
||||||
{
|
{
|
||||||
while(cmd)
|
while (cmd)
|
||||||
{
|
{
|
||||||
while(cmd && !is_operand_type(cmd))
|
while (cmd && !is_operand_type(cmd))
|
||||||
cmd = cmd->next;
|
cmd = cmd->next;
|
||||||
if(cmd && cmd->cmd_type == AND && !g_return_code)
|
if (cmd && cmd->cmd_type == AND && !g_return_code)
|
||||||
return(cmd->next);
|
return (cmd->next);
|
||||||
if(cmd && cmd->cmd_type == OR && g_return_code)
|
if (cmd && cmd->cmd_type == OR && g_return_code)
|
||||||
return(cmd->next);
|
return (cmd->next);
|
||||||
if(cmd)
|
if (cmd)
|
||||||
cmd = cmd->next;
|
cmd = cmd->next;
|
||||||
}
|
}
|
||||||
return(0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void exec_command_bonus(t_msh *msh, char *cmd_str)
|
void exec_command_bonus(t_msh *msh, char *cmd_str)
|
||||||
@ -55,26 +49,21 @@ void exec_command_bonus(t_msh *msh, char *cmd_str)
|
|||||||
t_cmd *cmds;
|
t_cmd *cmds;
|
||||||
t_cmd *tmp;
|
t_cmd *tmp;
|
||||||
|
|
||||||
if(!cmd_str)
|
if (!cmd_str)
|
||||||
return ;
|
return ;
|
||||||
cmds = parsing_bonus(cmd_str);
|
cmds = parsing_bonus(cmd_str);
|
||||||
//print_parsed_cmd(cmds); // debug
|
|
||||||
tmp = check_cmds_syntax(cmds);
|
tmp = check_cmds_syntax(cmds);
|
||||||
if (tmp)
|
if (tmp)
|
||||||
{
|
{
|
||||||
print_syntax_error_bonus(tmp);
|
print_syntax_error_bonus(tmp);
|
||||||
//printf("error\n"); // debug
|
|
||||||
free_cmd(cmds);
|
free_cmd(cmds);
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
msh->cmds_head = cmds;
|
msh->cmds_head = cmds;
|
||||||
while (cmds)
|
while (cmds)
|
||||||
{
|
{
|
||||||
//print_parsed_cmd(cmds); // debug
|
|
||||||
msh->tokens = parse_cmds_to_token(cmds, msh->env);
|
msh->tokens = parse_cmds_to_token(cmds, msh->env);
|
||||||
msh->cmds = cmds;
|
msh->cmds = cmds;
|
||||||
//print_msh_struct(msh); // debug
|
|
||||||
//print_parsed_token(msh->tokens); // debug
|
|
||||||
exec_commands(msh);
|
exec_commands(msh);
|
||||||
msh->in_fd = 0;
|
msh->in_fd = 0;
|
||||||
msh->out_fd = 0;
|
msh->out_fd = 0;
|
||||||
@ -89,14 +78,12 @@ int exec(t_msh *msh, char **cmd_args, int i, int cmd_count)
|
|||||||
|
|
||||||
if (i != cmd_count - 1)
|
if (i != cmd_count - 1)
|
||||||
{
|
{
|
||||||
//fprintf(stderr, "piping %d", i);
|
|
||||||
if (pipe(msh->fds[i]) == -1)
|
if (pipe(msh->fds[i]) == -1)
|
||||||
{
|
{
|
||||||
perror("minishell: pipe");
|
perror("minishell: pipe");
|
||||||
free(cmd_args);
|
free(cmd_args);
|
||||||
ft_exit(msh, 1);
|
ft_exit(msh, 1);
|
||||||
}
|
}
|
||||||
//fprintf(stderr, "pipe: msh->fds[%d][0]: %d, msh->fds[%d][1]: %d\n", i, msh->fds[i][0], i, msh->fds[i][1]);
|
|
||||||
}
|
}
|
||||||
pid = fork();
|
pid = fork();
|
||||||
if (pid == -1)
|
if (pid == -1)
|
||||||
@ -136,13 +123,14 @@ int get_cmd_count(t_cmd *cmds)
|
|||||||
nb = 0;
|
nb = 0;
|
||||||
while (cmds && !is_operand_type(cmds))
|
while (cmds && !is_operand_type(cmds))
|
||||||
{
|
{
|
||||||
while(cmds && (is_output_type(cmds) || is_input_type(cmds)))
|
while (cmds && (is_output_type(cmds) || is_input_type(cmds)))
|
||||||
cmds=cmds->next;
|
cmds = cmds->next;
|
||||||
if (is_cmd_type(cmds))
|
if (is_cmd_type(cmds))
|
||||||
nb++;
|
nb++;
|
||||||
while(cmds && (is_output_type(cmds) || is_input_type(cmds) || is_cmd_type(cmds)))
|
while (cmds && (is_output_type(cmds) || is_input_type(cmds)
|
||||||
cmds=cmds->next;
|
|| is_cmd_type(cmds)))
|
||||||
if(cmds && cmds->cmd_type == PIPE)
|
cmds = cmds->next;
|
||||||
|
if (cmds && cmds->cmd_type == PIPE)
|
||||||
cmds = cmds->next;
|
cmds = cmds->next;
|
||||||
}
|
}
|
||||||
return (nb);
|
return (nb);
|
||||||
@ -150,31 +138,31 @@ int get_cmd_count(t_cmd *cmds)
|
|||||||
|
|
||||||
void print_signaled(int status)
|
void print_signaled(int status)
|
||||||
{
|
{
|
||||||
int signal;
|
int signal;
|
||||||
static const char *sigmsg[] = {0, "Hangup", 0, "Quit", \
|
static const char *sigmsg[] = {0, "Hangup", 0, "Quit", "Illegal \
|
||||||
"Illegal instruction", "Trace/breakpoint trap", "Aborted", "Bus error", \
|
instruction", "Trace/breakpoint trap", "Aborted", "Bus error",
|
||||||
"Floating point exception", "Killed", "User defined signal 1", \
|
"Floating point exception", "Killed", "User defined signal 1",
|
||||||
"Segmentation fault (skill issue)", "User defined signal 2", 0,\
|
"Segmentation fault (skill issue)", "User defined signal 2", 0,
|
||||||
"Alarm clock", "Terminated", "Stack fault" ,0 ,0, "Stopped", "Stopped",\
|
"Alarm clock", "Terminated", "Stack fault", 0, 0, "Stopped", "Stopped",
|
||||||
"Stopped", "Stopped", 0, "CPU time limit exceeded",\
|
"Stopped", "Stopped", 0, "CPU time limit exceeded",
|
||||||
"File size limit exceeded", "Virtual time expired",\
|
"File size limit exceeded", "Virtual time expired",
|
||||||
"Profiling timer expired","I/O possible", "Power failure",\
|
"Profiling timer expired", "I/O possible", "Power failure",
|
||||||
"Bad system call"};
|
"Bad system call"};
|
||||||
|
|
||||||
signal = WTERMSIG(status);
|
signal = WTERMSIG(status);
|
||||||
if(signal < 31 && sigmsg[signal])
|
if (signal < 31 && sigmsg[signal])
|
||||||
{
|
{
|
||||||
ft_putstr_fd((char *)sigmsg[signal], 2);
|
ft_putstr_fd((char *)sigmsg[signal], 2);
|
||||||
}
|
}
|
||||||
if(signal >= 34 && signal <= 64)
|
if (signal >= 34 && signal <= 64)
|
||||||
{
|
{
|
||||||
ft_putstr_fd("Real-time signal ", 2);
|
ft_putstr_fd("Real-time signal ", 2);
|
||||||
ft_putnbr_fd(signal - 34, 2);
|
ft_putnbr_fd(signal - 34, 2);
|
||||||
}
|
}
|
||||||
if(WCOREDUMP(status))
|
if (WCOREDUMP(status))
|
||||||
ft_putstr_fd(" (core dumped)", 2);
|
ft_putstr_fd(" (core dumped)", 2);
|
||||||
ft_putstr_fd("\n", 2);
|
ft_putstr_fd("\n", 2);
|
||||||
g_return_code = signal + 128;
|
g_return_code = signal + 128;
|
||||||
}
|
}
|
||||||
|
|
||||||
void end_execution(t_msh *msh, int cmd_count)
|
void end_execution(t_msh *msh, int cmd_count)
|
||||||
@ -185,7 +173,7 @@ void end_execution(t_msh *msh, int cmd_count)
|
|||||||
i = 0;
|
i = 0;
|
||||||
status = 0;
|
status = 0;
|
||||||
while (i < cmd_count)
|
while (i < cmd_count)
|
||||||
waitpid(msh->pids[i++], &status, 0);
|
waitpid(msh->pids[i++], &status, 0);
|
||||||
if (!g_return_code && WIFEXITED(status))
|
if (!g_return_code && WIFEXITED(status))
|
||||||
g_return_code = WEXITSTATUS(status);
|
g_return_code = WEXITSTATUS(status);
|
||||||
if (WIFSIGNALED(status))
|
if (WIFSIGNALED(status))
|
||||||
@ -194,17 +182,17 @@ void end_execution(t_msh *msh, int cmd_count)
|
|||||||
free_fds(msh);
|
free_fds(msh);
|
||||||
msh->pids = 0;
|
msh->pids = 0;
|
||||||
free(msh->fds);
|
free(msh->fds);
|
||||||
signal(SIGINT, signal_handler_interactive); //enables ctrl-C
|
signal(SIGINT, signal_handler_interactive);
|
||||||
signal(SIGQUIT, signal_handler_interactive);
|
signal(SIGQUIT, signal_handler_interactive);
|
||||||
set_echoctl(0);
|
set_echoctl(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int handle_parenthesis(t_msh *msh)
|
int handle_parenthesis(t_msh *msh)
|
||||||
{
|
{
|
||||||
if(!(msh->cmds->cmd_type == PAREN || (msh->cmds->cmd_type == PIPE && msh->cmds->next->cmd_type == PAREN)))
|
if (!(msh->cmds->cmd_type == PAREN || (msh->cmds->cmd_type == PIPE
|
||||||
return(0);
|
&& msh->cmds->next->cmd_type == PAREN)))
|
||||||
|
return (0);
|
||||||
return(1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void exec_commands(t_msh *msh)
|
void exec_commands(t_msh *msh)
|
||||||
@ -226,5 +214,5 @@ void exec_commands(t_msh *msh)
|
|||||||
exec_command(msh, i, cmd_count);
|
exec_command(msh, i, cmd_count);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
end_execution(msh, cmd_count);
|
end_execution(msh, cmd_count);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/02/18 18:29:20 by marde-vr #+# #+# */
|
/* Created: 2024/02/18 18:29:20 by marde-vr #+# #+# */
|
||||||
/* Updated: 2024/04/21 23:46:43 by tomoron ### ########.fr */
|
/* Updated: 2024/04/22 19:31:12 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -36,38 +36,38 @@ int export_invalid_identifier(char *arg, char *name)
|
|||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
t_env *export_set_env(t_env *env, char *name, char *value, int append)
|
t_env *export_set_env(t_env *env, char *name, char *value, int append)
|
||||||
{
|
{
|
||||||
t_env *tmp;
|
t_env *tmp;
|
||||||
|
|
||||||
tmp = env;
|
tmp = env;
|
||||||
if(!value)
|
if (!value)
|
||||||
{
|
{
|
||||||
free(name);
|
free(name);
|
||||||
ft_printf_fd(2, "minishell: malloc failed");
|
ft_printf_fd(2, "minishell: malloc failed");
|
||||||
return(env);
|
return (env);
|
||||||
}
|
}
|
||||||
while(tmp)
|
while (tmp)
|
||||||
{
|
{
|
||||||
if(!ft_strcmp(name, tmp->name))
|
if (!ft_strcmp(name, tmp->name))
|
||||||
{
|
{
|
||||||
free(name);
|
free(name);
|
||||||
if(!*value)
|
if (!*value)
|
||||||
{
|
{
|
||||||
free(value);
|
free(value);
|
||||||
return(env);
|
return (env);
|
||||||
}
|
}
|
||||||
if(append)
|
if (append)
|
||||||
value = ft_strjoin_free(tmp->value, value, 2);
|
value = ft_strjoin_free(tmp->value, value, 2);
|
||||||
if(!value)
|
if (!value)
|
||||||
return(env);
|
return (env);
|
||||||
free(tmp->value);
|
free(tmp->value);
|
||||||
tmp->value = value;
|
tmp->value = value;
|
||||||
return(env);
|
return (env);
|
||||||
}
|
}
|
||||||
tmp = tmp->next;
|
tmp = tmp->next;
|
||||||
}
|
}
|
||||||
return(env_add_back(env, name, value));
|
return (env_add_back(env, name, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ft_export(t_token *cmd, t_env *env)
|
int ft_export(t_token *cmd, t_env *env)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/05 18:15:27 by marde-vr #+# #+# */
|
/* Created: 2024/03/05 18:15:27 by marde-vr #+# #+# */
|
||||||
/* Updated: 2024/04/22 19:12:50 by marde-vr ### ########.fr */
|
/* Updated: 2024/04/22 19:50:00 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -27,7 +27,6 @@ void redirect_input(t_msh *msh, int i, char **cmd_args)
|
|||||||
{
|
{
|
||||||
if (dup2(msh->fds[i - 1][0], 0) < 0)
|
if (dup2(msh->fds[i - 1][0], 0) < 0)
|
||||||
{
|
{
|
||||||
perror("dup2"); //debug
|
|
||||||
free(cmd_args);
|
free(cmd_args);
|
||||||
ft_exit(msh, 1);
|
ft_exit(msh, 1);
|
||||||
}
|
}
|
||||||
@ -82,7 +81,8 @@ int get_in_type(t_msh *msh, t_cmd *tokens)
|
|||||||
if (open_input_file(msh, &cur_token))
|
if (open_input_file(msh, &cur_token))
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
if (cur_token && cur_token->next && !is_operand_type(cur_token->next) && cur_token->cmd_type != PIPE && cur_token->next->cmd_type != PIPE)
|
if (cur_token && cur_token->next && !is_operand_type(cur_token->next)
|
||||||
|
&& cur_token->cmd_type != PIPE && cur_token->next->cmd_type != PIPE)
|
||||||
return (get_in_type(msh, cur_token->next));
|
return (get_in_type(msh, cur_token->next));
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */
|
/* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/22 19:13:12 by marde-vr ### ########.fr */
|
/* Updated: 2024/04/22 19:30:03 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -46,7 +46,6 @@ typedef struct s_cmd
|
|||||||
struct s_cmd *next;
|
struct s_cmd *next;
|
||||||
} t_cmd;
|
} t_cmd;
|
||||||
|
|
||||||
|
|
||||||
typedef struct s_token
|
typedef struct s_token
|
||||||
{
|
{
|
||||||
char *value;
|
char *value;
|
||||||
@ -83,7 +82,7 @@ void *here_doc_variables(int write, int index, void *data);
|
|||||||
int add_var_to_str(char *res, char **command, t_env *env);
|
int add_var_to_str(char *res, char **command, t_env *env);
|
||||||
void find_cmd_path(t_msh *msh, char **paths, int *found);
|
void find_cmd_path(t_msh *msh, char **paths, int *found);
|
||||||
t_env *env_add_back(t_env *env, char *name, char *value);
|
t_env *env_add_back(t_env *env, char *name, char *value);
|
||||||
t_token *parse_cmds_to_token(t_cmd *command, t_env *env);
|
t_token *parse_cmds_to_token(t_cmd *command, t_env *env);
|
||||||
void exec_command_bonus(t_msh *msh, char *cmd_str);
|
void exec_command_bonus(t_msh *msh, char *cmd_str);
|
||||||
t_token *add_token_back(t_token *res, t_token *next);
|
t_token *add_token_back(t_token *res, t_token *next);
|
||||||
t_token *expand_wildcards(t_token *res, char *value);
|
t_token *expand_wildcards(t_token *res, char *value);
|
||||||
@ -137,13 +136,13 @@ void exec_commands(t_msh *msh);
|
|||||||
char *get_var_name(char *str);
|
char *get_var_name(char *str);
|
||||||
int exec_builtin(t_msh *msh);
|
int exec_builtin(t_msh *msh);
|
||||||
void get_cmd_path(t_msh *msh);
|
void get_cmd_path(t_msh *msh);
|
||||||
int is_operand_type(t_cmd *cmd);
|
int is_operand_type(t_cmd *cmd);
|
||||||
int set_echoctl(int value);
|
int set_echoctl(int value);
|
||||||
int is_output_type(t_cmd *cmd);
|
int is_output_type(t_cmd *cmd);
|
||||||
int print_env(t_env *env);
|
int print_env(t_env *env);
|
||||||
t_cmd *free_cmd(t_cmd *cmd);
|
t_cmd *free_cmd(t_cmd *cmd);
|
||||||
int ft_export(t_token *cmd, t_env *env);
|
int ft_export(t_token *cmd, t_env *env);
|
||||||
int is_input_type(t_cmd *cmd);
|
int is_input_type(t_cmd *cmd);
|
||||||
void free_env(t_env *env);
|
void free_env(t_env *env);
|
||||||
int ft_unset(t_msh *msh);
|
int ft_unset(t_msh *msh);
|
||||||
void free_fds(t_msh *msh);
|
void free_fds(t_msh *msh);
|
||||||
@ -151,7 +150,7 @@ void free_msh(t_msh *msh);
|
|||||||
void free_msh(t_msh *msh);
|
void free_msh(t_msh *msh);
|
||||||
int echo(t_token *args);
|
int echo(t_token *args);
|
||||||
int exit_bt(t_msh *msh);
|
int exit_bt(t_msh *msh);
|
||||||
int is_cmd_type(t_cmd *cmd);
|
int is_cmd_type(t_cmd *cmd);
|
||||||
int is_cmd_char(char c);
|
int is_cmd_char(char c);
|
||||||
int cd(t_token *args);
|
int cd(t_token *args);
|
||||||
int pwd(void);
|
int pwd(void);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/04/19 14:09:44 by tomoron #+# #+# */
|
/* Created: 2024/04/19 14:09:44 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/22 19:12:32 by marde-vr ### ########.fr */
|
/* Updated: 2024/04/22 19:42:05 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -21,7 +21,6 @@ void redirect_output(t_msh *msh, int i, char **cmd_args)
|
|||||||
free(cmd_args);
|
free(cmd_args);
|
||||||
ft_exit(msh, 1);
|
ft_exit(msh, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -66,7 +65,8 @@ int get_out_type(t_msh *msh, t_cmd *cmds)
|
|||||||
msh->out_fd = 0;
|
msh->out_fd = 0;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
cur_cmd = cmds;
|
cur_cmd = cmds;
|
||||||
while (cur_cmd && cur_cmd->next && (!is_cmd_type(cur_cmd) && !is_output_type(cur_cmd)))
|
while (cur_cmd && cur_cmd->next && (!is_cmd_type(cur_cmd)
|
||||||
|
&& !is_output_type(cur_cmd)))
|
||||||
cur_cmd = cur_cmd->next;
|
cur_cmd = cur_cmd->next;
|
||||||
while (cur_cmd && cur_cmd->next && !is_output_type(cur_cmd)
|
while (cur_cmd && cur_cmd->next && !is_output_type(cur_cmd)
|
||||||
&& !is_operand_type(cur_cmd) && cur_cmd->cmd_type != PIPE)
|
&& !is_operand_type(cur_cmd) && cur_cmd->cmd_type != PIPE)
|
||||||
@ -74,7 +74,7 @@ int get_out_type(t_msh *msh, t_cmd *cmds)
|
|||||||
if (cur_cmd && (cur_cmd->cmd_type == CMD || cur_cmd->cmd_type == PAREN))
|
if (cur_cmd && (cur_cmd->cmd_type == CMD || cur_cmd->cmd_type == PAREN))
|
||||||
msh->out_type = 0;
|
msh->out_type = 0;
|
||||||
else if (cur_cmd && is_output_type(cur_cmd) && !is_operand_type(cur_cmd)
|
else if (cur_cmd && is_output_type(cur_cmd) && !is_operand_type(cur_cmd)
|
||||||
&& cur_cmd->cmd_type != PIPE)
|
&& cur_cmd->cmd_type != PIPE)
|
||||||
{
|
{
|
||||||
msh->out_type = cur_cmd->cmd_type;
|
msh->out_type = cur_cmd->cmd_type;
|
||||||
filename = parse_tokens(cur_cmd->value, msh->env);
|
filename = parse_tokens(cur_cmd->value, msh->env);
|
||||||
@ -85,5 +85,5 @@ int get_out_type(t_msh *msh, t_cmd *cmds)
|
|||||||
}
|
}
|
||||||
else if (cur_cmd && cur_cmd->cmd_type == PIPE)
|
else if (cur_cmd && cur_cmd->cmd_type == PIPE)
|
||||||
msh->out_type = PIPE;
|
msh->out_type = PIPE;
|
||||||
return(ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/02/09 15:26:01 by tomoron #+# #+# */
|
/* Created: 2024/02/09 15:26:01 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/19 10:43:47 by tomoron ### ########.fr */
|
/* Updated: 2024/04/22 19:37:26 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
@ -51,7 +51,7 @@ char *get_token(char **cmd, int *in_quote, int *in_dquote, t_env *env)
|
|||||||
else if (**cmd == '~' && !*in_quote && !*in_dquote)
|
else if (**cmd == '~' && !*in_quote && !*in_dquote)
|
||||||
i += add_home_to_str(res + i);
|
i += add_home_to_str(res + i);
|
||||||
else if (((**cmd == '\'' && *in_dquote) || (**cmd == '"' && *in_quote))
|
else if (((**cmd == '\'' && *in_dquote) || (**cmd == '"' && *in_quote))
|
||||||
|| (**cmd != '\'' && **cmd != '"'))
|
|| (**cmd != '\'' && **cmd != '"'))
|
||||||
res[i++] = **cmd;
|
res[i++] = **cmd;
|
||||||
(*cmd)++;
|
(*cmd)++;
|
||||||
}
|
}
|
||||||
@ -82,20 +82,21 @@ t_token *parse_tokens(char *command, t_env *env)
|
|||||||
return (res);
|
return (res);
|
||||||
}
|
}
|
||||||
|
|
||||||
t_token *parse_cmds_to_token(t_cmd *command, t_env *env)
|
t_token *parse_cmds_to_token(t_cmd *command, t_env *env)
|
||||||
{
|
{
|
||||||
t_token *res;
|
t_token *res;
|
||||||
t_token *new;
|
t_token *new;
|
||||||
|
|
||||||
res = 0;
|
res = 0;
|
||||||
while(command && (is_cmd_type(command) || is_output_type(command) || is_input_type(command)))
|
while (command && (is_cmd_type(command) || is_output_type(command)
|
||||||
|
|| is_input_type(command)))
|
||||||
{
|
{
|
||||||
if(is_cmd_type(command))
|
if (is_cmd_type(command))
|
||||||
{
|
{
|
||||||
new = parse_tokens(command->value, env);
|
new = parse_tokens(command->value, env);
|
||||||
res = add_token_back(res, new);
|
res = add_token_back(res, new);
|
||||||
}
|
}
|
||||||
command = command->next;
|
command = command->next;
|
||||||
}
|
}
|
||||||
return(res);
|
return (res);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/27 14:40:44 by tomoron #+# #+# */
|
/* Created: 2024/03/27 14:40:44 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/19 10:40:51 by tomoron ### ########.fr */
|
/* Updated: 2024/04/22 19:38:45 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -126,6 +126,7 @@ char *get_cmd_value(char **cmd, t_cmd_type type)
|
|||||||
(*cmd)++;
|
(*cmd)++;
|
||||||
return (res);
|
return (res);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_syntax_error_bonus(t_cmd *cmd)
|
void print_syntax_error_bonus(t_cmd *cmd)
|
||||||
{
|
{
|
||||||
if (cmd->cmd_type == CMD || cmd->cmd_type == PAREN)
|
if (cmd->cmd_type == CMD || cmd->cmd_type == PAREN)
|
||||||
@ -204,6 +205,7 @@ int get_next_arg_len(char *cmd)
|
|||||||
}
|
}
|
||||||
return (len);
|
return (len);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *get_next_arg(char **cmd)
|
char *get_next_arg(char **cmd)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
@ -236,7 +238,7 @@ t_cmd *parsing_bonus(char *cmd)
|
|||||||
if (type == CMD || type == PAREN)
|
if (type == CMD || type == PAREN)
|
||||||
value = get_cmd_value(&cmd, type);
|
value = get_cmd_value(&cmd, type);
|
||||||
else if (type == RED_O || type == RED_O_APP || type == RED_I
|
else if (type == RED_O || type == RED_O_APP || type == RED_I
|
||||||
|| type == HERE_DOC)
|
|| type == HERE_DOC)
|
||||||
value = get_next_arg(&cmd);
|
value = get_next_arg(&cmd);
|
||||||
else
|
else
|
||||||
value = 0;
|
value = 0;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/02/09 15:24:36 by tomoron #+# #+# */
|
/* Created: 2024/02/09 15:24:36 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/22 18:31:00 by tomoron ### ########.fr */
|
/* Updated: 2024/04/22 19:28:28 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ int get_token_len(char *command, t_env *env)
|
|||||||
else if (*command != '\'' && *command != '"')
|
else if (*command != '\'' && *command != '"')
|
||||||
res++;
|
res++;
|
||||||
else if ((*command == '\'' && in_dquote) || (*command == '"'
|
else if ((*command == '\'' && in_dquote) || (*command == '"'
|
||||||
&& in_quote))
|
&& in_quote))
|
||||||
res++;
|
res++;
|
||||||
command++;
|
command++;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/05 18:17:25 by marde-vr #+# #+# */
|
/* Created: 2024/03/05 18:17:25 by marde-vr #+# #+# */
|
||||||
/* Updated: 2024/04/22 19:18:39 by marde-vr ### ########.fr */
|
/* Updated: 2024/04/22 19:49:36 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -31,7 +31,6 @@ void execute_command(t_msh *msh, char **cmd_args)
|
|||||||
{
|
{
|
||||||
char **env;
|
char **env;
|
||||||
|
|
||||||
//if (cmd_is_forkable_builtin(msh->tokens->value))
|
|
||||||
if (exec_builtin(msh))
|
if (exec_builtin(msh))
|
||||||
{
|
{
|
||||||
free(cmd_args);
|
free(cmd_args);
|
||||||
@ -43,7 +42,7 @@ void execute_command(t_msh *msh, char **cmd_args)
|
|||||||
env = env_to_char_tab(msh->env);
|
env = env_to_char_tab(msh->env);
|
||||||
if (env)
|
if (env)
|
||||||
{
|
{
|
||||||
if(execve(msh->tokens->value, cmd_args, env))
|
if (execve(msh->tokens->value, cmd_args, env))
|
||||||
perror("execve");
|
perror("execve");
|
||||||
}
|
}
|
||||||
ft_free_str_arr(env);
|
ft_free_str_arr(env);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/22 14:31:13 by tomoron #+# #+# */
|
/* Created: 2024/03/22 14:31:13 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/21 20:22:09 by tomoron ### ########.fr */
|
/* Updated: 2024/04/22 19:53:34 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -57,14 +57,12 @@ int set_echoctl(int value)
|
|||||||
{
|
{
|
||||||
struct termios t_p;
|
struct termios t_p;
|
||||||
|
|
||||||
//ft_printf("echoctl value : %d\n",value);
|
if (!isatty(1))
|
||||||
if(!isatty(1))
|
return (0);
|
||||||
return(0);
|
|
||||||
if (tcgetattr(1, &t_p))
|
if (tcgetattr(1, &t_p))
|
||||||
return (1);
|
return (1);
|
||||||
if (((t_p.c_lflag & ECHOCTL) != 0) == value)
|
if (((t_p.c_lflag & ECHOCTL) != 0) == value)
|
||||||
return (0);
|
return (0);
|
||||||
//ft_printf("change\n");
|
|
||||||
if (value)
|
if (value)
|
||||||
t_p.c_lflag = t_p.c_lflag | ECHOCTL;
|
t_p.c_lflag = t_p.c_lflag | ECHOCTL;
|
||||||
else
|
else
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/04/17 09:12:33 by tomoron #+# #+# */
|
/* Created: 2024/04/17 09:12:33 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/18 20:49:00 by marde-vr ### ########.fr */
|
/* Updated: 2024/04/22 19:30:43 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -42,8 +42,8 @@ void sort_wildcards_token(t_token *list)
|
|||||||
list = start;
|
list = start;
|
||||||
while (list->next)
|
while (list->next)
|
||||||
{
|
{
|
||||||
if (wildcard_cmp(list->value, list->next->value,
|
if (wildcard_cmp(list->value, list->next->value, \
|
||||||
"zZyYxXwWvVuUtTsSrRqQpPoOnNmMlLkKjJiIhHgGfFeEdDcCbBaA9876543210") > 0)
|
"zZyYxXwWvVuUtTsSrRqQpPoOnNmMlLkKjJiIhHgGfFeEdDcCbBaA9876543210") > 0)
|
||||||
{
|
{
|
||||||
swap = list->value;
|
swap = list->value;
|
||||||
list->value = list->next->value;
|
list->value = list->next->value;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/05 18:19:26 by marde-vr #+# #+# */
|
/* Created: 2024/03/05 18:19:26 by marde-vr #+# #+# */
|
||||||
/* Updated: 2024/04/22 16:43:31 by tomoron ### ########.fr */
|
/* Updated: 2024/04/22 19:53:16 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
void free_fds(t_msh *msh)
|
void free_fds(t_msh *msh)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (msh->fds)
|
if (msh->fds)
|
||||||
{
|
{
|
||||||
@ -45,7 +45,6 @@ void free_msh(t_msh *msh)
|
|||||||
|
|
||||||
void ft_exit(t_msh *msh, int exit_code)
|
void ft_exit(t_msh *msh, int exit_code)
|
||||||
{
|
{
|
||||||
//ft_printf("exiting");
|
|
||||||
set_echoctl(msh->echoctl);
|
set_echoctl(msh->echoctl);
|
||||||
free_msh(msh);
|
free_msh(msh);
|
||||||
exit(exit_code);
|
exit(exit_code);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/04/15 12:53:29 by tomoron #+# #+# */
|
/* Created: 2024/04/15 12:53:29 by tomoron #+# #+# */
|
||||||
/* Updated: 2024/04/19 10:55:20 by tomoron ### ########.fr */
|
/* Updated: 2024/04/22 19:28:13 by marde-vr ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
@ -51,7 +51,7 @@ t_token *get_all_files(DIR *dir, char *wildcard)
|
|||||||
|
|
||||||
t_token *add_token_back(t_token *res, t_token *next)
|
t_token *add_token_back(t_token *res, t_token *next)
|
||||||
{
|
{
|
||||||
t_token *start;
|
t_token *start;
|
||||||
|
|
||||||
if (!res)
|
if (!res)
|
||||||
return (next);
|
return (next);
|
||||||
|
Reference in New Issue
Block a user