/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* get_next_line.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: grobledo +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/05/05 20:41:22 by grobledo #+# #+# */ /* Updated: 2023/05/05 20:41:25 by grobledo ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft.h" char *ft_join( char *buffer, char *buff_read) { char *temp; temp = ft_strjoing(buffer, buff_read); free (buffer); return (temp); } char *ft_nextline(char *buffer) { int i; int j; char *nextline; i = 0; while (buffer[i] && buffer[i] != '\n') i++; if (buffer[i] == '\n') i++; if (!buffer[i]) { free (buffer); return (NULL); } j = 0; nextline = ft_calloc(ft_strleng(buffer) - i + 1, sizeof(char)); while (buffer[i]) { nextline[j++] = buffer[i++]; } free (buffer); return (nextline); } char *ft_line(char *buffer) { char *line; int i; i = 0; if (!buffer) return (NULL); while (buffer[i] && buffer[i] != '\n') i++; line = ft_calloc(i + 2, sizeof(char)); i = 0; while (buffer[i] && buffer[i] != '\n') { line[i] = buffer[i]; i++; } if (buffer[i] && buffer[i] == '\n') line[i] = '\n'; return (line); } char *ft_readfile(int fd, char *buffer) { int byte_read; char *buff_read; buff_read = ft_calloc(BUFFER_SIZE + 1, sizeof(char)); byte_read = 1; while (byte_read > 0) { byte_read = read(fd, buff_read, BUFFER_SIZE); if (byte_read == 0) break ; if (byte_read == -1) { free(buff_read); return (NULL); } buff_read[byte_read] = 0; buffer = ft_join(buffer, buff_read); if (ft_strrchr(buff_read, '\n')) break ; } free (buff_read); return (buffer); } char *get_next_line(int fd) { char *line; static char *buffer = NULL; if (fd < 0 || BUFFER_SIZE <= 0 || read(fd, 0, 0) < 0) return (NULL); buffer = ft_readfile(fd, buffer); if (!buffer) return (NULL); line = ft_line(buffer); buffer = ft_nextline(buffer); return (line); }