summaryrefslogtreecommitdiff
path: root/get_next_line.c
diff options
context:
space:
mode:
authorDominik Kaiser2024-03-25 14:20:51 +0100
committerDominik Kaiser2024-03-25 14:20:51 +0100
commitac2a1018fe004bf158025eacb6bf78c2bd3fce7a (patch)
treee0662c38967cc2c7e8716a36a324b7419bcfe524 /get_next_line.c
parent33a83031dd615a342e2acf33cc134bb0a2a4acb8 (diff)
downloadget_next_line-ac2a1018fe004bf158025eacb6bf78c2bd3fce7a.tar.gz
get_next_line-ac2a1018fe004bf158025eacb6bf78c2bd3fce7a.zip
Refactor some more
Should be ready for eval now
Diffstat (limited to 'get_next_line.c')
-rw-r--r--get_next_line.c69
1 files changed, 20 insertions, 49 deletions
diff --git a/get_next_line.c b/get_next_line.c
index 86451d8..4cfdf0f 100644
--- a/get_next_line.c
+++ b/get_next_line.c
@@ -6,45 +6,16 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/15 14:13:51 by dkaiser #+# #+# */
-/* Updated: 2024/03/25 13:01:16 by dkaiser ### ########.fr */
+/* Updated: 2024/03/25 14:20:22 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "get_next_line.h"
-char *str_add_buffer(char *old_str, char *buf, int buf_len)
+int get_next_line_len(char *buf, int pos)
{
- char *result;
- int len;
- int i;
+ int len;
- if (!old_str)
- len = buf_len;
- else
- len = ft_strlen(old_str) + buf_len;
- result = malloc(sizeof(char) * (len + 1));
- if (!result)
- return (NULL);
- result[len] = '\0';
- i = 0;
- while (old_str && old_str[i])
- {
- result[i] = old_str[i];
- i++;
- }
- while (i < len)
- result[i++] = *(buf++);
- free(old_str);
- return (result);
-}
-
-void get_next_line_rec(int fd, char *buf, char **result, int pos)
-{
- int len;
- int i;
- int readlen;
-
- readlen = 0;
len = 0;
while (pos + len < BUFFER_SIZE)
{
@@ -57,24 +28,28 @@ void get_next_line_rec(int fd, char *buf, char **result, int pos)
break ;
len++;
}
+ return (len);
+}
+
+void get_next_line_rec(int fd, char *buf, char **result, int pos)
+{
+ int len;
+ int i;
+ int readlen;
+
+ len = get_next_line_len(buf, pos);
*result = str_add_buffer(*result, buf + pos, len);
if (pos + len == BUFFER_SIZE && buf[BUFFER_SIZE - 1] == '\n')
- {
- while (pos < BUFFER_SIZE)
- buf[pos++] = '\0';
- return ;
- }
- len = pos + len;
- while (pos < len)
- buf[pos++] = '\0';
- if (pos == BUFFER_SIZE && *result)
+ return (clear_buffer(buf, pos));
+ i = 0;
+ while (i < len)
+ buf[pos + i++] = '\0';
+ if (pos + len == BUFFER_SIZE && *result)
{
readlen = read(fd, buf, BUFFER_SIZE);
if (readlen < 0)
{
- i = 0;
- while (i < BUFFER_SIZE)
- buf[i++] = '\0';
+ clear_buffer(buf, 0);
free(*result);
*result = NULL;
return ;
@@ -100,11 +75,7 @@ char *get_next_line(int fd)
{
readlen = read(fd, buf, BUFFER_SIZE);
if (readlen < 0)
- {
- i = 0;
- while (i < BUFFER_SIZE)
- buf[i++] = '\0';
- }
+ clear_buffer(buf, 0);
else if (readlen > 0)
return (get_next_line(fd));
return (NULL);