diff --git a/get_next_line.c b/get_next_line.c index 1af3807..a200496 100644 --- a/get_next_line.c +++ b/get_next_line.c @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/21 17:20:41 by dgaillet #+# #+# */ -/* Updated: 2025/11/23 19:08:58 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/24 15:53:55 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -50,18 +50,30 @@ static char *get_on_line(int fd, char buf[BUFFER_SIZE], char *nl, int res) return (nl); } -static char *return_full_nl(int fd, char buf[BUFFER_SIZE], char *nl) +static char *return_full_nl(int fd, char buf[BUFFER_SIZE], + char *nl, char **last_nl) { int res; + char *temp; + if (!nl) + return (NULL); ft_bzero(buf, BUFFER_SIZE); res = read(fd, buf, BUFFER_SIZE); + if (res == 0 && ft_strlen(nl) > 0) + { + *last_nl = NULL; + return (nl); + } if (res <= 0) { free(nl); + *last_nl = NULL; return (NULL); } - return (get_on_line(fd, buf, nl, res)); + temp = get_on_line(fd, buf, nl, res); + *last_nl = &buf[index_of_nl(buf, BUFFER_SIZE)]; + return (temp); } static char *ft_ptr_match(void *to_search, void *to_match, int limit) @@ -98,35 +110,10 @@ char *get_next_line(int fd) temp = ft_substr(temp, 1, nl_i + 1); return (temp); } - temp = ft_substr(temp, 1, &buf[BUFFER_SIZE] - temp); - temp = return_full_nl(fd, buf, temp); + temp = ft_substr(temp, 1, BUFFER_SIZE); + temp = return_full_nl(fd, buf, temp, &last_nl); } else - temp = return_full_nl(fd, buf, ft_calloc(sizeof(char), 1)); - if (temp) - last_nl = &buf[index_of_nl(buf, BUFFER_SIZE)]; + temp = return_full_nl(fd, buf, ft_calloc(sizeof(char), 1), &last_nl); return (temp); } -/* -#include -#include - -int main(int argc, char **argv) -{ - char *str; - int fd; - - if (argc > 1) - { - fd = open(argv[1], O_RDONLY); - str = get_next_line(fd); - while (str) - { - printf("%s", str); - free(str); - str = get_next_line(fd); - } - close(fd); - } -} -*/ diff --git a/get_next_line_utils.c b/get_next_line_utils.c index cc528de..80c9023 100644 --- a/get_next_line_utils.c +++ b/get_next_line_utils.c @@ -6,11 +6,12 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/21 17:21:38 by dgaillet #+# #+# */ -/* Updated: 2025/11/23 18:42:45 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/24 14:01:01 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include "get_next_line.h" +#include int index_of_nl(char *str, int limit) { @@ -93,7 +94,7 @@ void *ft_calloc(size_t nmemb, size_t size) void *all_mem; size_t i; - if (size && nmemb > 65535 / size) + if (size && nmemb > SIZE_MAX / size) return (malloc(0)); all_mem = malloc(size * nmemb); if (!all_mem)