From 69d485b2dbf54181ec8a6fff012e53abaa3a935c Mon Sep 17 00:00:00 2001 From: Adam Joly Date: Mon, 11 Dec 2023 05:09:21 +0100 Subject: [PATCH] finished --- a.out | Bin 16512 -> 19200 bytes fff/get_next_line_utils_madumerg.c | 73 +++++++++++++++++++++++ get_next_line.c | 58 +++++++++--------- get_next_line.h | 6 +- get_next_line_bonus.c | 85 +++++++++++++++++++++++++++ get_next_line_bonus.h | 29 +++++++++ get_next_line_utils.c | 44 ++++++-------- get_next_line_utils_bonus.c | 91 +++++++++++++++++++++++++++++ test.txt | 11 +++- 9 files changed, 339 insertions(+), 58 deletions(-) create mode 100644 fff/get_next_line_utils_madumerg.c create mode 100644 get_next_line_bonus.c create mode 100644 get_next_line_bonus.h create mode 100644 get_next_line_utils_bonus.c diff --git a/a.out b/a.out index edb2a4704821338b9367d09bd73dfc662c21b475..b3544e40d1b45e069fd6b39585e62eb38ca67e13 100755 GIT binary patch delta 4760 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/24 11:51:43 by madumerg #+# #+# */ +/* Updated: 2023/12/08 17:21:26 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line.h" + +size_t ft_strlen(char *str) +{ + size_t i; + + i = 0; + while (str[i]) + i++; + return (i); +} + +char *ft_strjoin(char *s1, char *s2) +{ + size_t len; + size_t i; + size_t j; + char *str; + + if (!s2) + return (NULL); + len = ft_strlen(s1) + ft_strlen(s2); + str = malloc(sizeof(char) * (len + 1)); + if (!str) + return (NULL); + i = 0; + while (s1[i] != '\0') + { + str[i] = s1[i]; + i++; + } + j = 0; + while (s2[j] != '\0') + str[i++] = s2[j++]; + free(s1); + str[i] = '\0'; + return (str); +} + +void *ft_calloc(size_t ct, size_t size) +{ + char *str; + size_t i; + + i = 0; + if (size == 0 || ct == 0) + return (malloc(1)); + if ((int)size < 0 && (int)ct < 0) + return (NULL); + if ((unsigned long long)(size * ct) > 4294967295) + return (NULL); + str = malloc(size * ct); + if (!str) + return (NULL); + while (i < (ct * size)) + { + *(unsigned char *)(str + i) = '\0'; + i++; + } + return (str); +} diff --git a/get_next_line.c b/get_next_line.c index f6c5497..4b5fa94 100644 --- a/get_next_line.c +++ b/get_next_line.c @@ -6,21 +6,34 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/01 17:11:59 by adjoly #+# #+# */ -/* Updated: 2023/12/08 11:31:04 by adjoly ### ########.fr */ +/* Updated: 2023/12/08 18:17:17 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "get_next_line.h" -int check_line(char *buf) +char check_line(char *res, char *buf) { int i; + int j; i = 0; - while (buf[i] && buf[i] != '\n') + j = 0; + while (res[i] && res[i] != '\n') i++; - if (buf[i] == '\n' || buf[i] == '\0') - return (i + (buf[i] == '\n')); + if (res[i] == '\n') + { + i++; + while (res[i]) + { + buf[j] = res[i]; + i++; + j++; + } + buf[j] = 0; + res[i - j] = 0; + return (1); + } return (0); } @@ -28,39 +41,32 @@ char *get_next_line(int fd) { static char *buf; char *res; - size_t size; - int bytes_read; + ssize_t bytes_read; - if (BUFFER_SIZE <= 0 || fd < 0) - return (NULL); res = ft_calloc(1, 1); - size = BUFFER_SIZE; if (!buf) - buf = malloc(sizeof(char) * (BUFFER_SIZE + 1)); + buf = ft_calloc(sizeof(char), BUFFER_SIZE + 1); while (buf && res) { + res = ft_strjoin(res, buf); + if (check_line(res, buf)) + return (res); bytes_read = read(fd, buf, BUFFER_SIZE); - size = check_line(buf); - res = ft_strljoin(res, buf, size); - // ft_strlcpy(buf, &res[size], ft_strlen(&res[size])); if (bytes_read < 1) { - if (ft_strlen(res) > 0) - { - free(buf); - return (res); - } free(buf); buf = NULL; + if (res[0] != 0) + return (res); + free(res); return (NULL); } - else if (bytes_read >= 1) - return (res); + buf[bytes_read] = 0; } return (NULL); } -#include +/*#include void ft_putstr(char *str){if (str == NULL){return ;}int i = 0;while(str[i]){write(1, &str[i], 1);i++;}} #include #include @@ -69,11 +75,11 @@ int main(void) char *ln; int fd; fd = open("test.txt", O_RDONLY); - // while (ln != NULL) - // { + while (ln) + { ln = get_next_line(fd); ft_putstr(ln); free(ln); - // } + } close(fd); -} +}*/ diff --git a/get_next_line.h b/get_next_line.h index 38bc24e..d72585d 100644 --- a/get_next_line.h +++ b/get_next_line.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/01 17:12:00 by adjoly #+# #+# */ -/* Updated: 2023/12/08 11:12:12 by adjoly ### ########.fr */ +/* Updated: 2023/12/08 18:01:49 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,9 +21,9 @@ # endif char *get_next_line(int fd); -char *ft_strljoin(char *s1, char *s2, size_t len); +char *ft_strjoin(char *s1, char *s2); size_t ft_strlen(char *s); void *ft_calloc(size_t nmemb, size_t size); -size_t ft_strlcpy(char *dst, char *src, size_t size); +size_t ft_strlen_nl(char *s); #endif \ No newline at end of file diff --git a/get_next_line_bonus.c b/get_next_line_bonus.c new file mode 100644 index 0000000..dc6235d --- /dev/null +++ b/get_next_line_bonus.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/12/01 17:11:59 by adjoly #+# #+# */ +/* Updated: 2023/12/08 18:02:13 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line_bonus.h" + +char check_line(char *res, char *buf) +{ + int i; + int j; + + i = 0; + j = 0; + while (res[i] && res[i] != '\n') + i++; + if (res[i] == '\n') + { + i++; + while (res[i]) + { + buf[j] = res[i]; + i++; + j++; + } + buf[j] = 0; + res[i - j] = 0; + return (1); + } + return (0); +} + +char *get_next_line(int fd) +{ + static char *buf[1024]; + char *res; + size_t bytes_read; + + res = ft_calloc(1, 1); + if (!buf[fd]) + buf[fd] = ft_calloc(sizeof(char), BUFFER_SIZE + 1); + while (buf[fd] && res) + { + res = ft_strjoin(res, buf); + if (check_line(res, buf[fd])) + return (res); + bytes_read = read(fd, buf[fd], BUFFER_SIZE); + if (bytes_read < 1) + { + free(&buf[fd]); + buf[fd] = NULL; + if (res[0] != 0) + return (res); + free(res); + return (NULL); + } + buf[fd][bytes_read] = 0; + } + return (NULL); +} + +/*#include +void ft_putstr(char *str){if (str == NULL){return ;}int i = 0;while(str[i]){write(1, &str[i], 1);i++;}} +#include +#include +int main(void) +{ + char *ln; + int fd; + fd = open("test.txt", O_RDONLY); + while (ln) + { + ln = get_next_line(fd); + ft_putstr(ln); + free(ln); + } + close(fd); +}*/ diff --git a/get_next_line_bonus.h b/get_next_line_bonus.h new file mode 100644 index 0000000..9fa539a --- /dev/null +++ b/get_next_line_bonus.h @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_bonus.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/12/01 17:12:00 by adjoly #+# #+# */ +/* Updated: 2023/12/08 18:01:40 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_BONUS_H +# define GET_NEXT_LINE_BONUS_H + +# include +# include + +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 5 +# endif + +char *get_next_line(int fd); +char *ft_strjoin(char *s1, char *s2); +size_t ft_strlen(char *s); +void *ft_calloc(size_t nmemb, size_t size); +size_t ft_strlen_nl(char *s); + +#endif \ No newline at end of file diff --git a/get_next_line_utils.c b/get_next_line_utils.c index bb97260..37fcc75 100644 --- a/get_next_line_utils.c +++ b/get_next_line_utils.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/01 17:12:02 by adjoly #+# #+# */ -/* Updated: 2023/12/08 11:17:51 by adjoly ### ########.fr */ +/* Updated: 2023/12/08 17:52:41 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,17 +22,7 @@ size_t ft_strlen(char *s) return (i); } -/*size_t ft_strlen_til_nl(char *s) -{ - size_t i; - - i = 0; - while (s[i] && s[i] != '\n') - i++; - return (i); -}*/ - -char *ft_strljoin(char *s1, char *s2, size_t len) +char *ft_strjoin(char *s1, char *s2) { char *result; size_t i; @@ -40,9 +30,9 @@ char *ft_strljoin(char *s1, char *s2, size_t len) i = 0; j = 0; - if (!s1 || !s2) + if (!s2) return (NULL); - result = ft_calloc((ft_strlen(s1) + len + 1), sizeof(char)); + result = ft_calloc((ft_strlen(s1) + ft_strlen(s2) + 1), sizeof(char)); if (result == NULL) return (NULL); while (s1[i]) @@ -50,7 +40,7 @@ char *ft_strljoin(char *s1, char *s2, size_t len) result[i] = s1[i]; i++; } - while (s2[j] || j < len) + while (s2[j]) { result[i] = s2[j]; i++; @@ -68,32 +58,34 @@ size_t ft_strlcpy(char *dst, char *src, size_t size) i = 0; if (size == 0) return (ft_strlen(src)); - while (i < size - 1 && src[i]) + while (i < size && src[i]) { dst[i] = src[i]; i++; } - if (i < size) - dst[i] = '\0'; + dst[size] = '\0'; return (ft_strlen(src)); } void *ft_calloc(size_t nmemb, size_t size) { + char *str; size_t i; - void *result; - if (size != 0 && nmemb != 0 && (nmemb * size) / nmemb != size) - return (NULL); + i = 0; if (nmemb == 0 || size == 0) return (malloc(1)); - result = malloc(size * nmemb); - if (result == NULL) + if ((int)size < 0 && (int)nmemb < 0) return (NULL); - while (i < size * nmemb) + if ((unsigned long long)(size * nmemb) > 4294967295) + return (NULL); + str = malloc(nmemb * size); + if (!str) + return (NULL); + while (i < (nmemb * size)) { - *(unsigned char *)(result + i) = '\0'; + *(unsigned char *)(str + i) = '\0'; i++; } - return (result); + return (str); } diff --git a/get_next_line_utils_bonus.c b/get_next_line_utils_bonus.c new file mode 100644 index 0000000..2d6e67e --- /dev/null +++ b/get_next_line_utils_bonus.c @@ -0,0 +1,91 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line_utils_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/12/01 17:12:02 by adjoly #+# #+# */ +/* Updated: 2023/12/08 17:54:32 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line_bonus.h" + +size_t ft_strlen(char *s) +{ + size_t i; + + i = 0; + while (s[i]) + i++; + return (i); +} + +char *ft_strjoin(char *s1, char *s2) +{ + char *result; + size_t i; + size_t j; + + i = 0; + j = 0; + if (!s2) + return (NULL); + result = ft_calloc((ft_strlen(s1) + ft_strlen(s2) + 1), sizeof(char)); + if (result == NULL) + return (NULL); + while (s1[i]) + { + result[i] = s1[i]; + i++; + } + while (s2[j]) + { + result[i] = s2[j]; + i++; + j++; + } + free(s1); + result[i] = '\0'; + return (result); +} + +size_t ft_strlcpy(char *dst, char *src, size_t size) +{ + size_t i; + + i = 0; + if (size == 0) + return (ft_strlen(src)); + while (i < size && src[i]) + { + dst[i] = src[i]; + i++; + } + dst[size] = '\0'; + return (ft_strlen(src)); +} + +void *ft_calloc(size_t nmemb, size_t size) +{ + char *str; + size_t i; + + i = 0; + if (nmemb == 0 || size == 0) + return (malloc(1)); + if ((int)size < 0 && (int)nmemb < 0) + return (NULL); + if ((unsigned long long)(size * nmemb) > 4294967295) + return (NULL); + str = malloc(nmemb * size); + if (!str) + return (NULL); + while (i < (nmemb * size)) + { + *(unsigned char *)(str + i) = '\0'; + i++; + } + return (str); +} diff --git a/test.txt b/test.txt index 8f485f7..5be26ed 100644 --- a/test.txt +++ b/test.txt @@ -1,3 +1,8 @@ -Si tu lit cette ligne GGWP -Main non tu peux voir celle ci aussi -What tu lis celle la aussi +Si tu lis cette ligne GGWP +asdfasdf +sad +f + +sadf + +asdfasdff