diff --git a/includes/minishell.h b/includes/minishell.h index d3a0cbd..0d344af 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/09 22:33:49 by apommier #+# #+# */ -/* Updated: 2022/04/22 11:43:15 by apommier ### ########.fr */ +/* Updated: 2022/04/22 13:01:36 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,7 +37,6 @@ typedef struct s_simple { struct s_command *big_cmd; int fd[2]; int pipe[2]; - int last; int last_pipe[2]; int child; int nb_args; @@ -123,7 +122,9 @@ char *ft_input(char *line, t_s_cmd *cmd, int index); char *ft_output(char *line, t_s_cmd *cmd, int index); //set_var.c +char *get_var(t_cmd *cmd, char *var_name); char *set_var(t_cmd *big_cmd, char *cmd); +char *find_var(t_cmd *big_cmd, char *cmd, int i, int *index); //set_signals.c diff --git a/srcs/pipe/execution.c b/srcs/pipe/execution.c index 5af1fae..5076b57 100644 --- a/srcs/pipe/execution.c +++ b/srcs/pipe/execution.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/20 04:43:32 by apommier #+# #+# */ -/* Updated: 2022/04/20 04:44:20 by apommier ### ########.fr */ +/* Updated: 2022/04/22 11:51:32 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,7 +42,6 @@ void exec_cmd(t_cmd *cmd, char **env, int *fdpipe) void exec_last_cmd(t_cmd *cmd, int *fdin, int *fdout, int i) { - cmd->current_s_cmd->last = 1; if (cmd->current_s_cmd->outfile) *fdout = open(cmd->current_s_cmd->outfile, O_RDWR | O_CREAT | O_APPEND, 0666); @@ -58,7 +57,6 @@ void exec_last_cmd(t_cmd *cmd, int *fdin, int *fdout, int i) void exec_not_last_cmd(t_cmd *cmd, int *fdpipe, int *fdin, int *fdout) { - cmd->current_s_cmd->last = 0; pipe(fdpipe); cmd->current_s_cmd->fd[0] = *fdin; if (cmd->current_s_cmd->outfile) diff --git a/srcs/set_cmd/set_cmd.c b/srcs/set_cmd/set_cmd.c index c4b66fc..3e548e5 100644 --- a/srcs/set_cmd/set_cmd.c +++ b/srcs/set_cmd/set_cmd.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/08 15:19:42 by apommier #+# #+# */ -/* Updated: 2022/04/22 11:41:45 by apommier ### ########.fr */ +/* Updated: 2022/04/22 11:50:17 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,6 +24,7 @@ t_s_cmd *set_s_cmd(char *line, int index) return (0); s_cmd->fd[0] = -1; s_cmd->fd[1] = -1; + s_cmd->cmd = 0; s_cmd->args = 0; s_cmd->infile = 0; s_cmd->outfile = 0; diff --git a/srcs/set_quote/set_var.c b/srcs/set_quote/set_var.c index 1483074..5f2bc2c 100644 --- a/srcs/set_quote/set_var.c +++ b/srcs/set_quote/set_var.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/19 15:02:01 by apommier #+# #+# */ -/* Updated: 2022/04/22 10:41:04 by apommier ### ########.fr */ +/* Updated: 2022/04/22 13:01:30 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -53,29 +53,20 @@ char *get_var(t_cmd *cmd, char *var_name) char *change_var(t_cmd *big_cmd, char *cmd, int *index) { int i; - char *swap; - char *swap2; char *ret; - char *var; i = *index + 1; while (cmd[i] && (ft_isalnum(cmd[i]) || cmd[i] == '_' || cmd[i] == '?' || cmd[i] == '$')) i++; - swap = ft_substr(cmd, *index + 1, i - *index - 1); - var = get_var(big_cmd, swap); - free(swap); - swap2 = ft_strdup(cmd + i); - cmd[*index] = 0; - ret = ft_strjoin(cmd, var); - free(cmd); - if (*index > 0) - *index += ft_strlen(var) - 1; - free(var); - var = ret; - ret = ft_strjoin(ret, swap2); - free(var); - free(swap2); + if (i == *index + 1) + { + (*index)++; + ret = ft_strdup(cmd); + free(cmd); + return (ret); + } + ret = find_var(big_cmd, cmd, i, index); return (ret); } diff --git a/srcs/set_redirection/set_output.c b/srcs/set_redirection/set_output.c index 0404850..75a7e0a 100644 --- a/srcs/set_redirection/set_output.c +++ b/srcs/set_redirection/set_output.c @@ -6,23 +6,44 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/19 14:45:10 by apommier #+# #+# */ -/* Updated: 2022/04/22 11:43:15 by apommier ### ########.fr */ +/* Updated: 2022/04/22 13:02:24 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../includes/minishell.h" +char *find_var(t_cmd *big_cmd, char *cmd, int i, int *index) +{ + char *swap; + char *swap2; + char *ret; + char *var; + + swap = ft_substr(cmd, *index + 1, i - *index - 1); + var = get_var(big_cmd, swap); + free(swap); + swap2 = ft_strdup(cmd + i); + cmd[*index] = 0; + ret = ft_strjoin(cmd, var); + free(cmd); + if (*index > 0) + *index += ft_strlen(var) - 1; + free(var); + var = ret; + ret = ft_strjoin(ret, swap2); + free(var); + free(swap2); + return (ret); +} + int check_access_output(t_s_cmd *cmd) { - if (access(cmd->outfile, W_OK)) + if (!access(cmd->outfile, F_OK) && access(cmd->outfile, W_OK)) { g_var = 1; ft_putstr_fd("Minishell: ", 2); ft_putstr_fd(cmd->outfile, 2); - if (access(cmd->outfile, F_OK)) - ft_putstr_fd(": no such file\n", 2); - else - ft_putstr_fd(": Permission denied\n", 2); + ft_putstr_fd(": Permission denied\n", 2); free(cmd->outfile); return (0); }