666
This commit is contained in:
parent
676173a098
commit
6f5907bf3b
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/03/20 09:48:45 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/20 09:48:53 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 15:29:21 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -31,7 +31,7 @@ void make_cmd(t_data data, int i, int fl1, int fl2)
|
|||
execve(data.cmds[i], data.flgs[i], data.env);
|
||||
}
|
||||
|
||||
void choice_cmd(t_data data, int i)
|
||||
void choice_cmd(t_data data, int i, int **forks)
|
||||
{
|
||||
if (i == 0)
|
||||
make_cmd(data, 0, data.fd1, data.fd[0][1]);
|
||||
|
@ -40,6 +40,7 @@ void choice_cmd(t_data data, int i)
|
|||
else
|
||||
make_cmd(data, i, data.fd[(i + 1) % 2][0], data.fd2);
|
||||
write(2, "Error execve\n", 13);
|
||||
free(*forks);
|
||||
free_all(&data);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -59,7 +60,7 @@ int pipex_loop(int argc, int **forks, t_data data)
|
|||
if ((*forks)[i] < 0)
|
||||
return (1);
|
||||
if ((*forks)[i] == 0)
|
||||
choice_cmd(data, i);
|
||||
choice_cmd(data, i, forks);
|
||||
}
|
||||
if (i > 0)
|
||||
if (open_close_pipe(&data, 1, (i + 1) % 2))
|
||||
|
@ -77,7 +78,10 @@ int pipex(int argc, t_data data)
|
|||
if (!forks)
|
||||
return (1);
|
||||
if (pipex_loop(argc, &forks, data))
|
||||
{
|
||||
free(forks);
|
||||
return (1);
|
||||
}
|
||||
i = -1;
|
||||
while (++i < argc - 3)
|
||||
waitpid(forks[i], NULL, 0);
|
||||
|
@ -98,13 +102,13 @@ int main(int argc, char *argv[], char **env)
|
|||
{
|
||||
argc = argc - 1;
|
||||
if (here_doc(argc, argv, env, &data))
|
||||
return (2);
|
||||
return (free_all(&data));
|
||||
}
|
||||
else if (parsing(argc, argv, env, &data))
|
||||
return (3);
|
||||
return (free_all(&data));
|
||||
data.argc = argc;
|
||||
if (verification_command(argv, data))
|
||||
return (4);
|
||||
return (free_all(&data));
|
||||
if (pipex(argc, data))
|
||||
return (free_all(&data));
|
||||
free_all(&data);
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/03/20 09:59:23 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/20 09:59:42 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 15:23:03 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -31,18 +31,15 @@ typedef struct s_data
|
|||
int argc;
|
||||
} t_data;
|
||||
|
||||
int get_next(char *cmd, char c);
|
||||
int print_error(int type, char *error);
|
||||
char **get_flags(char *cmd);
|
||||
char *get_command(char *cmd);
|
||||
char **add_cmd(char **flg, char *cmd);
|
||||
int parsing(int argc, char *argv[], char **env, t_data *data);
|
||||
char *test_acces(char **s, char **cmd, char **path, int *y);
|
||||
char *cmd_exist(char **env, char **cmd, int y, char **s);
|
||||
char *find_command(char **env, char *cmd);
|
||||
int here_doc(int argc, char *argv[], char **env, t_data *data);
|
||||
int pipex_loop(int argc, int **fk, t_data data);
|
||||
void choice_cmd(t_data data, int i);
|
||||
int verification_command(char *argv[], t_data data);
|
||||
int free_all(t_data *data);
|
||||
int open_close_pipe(t_data *data, int boolean, int file);
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/01/19 17:03:01 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/20 09:49:22 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 15:16:49 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -23,7 +23,11 @@ int parsing(int argc, char *argv[], char **env, t_data *data)
|
|||
if (data->fd1 < 0)
|
||||
print_error(0, argv[1]);
|
||||
data->cmds = ft_calloc(argc - 2, sizeof(char *));
|
||||
if (!data->cmds)
|
||||
return (1);
|
||||
data->flgs = ft_calloc(argc - 2, sizeof(char *));
|
||||
if (!data->flgs)
|
||||
return (1);
|
||||
i = -1;
|
||||
while (++i < argc - 3)
|
||||
{
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/14 15:46:08 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/20 09:49:35 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 16:09:11 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -41,6 +41,8 @@ int verification_command(char *argv[], t_data data)
|
|||
|
||||
i = -1;
|
||||
while (++i < data.argc - 3)
|
||||
{
|
||||
if (data.cmds[i])
|
||||
{
|
||||
data.cmds[i] = find_command(data.env, data.cmds[i]);
|
||||
if (data.cmds[i] == NULL)
|
||||
|
@ -50,17 +52,15 @@ int verification_command(char *argv[], t_data data)
|
|||
return (free_all(&data));
|
||||
}
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int free_all(t_data *data)
|
||||
void free_flgs(t_data *data)
|
||||
{
|
||||
int i;
|
||||
int y;
|
||||
int i;
|
||||
|
||||
if (data->fd1 > 0)
|
||||
close(data->fd1);
|
||||
close(data->fd2);
|
||||
y = -1;
|
||||
while (++y < data->argc - 3)
|
||||
{
|
||||
|
@ -70,9 +70,24 @@ int free_all(t_data *data)
|
|||
free(data->flgs[y]);
|
||||
}
|
||||
free(data->flgs);
|
||||
}
|
||||
|
||||
int free_all(t_data *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (data->fd1 > 0)
|
||||
close(data->fd1);
|
||||
if (data->fd2 > 0)
|
||||
close(data->fd2);
|
||||
if (data->flgs)
|
||||
free_flgs(data);
|
||||
if (data->cmds)
|
||||
{
|
||||
i = -1;
|
||||
while (++i < data->argc - 3)
|
||||
free(data->cmds[i]);
|
||||
free(data->cmds);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/01/19 17:02:51 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/20 09:49:45 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 16:06:16 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -42,32 +42,6 @@ int print_error(int type, char *error)
|
|||
return (1);
|
||||
}
|
||||
|
||||
char **get_flags(char *cmd)
|
||||
{
|
||||
int i;
|
||||
int y;
|
||||
char *new_str;
|
||||
char **flags;
|
||||
|
||||
i = get_next(cmd, ' ') + 1;
|
||||
if (i == 0)
|
||||
{
|
||||
flags = ft_calloc(2, sizeof(char *));
|
||||
return (flags);
|
||||
}
|
||||
new_str = ft_calloc(ft_strlen(cmd) - i + 1, 1);
|
||||
if (new_str == NULL)
|
||||
return (NULL);
|
||||
y = 0;
|
||||
while (cmd[i])
|
||||
new_str[y++] = cmd[i++];
|
||||
new_str[y] = '\0';
|
||||
flags = ft_split(new_str, ' ');
|
||||
i = 0;
|
||||
free(new_str);
|
||||
return (flags);
|
||||
}
|
||||
|
||||
char *get_command(char *cmd)
|
||||
{
|
||||
int i;
|
||||
|
@ -84,30 +58,10 @@ char *get_command(char *cmd)
|
|||
while (cmd[++i] != ' ' && cmd[i])
|
||||
new_str[i] = cmd[i];
|
||||
new_str[i] = '\0';
|
||||
if (ft_strlen(new_str) == 0)
|
||||
{
|
||||
free(new_str);
|
||||
return (NULL);
|
||||
}
|
||||
return (new_str);
|
||||
}
|
||||
|
||||
char **add_cmd(char **flg, char *cmd)
|
||||
{
|
||||
char *tmp;
|
||||
int i;
|
||||
int check;
|
||||
|
||||
tmp = NULL;
|
||||
i = 0;
|
||||
check = 0;
|
||||
while (check == 0)
|
||||
{
|
||||
if (flg[i] == NULL)
|
||||
check = 1;
|
||||
if (tmp != NULL)
|
||||
flg[i] = tmp;
|
||||
tmp = flg[i];
|
||||
i++;
|
||||
}
|
||||
flg[0] = ft_strdup(cmd);
|
||||
if (flg[0] == NULL)
|
||||
return (NULL);
|
||||
flg[i] = NULL;
|
||||
return (flg);
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/01/18 18:04:58 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/07 17:06:38 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 15:59:11 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -20,15 +20,23 @@ int free_all(t_data *data)
|
|||
close(data->fd1);
|
||||
if (data->fd2 > 0)
|
||||
close(data->fd2);
|
||||
if (data->flg1)
|
||||
{
|
||||
i = 0;
|
||||
while (data->flg1[i])
|
||||
free(data->flg1[i++]);
|
||||
free(data->flg1);
|
||||
}
|
||||
if (data->flg2)
|
||||
{
|
||||
i = 0;
|
||||
while (data->flg2[i])
|
||||
free(data->flg2[i++]);
|
||||
free(data->flg2);
|
||||
}
|
||||
if (data->cmd1)
|
||||
free(data->cmd1);
|
||||
if (data->cmd2)
|
||||
free(data->cmd2);
|
||||
return (1);
|
||||
}
|
||||
|
@ -102,16 +110,9 @@ int main(int argc, char *argv[], char **env)
|
|||
return (1);
|
||||
}
|
||||
if (parsing(argv, &data))
|
||||
return (2);
|
||||
data.cmd1 = find_command(env, data.cmd1);
|
||||
if (data.cmd1 == NULL)
|
||||
print_error(1, argv[2]);
|
||||
data.cmd2 = find_command(env, data.cmd2);
|
||||
if (data.cmd2 == NULL)
|
||||
{
|
||||
print_error(1, argv[3]);
|
||||
return (1);
|
||||
if (finds_commands(argv, env, &data.cmd1, &data.cmd2))
|
||||
return (free_all(&data));
|
||||
}
|
||||
data.env = env;
|
||||
if (pipex(data))
|
||||
return (free_all(&data));
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/01/11 15:33:34 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/08 11:33:24 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 15:56:50 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -33,12 +33,11 @@ typedef struct s_data
|
|||
|
||||
int get_next(char *cmd, char c);
|
||||
int print_error(int type, char *error);
|
||||
char **get_flags(char *cmd);
|
||||
char *get_command(char *cmd);
|
||||
char **add_cmd(char **flg, char *cmd);
|
||||
int parsing(char *argv[], t_data *data);
|
||||
char *test_acces(char **s, char **cmd, char **path, int *y);
|
||||
char *cmd_exist(char **env, char **cmd, int y, char **s);
|
||||
char *find_command(char **env, char *cmd);
|
||||
int finds_commands(char *argv[], char **env, char **cmd1, char **cmd2);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/01/19 17:03:01 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/12 17:39:22 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 15:58:19 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -21,11 +21,16 @@ int parsing(char *argv[], t_data *data)
|
|||
if (data->fd1 < 0)
|
||||
print_error(0, argv[1]);
|
||||
data->cmd1 = get_command(argv[2]);
|
||||
if (ft_strlen(data->cmd1) < 1)
|
||||
if (!data->cmd1)
|
||||
print_error(2, argv[2]);
|
||||
data->cmd2 = get_command(argv[3]);
|
||||
if (ft_strlen(data->cmd2) < 1)
|
||||
if (!data->cmd2)
|
||||
{
|
||||
if (data->fd1 > 0)
|
||||
close(data->fd1);
|
||||
close(data->fd2);
|
||||
if (data->cmd1)
|
||||
free(data->cmd1);
|
||||
print_error(2, argv[3]);
|
||||
return (1);
|
||||
}
|
||||
|
@ -87,9 +92,28 @@ char *find_command(char **env, char *cmd)
|
|||
break ;
|
||||
env++;
|
||||
}
|
||||
if (ft_strlen(*env) == 0)
|
||||
env--;
|
||||
y = 0;
|
||||
s = ft_calloc(ft_strlen(*env) + 1, 1);
|
||||
if (s == NULL)
|
||||
return (NULL);
|
||||
return (cmd_exist(env, &cmd, y, &s));
|
||||
}
|
||||
|
||||
int finds_commands(char *argv[], char **env, char **cmd1, char **cmd2)
|
||||
{
|
||||
if (*cmd1)
|
||||
{
|
||||
*cmd1 = find_command(env, *cmd1);
|
||||
if (*cmd1 == NULL)
|
||||
print_error(1, argv[2]);
|
||||
}
|
||||
*cmd2 = find_command(env, *cmd2);
|
||||
if (*cmd2 == NULL)
|
||||
{
|
||||
print_error(1, argv[3]);
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/01/19 17:02:51 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/03/02 13:39:41 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/03/21 15:43:42 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -42,32 +42,6 @@ int print_error(int type, char *error)
|
|||
return (1);
|
||||
}
|
||||
|
||||
char **get_flags(char *cmd)
|
||||
{
|
||||
int i;
|
||||
int y;
|
||||
char *new_str;
|
||||
char **flags;
|
||||
|
||||
i = get_next(cmd, ' ') + 1;
|
||||
if (i == 0)
|
||||
{
|
||||
flags = ft_calloc(2, sizeof(char *));
|
||||
return (flags);
|
||||
}
|
||||
new_str = ft_calloc(ft_strlen(cmd) - i + 1, 1);
|
||||
if (new_str == NULL)
|
||||
return (NULL);
|
||||
y = 0;
|
||||
while (cmd[i])
|
||||
new_str[y++] = cmd[i++];
|
||||
new_str[y] = '\0';
|
||||
flags = ft_split(new_str, ' ');
|
||||
i = 0;
|
||||
free(new_str);
|
||||
return (flags);
|
||||
}
|
||||
|
||||
char *get_command(char *cmd)
|
||||
{
|
||||
int i;
|
||||
|
@ -84,30 +58,10 @@ char *get_command(char *cmd)
|
|||
while (cmd[++i] != ' ' && cmd[i])
|
||||
new_str[i] = cmd[i];
|
||||
new_str[i] = '\0';
|
||||
if (ft_strlen(new_str) == 0)
|
||||
{
|
||||
free(new_str);
|
||||
return (NULL);
|
||||
}
|
||||
return (new_str);
|
||||
}
|
||||
|
||||
char **add_cmd(char **flg, char *cmd)
|
||||
{
|
||||
char *tmp;
|
||||
int i;
|
||||
int check;
|
||||
|
||||
tmp = NULL;
|
||||
i = 0;
|
||||
check = 0;
|
||||
while (check == 0)
|
||||
{
|
||||
if (flg[i] == NULL)
|
||||
check = 1;
|
||||
if (tmp != NULL)
|
||||
flg[i] = tmp;
|
||||
tmp = flg[i];
|
||||
i++;
|
||||
}
|
||||
flg[0] = ft_strdup(cmd);
|
||||
if (flg[0] == NULL)
|
||||
return (NULL);
|
||||
flg[i] = NULL;
|
||||
return (flg);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue