/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_utils_gnl.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: fgras-ca +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/11 22:21:44 by fgras-ca #+# #+# */ /* Updated: 2024/01/11 22:24:01 by fgras-ca ### ########.fr */ /* */ /* ************************************************************************** */ #include "../cub3d.h" char *ft_get_line(char *left_str) { int i; char *str; i = 0; if (!left_str[i]) return (NULL); while (left_str[i] && left_str[i] != '\n') i++; str = (char *)malloc(sizeof(char) * (i + 2)); if (!str) return (NULL); i = 0; while (left_str[i] && left_str[i] != '\n') { str[i] = left_str[i]; i++; } if (left_str[i] == '\n') { str[i] = left_str[i]; i++; } str[i] = '\0'; return (str); } char *ft_new_left_str(char *left_str) { int i; int j; char *str; i = 0; while (left_str[i] && left_str[i] != '\n') i++; if (!left_str[i]) { free(left_str); return (NULL); } str = (char *)malloc(sizeof(char) * (ft_strlen(left_str) - i + 1)); if (!str) return (NULL); i++; j = 0; while (left_str[i]) str[j++] = left_str[i++]; str[j] = '\0'; free(left_str); return (str); } char *ft_read_to_left_str(int fd, char *left_str) { char *buff; int rd_bytes; buff = malloc((BUFFER_SIZE + 1) * sizeof(char)); if (!buff) return (NULL); rd_bytes = 1; while (!ft_strchr(left_str, '\n') && rd_bytes != 0) { rd_bytes = read(fd, buff, BUFFER_SIZE); if (rd_bytes == -1) { free(buff); return (NULL); } buff[rd_bytes] = '\0'; left_str = ft_strjoin(left_str, buff); } free(buff); return (left_str); } char *get_next_line(int fd) { char *line; static char *left_str; if (fd < 0 || BUFFER_SIZE <= 0) return (0); left_str = ft_read_to_left_str(fd, left_str); if (!left_str) return (NULL); line = ft_get_line(left_str); left_str = ft_new_left_str(left_str); return (line); }