From: Dominik Kaiser Date: Fri, 12 Apr 2024 14:55:57 +0000 (+0200) Subject: Add get_next_line to libft X-Git-Url: https://git.dkaiser.de/?a=commitdiff_plain;h=358e300bc148d2a223e1cfa2a3c49da6c0ba968c;p=42%2Flibft.git Add get_next_line to libft --- diff --git a/Makefile b/Makefile index 6bf4a1a..7bab267 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,9 @@ SRC_FILES = ft_atoi.c \ ft_printf.c \ ft_printnbr.c \ ft_printhex.c \ - ft_printaddr.c + ft_printaddr.c \ + get_next_line.c \ + get_next_line_utils.c OBJ_FILES = $(SRC_FILES:.c=.o) @@ -62,7 +64,7 @@ $(NAME): $(OBJ_FILES) ar rcs $(NAME) $(OBJ_FILES) clean: - rm -f $(OBJ_FILES) $(BONUS_FILES) + rm -f $(OBJ_FILES) $(BONUS_OBJ) fclean: clean rm -f $(NAME) diff --git a/get_next_line.c b/get_next_line.c new file mode 100644 index 0000000..46edb73 --- /dev/null +++ b/get_next_line.c @@ -0,0 +1,84 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser 0) + get_next_line_rec(fd, buf, result, 0); + } +} + +char *get_next_line(int fd) +{ + static char buf[BUFFER_SIZE]; + int i; + char *result; + int readlen; + + i = 0; + readlen = 0; + result = NULL; + while (i < BUFFER_SIZE && !buf[i]) + i++; + if (i == BUFFER_SIZE) + { + readlen = read(fd, buf, BUFFER_SIZE); + if (readlen < 0) + clear_buffer(buf, 0); + else if (readlen > 0) + return (get_next_line(fd)); + return (NULL); + } + get_next_line_rec(fd, buf, &result, i); + return (result); +} diff --git a/get_next_line.h b/get_next_line.h new file mode 100644 index 0000000..63c477b --- /dev/null +++ b/get_next_line.h @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser +# include + +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 42 +# endif + +int ft_strlen(const char *str); +char *get_next_line(int fd); +void clear_buffer(char *buf, int start); +char *str_add_buffer(char *old_str, char *buf, int buf_len); +#endif // GET_NEXT_LINE_H diff --git a/get_next_line_utils.c b/get_next_line_utils.c new file mode 100644 index 0000000..61171be --- /dev/null +++ b/get_next_line_utils.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser # include # include