newer libft

This commit is contained in:
whaffman 2024-10-28 14:30:25 +01:00
parent 78f5ce8f03
commit b1a66b8617
6 changed files with 30 additions and 17 deletions

View File

@ -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_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 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 \ BONUS_SOURCES = ft_lstadd_back_bonus.c ft_lstadd_front_bonus.c ft_lstclear_bonus.c \
ft_lstdelone.c ft_lstiter.c ft_lstlast.c ft_lstmap.c \ ft_lstdelone_bonus.c ft_lstiter_bonus.c ft_lstlast_bonus.c ft_lstmap_bonus.c \
ft_lstnew.c ft_lstsize.c ft_lstnew_bonus.c ft_lstsize_bonus.c
OBJECTS = $(SOURCES:.c=.o) OBJECTS = $(SOURCES:.c=.o)
BONUS_OBJECTS = $(BONUS_SOURCES:.c=.o) BONUS_OBJECTS = $(BONUS_SOURCES:.c=.o)
CC = gcc CC = cc
CFLAGS = -Wall -Wextra -Werror CFLAGS = -Wall -Wextra -Werror
all: $(NAME) all: $(NAME)

View File

@ -17,7 +17,7 @@ void *ft_calloc(size_t nmemb, size_t size)
{ {
void *ptr; void *ptr;
if (nmemb && nmemb > (size_t) -1 / nmemb) if (nmemb && size > (size_t) -1 / nmemb)
{ {
return (0); return (0);
} }

View File

@ -11,20 +11,22 @@
/* ************************************************************************** */ /* ************************************************************************** */
#include "libft.h" #include "libft.h"
#include <stdlib.h>
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
{ {
t_list *new_list; t_list *new_list;
t_list *new_elem; t_list *new_elem;
void *new_content;
if (!lst || !f)
return (NULL);
new_list = NULL; new_list = NULL;
while (lst) while (lst)
{ {
new_elem = ft_lstnew(f(lst->content)); new_content = f(lst->content);
new_elem = ft_lstnew(new_content);
if (!new_elem) if (!new_elem)
{ {
del(new_content);
ft_lstclear(&new_list, del); ft_lstclear(&new_list, del);
return (NULL); return (NULL);
} }

View File

@ -11,6 +11,7 @@
/* ************************************************************************** */ /* ************************************************************************** */
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include "libft.h" #include "libft.h"
static int count_words(char const *s, char c) static int count_words(char const *s, char c)
@ -29,6 +30,16 @@ static int count_words(char const *s, char c)
return (n); 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 **ft_split(char const *s, char c)
{ {
char **result; char **result;
@ -36,8 +47,6 @@ char **ft_split(char const *s, char c)
int i; int i;
int j; int j;
if (!s)
return (NULL);
result = malloc((count_words(s, c) + 1) * sizeof(char *)); result = malloc((count_words(s, c) + 1) * sizeof(char *));
if (!result) if (!result)
return (NULL); return (NULL);
@ -51,7 +60,9 @@ char **ft_split(char const *s, char c)
while (s[i + j] && s[i + j] != c) while (s[i + j] && s[i + j] != c)
j++; j++;
if (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; i += j;
} }
result[n] = NULL; result[n] = NULL;

View File

@ -14,15 +14,15 @@
size_t ft_strlcat(char *dst, const char *src, size_t size) size_t ft_strlcat(char *dst, const char *src, size_t size)
{ {
unsigned int src_len; size_t src_len;
unsigned int dst_len; size_t dst_len;
unsigned int i; size_t i;
src_len = ft_strlen(src); src_len = ft_strlen(src);
if (size == 0) if (size == 0)
return (src_len); return (src_len);
dst_len = ft_strlen(dst); dst_len = ft_strlen(dst);
if (dst_len >= (long int) size) if (dst_len >= size)
return (size + src_len); return (size + src_len);
i = 0; i = 0;
while (src[i] && i < size - dst_len - 1) while (src[i] && i < size - dst_len - 1)

View File

@ -19,11 +19,11 @@ char *ft_strrchr(const char *s, int c)
result = NULL; result = NULL;
while (*s) while (*s)
{ {
if (*(unsigned char *) s == (unsigned char) c) if (*s == (char) c)
result = (char *) s; result = (char *) s;
s++; s++;
} }
if ('\0' == c) if ('\0' == (char) c)
result = (char *) s; result = (char *) s;
return (result); return (result);
} }