From b1a66b8617f4d9696ab1d359f22f5529804cdda9 Mon Sep 17 00:00:00 2001 From: whaffman Date: Mon, 28 Oct 2024 14:30:25 +0100 Subject: [PATCH] newer libft --- src/libft/Makefile | 8 ++++---- src/libft/ft_calloc.c | 2 +- src/libft/ft_lstmap.c | 8 +++++--- src/libft/ft_split.c | 17 ++++++++++++++--- src/libft/ft_strlcat.c | 8 ++++---- src/libft/ft_strrchr.c | 4 ++-- 6 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/libft/Makefile b/src/libft/Makefile index d100be4..23fa4ae 100644 --- a/src/libft/Makefile +++ b/src/libft/Makefile @@ -20,15 +20,15 @@ SOURCES = ft_atoi.c ft_bzero.c ft_calloc.c ft_isalnum.c ft_isalpha.c \ ft_strlen.c ft_strmapi.c ft_strncmp.c ft_strnstr.c ft_strrchr.c \ ft_strtrim.c ft_substr.c ft_tolower.c ft_toupper.c -BONUS_SOURCES = ft_lstadd_back.c ft_lstadd_front.c ft_lstclear.c \ - ft_lstdelone.c ft_lstiter.c ft_lstlast.c ft_lstmap.c \ - ft_lstnew.c ft_lstsize.c +BONUS_SOURCES = ft_lstadd_back_bonus.c ft_lstadd_front_bonus.c ft_lstclear_bonus.c \ + ft_lstdelone_bonus.c ft_lstiter_bonus.c ft_lstlast_bonus.c ft_lstmap_bonus.c \ + ft_lstnew_bonus.c ft_lstsize_bonus.c OBJECTS = $(SOURCES:.c=.o) BONUS_OBJECTS = $(BONUS_SOURCES:.c=.o) -CC = gcc +CC = cc CFLAGS = -Wall -Wextra -Werror all: $(NAME) diff --git a/src/libft/ft_calloc.c b/src/libft/ft_calloc.c index dc8cd85..99f0f76 100644 --- a/src/libft/ft_calloc.c +++ b/src/libft/ft_calloc.c @@ -17,7 +17,7 @@ void *ft_calloc(size_t nmemb, size_t size) { void *ptr; - if (nmemb && nmemb > (size_t) -1 / nmemb) + if (nmemb && size > (size_t) -1 / nmemb) { return (0); } diff --git a/src/libft/ft_lstmap.c b/src/libft/ft_lstmap.c index 1d5ecf5..fa3a112 100644 --- a/src/libft/ft_lstmap.c +++ b/src/libft/ft_lstmap.c @@ -11,20 +11,22 @@ /* ************************************************************************** */ #include "libft.h" +#include t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) { t_list *new_list; t_list *new_elem; + void *new_content; - if (!lst || !f) - return (NULL); new_list = NULL; while (lst) { - new_elem = ft_lstnew(f(lst->content)); + new_content = f(lst->content); + new_elem = ft_lstnew(new_content); if (!new_elem) { + del(new_content); ft_lstclear(&new_list, del); return (NULL); } diff --git a/src/libft/ft_split.c b/src/libft/ft_split.c index 288fba7..33cb5e9 100644 --- a/src/libft/ft_split.c +++ b/src/libft/ft_split.c @@ -11,6 +11,7 @@ /* ************************************************************************** */ #include +#include #include "libft.h" static int count_words(char const *s, char c) @@ -29,6 +30,16 @@ static int count_words(char const *s, char c) return (n); } +static void *free_arr(int n, char ***arr) +{ + while (n-- > 0) + { + free((*arr)[n]); + } + free(*arr); + return (NULL); +} + char **ft_split(char const *s, char c) { char **result; @@ -36,8 +47,6 @@ char **ft_split(char const *s, char c) int i; int j; - if (!s) - return (NULL); result = malloc((count_words(s, c) + 1) * sizeof(char *)); if (!result) return (NULL); @@ -51,7 +60,9 @@ char **ft_split(char const *s, char c) while (s[i + j] && s[i + j] != c) j++; if (j) - result[n++] = ft_substr(s, i, j); + result[n] = ft_substr(s, i, j); + if (j && !result[n++]) + return (free_arr(n, &result)); i += j; } result[n] = NULL; diff --git a/src/libft/ft_strlcat.c b/src/libft/ft_strlcat.c index 04cce3a..a5b5cd1 100644 --- a/src/libft/ft_strlcat.c +++ b/src/libft/ft_strlcat.c @@ -14,15 +14,15 @@ size_t ft_strlcat(char *dst, const char *src, size_t size) { - unsigned int src_len; - unsigned int dst_len; - unsigned int i; + size_t src_len; + size_t dst_len; + size_t i; src_len = ft_strlen(src); if (size == 0) return (src_len); dst_len = ft_strlen(dst); - if (dst_len >= (long int) size) + if (dst_len >= size) return (size + src_len); i = 0; while (src[i] && i < size - dst_len - 1) diff --git a/src/libft/ft_strrchr.c b/src/libft/ft_strrchr.c index 9902210..d8e688d 100644 --- a/src/libft/ft_strrchr.c +++ b/src/libft/ft_strrchr.c @@ -19,11 +19,11 @@ char *ft_strrchr(const char *s, int c) result = NULL; while (*s) { - if (*(unsigned char *) s == (unsigned char) c) + if (*s == (char) c) result = (char *) s; s++; } - if ('\0' == c) + if ('\0' == (char) c) result = (char *) s; return (result); }