fd3| /* ************************************************************************** */ fd4| /* ************************************************************************** */ fd5| /* ************************************************************************** */ fd3| /* */ fd4| /* */ fd5| /* */ fd3| /* ::: :::::::: */ fd4| /* ::: :::::::: */ fd5| /* ::: :::::::: */ fd3| /* get_next_line.c :+: :+: :+: */ fd4| /* get_next_line.h :+: :+: :+: */ fd5| /* get_next_line_utils.c :+: :+: :+: */ fd3| /* +:+ +:+ +:+ */ fd4| /* +:+ +:+ +:+ */ fd5| /* +:+ +:+ +:+ */ fd3| /* By: hulamy +#+ +:+ +#+ */ fd4| /* By: hulamy +#+ +:+ +#+ */ fd5| /* By: hulamy +#+ +:+ +#+ */ fd3| /* +#+#+#+#+#+ +#+ */ fd4| /* +#+#+#+#+#+ +#+ */ fd5| /* +#+#+#+#+#+ +#+ */ fd3| /* Created: 2019/12/11 00:27:09 by hulamy #+# #+# */ fd4| /* Created: 2019/01/29 10:19:37 by hulamy #+# #+# */ fd5| /* Created: 2019/12/11 00:26:54 by hulamy #+# #+# */ fd3| /* Updated: 2019/12/12 23:01:04 by hulamy ### ########.fr */ fd4| /* Updated: 2019/12/11 00:56:04 by hulamy ### ########.fr */ fd5| /* Updated: 2019/12/11 00:57:19 by hulamy ### ########.fr */ fd3| /* */ fd4| /* */ fd5| /* */ fd3| /* ************************************************************************** */ fd4| /* ************************************************************************** */ fd5| /* ************************************************************************** */ fd3| fd4| fd5| fd3| #include "get_next_line.h" fd4| #ifndef GET_NEXT_LINE_H fd5| #include "get_next_line.h" fd3| fd4| # define GET_NEXT_LINE_H fd5| fd3| fd4| fd5| char *ft_strdup(const char *src) fd3| #include //for printf fd4| # include fd5| { fd3| #include //for open fd4| # include fd5| int i; fd3| fd4| # include fd5| char *str; fd3| int main(int ac, char **av) fd4| fd5| fd3| { fd4| # ifndef BUFF_SIZE fd5| i = 0; fd3| int *fd; fd4| # define BUFF_SIZE 9999 fd5| while (src[i] != '\0') fd3| int i; fd4| # endif fd5| i++; fd3| int j; fd4| fd5| if (!(str = (char*)malloc(sizeof(*str) * (i + 1)))) fd3| char *line; fd4| typedef struct s_gnlist fd5| return (NULL); fd3| fd4| { fd5| while (i-- >= 0) fd3| if (ac < 2) fd4| int lfd; fd5| str[i + 1] = src[i + 1]; fd3| return (0); fd4| char *string; fd5| return (str); fd3| line = NULL; fd4| struct s_gnlist *next; fd5| } fd3| i = 0; fd4| } t_gnlist; fd5| fd3| if (!(fd = (int *)malloc(sizeof(int) * ac))) fd4| fd5| char *ft_strchr(const char *s, int c) fd3| return (0); fd4| int get_next_line(const int fd, char **line); fd5| { fd3| while (++i <= ac - 1) fd4| int multi_fd(int fd, t_gnlist **lst); fd5| int i; fd3| fd[i - 1] = open(av[i], O_RDONLY); fd4| char *ft_strjoinfree(char const *s1, char const *s2); fd5| int j; fd3| i = 0; fd4| int hasnewline(char *str, t_gnlist *lst, char **line); fd5| fd3| j = 0; fd4| fd5| i = 0; fd3| while (j < ac - 1) fd4| size_t ft_strlen(const char *str); fd5| j = -1; fd3| { fd4| void *ft_memmove(void *dst, const void *src, size_t len); fd5| while (s[i]) fd3| if (get_next_line(fd[i], &line) > 0) fd4| char *ft_strchr(const char *s, int c); fd5| i++; fd3| { fd4| char *ft_strdup(const char *src); fd5| while (++j < i + 1) fd3| printf("fd%i| %s\n", fd[i], line); fd4| fd5| if (s[j] == c) fd3| free(line); fd4| #endif fd5| return ((char *)s + j); fd3| j = 0; fd4|*FINI* fd5| return (NULL); fd3| } fd4|*FINI* fd5| } fd3| else fd4|*FINI* fd5| fd3| { fd4|*FINI* fd5| void *ft_memmove(void *dst, const void *src, size_t len) fd3| printf("fd%i|*FINI*\n", fd[i]); fd4|*FINI* fd5| { fd3| j++; fd4|*FINI* fd5| size_t i; fd3| } fd4|*FINI* fd5| char *cpsrc; fd3| i++; fd4|*FINI* fd5| char *cpdst; fd3| if (i >= ac - 1) fd4|*FINI* fd5| fd3| i = 0; fd4|*FINI* fd5| i = -1; fd3| } fd4|*FINI* fd5| cpsrc = (char *)src; fd3| free (fd); fd4|*FINI* fd5| cpdst = (char *)dst; fd3| // while (1); fd4|*FINI* fd5| if (dst == src) fd3| return (0); fd4|*FINI* fd5| return (dst); fd3| } fd4|*FINI* fd5| if (cpsrc < cpdst) fd3| fd4|*FINI* fd5| while (len--) fd3| fd4|*FINI* fd5| cpdst[len] = cpsrc[len]; fd3| int multi_fd(int fd, t_gnlist **lst) fd4|*FINI* fd5| else fd3| { fd4|*FINI* fd5| while (++i < len) fd3| t_gnlist *tmp; fd4|*FINI* fd5| cpdst[i] = cpsrc[i]; fd3| fd4|*FINI* fd5| return (dst); fd3| tmp = *lst; fd4|*FINI* fd5| } fd3| while (*lst && (*lst)->lfd != fd && (*lst)->next != tmp) fd4|*FINI* fd5| fd3| *lst = (*lst)->next; fd4|*FINI* fd5| size_t ft_strlen(const char *str) fd3| if (!tmp || ((*lst)->next == tmp && (*lst)->lfd != fd)) fd4|*FINI* fd5| { fd3| { fd4|*FINI* fd5| size_t i; fd3| if (!(tmp = (t_gnlist*)malloc(sizeof(*tmp)))) fd4|*FINI* fd5| fd3| return (0); fd4|*FINI* fd5| i = 0; fd3| tmp->lfd = fd; fd4|*FINI* fd5| while (str[i]) fd3| if (!(tmp->string = ft_strdup(""))) fd4|*FINI* fd5| i++; fd3| return (0); fd4|*FINI* fd5| return (i); fd3| if (*lst) fd4|*FINI* fd5| } fd3| { fd4|*FINI* fd5|*FINI* fd3| tmp->next = (*lst)->next; fd4|*FINI* fd5|*FINI* fd3| (*lst)->next = tmp; fd4|*FINI* fd5|*FINI* fd3| } fd4|*FINI* fd5|*FINI* fd3| else fd4|*FINI* fd5|*FINI* fd3| tmp->next = tmp; fd4|*FINI* fd5|*FINI* fd3| *lst = tmp; fd4|*FINI* fd5|*FINI* fd3| } fd4|*FINI* fd5|*FINI* fd3| //free(tmp); fd4|*FINI* fd5|*FINI* fd3| return (1); fd4|*FINI* fd5|*FINI* fd3| } fd4|*FINI* fd5|*FINI* fd3| fd4|*FINI* fd5|*FINI* fd3| char *ft_strjoinfree(char const *s1, char const *s2) fd4|*FINI* fd5|*FINI* fd3| { fd4|*FINI* fd5|*FINI* fd3| char *str; fd4|*FINI* fd5|*FINI* fd3| int len; fd4|*FINI* fd5|*FINI* fd3| int j; fd4|*FINI* fd5|*FINI* fd3| fd4|*FINI* fd5|*FINI* fd3| if (!s1 || !s2) fd4|*FINI* fd5|*FINI* fd3| return (NULL); fd4|*FINI* fd5|*FINI* fd3| len = ft_strlen(s1) + ft_strlen(s2); fd4|*FINI* fd5|*FINI* fd3| if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) fd4|*FINI* fd5|*FINI* fd3| return (NULL); fd4|*FINI* fd5|*FINI* fd3| len = 0; fd4|*FINI* fd5|*FINI* fd3| j = 0; fd4|*FINI* fd5|*FINI* fd3| while (s1[j] != '\0') fd4|*FINI* fd5|*FINI* fd3| str[len++] = s1[j++]; fd4|*FINI* fd5|*FINI* fd3| j = 0; fd4|*FINI* fd5|*FINI* fd3| while (s2[j] != '\0') fd4|*FINI* fd5|*FINI* fd3| str[len++] = s2[j++]; fd4|*FINI* fd5|*FINI* fd3| str[len] = '\0'; fd4|*FINI* fd5|*FINI* fd3| free((char*)s1); fd4|*FINI* fd5|*FINI* fd3| return (str); fd4|*FINI* fd5|*FINI* fd3| } fd4|*FINI* fd5|*FINI* fd3| fd4|*FINI* fd5|*FINI* fd3| int hasnewline(char *str, t_gnlist *lst, char **line) fd4|*FINI* fd5|*FINI* fd3| { fd4|*FINI* fd5|*FINI* fd3| str[0] = '\0'; fd4|*FINI* fd5|*FINI* fd3| if (!(*line = ft_strdup(lst->string))) fd4|*FINI* fd5|*FINI* fd3| return (-1); fd4|*FINI* fd5|*FINI* fd3| ft_memmove(lst->string, str + 1, ft_strlen(str + 1) + 1); fd4|*FINI* fd5|*FINI* fd3| return (1); fd4|*FINI* fd5|*FINI* fd3| } fd4|*FINI* fd5|*FINI* fd3| fd4|*FINI* fd5|*FINI* fd3| int get_next_line(const int fd, char **line) fd4|*FINI* fd5|*FINI* fd3| { fd4|*FINI* fd5|*FINI* fd3| char buf[BUFF_SIZE + 1]; fd4|*FINI* fd5|*FINI* fd3| int ret; fd4|*FINI* fd5|*FINI* fd3| static t_gnlist *lst = NULL; fd4|*FINI* fd5|*FINI* fd3| char *str; fd4|*FINI* fd5|*FINI* fd3| fd4|*FINI* fd5|*FINI* fd3| if (!(multi_fd(fd, &lst)) || !(ret = 1) || !line || fd < 0) fd4|*FINI* fd5|*FINI* fd3| return (-1); fd4|*FINI* fd5|*FINI* fd3| while (ret > 0) fd4|*FINI* fd5|*FINI* fd3| { fd4|*FINI* fd5|*FINI* fd3| if ((str = ft_strchr(lst->string, '\n'))) fd4|*FINI* fd5|*FINI* fd3| return (hasnewline(str, lst, line)); fd4|*FINI* fd5|*FINI* fd3| if ((ret = read(fd, buf, BUFF_SIZE)) < 0) fd4|*FINI* fd5|*FINI* fd3| return (-1); fd4|*FINI* fd5|*FINI* fd3| buf[ret] = '\0'; fd4|*FINI* fd5|*FINI* fd3| if (!(lst->string = ft_strjoinfree(lst->string, buf))) fd4|*FINI* fd5|*FINI* fd3| return (-1); fd4|*FINI* fd5|*FINI* fd3| } fd4|*FINI* fd5|*FINI* fd3| if (*(lst->string) && !(*line = ft_strdup(lst->string))) fd4|*FINI* fd5|*FINI* fd3| return (-1); fd4|*FINI* fd5|*FINI* fd3| if (*(lst->string) && ++ret == 1) fd4|*FINI* fd5|*FINI* fd3| (lst->string)[0] = '\0'; fd4|*FINI* fd5|*FINI* fd3| return (ret); fd4|*FINI* fd5|*FINI* fd3| } fd4|*FINI* fd5|*FINI* fd3|*FINI*