diff --git a/Makefile b/Makefile index 5c56f78..6448387 100644 --- a/Makefile +++ b/Makefile @@ -4,15 +4,37 @@ AR = ar ARFLAGS = rc -CFLAGS = -Wall -Wextra -Werror -I libft.h +HEADER = libft.h + +CFLAGS = -Wall -Wextra -Werror NAME = libft.a -SRC = ft_isalpha.c ft_isdigit.c ft_isalnum.c ft_isascii.c +SRC = ft_isalpha.c \ + ft_isdigit.c \ + ft_isalnum.c \ + ft_isascii.c \ + ft_isprint.c \ + ft_strlen.c \ + ft_memset.c \ + ft_bzero.c \ + ft_memcpy.c \ + ft_memmove.c \ + ft_strlcpy.c \ + ft_strlcat.c \ + ft_toupper.c \ + ft_tolower.c \ + ft_strchr.c \ + ft_strrchr.c \ + ft_strncmp.c \ + ft_memcpy.c \ + ft_memchr.c \ + ft_strnstr.c \ + ft_atoi.c -OBJDIR = objs +OBJ_DIR = objs -OBJ = $(patsubst %, $(OBJDIR)/%o, $(SRC:.c=.)) +OBJ = $(patsubst %, $(OBJ_DIR)/%o, $(SRC:.c=.)) all: $(NAME) @@ -21,10 +43,10 @@ $(NAME): $(OBJ) $(AR) $(ARFLAGS) $(NAME) $(OBJ) ranlib $(NAME) -$(OBJDIR)/%.o: %.c | $(OBJDIR) - $(CC) -o $@ -c $< $(CFLAGS) +$(OBJ_DIR)/%.o: %.c | $(OBJ_DIR) + $(CC) -o $@ -c $< $(CFLAGS) -I$(HEADER) -$(OBJDIR): +$(OBJ_DIR): mkdir $@ clean: @@ -35,4 +57,4 @@ fclean: clean re: fclean all -.PHONY: all clean fclean re +.PHONY: all clean fclean re diff --git a/ft_atoi.c b/ft_atoi.c new file mode 100644 index 0000000..55fbfe1 --- /dev/null +++ b/ft_atoi.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 19:07:51 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 19:17:34 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_atoi(const char *nptr) +{ + int i; + int res; + + i = 0; + res = 0; + if (!nptr[0]) + return (0); + if (nptr[0] == '-' && ft_isdigit(nptr[1])) + return (-1 * ft_atoi(nptr + 1)); + while (ft_isdigit(nptr[i++])) + res = (10 * res) + (nptr[i] - '0'); + return (res); +} diff --git a/ft_bzero.c b/ft_bzero.c new file mode 100644 index 0000000..ff3ccb3 --- /dev/null +++ b/ft_bzero.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 11:41:08 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 11:44:03 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + if (n <= 0) + return ; + *((char *) s) = '\0'; + ft_bzero(s + 1, n - 1); +} diff --git a/ft_isprint.c b/ft_isprint.c new file mode 100644 index 0000000..9e0c39a --- /dev/null +++ b/ft_isprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 11:14:13 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 11:16:46 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isprint(int c) +{ + if ((c >= 40 && c <= 126) || (c >= 7 && c <= 13)) + return (1); + return (0); +} diff --git a/ft_memchr.c b/ft_memchr.c new file mode 100644 index 0000000..03dc996 --- /dev/null +++ b/ft_memchr.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 17:54:17 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:59:54 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + if (n > 0 && *((unsigned char *) s) == c) + return ((void *) s); + if (n <= 0) + return (NULL); + return (ft_memchr(s + 1, c, n - 1)); +} diff --git a/ft_memcmp.c b/ft_memcmp.c new file mode 100644 index 0000000..804eb20 --- /dev/null +++ b/ft_memcmp.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 18:00:38 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 18:05:28 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + if (n <= 0) + return (0); + if (*((unsigned char *) s1) != *((unsigned char *) s2)) + return (*((unsigned char *) s1) - *((unsigned char *) s2)); + return (ft_memcmp(s1 + 1, s2 + 1, n - 1)); +} diff --git a/ft_memcpy.c b/ft_memcpy.c new file mode 100644 index 0000000..4144b38 --- /dev/null +++ b/ft_memcpy.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 11:46:16 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:02:06 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dest, const void *src, size_t n) +{ + if (n <= 0) + return (dest); + *((unsigned char *) dest) = *((unsigned char *) src); + ft_memcpy(dest + 1, src + 1, n - 1); + return (dest); +} diff --git a/ft_memmove.c b/ft_memmove.c new file mode 100644 index 0000000..98ab7bd --- /dev/null +++ b/ft_memmove.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 13:17:42 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 13:27:43 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_rev_memcpy(void *dest, const void *src, size_t n) +{ + if (n <= 0) + { + return (dest); + } + *((char *) dest) = *((char *) src); + ft_memcpy(dest - 1, src - 1, n - 1); + return (dest); +} + +void *ft_memmove(void *dest, const void *src, size_t n) +{ + if (dest < src) + ft_memcpy(dest, src, n); + else + ft_rev_memcpy(dest + n, src + n, n); + return (dest); +} diff --git a/ft_memset.c b/ft_memset.c new file mode 100644 index 0000000..ee59ed0 --- /dev/null +++ b/ft_memset.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 11:20:47 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 11:44:56 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memset(void *s, int c, size_t n) +{ + if (n <= 0) + return (s); + *((char *) s) = c; + ft_memset(s + 1, c, n - 1); + return (s); +} diff --git a/ft_strchr.c b/ft_strchr.c new file mode 100644 index 0000000..1d817b6 --- /dev/null +++ b/ft_strchr.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 17:24:37 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:38:39 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +char *ft_strchr(const char *s, int c) +{ + if (*s == c) + return ((char *) s); + if (!(*s)) + return (0); + return (ft_strchr(s + 1, c)); +} diff --git a/ft_strlcat.c b/ft_strlcat.c new file mode 100644 index 0000000..9fc426e --- /dev/null +++ b/ft_strlcat.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 17:11:43 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:19:16 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcpy(char *dst, const char *src, size_t size) +{ + size_t i; + size_t j; + + i = 0; + j = ft_strlen(dst); + while (i < (size - 1) && src[i++]) + dst[i + j] = src[i]; + dst[i + j] = '\0'; + return (j + ft_strlen(dst)); +} diff --git a/ft_strlcpy.c b/ft_strlcpy.c new file mode 100644 index 0000000..ed60ea6 --- /dev/null +++ b/ft_strlcpy.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 13:31:13 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:10:52 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcpy(char *dst, const char *src, size_t size) +{ + size_t i; + + i = 0; + while (src[i++] && size > (i - 1)) + dst[i] = src[i]; + dst[i] = '\0'; + return (ft_strlen(src)); +} diff --git a/ft_strlen.c b/ft_strlen.c new file mode 100644 index 0000000..aa82e97 --- /dev/null +++ b/ft_strlen.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 11:17:31 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 11:20:00 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + if (!(*s)) + return (0); + return (1 + ft_strlen(s + 1)); +} diff --git a/ft_strncmp.c b/ft_strncmp.c new file mode 100644 index 0000000..5428d76 --- /dev/null +++ b/ft_strncmp.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 17:34:15 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:41:35 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + if (n <= 0) + return (0); + if (*s1 != *s2) + return (*s1 - *s2); + return (ft_strncmp(s1 + 1, s2 + 1, n - 1)); +} diff --git a/ft_strnstr.c b/ft_strnstr.c new file mode 100644 index 0000000..738ec32 --- /dev/null +++ b/ft_strnstr.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 18:05:52 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 19:07:15 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t little_len; + size_t i; + + i = 0; + little_len = ft_strlen(little); + if (!little[0]) + return ((char *) big); + while ((len - i) < little_len) + { + if (!ft_strncmp(&big[i], little, little_len)) + return ((char *) &big[i]); + i++; + } + return (NULL); +} diff --git a/ft_strrchr.c b/ft_strrchr.c new file mode 100644 index 0000000..0ec6855 --- /dev/null +++ b/ft_strrchr.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 17:28:39 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:33:38 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +char *ft_strrchr(const char *s, int c) +{ + int i; + + i = 0; + while (s[i]) + i++; + while (i >= 0) + { + if (s[i] == c) + return ((char *) &s[i]); + i++; + } + return (0); +} diff --git a/ft_tolower.c b/ft_tolower.c new file mode 100644 index 0000000..14a5d34 --- /dev/null +++ b/ft_tolower.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 17:23:29 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:24:21 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +int ft_tolower(int c) +{ + if (c >= 'A' && c <= 'Z') + return (c + 32); + return (c); +} diff --git a/ft_toupper.c b/ft_toupper.c new file mode 100644 index 0000000..5f70504 --- /dev/null +++ b/ft_toupper.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/05 17:20:43 by dgaillet #+# #+# */ +/* Updated: 2025/11/05 17:23:02 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +int ft_toupper(int c) +{ + if (c >= 'a' && c <= 'z') + return (c - 32); + return (c); +} diff --git a/libft.h b/libft.h index df71a96..b9b626a 100644 --- a/libft.h +++ b/libft.h @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/05 09:49:43 by dgaillet #+# #+# */ -/* Updated: 2025/11/05 10:55:45 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/05 19:06:38 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -15,9 +15,24 @@ # include -int ft_isalpha(int c); -int ft_isdigit(int c); -int ft_isalnum(int c); -int ft_isascii(int c); +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); +int ft_memcmp(const void *s1, const void *s2, size_t n); +void *ft_memchr(const void *s, int c, size_t n); #endif