pipex/pipex.c
Etienne Rey-bethbeder ce946aeed1 v0.2
2023-01-12 18:00:19 +01:00

141 lines
1.9 KiB
C

#include "pipex.h"
char *read_file(int fd)
{
char *str;
int len;
int old_len;
str = get_next_line(fd);
len = ft_strlen(str);
old_len = 0;
while (len != old_len)
{
old_len = len;
str = ft_strjoin_free(str, get_next_line(fd), 2);
len = ft_strlen(str);
}
str[len] = '\0';
return (str);
}
int get_next(char *cmd, char c)
{
int i;
i = 0;
while (cmd[i] != c)
i++;
return (i);
}
char *get_flags(char *cmd)
{
int i;
int y;
char *new_str;
i = get_next(cmd, ' ');
new_str = ft_calloc(ft_strlen(cmd) - i + 1);
y = i;
while (cmd[i])
new_str[y++] = cmd[i++];
new_str[y] = '\0';
return (new_str);
}
char *get_command(char *cmd)
{
int i;
char *new_str;
new_str = ft_calloc(get_next(cmd, ' ') + 1);
i = -1;
while (cmd[++i] != ' ')
new_str[i] = cmd[i];
new_str[i] = '\0';
return (new_str);
}
int parsing(char *argv[], t_data *data)
{
int fd1;
int fd2;
fd2 = open(argv[4], O_WRONLY | O_TRUNC | O_CREAT);
if (fd2 < 0)
return (-1);
fd1 = open(argv[1], O_RDONLY);
if (fd1 < 0)
{
close(fd2);
return (-1);
}
data->cmd1 = get_command(argv[2]);
data->cmd2 = get_command(argv[3]);
data->flg1 = get_flags(argv[2]);
data->flg2 = get_flags(argv[3]);
data->fl1 = argv[1];
data->fl2 = argv[4];
data->ct_fl1 = read_file(fd1);
close(fd1);
return (0);
}
int find_command(char **env)
{
char *s;
while (*env != NULL)
{
if (ft_strnstr(*env, "PATH=/", ft_strlen(*env)))
s = *env;
env++;
}
}
int first_cmd(int fd[2], t_data data)
{
close(fd[0]);
execve(data->cmd1)
}
int second_cmd(int fd[2], t_data data)
{
}
int pipex(t_data data)
{
int fd[2]
int id;
if (pipe(fd) < -1)
return (1);
id = fork();
if (id == 0)
1_cmd(fd, data);
else
2_cmd(fd, data);
}
#include <stdio.h>
int main(int argc, char *argv[], char **env)
{
//t_data data;
(void)argc;
(void)argv;
/*if (argc < 5)
return (1);
if (parsing(argv, &data))
return (2);
find_command(env);
if (pipex(data))
return (3);
free(data.fl1);*/
return (0);
}