diff options
| author | Dominik Kaiser | 2024-03-25 11:59:40 +0100 |
|---|---|---|
| committer | Dominik Kaiser | 2024-03-25 11:59:40 +0100 |
| commit | baa1352385373ebdfcffa6272d9ca3a19cbf1210 (patch) | |
| tree | 8a410bb45c0be5b91441bcd6ea6bb049c3faf7b8 | |
| parent | c9e8005df3f0f3f68f58626420960519b078f5a4 (diff) | |
| download | get_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.c | 32 | ||||
| -rw-r--r-- | get_next_line_utils.c | 12 |
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); } |
