]> git.dkaiser.de - 42/get_next_line.git/commitdiff
Code works now as it should.
authorDominik Kaiser <dkaiser@1-C-11.42heilbronn.de>
Mon, 25 Mar 2024 10:59:40 +0000 (11:59 +0100)
committerDominik Kaiser <dkaiser@1-C-11.42heilbronn.de>
Mon, 25 Mar 2024 10:59:40 +0000 (11:59 +0100)
TODO: Refactoring and some improvements
Other than that, the code works fine and should pass eval after
norminette has been dealt with.

get_next_line.c
get_next_line_utils.c

index 7b43e06e079917592786705c99478c29b0dd98d7..4f28a3422cf331b6871b0204ed3539d5dcf4321e 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/03/15 14:13:51 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/03/22 16:51:40 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/03/25 11:57:40 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -22,7 +22,7 @@ char  *str_add_buffer(char *old_str, char *buf, int pos, int buf_len)
                len = buf_len;
        else
                len = ft_strlen(old_str) + buf_len;
-       result = malloc(sizeof(char) * len);
+       result = malloc(sizeof(char) * (len + 1));
        if (!result)
                return (NULL);
        result[len] = '\0';
@@ -53,12 +53,22 @@ void        get_next_line_rec(int fd, char *buf, char **ptr_result, int pos)
                if (buf[pos + len] == '\n')
                {
                        len++;
-                       break;
+                       break ;
                }
                if (!buf[pos + len])
                        break ;
                len++;
        }
+       if (pos + len == BUFFER_SIZE && buf[BUFFER_SIZE - 1] == '\n')
+       {
+               old_res = result;
+               result = str_add_buffer(old_res, buf, pos, BUFFER_SIZE - pos);
+               *ptr_result = result;
+               free(old_res);
+               while (pos < BUFFER_SIZE)
+                       buf[pos++] = '\0';
+               return ;
+       }
        old_res = result;
        result = str_add_buffer(old_res, buf, pos, len);
        *ptr_result = result;
@@ -71,6 +81,15 @@ void get_next_line_rec(int fd, char *buf, char **ptr_result, int pos)
        if (pos + len == BUFFER_SIZE)
        {
                readlen = read(fd, buf, BUFFER_SIZE);
+               if (readlen < 0)
+               {
+                       i = 0;
+                       while (i < BUFFER_SIZE)
+                               buf[i++] = '\0';
+                       free(result);
+                       *ptr_result = NULL;
+                       return ;
+               }
                if (readlen > 0)
                        get_next_line_rec(fd, buf, &result, 0);
        }
@@ -92,6 +111,13 @@ char        *get_next_line(int fd)
        if (i == BUFFER_SIZE)
        {
                readlen = read(fd, buf, BUFFER_SIZE);
+               if (readlen < 0)
+               {
+                       i = 0;
+                       while (i < BUFFER_SIZE)
+                               buf[i++] = '\0';
+                       return (NULL);
+               }
                if (readlen > 0)
                        return (get_next_line(fd));
                return (NULL);
index 612773659121e4be0172e1e71bbc3283d67ecd7c..690be2a2bb14f5f5a3629a82c066e4f3a07c3c5e 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/03/15 14:14:59 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/03/22 12:05:00 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/03/25 11:53:28 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -22,16 +22,16 @@ int ft_strlen(const char *str)
        return (len);
 }
 
-char str_realloc(char *str, size_t size)
+char   *str_realloc(char *str, size_t size)
 {
-       char *result;
-       size_t i;
+       char    *result;
+       size_t  i;
 
        result = malloc(size);
        if (!result)
        {
                free(str);
-               return NULL;
+               return (NULL);
        }
        i = 0;
        while (str[i])
@@ -41,5 +41,5 @@ char * str_realloc(char *str, size_t size)
        }
        while (i < size)
                result[i++] = '\0';
-       return result;
+       return (result);
 }