summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Kaiser2024-03-25 11:59:40 +0100
committerDominik Kaiser2024-03-25 11:59:40 +0100
commitbaa1352385373ebdfcffa6272d9ca3a19cbf1210 (patch)
tree8a410bb45c0be5b91441bcd6ea6bb049c3faf7b8
parentc9e8005df3f0f3f68f58626420960519b078f5a4 (diff)
downloadget_next_line-baa1352385373ebdfcffa6272d9ca3a19cbf1210.tar.gz
get_next_line-baa1352385373ebdfcffa6272d9ca3a19cbf1210.zip
Code works now as it should.
TODO: Refactoring and some improvements Other than that, the code works fine and should pass eval after norminette has been dealt with.
-rw-r--r--get_next_line.c32
-rw-r--r--get_next_line_utils.c12
2 files changed, 35 insertions, 9 deletions
diff --git a/get_next_line.c b/get_next_line.c
index 7b43e06..4f28a34 100644
--- a/get_next_line.c
+++ b/get_next_line.c
@@ -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);
diff --git a/get_next_line_utils.c b/get_next_line_utils.c
index 6127736..690be2a 100644
--- a/get_next_line_utils.c
+++ b/get_next_line_utils.c
@@ -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);
}