From: = <=> Date: Wed, 29 Oct 2025 12:34:04 +0000 (+0100) Subject: Finished up and bonuses X-Git-Url: https://git.uwuaxy.net/?a=commitdiff_plain;h=d01d979a41758284b30024e0910c93c91f58d0f3;p=axy%2Fft%2Flibft.git Finished up and bonuses --- diff --git a/Makefile b/Makefile index 23f2199..13f073a 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,13 @@ NAME=libft.a -SRCS=ft_char1.c ft_char2.c ft_mem1.c ft_mem2.c ft_str1.c ft_str2.c ft_str3.c ft_split.c +SRCS=ft_calloc.c ft_strnstr.c ft_isdigit.c ft_strrchr.c ft_strncmp.c ft_strjoin.c ft_toupper.c ft_tolower.c ft_strlcat.c ft_strchr.c ft_strdup.c ft_atoi.c ft_strtrim.c ft_substr.c ft_split.c ft_isalpha.c ft_isascii.c ft_isprint.c ft_isalnum.c ft_memset.c ft_bzero.c ft_memcpy.c ft_memmove.c ft_memchr.c ft_strlen.c ft_strlcpy.c ft_memcmp.c ft_itoa.c ft_strmapi.c ft_striteri.c ft_putchar_fd.c ft_putstr_fd.c ft_putendl_fd.c ft_putnbr_fd.c + +BONUS_SRCS=ft_lstnew.c ft_lstadd_front.c ft_lstsize.c ft_lstlast.c ft_lstadd_back.c ft_lstdelone.c ft_lstclear.c ft_lstiter.c ft_lstmap.c OBJS=${SRCS:.c=.o} +BONUS_OBJS=${BONUS_SRCS:.c=.o} + CFLAGS=-Wall -Wextra -Werror CC=cc @@ -16,6 +20,9 @@ all : ${NAME} ${NAME} : ${OBJS} ar -rcs $@ $^ +bonus : ${BONUS_OBJS} + ar -rcs ${NAME} $^ + clean : rm -f ${OBJS} diff --git a/ft_atoi.c b/ft_atoi.c index ba87aa9..b31be33 100644 --- a/ft_atoi.c +++ b/ft_atoi.c @@ -6,11 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 10:05:22 by agilliar #+# #+# */ -/* Updated: 2025/10/29 10:06:56 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:13:14 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ -#include +#include +#include "libft.h" static bool ft_isspace(char c) { diff --git a/ft_str3.c b/ft_itoa.c similarity index 50% rename from ft_str3.c rename to ft_itoa.c index e9403a6..2ea2653 100644 --- a/ft_str3.c +++ b/ft_itoa.c @@ -1,54 +1,54 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* ft_str3.c :+: :+: :+: */ +/* ft_itoa.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/10/28 09:18:20 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:40:51 by agilliar ### ########.fr */ +/* Created: 2025/10/29 10:19:15 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:34:53 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ -#include "libft.h" +#include #include -#include -char *ft_strjoin(const char *s1, const char *s2) +static void ft_itoa_visit(long n, void (*f)(void *, char), void *f_dat) { - size_t l1; - size_t l2; - char *res; + if (n < 0) + { + f(f_dat, '-'); + return (ft_itoa_visit(-n, f, f_dat)); + } + if (n > 9) + ft_itoa_visit(n / 10, f, f_dat); + f(f_dat, '0' + n % 10); +} - l1 = ft_strlen(s1); - l2 = ft_strlen(s2); - res = malloc(l1 + l2 + 1); - if (!res) - return (res); - ft_memcpy(res, s1, l1); - ft_memcpy(&res[l1], s2, l2); - res[l1 + l2] = '\0'; - return (res); +static void ft_itoa_count(size_t *count, char _c) +{ + (void) _c; + (*count)++; } -static bool ft_char_in_set(char c, const char *set) +static void ft_itoa_write(char **buf, char c) { - while (*set && *set != c) - set++; - return (*set == c); + *((*buf)++) = c; } -char *ft_strtrim(const char *s1, const char *set) +char *ft_itoa(int n) { - size_t i; size_t len; + char *res; + char *dat; - while (*s1 && ft_char_in_set(*s1, set)) - s1++; - i = 0; - len = 0; - while (s1[i]) - if (!ft_char_in_set(s1[i++], set)) - len = i; - return (ft_substr(s1, 0, len)); + len = 1; + ft_itoa_visit(n, (void (*)(void *, char))ft_itoa_count, &len); + res = malloc(len); + if (!res) + return (res); + dat = res; + ft_itoa_visit(n, (void (*)(void *, char)) ft_itoa_write, &dat); + *dat = '\0'; + return (res); } diff --git a/ft_lstadd_back.c b/ft_lstadd_back.c new file mode 100644 index 0000000..d0881fc --- /dev/null +++ b/ft_lstadd_back.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 12:55:01 by agilliar #+# #+# */ +/* Updated: 2025/10/29 12:57:51 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + if (!(*lst)) + *lst = new; + else + ft_lstadd_back(&(*lst)->next, new); +} diff --git a/ft_lstadd_front.c b/ft_lstadd_front.c new file mode 100644 index 0000000..36e03c1 --- /dev/null +++ b/ft_lstadd_front.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 12:09:55 by agilliar #+# #+# */ +/* Updated: 2025/10/29 12:14:27 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + new->next = *lst; + *lst = new; +} diff --git a/ft_lstclear.c b/ft_lstclear.c new file mode 100644 index 0000000..caeb50b --- /dev/null +++ b/ft_lstclear.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 13:03:33 by agilliar #+# #+# */ +/* Updated: 2025/10/29 13:10:12 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void *)) +{ + t_list *lst_next; + + if (!*lst) + return ; + lst_next = (*lst)->next; + ft_lstdelone(*lst, del); + *lst = lst_next; + ft_lstclear(lst, del); +} diff --git a/ft_lstdelone.c b/ft_lstdelone.c new file mode 100644 index 0000000..9bb8d7f --- /dev/null +++ b/ft_lstdelone.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 12:58:54 by agilliar #+# #+# */ +/* Updated: 2025/10/29 13:00:44 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include + +void ft_lstdelone(t_list *lst, void (*del)(void *)) +{ + del(lst->content); + free(lst); +} diff --git a/ft_lstiter.c b/ft_lstiter.c new file mode 100644 index 0000000..55a154d --- /dev/null +++ b/ft_lstiter.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 13:10:47 by agilliar #+# #+# */ +/* Updated: 2025/10/29 13:13:22 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + if (!lst) + return ; + f(lst->content); + ft_lstiter(lst->next, f); +} diff --git a/ft_lstlast.c b/ft_lstlast.c new file mode 100644 index 0000000..8c14481 --- /dev/null +++ b/ft_lstlast.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 12:18:37 by agilliar #+# #+# */ +/* Updated: 2025/10/29 12:21:34 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (!lst || !lst->next) + return (lst); + else + return (ft_lstlast(lst->next)); +} diff --git a/ft_lstmap.c b/ft_lstmap.c new file mode 100644 index 0000000..5ead31d --- /dev/null +++ b/ft_lstmap.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 13:13:59 by agilliar #+# #+# */ +/* Updated: 2025/10/29 13:32:14 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *res; + void *content; + + if (!lst) + return (NULL); + content = f(lst->content); + res = ft_lstnew(content); + if (!res) + return (del(content), NULL); + if (!lst->next) + return (res); + res->next = ft_lstmap(lst->next, f, del); + if (res->next) + return (res); + del(res->content); + free(res); + return (NULL); +} diff --git a/ft_lstnew.c b/ft_lstnew.c new file mode 100644 index 0000000..0b6da10 --- /dev/null +++ b/ft_lstnew.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 12:05:45 by agilliar #+# #+# */ +/* Updated: 2025/10/29 12:07:12 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include + +t_list *ft_lstnew(void *content) +{ + t_list *res; + + res = malloc(sizeof(t_list)); + if (!res) + return (res); + res->next = 0; + res->content = content; + return (res); +} diff --git a/ft_lstsize.c b/ft_lstsize.c new file mode 100644 index 0000000..869a15e --- /dev/null +++ b/ft_lstsize.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 12:15:01 by agilliar #+# #+# */ +/* Updated: 2025/10/29 12:16:55 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + if (lst) + return (ft_lstsize(lst->next) + 1); + else + return (0); +} diff --git a/ft_mem1.c b/ft_mem1.c deleted file mode 100644 index 68231e8..0000000 --- a/ft_mem1.c +++ /dev/null @@ -1,74 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_mem1.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: agilliar +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/10/27 12:08:42 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:19:54 by agilliar ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -void *ft_memset(void *s, int c, size_t n) -{ - size_t i; - - i = 0; - while (i < n) - ((unsigned char *) s)[i++] = c; - return (s); -} - -void *ft_bzero(void *s, size_t n) -{ - return (ft_memset(s, '\0', n)); -} - -void *ft_memcpy(void *restrict dest, const void *src, size_t n) -{ - size_t i; - - i = 0; - while (i < n) - { - ((unsigned char *)dest)[i] = ((unsigned char *)src)[i]; - i++; - } - return (dest); -} - -void *ft_memmove(void *dest, const void *src, size_t n) -{ - size_t i; - - if (dest < src) - { - i = 0; - while (i < n) - { - ((unsigned char *)dest)[i] = ((unsigned char *)src)[i]; - i++; - } - } - else - while (n--) - ((unsigned char *)dest)[n] = ((unsigned char *)src)[n]; - return (dest); -} - -void *ft_memchr(const void *s, int c, size_t n) -{ - size_t i; - - i = 0; - while (i < n) - { - if (((unsigned char *)s)[i] == (unsigned char)c) - return ((void *)&((unsigned char *)s)[i]); - i++; - } - return (NULL); -} diff --git a/ft_memchr.c b/ft_memchr.c index e042f58..b8e1820 100644 --- a/ft_memchr.c +++ b/ft_memchr.c @@ -6,10 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:48:41 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:48:43 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:14:45 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include + void *ft_memchr(const void *s, int c, size_t n) { size_t i; diff --git a/ft_memcmp.c b/ft_memcmp.c index c960c15..2327d56 100644 --- a/ft_memcmp.c +++ b/ft_memcmp.c @@ -6,10 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:51:58 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:52:31 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:15:40 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include + int ft_memcmp(const void *s1, const void *s2, size_t n) { size_t i; diff --git a/ft_memcpy.c b/ft_memcpy.c index 1d9d244..99619a2 100644 --- a/ft_memcpy.c +++ b/ft_memcpy.c @@ -6,10 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:48:05 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:48:15 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:13:48 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include + void *ft_memcpy(void *restrict dest, const void *src, size_t n) { size_t i; diff --git a/ft_memmove.c b/ft_memmove.c index 7b5ddd0..a9bb4e8 100644 --- a/ft_memmove.c +++ b/ft_memmove.c @@ -6,10 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:48:19 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:48:31 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:14:18 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include + void *ft_memmove(void *dest, const void *src, size_t n) { size_t i; diff --git a/ft_memset.c b/ft_memset.c index 7272039..f0815fa 100644 --- a/ft_memset.c +++ b/ft_memset.c @@ -6,10 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:47:17 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:47:32 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:13:36 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include + void *ft_memset(void *s, int c, size_t n) { size_t i; diff --git a/ft_putchar_fd.c b/ft_putchar_fd.c new file mode 100644 index 0000000..7805cf3 --- /dev/null +++ b/ft_putchar_fd.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:52:35 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:54:15 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +void ft_putchar_fd(char c, int fd) +{ + write(fd, &c, 1); +} diff --git a/ft_putendl_fd.c b/ft_putendl_fd.c new file mode 100644 index 0000000..7f5cdee --- /dev/null +++ b/ft_putendl_fd.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:57:18 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:58:07 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + ft_putstr_fd(s, fd); + ft_putchar_fd('\n', fd); +} diff --git a/ft_putnbr_fd.c b/ft_putnbr_fd.c new file mode 100644 index 0000000..2599618 --- /dev/null +++ b/ft_putnbr_fd.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:59:59 by agilliar #+# #+# */ +/* Updated: 2025/10/29 11:12:16 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static void ft_itoa_visit(long n, void (*f)(void *, char), void *f_dat) +{ + if (n < 0) + { + f(f_dat, '-'); + return (ft_itoa_visit(-n, f, f_dat)); + } + if (n > 9) + ft_itoa_visit(n / 10, f, f_dat); + f(f_dat, '0' + n % 10); +} + +void ft_putnbr_fd_write(int *fd, char c) +{ + ft_putchar_fd(c, *fd); +} + +void ft_putnbr_fd(int n, int fd) +{ + ft_itoa_visit(n, (void (*)(void *, char))ft_putnbr_fd_write, &fd); +} diff --git a/ft_putstr_fd.c b/ft_putstr_fd.c new file mode 100644 index 0000000..90e5b5f --- /dev/null +++ b/ft_putstr_fd.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:55:24 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:56:44 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + while (*s) + ft_putchar_fd(*(s++), fd); +} diff --git a/ft_split.c b/ft_split.c index b4baa4f..765d7c7 100644 --- a/ft_split.c +++ b/ft_split.c @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/28 12:08:04 by agilliar #+# #+# */ -/* Updated: 2025/10/28 13:20:17 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:37:49 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -34,6 +34,9 @@ static char **ft_split_cleanup(char **res, size_t len) return (NULL); } +/* + Weird Formatting from norminette on that else, for some reason +*/ static char **ft_split_with(char **res, const char *s, char c) { size_t i; @@ -42,6 +45,7 @@ static char **ft_split_with(char **res, const char *s, char c) return (res); i = 0; while (*s) + { if (ft_strlen_term(s, c) == 0) s++; else @@ -52,6 +56,7 @@ static char **ft_split_with(char **res, const char *s, char c) i++; s += ft_strlen_term(s, c); } + } res[i] = NULL; return (res); } @@ -64,6 +69,7 @@ char **ft_split(const char *s, char c) i = 0; len = 1; while (s[i]) + { if (ft_strlen_term(&s[i], c) == 0) i++; else @@ -71,5 +77,6 @@ char **ft_split(const char *s, char c) i += ft_strlen_term(&s[i], c); len++; } + } return (ft_split_with(malloc(sizeof(char *) * len), s, c)); } diff --git a/ft_str1.c b/ft_str1.c deleted file mode 100644 index 9ef1297..0000000 --- a/ft_str1.c +++ /dev/null @@ -1,91 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_str1.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: agilliar +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/10/27 12:11:26 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:28:34 by agilliar ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" -#include - -size_t ft_strlen(const char *s) -{ - size_t i; - - i = 0; - while (s[i] != '\0') - i++; - return (i); -} - -size_t ft_strlcpy(char *dest, const char *src, size_t size) -{ - size_t len; - size_t i; - - len = 0; - while (src[len] != '\0') - len++; - if (size == 0) - return (len); - i = 0; - while (i < len && i < size - 1) - *dest++ = src[i++]; - *dest = '\0'; - return (len); -} - -size_t ft_strlcat(char *dest, const char *src, size_t size) -{ - size_t src_len; - size_t dest_len; - size_t i; - - src_len = 0; - while (src[src_len]) - src_len++; - dest_len = 0; - while (dest_len < size && dest[dest_len]) - dest_len++; - i = 0; - while (dest_len + i + 1 < size && i < src_len) - { - dest[dest_len + i] = src[i]; - i++; - } - if (dest_len != size) - dest[dest_len + i] = '\0'; - return (src_len + dest_len); -} - -char *ft_strchr(const char *s, int c) -{ - while (*s != (char)c && *s != '\0') - s++; - if (*s == (char)c) - return ((char *) s); - return (NULL); -} - -char *ft_strrchr(const char *s, int c) -{ - char *res; - - res = (char *) s; - while (true) - { - if (*s == (char)c) - res = (char *) s; - if (!*s) - break; - s++; - } - if (*res == (char)c) - return (res); - return (NULL); -} diff --git a/ft_str2.c b/ft_str2.c deleted file mode 100644 index 1c8cdfe..0000000 --- a/ft_str2.c +++ /dev/null @@ -1,95 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_str2.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: agilliar +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/10/27 13:31:21 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:36:36 by agilliar ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" -#include -#include - -int ft_strncmp(const char *s1, const char *s2, size_t n) -{ - unsigned int idx; - - if (n == 0) - return (0); - idx = 0; - while (s1[idx] != '\0' && s1[idx] == s2[idx] && idx < n - 1) - idx++; - return ((unsigned char) s1[idx] - (unsigned char) s2[idx]); -} - -char *ft_strnstr(const char *big, const char *little, size_t len) -{ - size_t i; - size_t j; - - i = 0; - j = 0; - while (little[i] && i + j < len && big[i + j]) - { - if (big[i + j] != little[i]) - { - i = 0; - j++; - } - else - i++; - } - if (little[i]) - return (NULL); - return ((char *)&big[j]); -} - -static bool ft_isspace(char c) -{ - return (c == ' ' || (c >= '\t' && c <= '\r')); -} - -int ft_atoi(const char *nptr) -{ - int sign; - int res; - - sign = 1; - res = 0; - while (ft_isspace(*nptr)) - nptr++; - if (*nptr == '-') - sign = -1; - else if (*nptr != '+') - nptr--; - nptr++; - while (ft_isdigit(*nptr)) - { - res *= 10; - res += sign * (*nptr - '0'); - nptr++; - } - return (res); -} - -char *ft_substr(const char *s, unsigned int start, size_t len) -{ - size_t s_len; - char *res; - - s_len = ft_strlen(s); - if (start > s_len) - start = s_len; - if (len > s_len - start) - len = s_len - start; - res = malloc(len + 1); - if (!res) - return (res); - ft_memcpy(res, s + start, len); - res[len] = '\0'; - return (res); -} diff --git a/ft_strdup.c b/ft_strdup.c index 7fc02c5..3901588 100644 --- a/ft_strdup.c +++ b/ft_strdup.c @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 10:01:04 by agilliar #+# #+# */ -/* Updated: 2025/10/29 10:02:35 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:12:32 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,5 +14,5 @@ char *ft_strdup(char *src) { - return (ft_substr(str, 0, ft_strlen(str))); + return (ft_substr(src, 0, ft_strlen(src))); } diff --git a/ft_striteri.c b/ft_striteri.c new file mode 100644 index 0000000..c335ce9 --- /dev/null +++ b/ft_striteri.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:48:45 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:51:20 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +void ft_striteri(char *s, void (*f)(unsigned int, char*)) +{ + size_t i; + + i = 0; + while (s[i]) + { + f(i, &s[i]); + i++; + } +} diff --git a/ft_strlcat.c b/ft_strlcat.c index 60f0a72..621b347 100644 --- a/ft_strlcat.c +++ b/ft_strlcat.c @@ -6,10 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:49:32 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:49:39 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:12:16 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include + size_t ft_strlcat(char *dest, const char *src, size_t size) { size_t src_len; diff --git a/ft_strlcpy.c b/ft_strlcpy.c index 7f7d19e..e46eeea 100644 --- a/ft_strlcpy.c +++ b/ft_strlcpy.c @@ -6,10 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:49:19 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:49:27 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:15:19 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include + size_t ft_strlcpy(char *dest, const char *src, size_t size) { size_t len; diff --git a/ft_strlen.c b/ft_strlen.c index 9854e72..81b77be 100644 --- a/ft_strlen.c +++ b/ft_strlen.c @@ -6,10 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:48:58 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:49:12 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:14:59 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include + size_t ft_strlen(const char *s) { size_t i; diff --git a/ft_mem2.c b/ft_strmapi.c similarity index 53% rename from ft_mem2.c rename to ft_strmapi.c index 94c2707..436f395 100644 --- a/ft_mem2.c +++ b/ft_strmapi.c @@ -1,54 +1,34 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* ft_mem2.c :+: :+: :+: */ +/* ft_strmapi.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/10/27 14:39:28 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:30:07 by agilliar ### ########.fr */ +/* Created: 2025/10/29 10:39:05 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:46:55 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ -#include "libft.h" #include -#include +#include "libft.h" -int ft_memcmp(const void *s1, const void *s2, size_t n) +char *ft_strmapi(const char *s, char (*f)(unsigned int, char)) { + size_t len; + char *res; size_t i; - int res; + len = ft_strlen(s); + res = malloc(len + 1); + if (!res) + return (res); i = 0; - res = 0; - while (res == 0 && i < n) + while (i < len) { - res = ((unsigned char *) s1)[i] - ((unsigned char *) s2)[i]; + res[i] = f(i, s[i]); i++; } - return (res); -} - -void *ft_calloc(size_t nmemb, size_t size) -{ - void *res; - - if (size && SIZE_MAX / size < nmemb) - return (NULL); - res = malloc(nmemb * size); - if (res) - ft_bzero(res, nmemb * size); - return (res); -} - -char *ft_strdup(char *src) -{ - size_t len; - char *res; - - len = ft_strlen(src) + 1; - res = malloc(len); - if (res) - ft_memcpy(res, src, len); + res[i] = '\0'; return (res); } diff --git a/ft_strrchr.c b/ft_strrchr.c index 560a637..c54f1d8 100644 --- a/ft_strrchr.c +++ b/ft_strrchr.c @@ -6,11 +6,12 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 09:51:22 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:51:35 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:37:33 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ #include +#include char *ft_strrchr(const char *s, int c) { @@ -22,7 +23,7 @@ char *ft_strrchr(const char *s, int c) if (*s == (char)c) res = (char *) s; if (!*s) - break; + break ; s++; } if (*res == (char)c) diff --git a/ft_strtrim.c b/ft_strtrim.c index 4d713ef..0a17515 100644 --- a/ft_strtrim.c +++ b/ft_strtrim.c @@ -6,10 +6,11 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 10:08:47 by agilliar #+# #+# */ -/* Updated: 2025/10/29 10:09:08 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 10:13:24 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ +#include #include "libft.h" static bool ft_char_in_set(char c, const char *set) diff --git a/libft.h b/libft.h index 05e8f48..7d32994 100644 --- a/libft.h +++ b/libft.h @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/27 11:27:06 by agilliar #+# #+# */ -/* Updated: 2025/10/29 09:26:33 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 13:31:51 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,5 +41,29 @@ char *ft_strjoin(const char *s1, const char *s2); char *ft_strtrim(const char *s1, const char *set); int ft_toupper(int c); int ft_tolower(int c); +char **ft_split(const char *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(const char *s, char (*f)(unsigned int, char)); +void ft_striteri(char *s, void (*f)(unsigned int, char*)); +void ft_putchar_fd(char c, int fd); +void ft_putstr_fd(char *s, int fd); +void ft_putendl_fd(char *s, int fd); +void ft_putnbr_fd(int n, int fd); + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +t_list *ft_lstnew(void *content); +void ft_lstadd_front(t_list **lst, t_list *new); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lstadd_back(t_list **lst, t_list *new); +void ft_lstdelone(t_list *lst, void (*del)(void *)); +void ft_lstclear(t_list **lst, void (*del)(void *)); +void ft_lstiter(t_list *lst, void (*f)(void *)); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); #endif