fix some things

This commit is contained in:
kinou-p 2022-04-22 14:56:28 +02:00
parent cbd9442469
commit 1ec3636d5d
5 changed files with 42 additions and 30 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/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; struct s_command *big_cmd;
int fd[2]; int fd[2];
int pipe[2]; int pipe[2];
int last;
int last_pipe[2]; int last_pipe[2];
int child; int child;
int nb_args; 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); char *ft_output(char *line, t_s_cmd *cmd, int index);
//set_var.c //set_var.c
char *get_var(t_cmd *cmd, char *var_name);
char *set_var(t_cmd *big_cmd, char *cmd); 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 //set_signals.c

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/04/20 04:43:32 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) 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) if (cmd->current_s_cmd->outfile)
*fdout = open(cmd->current_s_cmd->outfile, *fdout = open(cmd->current_s_cmd->outfile,
O_RDWR | O_CREAT | O_APPEND, 0666); 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) void exec_not_last_cmd(t_cmd *cmd, int *fdpipe, int *fdin, int *fdout)
{ {
cmd->current_s_cmd->last = 0;
pipe(fdpipe); pipe(fdpipe);
cmd->current_s_cmd->fd[0] = *fdin; cmd->current_s_cmd->fd[0] = *fdin;
if (cmd->current_s_cmd->outfile) if (cmd->current_s_cmd->outfile)

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/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); return (0);
s_cmd->fd[0] = -1; s_cmd->fd[0] = -1;
s_cmd->fd[1] = -1; s_cmd->fd[1] = -1;
s_cmd->cmd = 0;
s_cmd->args = 0; s_cmd->args = 0;
s_cmd->infile = 0; s_cmd->infile = 0;
s_cmd->outfile = 0; s_cmd->outfile = 0;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/04/19 15:02:01 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) char *change_var(t_cmd *big_cmd, char *cmd, int *index)
{ {
int i; int i;
char *swap;
char *swap2;
char *ret; char *ret;
char *var;
i = *index + 1; i = *index + 1;
while (cmd[i] && (ft_isalnum(cmd[i]) || cmd[i] == '_' while (cmd[i] && (ft_isalnum(cmd[i]) || cmd[i] == '_'
|| cmd[i] == '?' || cmd[i] == '$')) || cmd[i] == '?' || cmd[i] == '$'))
i++; i++;
swap = ft_substr(cmd, *index + 1, i - *index - 1); if (i == *index + 1)
var = get_var(big_cmd, swap); {
free(swap); (*index)++;
swap2 = ft_strdup(cmd + i); ret = ft_strdup(cmd);
cmd[*index] = 0; free(cmd);
ret = ft_strjoin(cmd, var); return (ret);
free(cmd); }
if (*index > 0) ret = find_var(big_cmd, cmd, i, index);
*index += ft_strlen(var) - 1;
free(var);
var = ret;
ret = ft_strjoin(ret, swap2);
free(var);
free(swap2);
return (ret); return (ret);
} }

View File

@ -6,23 +6,44 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/04/19 14:45:10 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" #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) 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; g_var = 1;
ft_putstr_fd("Minishell: ", 2); ft_putstr_fd("Minishell: ", 2);
ft_putstr_fd(cmd->outfile, 2); ft_putstr_fd(cmd->outfile, 2);
if (access(cmd->outfile, F_OK)) ft_putstr_fd(": Permission denied\n", 2);
ft_putstr_fd(": no such file\n", 2);
else
ft_putstr_fd(": Permission denied\n", 2);
free(cmd->outfile); free(cmd->outfile);
return (0); return (0);
} }