/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/15 14:13:51 by dkaiser #+# #+# */
-/* Updated: 2024/03/21 16:21:33 by dkaiser ### ########.fr */
+/* Updated: 2024/03/22 16:51:40 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "get_next_line.h"
-int get_next_line_len(char *buffer)
+char *str_add_buffer(char *old_str, char *buf, int pos, int buf_len)
{
- int len;
+ char *result;
+ int len;
+ int i;
- len = 0;
- while (len < BUFFER_SIZE)
+ if (!old_str)
+ len = buf_len;
+ else
+ len = ft_strlen(old_str) + buf_len;
+ result = malloc(sizeof(char) * len);
+ if (!result)
+ return (NULL);
+ result[len] = '\0';
+ i = 0;
+ while (old_str && old_str[i])
{
- if (!buffer[len])
- return (len);
- if (buffer[len] == '\n')
- return (len + 1);
- len++;
+ result[i] = old_str[i];
+ i++;
}
- return (-1);
+ while (i < len)
+ result[i++] = buf[pos++];
+ return (result);
}
-char *get_next_line_rec(int fd, char *buffer, char *result)
+void get_next_line_rec(int fd, char *buf, char **ptr_result, int pos)
{
- int len;
-
- if (!buffer[0])
- read(fd, buffer, BUFFER_SIZE);
- len = get_next_line_len(buffer);
- if (!len)
- return (result);
+ int len;
+ int i;
+ char *old_res;
+ char *result;
+ int readlen;
- return (result);
+ result = *ptr_result;
+ readlen = 0;
+ len = 0;
+ while (pos + len < BUFFER_SIZE)
+ {
+ if (buf[pos + len] == '\n')
+ {
+ len++;
+ break;
+ }
+ if (!buf[pos + len])
+ break ;
+ len++;
+ }
+ old_res = result;
+ result = str_add_buffer(old_res, buf, pos, len);
+ *ptr_result = result;
+ free(old_res);
+ if (!result)
+ return ;
+ i = 0;
+ while (i < len)
+ buf[pos + i++] = '\0';
+ if (pos + len == BUFFER_SIZE)
+ {
+ readlen = read(fd, buf, BUFFER_SIZE);
+ if (readlen > 0)
+ get_next_line_rec(fd, buf, &result, 0);
+ }
+ *ptr_result = result;
}
char *get_next_line(int fd)
{
- static char buffer[BUFFER_SIZE];
+ static char buf[BUFFER_SIZE];
+ int i;
char *result;
+ int readlen;
- return (NULL);
+ i = 0;
+ readlen = 0;
result = NULL;
- result = get_next_line_rec(fd, buffer, result);
+ while (i < BUFFER_SIZE && !buf[i])
+ i++;
+ if (i == BUFFER_SIZE)
+ {
+ readlen = read(fd, buf, BUFFER_SIZE);
+ if (readlen > 0)
+ return (get_next_line(fd));
+ return (NULL);
+ }
+ get_next_line_rec(fd, buf, &result, i);
return (result);
}
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/15 14:14:07 by dkaiser #+# #+# */
-/* Updated: 2024/03/21 15:22:54 by dkaiser ### ########.fr */
+/* Updated: 2024/03/22 12:04:28 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
# define BUFFER_SIZE 42
# endif
+int ft_strlen(const char *str);
char *get_next_line(int fd);
-char * str_realloc(char *str, size_t size);
+char *str_realloc(char *str, size_t size);
+
#endif // GET_NEXT_LINE_H
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/15 14:14:59 by dkaiser #+# #+# */
-/* Updated: 2024/03/21 15:22:40 by dkaiser ### ########.fr */
+/* Updated: 2024/03/22 12:05:00 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "get_next_line.h"
+int ft_strlen(const char *str)
+{
+ int len;
+
+ len = 0;
+ while (str[len])
+ len++;
+ return (len);
+}
+
char * str_realloc(char *str, size_t size)
{
char *result;