Fini Bonus
This commit is contained in:
parent
b113e15e47
commit
8a8c75660b
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
||||||
GNL = get_next_line/get_next_line.c get_next_line/get_next_line_utils.c
|
GNL = get_next_line/get_next_line.c get_next_line/get_next_line_utils.c
|
||||||
SRCS = mandatory/pipex.c mandatory/pipex_utils.c mandatory/pipex_parsing.c ${GNL}
|
SRCS = mandatory/pipex.c mandatory/pipex_utils.c mandatory/pipex_parsing.c ${GNL}
|
||||||
SRCS_BONUS = bonus/pipex.c bonus/pipex_utils.c bonus/pipex_parsing.c ${GNL}
|
SRCS_BONUS = bonus/pipex.c bonus/pipex_utils.c bonus/pipex_parsing.c bonus/pipex_heredoc.c bonus/pipex_utils2.c ${GNL}
|
||||||
OBJS = ${SRCS:.c=.o}
|
OBJS = ${SRCS:.c=.o}
|
||||||
OBJS_BONUS = ${SRCS_BONUS:.c=.o}
|
OBJS_BONUS = ${SRCS_BONUS:.c=.o}
|
||||||
LIBS = libft/libft.a
|
LIBS = libft/libft.a
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/01/18 18:04:58 by erey-bet #+# #+# */
|
/* Created: 2023/01/18 18:04:58 by erey-bet #+# #+# */
|
||||||
/* Updated: 2023/01/30 14:24:01 by erey-bet ### ########.fr */
|
/* Updated: 2023/02/14 14:08:49 by erey-bet ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
@ -69,22 +69,8 @@ int pipex(int argc, t_data data)
|
||||||
if (pipe(data.fd[1]) < -1)
|
if (pipe(data.fd[1]) < -1)
|
||||||
return (1);
|
return (1);
|
||||||
fk = ft_calloc(argc - 3, sizeof(int));
|
fk = ft_calloc(argc - 3, sizeof(int));
|
||||||
i = -1;
|
if (pipex_loop(argc, &fk, data))
|
||||||
while (++i < argc - 3)
|
|
||||||
{
|
|
||||||
fk[i] = fork();
|
|
||||||
if (fk[i] < 0)
|
|
||||||
return (1);
|
return (1);
|
||||||
if (fk[i] == 0)
|
|
||||||
{
|
|
||||||
if (i == 0 && data.fd1 > 0 && data.cmds[0])
|
|
||||||
cmd(data, i, 0);
|
|
||||||
else if (i + 1 < argc - 3)
|
|
||||||
cmd(data, i, 1);
|
|
||||||
else
|
|
||||||
cmd(data, i, 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(data.fd[0][0]);
|
close(data.fd[0][0]);
|
||||||
close(data.fd[0][1]);
|
close(data.fd[0][1]);
|
||||||
close(data.fd[1][0]);
|
close(data.fd[1][0]);
|
||||||
|
@ -101,25 +87,20 @@ int pipex(int argc, t_data data)
|
||||||
int main(int argc, char *argv[], char **env)
|
int main(int argc, char *argv[], char **env)
|
||||||
{
|
{
|
||||||
t_data data;
|
t_data data;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (argc < 5)
|
if (argc < 5)
|
||||||
return (1);
|
return (1);
|
||||||
if (parsing(argc, argv, &data))
|
if (ft_strncmp(argv[1], "here_doc", 8) == 0)
|
||||||
|
{
|
||||||
|
argc = argc - 1;
|
||||||
|
if (here_doc(argc, argv, env, &data))
|
||||||
return (2);
|
return (2);
|
||||||
|
}
|
||||||
|
else if (parsing(argc, argv, env, &data))
|
||||||
|
return (3);
|
||||||
data.argc = argc;
|
data.argc = argc;
|
||||||
i = -1;
|
if (verification_command(argv, data))
|
||||||
while (++i < argc - 3)
|
return (4);
|
||||||
{
|
|
||||||
data.cmds[i] = find_command(env, data.cmds[i]);
|
|
||||||
if (data.cmds[i] == NULL)
|
|
||||||
{
|
|
||||||
print_error(1, argv[2 + i]);
|
|
||||||
if (i == argc - 4)
|
|
||||||
return (free_all(&data));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data.env = env;
|
|
||||||
if (pipex(argc, data))
|
if (pipex(argc, data))
|
||||||
return (free_all(&data));
|
return (free_all(&data));
|
||||||
free_all(&data);
|
free_all(&data);
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/01/11 15:33:34 by erey-bet #+# #+# */
|
/* Created: 2023/01/11 15:33:34 by erey-bet #+# #+# */
|
||||||
/* Updated: 2023/01/30 14:03:26 by erey-bet ### ########.fr */
|
/* Updated: 2023/02/14 14:02:35 by erey-bet ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
@ -38,9 +38,14 @@ int print_error(int type, char *error);
|
||||||
char **get_flags(char *cmd);
|
char **get_flags(char *cmd);
|
||||||
char *get_command(char *cmd);
|
char *get_command(char *cmd);
|
||||||
char **add_cmd(char **flg, char *cmd);
|
char **add_cmd(char **flg, char *cmd);
|
||||||
int parsing(int argc, char *argv[], t_data *data);
|
int parsing(int argc, char *argv[], char **env, t_data *data);
|
||||||
char *test_acces(char **s, char **cmd, char **path, int *y);
|
char *test_acces(char **s, char **cmd, char **path, int *y);
|
||||||
char *cmd_exist(char **env, char **cmd, int y, char **s);
|
char *cmd_exist(char **env, char **cmd, int y, char **s);
|
||||||
char *find_command(char **env, char *cmd);
|
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 cmd(t_data data, int i, int t);
|
||||||
|
int verification_command(char *argv[], t_data data);
|
||||||
|
int free_all(t_data *data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
55
bonus/pipex_heredoc.c
Normal file
55
bonus/pipex_heredoc.c
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* pipex_heredoc.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/14 11:22:13 by erey-bet #+# #+# */
|
||||||
|
/* Updated: 2023/02/14 14:59:59 by erey-bet ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "pipex.h"
|
||||||
|
|
||||||
|
int parsing_here_doc(int argc, char *argv[], t_data *data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
data->fd2 = open(argv[argc], O_WRONLY | O_TRUNC | O_CREAT);
|
||||||
|
if (data->fd2 < 0)
|
||||||
|
return (1);
|
||||||
|
data->cmds = ft_calloc(argc - 2, sizeof(char *));
|
||||||
|
data->flgs = ft_calloc(argc - 2, sizeof(char *));
|
||||||
|
i = -1;
|
||||||
|
while (++i < argc - 3)
|
||||||
|
{
|
||||||
|
data->cmds[i] = get_command(argv[3 + i]);
|
||||||
|
data->flgs[i] = ft_split(argv[3 + i], ' ');
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int here_doc(int argc, char *argv[], char **env, t_data *data)
|
||||||
|
{
|
||||||
|
char *cur;
|
||||||
|
int fd[2];
|
||||||
|
|
||||||
|
if (pipe(fd) < -1)
|
||||||
|
return (1);
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
cur = get_next_line(0);
|
||||||
|
if (ft_strncmp(cur, argv[2], ft_strlen(argv[2])) == 0)
|
||||||
|
break ;
|
||||||
|
ft_putstr_fd(cur, fd[1]);
|
||||||
|
free(cur);
|
||||||
|
}
|
||||||
|
free(cur);
|
||||||
|
data->fd1 = fd[0];
|
||||||
|
close(fd[1]);
|
||||||
|
if (parsing_here_doc(argc, argv, data) > 0)
|
||||||
|
return (1);
|
||||||
|
data->env = env;
|
||||||
|
return (0);
|
||||||
|
}
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#include "pipex.h"
|
#include "pipex.h"
|
||||||
|
|
||||||
int parsing(int argc, char *argv[], t_data *data)
|
int parsing(int argc, char *argv[], char **env, t_data *data)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ int parsing(int argc, char *argv[], t_data *data)
|
||||||
return (1);
|
return (1);
|
||||||
data->fd1 = open(argv[1], O_RDONLY);
|
data->fd1 = open(argv[1], O_RDONLY);
|
||||||
if (data->fd1 < 0)
|
if (data->fd1 < 0)
|
||||||
print_error(0, argv[1]);
|
return (print_error(0, argv[1]));
|
||||||
data->cmds = ft_calloc(argc - 2, sizeof(char *));
|
data->cmds = ft_calloc(argc - 2, sizeof(char *));
|
||||||
data->flgs = ft_calloc(argc - 2, sizeof(char *));
|
data->flgs = ft_calloc(argc - 2, sizeof(char *));
|
||||||
i = -1;
|
i = -1;
|
||||||
|
@ -30,8 +30,7 @@ int parsing(int argc, char *argv[], t_data *data)
|
||||||
data->cmds[i] = get_command(argv[2 + i]);
|
data->cmds[i] = get_command(argv[2 + i]);
|
||||||
data->flgs[i] = ft_split(argv[2 + i], ' ');
|
data->flgs[i] = ft_split(argv[2 + i], ' ');
|
||||||
}
|
}
|
||||||
data->fl1 = argv[1];
|
data->env = env;
|
||||||
data->fl2 = argv[argc - 1];
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
54
bonus/pipex_utils2.c
Normal file
54
bonus/pipex_utils2.c
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* pipex_utils2.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/14 15:46:08 by erey-bet #+# #+# */
|
||||||
|
/* Updated: 2023/02/14 15:48:06 by erey-bet ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "pipex.h"
|
||||||
|
|
||||||
|
int pipex_loop(int argc, int **fk, t_data data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = -1;
|
||||||
|
while (++i < argc - 3)
|
||||||
|
{
|
||||||
|
(*fk)[i] = fork();
|
||||||
|
if ((*fk)[i] < 0)
|
||||||
|
return (1);
|
||||||
|
if ((*fk)[i] == 0)
|
||||||
|
{
|
||||||
|
if (i == 0 && data.fd1 > 0 && data.cmds[0])
|
||||||
|
cmd(data, i, 0);
|
||||||
|
else if (i + 1 < argc - 3)
|
||||||
|
cmd(data, i, 1);
|
||||||
|
else
|
||||||
|
cmd(data, i, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int verification_command(char *argv[], t_data data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = -1;
|
||||||
|
while (++i < data.argc - 3)
|
||||||
|
{
|
||||||
|
data.cmds[i] = find_command(data.env, data.cmds[i]);
|
||||||
|
if (data.cmds[i] == NULL)
|
||||||
|
{
|
||||||
|
print_error(1, argv[2 + i]);
|
||||||
|
if (i == data.argc - 4)
|
||||||
|
return (free_all(&data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/01/19 17:03:01 by erey-bet #+# #+# */
|
/* Created: 2023/01/19 17:03:01 by erey-bet #+# #+# */
|
||||||
/* Updated: 2023/01/20 14:54:05 by erey-bet ### ########.fr */
|
/* Updated: 2023/02/14 16:49:31 by erey-bet ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ int parsing(char *argv[], t_data *data)
|
||||||
return (1);
|
return (1);
|
||||||
data->fd1 = open(argv[1], O_RDONLY);
|
data->fd1 = open(argv[1], O_RDONLY);
|
||||||
if (data->fd1 < 0)
|
if (data->fd1 < 0)
|
||||||
print_error(0, argv[1]);
|
return (print_error(0, argv[1]));
|
||||||
data->cmd1 = get_command(argv[2]);
|
data->cmd1 = get_command(argv[2]);
|
||||||
data->cmd2 = get_command(argv[3]);
|
data->cmd2 = get_command(argv[3]);
|
||||||
data->flg1 = ft_split(argv[2], ' ');
|
data->flg1 = ft_split(argv[2], ' ');
|
||||||
|
|
Loading…
Reference in a new issue