commit 326f52308e57f391692b89c500e0a7cd8f1ac965 Author: Willem Haffmans Date: Fri Jul 26 22:32:04 2024 +0200 all diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..535519b --- /dev/null +++ b/Makefile @@ -0,0 +1,62 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: whaffman +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/07/09 16:25:07 by whaffman #+# #+# # +# Updated: 2024/07/09 17:08:01 by whaffman ### ########.fr # +# # +# **************************************************************************** # + +CC = cc +CFLAGS = -Wall -Werror -Wextra +# Add any other static library in the same fashion - 1 + +# INCLUDE: .h files or .a library folders +# SRC: .c files +SRC_DIR = src +OBJ_DIR = obj +OBJ_SO_DIR = obj_so +INC_DIR = include + +SRC_FILES = $(wildcard $(SRC_DIR)/*.c) +OBJ_FILES = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRC_FILES)) +OBJ_FILES_SO = $(patsubst $(SRC_DIR)/%.c,$(OBJ_SO_DIR)/%.o,$(SRC_FILES)) + +# Add any other static library in the same fashion - 2 + +NAME = libft.a +NAME_SO = libft.so + +.PHONY: all clean fclean re so + +all: $(NAME) + +so: $(NAME_SO) + +$(NAME): $(OBJ_FILES) + ar rcs $(NAME) $(OBJ_FILES) + +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c + mkdir -p $(OBJ_DIR) + $(CC) $(CFLAGS) -I$(INC_DIR) -O3 -c -o $@ $< + +$(NAME_SO): $(OBJ_FILES_SO) + $(CC) -shared -o $(NAME_SO) $(OBJ_FILES_SO) + +$(OBJ_SO_DIR)/%.o: $(SRC_DIR)/%.c + mkdir -p $(OBJ_SO_DIR) + $(CC) -fPIC $(CFLAGS) -I$(INC_DIR) -c -o $@ $< + +clean: + $(RM) -r $(OBJ_DIR) + $(RM) -r $(OBJ_SO_DIR) + +fclean: clean + $(RM) $(NAME) + $(RM) $(NAME_SO) + +re: fclean all + diff --git a/en.subject.pdf b/en.subject.pdf new file mode 100644 index 0000000..e17a193 Binary files /dev/null and b/en.subject.pdf differ diff --git a/extended_libft/Makefile b/extended_libft/Makefile new file mode 100644 index 0000000..0561a91 --- /dev/null +++ b/extended_libft/Makefile @@ -0,0 +1,47 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: whaffman +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/07/09 16:25:07 by whaffman #+# #+# # +# Updated: 2024/07/09 17:08:01 by whaffman ### ########.fr # +# # +# **************************************************************************** # + +NAME = libft.a +SOURCES = ft_atoi.c ft_bzero.c ft_calloc.c ft_isalnum.c ft_isalpha.c \ + ft_isascii.c ft_isdigit.c ft_isprint.c ft_itoa.c 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 ft_memchr.c \ + ft_memcmp.c ft_memcpy.c ft_memmove.c ft_memset.c ft_putchar_fd.c \ + ft_putendl_fd.c ft_putnbr_fd.c ft_putstr_fd.c ft_split.c ft_strchr.c \ + ft_strdup.c ft_striteri.c ft_strjoin.c ft_strlcat.c ft_strlcpy.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_putchar.c ft_putstr.c ft_putnbr.c ft_isspace.c + +OBJECTS = $(SOURCES:.c=.o) + +CC = gcc +CFLAGS = -Wall -Wextra -Werror + +all: $(NAME) + +$(NAME): $(OBJECTS) + $(AR) -r $@ $? + +%.o: %.c + $(CC) -c $(CFLAGS) $? + +clean: + rm -f $(OBJECTS) $(BOBJECTS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY: all bonus clean fclean re + diff --git a/extended_libft/ft_atoi.c b/extended_libft/ft_atoi.c new file mode 100644 index 0000000..d5a27b1 --- /dev/null +++ b/extended_libft/ft_atoi.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:02 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:20:16 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_atoi(const char *nptr) +{ + int sign; + int res; + + while (ft_isspace(*nptr)) + nptr++; + res = 0; + sign = 1; + while (*nptr == '-' || *nptr == '+') + { + if (*nptr == '-') + sign *= -1; + nptr++; + } + while (ft_isdigit(*nptr)) + res = 10 * res + sign * (*nptr++ - '0'); + return (res); +} diff --git a/extended_libft/ft_bzero.c b/extended_libft/ft_bzero.c new file mode 100644 index 0000000..896499a --- /dev/null +++ b/extended_libft/ft_bzero.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:03 by whaffman #+# #+# */ +/* Updated: 2024/07/08 17:57:45 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + ft_memset(s, 0, n); +} diff --git a/extended_libft/ft_calloc.c b/extended_libft/ft_calloc.c new file mode 100644 index 0000000..38bf0a2 --- /dev/null +++ b/extended_libft/ft_calloc.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:03 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:25:29 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void *ft_calloc(size_t nmemb, size_t size) +{ + void *ptr; + + ptr = malloc(nmemb * size); + if (ptr) + ft_bzero(ptr, nmemb * size); + return (ptr); +} diff --git a/extended_libft/ft_isalnum.c b/extended_libft/ft_isalnum.c new file mode 100644 index 0000000..2c867c5 --- /dev/null +++ b/extended_libft/ft_isalnum.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:03 by whaffman #+# #+# */ +/* Updated: 2024/07/09 16:33:06 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + return (ft_isdigit(c) || ft_isalpha(c)); +} diff --git a/extended_libft/ft_isalpha.c b/extended_libft/ft_isalpha.c new file mode 100644 index 0000000..9072e52 --- /dev/null +++ b/extended_libft/ft_isalpha.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/06 12:07:31 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalpha(int c) +{ + return (('A' <= c && 'Z' >= c) || ('a' <= c && 'z' >= c)); +} diff --git a/extended_libft/ft_isascii.c b/extended_libft/ft_isascii.c new file mode 100644 index 0000000..c471ac4 --- /dev/null +++ b/extended_libft/ft_isascii.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/06 12:10:15 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isascii(int c) +{ + return (0 <= c && 127 >= c); +} diff --git a/extended_libft/ft_isdigit.c b/extended_libft/ft_isdigit.c new file mode 100644 index 0000000..ca13d9c --- /dev/null +++ b/extended_libft/ft_isdigit.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/09 17:12:14 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isdigit(int c) +{ + return ('0' <= c && '9' >= c); +} diff --git a/extended_libft/ft_isprint.c b/extended_libft/ft_isprint.c new file mode 100644 index 0000000..454974c --- /dev/null +++ b/extended_libft/ft_isprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/06 12:14:16 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isprint(int c) +{ + return (32 <= c && 126 >= c); +} diff --git a/extended_libft/ft_isspace.c b/extended_libft/ft_isspace.c new file mode 100644 index 0000000..52f1e88 --- /dev/null +++ b/extended_libft/ft_isspace.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_isspace.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/07/26 21:54:01 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/07/26 21:55:03 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isspace(int c) +{ + return (' ' == c || '\f' == c || '\n' == c + || '\r' == c || '\t' == c || '\v' == c); +} diff --git a/extended_libft/ft_itoa.c b/extended_libft/ft_itoa.c new file mode 100644 index 0000000..65ee8d1 --- /dev/null +++ b/extended_libft/ft_itoa.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/10 15:50:44 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +static char *itoa_stralloc(int n) +{ + int i; + + i = 0; + if (n <= 0) + i++; + while (n) + { + i++; + n /= 10; + } + return (ft_calloc((i + 1), sizeof(char))); +} + +char *ft_itoa(int n) +{ + int i; + long ln; + long divider; + char *result; + + result = itoa_stralloc(n); + if (!result) + return (NULL); + ln = n; + i = 0; + divider = 1; + if (ln < 0) + { + ln *= -1; + result[i++] = '-'; + } + while (divider * 10 <= ln) + divider *= 10; + while (divider) + { + result[i++] = ln / divider + '0'; + ln %= divider; + divider /= 10; + } + return (result); +} diff --git a/extended_libft/ft_lstadd_back.c b/extended_libft/ft_lstadd_back.c new file mode 100644 index 0000000..77496a0 --- /dev/null +++ b/extended_libft/ft_lstadd_back.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:51:34 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + t_list *last; + + if (!new) + return ; + if (!*lst) + { + *lst = new; + return ; + } + last = ft_lstlast(*lst); + last->next = new; +} diff --git a/extended_libft/ft_lstadd_front.c b/extended_libft/ft_lstadd_front.c new file mode 100644 index 0000000..45edfb2 --- /dev/null +++ b/extended_libft/ft_lstadd_front.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:35:22 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + if (new) + { + new->next = *lst; + *lst = new; + } +} diff --git a/extended_libft/ft_lstclear.c b/extended_libft/ft_lstclear.c new file mode 100644 index 0000000..afa4806 --- /dev/null +++ b/extended_libft/ft_lstclear.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 17:08:53 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void *)) +{ + t_list *next; + + if (!del || !lst) + return ; + while (*lst) + { + if ((*lst)->next) + next = (*lst)->next; + else + next = NULL; + del((*lst)->content); + free(*lst); + *lst = next; + } +} diff --git a/extended_libft/ft_lstdelone.c b/extended_libft/ft_lstdelone.c new file mode 100644 index 0000000..1ee2b1b --- /dev/null +++ b/extended_libft/ft_lstdelone.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:57:20 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void *)) +{ + if (!lst || !del) + return ; + del(lst->content); + free(lst); +} diff --git a/extended_libft/ft_lstiter.c b/extended_libft/ft_lstiter.c new file mode 100644 index 0000000..f314537 --- /dev/null +++ b/extended_libft/ft_lstiter.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 17:13:53 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + if (!lst || !f) + return ; + while (lst) + { + (*f)(lst->content); + lst = lst->next; + } +} diff --git a/extended_libft/ft_lstlast.c b/extended_libft/ft_lstlast.c new file mode 100644 index 0000000..19dfd37 --- /dev/null +++ b/extended_libft/ft_lstlast.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:06 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:41:26 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (!lst) + return (NULL); + while (lst->next) + lst = lst->next; + return (lst); +} diff --git a/extended_libft/ft_lstmap.c b/extended_libft/ft_lstmap.c new file mode 100644 index 0000000..bcea43c --- /dev/null +++ b/extended_libft/ft_lstmap.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:06 by whaffman #+# #+# */ +/* Updated: 2024/07/10 17:21:58 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new_list; + t_list *new_elem; + + if (!lst || !f) + return (NULL); + new_list = NULL; + while (lst) + { + new_elem = ft_lstnew(f(lst->content)); + if (!new_elem) + { + ft_lstclear(&new_list, del); + return (NULL); + } + ft_lstadd_back(&new_list, new_elem); + lst = lst->next; + } + return (new_list); +} diff --git a/extended_libft/ft_lstnew.c b/extended_libft/ft_lstnew.c new file mode 100644 index 0000000..cb34a1f --- /dev/null +++ b/extended_libft/ft_lstnew.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:06 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:32:16 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *node; + + node = malloc(sizeof(t_list)); + if (node) + { + node->content = content; + node->next = NULL; + } + return (node); +} diff --git a/extended_libft/ft_lstsize.c b/extended_libft/ft_lstsize.c new file mode 100644 index 0000000..4987ac9 --- /dev/null +++ b/extended_libft/ft_lstsize.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:06 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:37:42 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int count; + + count = 1; + if (!lst) + return (0); + while (lst->next) + { + lst = lst->next; + count++; + } + return (count); +} diff --git a/extended_libft/ft_memchr.c b/extended_libft/ft_memchr.c new file mode 100644 index 0000000..a4d2105 --- /dev/null +++ b/extended_libft/ft_memchr.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/10 11:36:51 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + while (0 < n--) + { + if (*(unsigned char *)s == (unsigned char) c) + return ((void *) s); + s++; + } + return (NULL); +} diff --git a/extended_libft/ft_memcmp.c b/extended_libft/ft_memcmp.c new file mode 100644 index 0000000..8dd6e5c --- /dev/null +++ b/extended_libft/ft_memcmp.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/10 14:51:13 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned char *str1; + unsigned char *str2; + size_t i; + + str1 = (unsigned char *)s1; + str2 = (unsigned char *)s2; + i = 0; + while (i < n) + { + if (str1[i] != str2[i]) + return (str1[i] - str2[i]); + i++; + } + return (0); +} diff --git a/extended_libft/ft_memcpy.c b/extended_libft/ft_memcpy.c new file mode 100644 index 0000000..43d27d6 --- /dev/null +++ b/extended_libft/ft_memcpy.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/08 22:44:01 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dest, const void *src, size_t n) +{ + if (dest == NULL && src == NULL) + return (NULL); + while (0 < n--) + ((unsigned char *)dest)[n] = ((unsigned char *)src)[n]; + return (dest); +} diff --git a/extended_libft/ft_memmove.c b/extended_libft/ft_memmove.c new file mode 100644 index 0000000..dd5ff24 --- /dev/null +++ b/extended_libft/ft_memmove.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/08 23:02:34 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memmove(void *dest, const void *src, size_t n) +{ + unsigned char *dest_ptr; + unsigned char *src_ptr; + + dest_ptr = (unsigned char *)dest; + src_ptr = (unsigned char *)src; + if (dest_ptr == src_ptr) + return (dest); + else if (dest_ptr < src_ptr) + { + while (n-- > 0) + *dest_ptr++ = *src_ptr++; + } + else + { + while (n-- > 0) + dest_ptr[n] = src_ptr[n]; + } + return (dest); +} diff --git a/extended_libft/ft_memset.c b/extended_libft/ft_memset.c new file mode 100644 index 0000000..e1e1cf9 --- /dev/null +++ b/extended_libft/ft_memset.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/08 16:08:55 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memset(void *s, int c, size_t n) +{ + while (0 < n--) + ((unsigned char *)s)[n] = (unsigned char) c; + return (s); +} diff --git a/extended_libft/ft_putchar.c b/extended_libft/ft_putchar.c new file mode 100644 index 0000000..911ea18 --- /dev/null +++ b/extended_libft/ft_putchar.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putchar.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/07/26 21:24:12 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/07/26 21:30:59 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putchar(char c) +{ + ft_putchar_fd(c, 1); +} diff --git a/extended_libft/ft_putchar_fd.c b/extended_libft/ft_putchar_fd.c new file mode 100644 index 0000000..c1f82fc --- /dev/null +++ b/extended_libft/ft_putchar_fd.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:08 by whaffman #+# #+# */ +/* Updated: 2024/07/08 22:52:28 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + if (fd < 0) + return ; + write(fd, &c, 1); +} diff --git a/extended_libft/ft_putendl_fd.c b/extended_libft/ft_putendl_fd.c new file mode 100644 index 0000000..bc0ff41 --- /dev/null +++ b/extended_libft/ft_putendl_fd.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:08 by whaffman #+# #+# */ +/* Updated: 2024/07/08 22:56:27 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + if (fd < 0 || s == NULL) + return ; + ft_putstr_fd(s, fd); + write(fd, "\n", 1); +} diff --git a/extended_libft/ft_putnbr.c b/extended_libft/ft_putnbr.c new file mode 100644 index 0000000..eb3f3b0 --- /dev/null +++ b/extended_libft/ft_putnbr.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putnbr.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/07/26 21:32:30 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/07/26 21:37:17 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putnbr(int n) +{ + ft_putnbr_fd(n, 1); +} diff --git a/extended_libft/ft_putnbr_fd.c b/extended_libft/ft_putnbr_fd.c new file mode 100644 index 0000000..cf12230 --- /dev/null +++ b/extended_libft/ft_putnbr_fd.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:08 by whaffman #+# #+# */ +/* Updated: 2024/07/09 16:23:22 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putnbr_fd(int n, int fd) +{ + long ln; + long divider; + char c; + + if (fd < 0) + return ; + ln = n; + divider = 1; + if (n < 0) + { + if (!write(fd, "-", 1)) + return ; + ln *= -1; + } + while (divider * 10 <= ln) + divider *= 10; + while (divider) + { + c = ln / divider + '0'; + if (!write(fd, &c, 1)) + return ; + ln %= divider; + divider /= 10; + } +} diff --git a/extended_libft/ft_putstr.c b/extended_libft/ft_putstr.c new file mode 100644 index 0000000..01beffa --- /dev/null +++ b/extended_libft/ft_putstr.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putstr.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/07/26 21:37:29 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/07/26 21:39:15 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putstr(char *s) +{ + ft_putstr_fd(s, 1); +} diff --git a/extended_libft/ft_putstr_fd.c b/extended_libft/ft_putstr_fd.c new file mode 100644 index 0000000..7b61c41 --- /dev/null +++ b/extended_libft/ft_putstr_fd.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:08 by whaffman #+# #+# */ +/* Updated: 2024/07/08 22:54:32 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + size_t length; + + if (s == NULL || fd < 0) + return ; + length = ft_strlen(s); + write(fd, s, length); +} diff --git a/extended_libft/ft_split.c b/extended_libft/ft_split.c new file mode 100644 index 0000000..924aaa2 --- /dev/null +++ b/extended_libft/ft_split.c @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/10 14:10:57 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +static int count_words(char const *s, char c) +{ + int n; + int i; + + n = 0; + i = 0; + while (s[i]) + { + if (s[i] != c && (s[i + 1] == c || s[i + 1] == '\0')) + n++; + i++; + } + return (n); +} + +char **ft_split(char const *s, char c) +{ + char **result; + int n; + int i; + int j; + + if (!s) + return (NULL); + result = malloc((count_words(s, c) + 1) * sizeof(char *)); + if (!result) + return (NULL); + i = 0; + n = 0; + while (s[i]) + { + j = 0; + while (s[i] == c) + i++; + while (s[i + j] && s[i + j] != c) + j++; + if (j) + result[n++] = ft_substr(s, i, j); + i += j; + } + result[n] = NULL; + return (result); +} diff --git a/extended_libft/ft_strchr.c b/extended_libft/ft_strchr.c new file mode 100644 index 0000000..2ac814a --- /dev/null +++ b/extended_libft/ft_strchr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/10 11:30:39 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + while (*s) + { + if (*(unsigned char *) s == (unsigned char) c) + return ((char *) s); + s++; + } + if (*(unsigned char *) s == (unsigned char) c) + return ((char *) s); + return (NULL); +} diff --git a/extended_libft/ft_strdup.c b/extended_libft/ft_strdup.c new file mode 100644 index 0000000..de372a9 --- /dev/null +++ b/extended_libft/ft_strdup.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:22:46 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strdup(const char *s) +{ + size_t size; + char *d; + + size = ft_strlen(s) + 1; + d = (char *) malloc(size * sizeof(char)); + if (d) + ft_strlcpy(d, s, size); + return (d); +} diff --git a/extended_libft/ft_striteri.c b/extended_libft/ft_striteri.c new file mode 100644 index 0000000..933e974 --- /dev/null +++ b/extended_libft/ft_striteri.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:07:16 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char*)) +{ + unsigned int i; + + i = 0; + if (!s) + return ; + while (s[i]) + { + f(i, &s[i]); + i++; + } +} diff --git a/extended_libft/ft_strjoin.c b/extended_libft/ft_strjoin.c new file mode 100644 index 0000000..4b2977f --- /dev/null +++ b/extended_libft/ft_strjoin.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/10 14:49:11 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *str; + size_t len_s1; + size_t len_s2; + + if (!s1 || !s2) + return (NULL); + len_s1 = ft_strlen(s1); + len_s2 = ft_strlen(s2); + str = (char *)malloc(len_s1 + len_s2 + 1); + if (!str) + return (NULL); + ft_memcpy(str, s1, len_s1); + ft_memcpy(str + len_s1, s2, len_s2); + str[len_s1 + len_s2] = '\0'; + return (str); +} diff --git a/extended_libft/ft_strlcat.c b/extended_libft/ft_strlcat.c new file mode 100644 index 0000000..c2c2eb7 --- /dev/null +++ b/extended_libft/ft_strlcat.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:10 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:23:36 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + unsigned int src_len; + unsigned int dst_len; + unsigned int i; + + src_len = ft_strlen(src); + if (size == 0) + return (src_len); + dst_len = ft_strlen(dst); + if (dst_len >= (long int) size) + return (size + src_len); + i = 0; + while (src[i] && i < size - dst_len - 1) + { + dst[dst_len + i] = src[i]; + i++; + } + dst[dst_len + i] = '\0'; + return (src_len + dst_len); +} diff --git a/extended_libft/ft_strlcpy.c b/extended_libft/ft_strlcpy.c new file mode 100644 index 0000000..145202f --- /dev/null +++ b/extended_libft/ft_strlcpy.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:10 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:24:19 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcpy(char *dest, const char *src, size_t size) +{ + size_t i; + size_t result; + + i = 0; + if (size == 0) + return (ft_strlen(src)); + while (src[i] && i < size - 1) + { + dest[i] = src[i]; + i++; + } + dest[i] = '\0'; + result = ft_strlen(src); + return (result); +} diff --git a/extended_libft/ft_strlen.c b/extended_libft/ft_strlen.c new file mode 100644 index 0000000..dfbc20b --- /dev/null +++ b/extended_libft/ft_strlen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::: ::: */ +/* ft_strlen.c :+: :+::+: :+: */ +/* +:+ +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ */ +/* Created: 2024/07/15 14:51:46 by whaffman #+#+# #+#+# #+# #+# */ +/* Updated: 2024/07/15 15:01:58 by whaffman ### ### ### ### */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + size_t length; + + length = 0; + while (*s++) + length++; + return (length); +} diff --git a/extended_libft/ft_strmapi.c b/extended_libft/ft_strmapi.c new file mode 100644 index 0000000..32891e4 --- /dev/null +++ b/extended_libft/ft_strmapi.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:10 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:06:40 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + int i; + char *result; + + if (!s) + return (NULL); + result = malloc((ft_strlen(s) + 1) * sizeof(char)); + if (!result) + return (NULL); + i = 0; + while (s[i]) + { + result[i] = f(i, s[i]); + i++; + } + result[i] = '\0'; + return (result); +} diff --git a/extended_libft/ft_strncmp.c b/extended_libft/ft_strncmp.c new file mode 100644 index 0000000..e6667ac --- /dev/null +++ b/extended_libft/ft_strncmp.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 14:51:24 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t i; + + i = 0; + if (n == 0) + return (0); + while (*s1 && *s1 == *s2 && i < n - 1) + { + s1++; + s2++; + i++; + } + return ((unsigned char) *s1 - (unsigned char) *s2); +} diff --git a/extended_libft/ft_strnstr.c b/extended_libft/ft_strnstr.c new file mode 100644 index 0000000..676783e --- /dev/null +++ b/extended_libft/ft_strnstr.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 12:01:36 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + size_t j; + + i = 0; + if (*little == '\0' || len == 0) + return ((char *) big); + while (big[i] && i < len) + { + j = 0; + while (little[j] && big[i + j] == little [j] && i + j < len) + j++; + if (little[j] == '\0') + return ((char *) &big[i]); + i++; + } + return (NULL); +} diff --git a/extended_libft/ft_strrchr.c b/extended_libft/ft_strrchr.c new file mode 100644 index 0000000..0b528dd --- /dev/null +++ b/extended_libft/ft_strrchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 11:35:27 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + char *result; + + result = NULL; + while (*s) + { + if (*(unsigned char *) s == (unsigned char) c) + result = (char *) s; + s++; + } + if ('\0' == c) + result = (char *) s; + return (result); +} diff --git a/extended_libft/ft_strtrim.c b/extended_libft/ft_strtrim.c new file mode 100644 index 0000000..2b18cca --- /dev/null +++ b/extended_libft/ft_strtrim.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 12:48:45 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtrim(char const *s1, char const *set) +{ + char *front; + char *back; + + if (!s1) + return (NULL); + if (!ft_strlen(set)) + return (ft_strdup(s1)); + front = (char *) s1; + back = (char *) s1; + while (*back) + back++; + back--; + while (ft_strchr(set, *front)) + front++; + while (ft_strchr(set, *back)) + back--; + return (ft_substr(s1, front - s1, back - front + 1)); +} diff --git a/extended_libft/ft_substr.c b/extended_libft/ft_substr.c new file mode 100644 index 0000000..81118cf --- /dev/null +++ b/extended_libft/ft_substr.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 12:27:02 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *substr; + size_t len_s; + + if (!s) + return (NULL); + len_s = ft_strlen(s); + if (start >= len_s) + return (ft_strdup("")); + if (len_s - start < len) + len = len_s - start; + substr = malloc(len * sizeof(char) + 1); + if (!substr) + return (NULL); + ft_memcpy(substr, &s[start], len); + substr[len] = '\0'; + return (substr); +} diff --git a/extended_libft/ft_tolower.c b/extended_libft/ft_tolower.c new file mode 100644 index 0000000..c5103c3 --- /dev/null +++ b/extended_libft/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:12 by whaffman #+# #+# */ +/* Updated: 2024/07/08 15:51:50 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if ('A' <= c && 'Z' >= c) + return (c - 'A' + 'a'); + return (c); +} diff --git a/extended_libft/ft_toupper.c b/extended_libft/ft_toupper.c new file mode 100644 index 0000000..97dfcf5 --- /dev/null +++ b/extended_libft/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:12 by whaffman #+# #+# */ +/* Updated: 2024/07/08 15:53:24 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if ('a' <= c && 'z' >= c) + return (c - 'a' + 'A'); + return (c); +} diff --git a/extended_libft/libft.h b/extended_libft/libft.h new file mode 100644 index 0000000..52fa825 --- /dev/null +++ b/extended_libft/libft.h @@ -0,0 +1,81 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/06 11:15:10 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:27:58 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H +# include + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +size_t ft_strlen(const char *s); +void *ft_memset(void *s, int c, size_t n); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dest, const void *src, size_t n); +void *ft_memmove(void *dest, const void *src, size_t n); +size_t ft_strlcpy(char *dst, const char *src, size_t size); +size_t ft_strlcat(char *dst, const char *src, size_t size); +int ft_toupper(int c); +int ft_tolower(int c); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +int ft_strncmp(const char *s1, const char *s2, size_t n); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +char *ft_strnstr(const char *big, const char *little, size_t len); +int ft_atoi(const char *nptr); +void *ft_calloc(size_t nmemb, size_t size); +char *ft_strdup(const char *s); +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(char const *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); + +/* + * BONUS + */ + +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 *)); + +/* + * EXTRA + */ + +void ft_putchar(char c); +void ft_putstr(char *s); +void ft_putnbr(int n); +int ft_isspace(int c); + +#endif diff --git a/include/libft.h b/include/libft.h new file mode 100644 index 0000000..72ad276 --- /dev/null +++ b/include/libft.h @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/06 11:15:10 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:27:58 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H +# include + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +size_t ft_strlen(const char *s); +void *ft_memset(void *s, int c, size_t n); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dest, const void *src, size_t n); +void *ft_memmove(void *dest, const void *src, size_t n); +size_t ft_strlcpy(char *dst, const char *src, size_t size); +size_t ft_strlcat(char *dst, const char *src, size_t size); +int ft_toupper(int c); +int ft_tolower(int c); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +int ft_strncmp(const char *s1, const char *s2, size_t n); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +char *ft_strnstr(const char *big, const char *little, size_t len); +int ft_atoi(const char *nptr); +void *ft_calloc(size_t nmemb, size_t size); +char *ft_strdup(const char *s); +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(char const *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); + +/* + * BONUS + */ + +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 diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..fb32e95 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,46 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: whaffman +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/07/09 16:25:07 by whaffman #+# #+# # +# Updated: 2024/07/09 17:08:01 by whaffman ### ########.fr # +# # +# **************************************************************************** # + +NAME = libft.a +SOURCES = ft_atoi.c ft_bzero.c ft_calloc.c ft_isalnum.c ft_isalpha.c \ + ft_isascii.c ft_isdigit.c ft_isprint.c ft_itoa.c 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 ft_memchr.c \ + ft_memcmp.c ft_memcpy.c ft_memmove.c ft_memset.c ft_putchar_fd.c \ + ft_putendl_fd.c ft_putnbr_fd.c ft_putstr_fd.c ft_split.c ft_strchr.c \ + ft_strdup.c ft_striteri.c ft_strjoin.c ft_strlcat.c ft_strlcpy.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 + +OBJECTS = $(SOURCES:.c=.o) + +CC = gcc +CFLAGS = -Wall -Wextra -Werror + +all: $(NAME) + +$(NAME): $(OBJECTS) + $(AR) -r $@ $? + +%.o: %.c + $(CC) -c $(CFLAGS) $? + +clean: + rm -f $(OBJECTS) $(BOBJECTS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY: all bonus clean fclean re + diff --git a/src/ft_atoi.c b/src/ft_atoi.c new file mode 100644 index 0000000..9c73997 --- /dev/null +++ b/src/ft_atoi.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:02 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:20:16 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_isspace(int c) +{ + return (' ' == c || '\f' == c || \ + '\n' == c || '\r' == c || \ + '\t' == c || '\v' == c); +} + +int ft_atoi(const char *nptr) +{ + int sign; + int res; + + while (ft_isspace(*nptr)) + nptr++; + res = 0; + sign = 1; + while (*nptr == '-' || *nptr == '+') + { + if (*nptr == '-') + sign *= -1; + nptr++; + } + while (ft_isdigit(*nptr)) + res = 10 * res + sign * (*nptr++ - '0'); + return (res); +} diff --git a/src/ft_bzero.c b/src/ft_bzero.c new file mode 100644 index 0000000..896499a --- /dev/null +++ b/src/ft_bzero.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:03 by whaffman #+# #+# */ +/* Updated: 2024/07/08 17:57:45 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + ft_memset(s, 0, n); +} diff --git a/src/ft_calloc.c b/src/ft_calloc.c new file mode 100644 index 0000000..38bf0a2 --- /dev/null +++ b/src/ft_calloc.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:03 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:25:29 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void *ft_calloc(size_t nmemb, size_t size) +{ + void *ptr; + + ptr = malloc(nmemb * size); + if (ptr) + ft_bzero(ptr, nmemb * size); + return (ptr); +} diff --git a/src/ft_isalnum.c b/src/ft_isalnum.c new file mode 100644 index 0000000..2c867c5 --- /dev/null +++ b/src/ft_isalnum.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:03 by whaffman #+# #+# */ +/* Updated: 2024/07/09 16:33:06 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + return (ft_isdigit(c) || ft_isalpha(c)); +} diff --git a/src/ft_isalpha.c b/src/ft_isalpha.c new file mode 100644 index 0000000..9072e52 --- /dev/null +++ b/src/ft_isalpha.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/06 12:07:31 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalpha(int c) +{ + return (('A' <= c && 'Z' >= c) || ('a' <= c && 'z' >= c)); +} diff --git a/src/ft_isascii.c b/src/ft_isascii.c new file mode 100644 index 0000000..c471ac4 --- /dev/null +++ b/src/ft_isascii.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/06 12:10:15 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isascii(int c) +{ + return (0 <= c && 127 >= c); +} diff --git a/src/ft_isdigit.c b/src/ft_isdigit.c new file mode 100644 index 0000000..ca13d9c --- /dev/null +++ b/src/ft_isdigit.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/09 17:12:14 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isdigit(int c) +{ + return ('0' <= c && '9' >= c); +} diff --git a/src/ft_isprint.c b/src/ft_isprint.c new file mode 100644 index 0000000..454974c --- /dev/null +++ b/src/ft_isprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/06 12:14:16 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isprint(int c) +{ + return (32 <= c && 126 >= c); +} diff --git a/src/ft_itoa.c b/src/ft_itoa.c new file mode 100644 index 0000000..65ee8d1 --- /dev/null +++ b/src/ft_itoa.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:04 by whaffman #+# #+# */ +/* Updated: 2024/07/10 15:50:44 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +static char *itoa_stralloc(int n) +{ + int i; + + i = 0; + if (n <= 0) + i++; + while (n) + { + i++; + n /= 10; + } + return (ft_calloc((i + 1), sizeof(char))); +} + +char *ft_itoa(int n) +{ + int i; + long ln; + long divider; + char *result; + + result = itoa_stralloc(n); + if (!result) + return (NULL); + ln = n; + i = 0; + divider = 1; + if (ln < 0) + { + ln *= -1; + result[i++] = '-'; + } + while (divider * 10 <= ln) + divider *= 10; + while (divider) + { + result[i++] = ln / divider + '0'; + ln %= divider; + divider /= 10; + } + return (result); +} diff --git a/src/ft_lstadd_back.c b/src/ft_lstadd_back.c new file mode 100644 index 0000000..77496a0 --- /dev/null +++ b/src/ft_lstadd_back.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:51:34 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + t_list *last; + + if (!new) + return ; + if (!*lst) + { + *lst = new; + return ; + } + last = ft_lstlast(*lst); + last->next = new; +} diff --git a/src/ft_lstadd_front.c b/src/ft_lstadd_front.c new file mode 100644 index 0000000..45edfb2 --- /dev/null +++ b/src/ft_lstadd_front.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:35:22 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + if (new) + { + new->next = *lst; + *lst = new; + } +} diff --git a/src/ft_lstclear.c b/src/ft_lstclear.c new file mode 100644 index 0000000..afa4806 --- /dev/null +++ b/src/ft_lstclear.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 17:08:53 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void *)) +{ + t_list *next; + + if (!del || !lst) + return ; + while (*lst) + { + if ((*lst)->next) + next = (*lst)->next; + else + next = NULL; + del((*lst)->content); + free(*lst); + *lst = next; + } +} diff --git a/src/ft_lstdelone.c b/src/ft_lstdelone.c new file mode 100644 index 0000000..1ee2b1b --- /dev/null +++ b/src/ft_lstdelone.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:57:20 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void *)) +{ + if (!lst || !del) + return ; + del(lst->content); + free(lst); +} diff --git a/src/ft_lstiter.c b/src/ft_lstiter.c new file mode 100644 index 0000000..f314537 --- /dev/null +++ b/src/ft_lstiter.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:05 by whaffman #+# #+# */ +/* Updated: 2024/07/10 17:13:53 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + if (!lst || !f) + return ; + while (lst) + { + (*f)(lst->content); + lst = lst->next; + } +} diff --git a/src/ft_lstlast.c b/src/ft_lstlast.c new file mode 100644 index 0000000..19dfd37 --- /dev/null +++ b/src/ft_lstlast.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:06 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:41:26 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (!lst) + return (NULL); + while (lst->next) + lst = lst->next; + return (lst); +} diff --git a/src/ft_lstmap.c b/src/ft_lstmap.c new file mode 100644 index 0000000..bcea43c --- /dev/null +++ b/src/ft_lstmap.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:06 by whaffman #+# #+# */ +/* Updated: 2024/07/10 17:21:58 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new_list; + t_list *new_elem; + + if (!lst || !f) + return (NULL); + new_list = NULL; + while (lst) + { + new_elem = ft_lstnew(f(lst->content)); + if (!new_elem) + { + ft_lstclear(&new_list, del); + return (NULL); + } + ft_lstadd_back(&new_list, new_elem); + lst = lst->next; + } + return (new_list); +} diff --git a/src/ft_lstnew.c b/src/ft_lstnew.c new file mode 100644 index 0000000..cb34a1f --- /dev/null +++ b/src/ft_lstnew.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:06 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:32:16 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *node; + + node = malloc(sizeof(t_list)); + if (node) + { + node->content = content; + node->next = NULL; + } + return (node); +} diff --git a/src/ft_lstsize.c b/src/ft_lstsize.c new file mode 100644 index 0000000..4987ac9 --- /dev/null +++ b/src/ft_lstsize.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:06 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:37:42 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int count; + + count = 1; + if (!lst) + return (0); + while (lst->next) + { + lst = lst->next; + count++; + } + return (count); +} diff --git a/src/ft_memchr.c b/src/ft_memchr.c new file mode 100644 index 0000000..a4d2105 --- /dev/null +++ b/src/ft_memchr.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/10 11:36:51 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + while (0 < n--) + { + if (*(unsigned char *)s == (unsigned char) c) + return ((void *) s); + s++; + } + return (NULL); +} diff --git a/src/ft_memcmp.c b/src/ft_memcmp.c new file mode 100644 index 0000000..8dd6e5c --- /dev/null +++ b/src/ft_memcmp.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/10 14:51:13 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned char *str1; + unsigned char *str2; + size_t i; + + str1 = (unsigned char *)s1; + str2 = (unsigned char *)s2; + i = 0; + while (i < n) + { + if (str1[i] != str2[i]) + return (str1[i] - str2[i]); + i++; + } + return (0); +} diff --git a/src/ft_memcpy.c b/src/ft_memcpy.c new file mode 100644 index 0000000..43d27d6 --- /dev/null +++ b/src/ft_memcpy.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/08 22:44:01 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dest, const void *src, size_t n) +{ + if (dest == NULL && src == NULL) + return (NULL); + while (0 < n--) + ((unsigned char *)dest)[n] = ((unsigned char *)src)[n]; + return (dest); +} diff --git a/src/ft_memmove.c b/src/ft_memmove.c new file mode 100644 index 0000000..dd5ff24 --- /dev/null +++ b/src/ft_memmove.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/08 23:02:34 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memmove(void *dest, const void *src, size_t n) +{ + unsigned char *dest_ptr; + unsigned char *src_ptr; + + dest_ptr = (unsigned char *)dest; + src_ptr = (unsigned char *)src; + if (dest_ptr == src_ptr) + return (dest); + else if (dest_ptr < src_ptr) + { + while (n-- > 0) + *dest_ptr++ = *src_ptr++; + } + else + { + while (n-- > 0) + dest_ptr[n] = src_ptr[n]; + } + return (dest); +} diff --git a/src/ft_memset.c b/src/ft_memset.c new file mode 100644 index 0000000..e1e1cf9 --- /dev/null +++ b/src/ft_memset.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:07 by whaffman #+# #+# */ +/* Updated: 2024/07/08 16:08:55 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memset(void *s, int c, size_t n) +{ + while (0 < n--) + ((unsigned char *)s)[n] = (unsigned char) c; + return (s); +} diff --git a/src/ft_putchar_fd.c b/src/ft_putchar_fd.c new file mode 100644 index 0000000..c1f82fc --- /dev/null +++ b/src/ft_putchar_fd.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:08 by whaffman #+# #+# */ +/* Updated: 2024/07/08 22:52:28 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + if (fd < 0) + return ; + write(fd, &c, 1); +} diff --git a/src/ft_putendl_fd.c b/src/ft_putendl_fd.c new file mode 100644 index 0000000..bc0ff41 --- /dev/null +++ b/src/ft_putendl_fd.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:08 by whaffman #+# #+# */ +/* Updated: 2024/07/08 22:56:27 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + if (fd < 0 || s == NULL) + return ; + ft_putstr_fd(s, fd); + write(fd, "\n", 1); +} diff --git a/src/ft_putnbr_fd.c b/src/ft_putnbr_fd.c new file mode 100644 index 0000000..cf12230 --- /dev/null +++ b/src/ft_putnbr_fd.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:08 by whaffman #+# #+# */ +/* Updated: 2024/07/09 16:23:22 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putnbr_fd(int n, int fd) +{ + long ln; + long divider; + char c; + + if (fd < 0) + return ; + ln = n; + divider = 1; + if (n < 0) + { + if (!write(fd, "-", 1)) + return ; + ln *= -1; + } + while (divider * 10 <= ln) + divider *= 10; + while (divider) + { + c = ln / divider + '0'; + if (!write(fd, &c, 1)) + return ; + ln %= divider; + divider /= 10; + } +} diff --git a/src/ft_putstr_fd.c b/src/ft_putstr_fd.c new file mode 100644 index 0000000..7b61c41 --- /dev/null +++ b/src/ft_putstr_fd.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:08 by whaffman #+# #+# */ +/* Updated: 2024/07/08 22:54:32 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + size_t length; + + if (s == NULL || fd < 0) + return ; + length = ft_strlen(s); + write(fd, s, length); +} diff --git a/src/ft_split.c b/src/ft_split.c new file mode 100644 index 0000000..924aaa2 --- /dev/null +++ b/src/ft_split.c @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/10 14:10:57 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +static int count_words(char const *s, char c) +{ + int n; + int i; + + n = 0; + i = 0; + while (s[i]) + { + if (s[i] != c && (s[i + 1] == c || s[i + 1] == '\0')) + n++; + i++; + } + return (n); +} + +char **ft_split(char const *s, char c) +{ + char **result; + int n; + int i; + int j; + + if (!s) + return (NULL); + result = malloc((count_words(s, c) + 1) * sizeof(char *)); + if (!result) + return (NULL); + i = 0; + n = 0; + while (s[i]) + { + j = 0; + while (s[i] == c) + i++; + while (s[i + j] && s[i + j] != c) + j++; + if (j) + result[n++] = ft_substr(s, i, j); + i += j; + } + result[n] = NULL; + return (result); +} diff --git a/src/ft_strchr.c b/src/ft_strchr.c new file mode 100644 index 0000000..2ac814a --- /dev/null +++ b/src/ft_strchr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/10 11:30:39 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + while (*s) + { + if (*(unsigned char *) s == (unsigned char) c) + return ((char *) s); + s++; + } + if (*(unsigned char *) s == (unsigned char) c) + return ((char *) s); + return (NULL); +} diff --git a/src/ft_strdup.c b/src/ft_strdup.c new file mode 100644 index 0000000..de372a9 --- /dev/null +++ b/src/ft_strdup.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:22:46 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strdup(const char *s) +{ + size_t size; + char *d; + + size = ft_strlen(s) + 1; + d = (char *) malloc(size * sizeof(char)); + if (d) + ft_strlcpy(d, s, size); + return (d); +} diff --git a/src/ft_striteri.c b/src/ft_striteri.c new file mode 100644 index 0000000..933e974 --- /dev/null +++ b/src/ft_striteri.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:07:16 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char*)) +{ + unsigned int i; + + i = 0; + if (!s) + return ; + while (s[i]) + { + f(i, &s[i]); + i++; + } +} diff --git a/src/ft_strjoin.c b/src/ft_strjoin.c new file mode 100644 index 0000000..4b2977f --- /dev/null +++ b/src/ft_strjoin.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:09 by whaffman #+# #+# */ +/* Updated: 2024/07/10 14:49:11 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *str; + size_t len_s1; + size_t len_s2; + + if (!s1 || !s2) + return (NULL); + len_s1 = ft_strlen(s1); + len_s2 = ft_strlen(s2); + str = (char *)malloc(len_s1 + len_s2 + 1); + if (!str) + return (NULL); + ft_memcpy(str, s1, len_s1); + ft_memcpy(str + len_s1, s2, len_s2); + str[len_s1 + len_s2] = '\0'; + return (str); +} diff --git a/src/ft_strlcat.c b/src/ft_strlcat.c new file mode 100644 index 0000000..c2c2eb7 --- /dev/null +++ b/src/ft_strlcat.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:10 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:23:36 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + unsigned int src_len; + unsigned int dst_len; + unsigned int i; + + src_len = ft_strlen(src); + if (size == 0) + return (src_len); + dst_len = ft_strlen(dst); + if (dst_len >= (long int) size) + return (size + src_len); + i = 0; + while (src[i] && i < size - dst_len - 1) + { + dst[dst_len + i] = src[i]; + i++; + } + dst[dst_len + i] = '\0'; + return (src_len + dst_len); +} diff --git a/src/ft_strlcpy.c b/src/ft_strlcpy.c new file mode 100644 index 0000000..145202f --- /dev/null +++ b/src/ft_strlcpy.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:10 by whaffman #+# #+# */ +/* Updated: 2024/07/09 22:24:19 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcpy(char *dest, const char *src, size_t size) +{ + size_t i; + size_t result; + + i = 0; + if (size == 0) + return (ft_strlen(src)); + while (src[i] && i < size - 1) + { + dest[i] = src[i]; + i++; + } + dest[i] = '\0'; + result = ft_strlen(src); + return (result); +} diff --git a/src/ft_strlen.c b/src/ft_strlen.c new file mode 100644 index 0000000..dfbc20b --- /dev/null +++ b/src/ft_strlen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::: ::: */ +/* ft_strlen.c :+: :+::+: :+: */ +/* +:+ +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ */ +/* Created: 2024/07/15 14:51:46 by whaffman #+#+# #+#+# #+# #+# */ +/* Updated: 2024/07/15 15:01:58 by whaffman ### ### ### ### */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + size_t length; + + length = 0; + while (*s++) + length++; + return (length); +} diff --git a/src/ft_strmapi.c b/src/ft_strmapi.c new file mode 100644 index 0000000..32891e4 --- /dev/null +++ b/src/ft_strmapi.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:10 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:06:40 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + int i; + char *result; + + if (!s) + return (NULL); + result = malloc((ft_strlen(s) + 1) * sizeof(char)); + if (!result) + return (NULL); + i = 0; + while (s[i]) + { + result[i] = f(i, s[i]); + i++; + } + result[i] = '\0'; + return (result); +} diff --git a/src/ft_strncmp.c b/src/ft_strncmp.c new file mode 100644 index 0000000..e6667ac --- /dev/null +++ b/src/ft_strncmp.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 14:51:24 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t i; + + i = 0; + if (n == 0) + return (0); + while (*s1 && *s1 == *s2 && i < n - 1) + { + s1++; + s2++; + i++; + } + return ((unsigned char) *s1 - (unsigned char) *s2); +} diff --git a/src/ft_strnstr.c b/src/ft_strnstr.c new file mode 100644 index 0000000..676783e --- /dev/null +++ b/src/ft_strnstr.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 12:01:36 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + size_t j; + + i = 0; + if (*little == '\0' || len == 0) + return ((char *) big); + while (big[i] && i < len) + { + j = 0; + while (little[j] && big[i + j] == little [j] && i + j < len) + j++; + if (little[j] == '\0') + return ((char *) &big[i]); + i++; + } + return (NULL); +} diff --git a/src/ft_strrchr.c b/src/ft_strrchr.c new file mode 100644 index 0000000..0b528dd --- /dev/null +++ b/src/ft_strrchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 11:35:27 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + char *result; + + result = NULL; + while (*s) + { + if (*(unsigned char *) s == (unsigned char) c) + result = (char *) s; + s++; + } + if ('\0' == c) + result = (char *) s; + return (result); +} diff --git a/src/ft_strtrim.c b/src/ft_strtrim.c new file mode 100644 index 0000000..2b18cca --- /dev/null +++ b/src/ft_strtrim.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 12:48:45 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtrim(char const *s1, char const *set) +{ + char *front; + char *back; + + if (!s1) + return (NULL); + if (!ft_strlen(set)) + return (ft_strdup(s1)); + front = (char *) s1; + back = (char *) s1; + while (*back) + back++; + back--; + while (ft_strchr(set, *front)) + front++; + while (ft_strchr(set, *back)) + back--; + return (ft_substr(s1, front - s1, back - front + 1)); +} diff --git a/src/ft_substr.c b/src/ft_substr.c new file mode 100644 index 0000000..81118cf --- /dev/null +++ b/src/ft_substr.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:11 by whaffman #+# #+# */ +/* Updated: 2024/07/10 12:27:02 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *substr; + size_t len_s; + + if (!s) + return (NULL); + len_s = ft_strlen(s); + if (start >= len_s) + return (ft_strdup("")); + if (len_s - start < len) + len = len_s - start; + substr = malloc(len * sizeof(char) + 1); + if (!substr) + return (NULL); + ft_memcpy(substr, &s[start], len); + substr[len] = '\0'; + return (substr); +} diff --git a/src/ft_tolower.c b/src/ft_tolower.c new file mode 100644 index 0000000..c5103c3 --- /dev/null +++ b/src/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:12 by whaffman #+# #+# */ +/* Updated: 2024/07/08 15:51:50 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if ('A' <= c && 'Z' >= c) + return (c - 'A' + 'a'); + return (c); +} diff --git a/src/ft_toupper.c b/src/ft_toupper.c new file mode 100644 index 0000000..97dfcf5 --- /dev/null +++ b/src/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/05 18:42:12 by whaffman #+# #+# */ +/* Updated: 2024/07/08 15:53:24 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if ('a' <= c && 'z' >= c) + return (c - 'a' + 'A'); + return (c); +} diff --git a/src/libft.h b/src/libft.h new file mode 100644 index 0000000..72ad276 --- /dev/null +++ b/src/libft.h @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/06 11:15:10 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:27:58 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H +# include + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +size_t ft_strlen(const char *s); +void *ft_memset(void *s, int c, size_t n); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dest, const void *src, size_t n); +void *ft_memmove(void *dest, const void *src, size_t n); +size_t ft_strlcpy(char *dst, const char *src, size_t size); +size_t ft_strlcat(char *dst, const char *src, size_t size); +int ft_toupper(int c); +int ft_tolower(int c); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +int ft_strncmp(const char *s1, const char *s2, size_t n); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +char *ft_strnstr(const char *big, const char *little, size_t len); +int ft_atoi(const char *nptr); +void *ft_calloc(size_t nmemb, size_t size); +char *ft_strdup(const char *s); +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(char const *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); + +/* + * BONUS + */ + +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