/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* get_next_line.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: cchauvet <cchauvet@student.42angoulem +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/26 00:52:47 by cchauvet #+# #+# */ /* Updated: 2023/01/05 13:07:10 by cchauvet ### ########.fr */ /* */ /* ************************************************************************** */ #include "get_next_line.h" char *ft_getstash(int fd) { char *str; int readed; str = ft_calloc(BUFFER_SIZE + 1, sizeof(char)); if (str == NULL) return (NULL); readed = read(fd, str, BUFFER_SIZE); if (readed < 1) { free(str); return (NULL); } return (str); } char *ft_getline(int fd) { char *stash; char *buf; stash = NULL; buf = NULL; while (ft_strchri(stash, '\n') == -1) { buf = ft_getstash(fd); if (buf == NULL) return (stash); stash = ft_strfjoin(stash, buf); if (stash == NULL) return (NULL); } return (stash); } char *ft_getreturn(char *str) { int i; if (str == NULL) return (NULL); i = ft_strchri(str, '\n') + 1; if (i == 0) i = ft_strlen(str); return (ft_strndup(str, i)); } char *ft_getextra(char *str) { int i; int j; if (str == NULL) return (NULL); i = ft_strchri(str, '\n') + 1; if (i == 0) return (NULL); j = ft_strlen(str + i); return (ft_strndup(str + i, j)); } char *get_next_line(int fd) { static char *stash = NULL; char *buf1; char *buf2; buf2 = stash; if (ft_strchri(stash, '\n') == -1) { buf1 = ft_getline(fd); buf2 = ft_strfjoin(stash, buf1); if (buf2 == NULL) { free(buf1); return (NULL); } } buf1 = ft_getreturn(buf2); stash = ft_getextra(buf2); free(buf2); if (buf1 == NULL) { free(stash); free(buf1); return (NULL); } return (buf1); }