From: = <=> Date: Wed, 29 Oct 2025 09:09:31 +0000 (+0100) Subject: Moved each function to individual file X-Git-Url: https://git.uwuaxy.net/?a=commitdiff_plain;h=49c10b88aca8a2bc1227d2aa27d654cd90f9b80a;p=axy%2Fft%2Flibft.git Moved each function to individual file --- diff --git a/Makefile b/Makefile index 3b72017..23f2199 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ NAME=libft.a -SRCS=ft_char2.c ft_char.c ft_mem2.c ft_mem.c ft_str2.c ft_str.c +SRCS=ft_char1.c ft_char2.c ft_mem1.c ft_mem2.c ft_str1.c ft_str2.c ft_str3.c ft_split.c OBJS=${SRCS:.c=.o} -CFLAGS=-Wall -Wextra -Werror -O3 +CFLAGS=-Wall -Wextra -Werror CC=cc diff --git a/ft_atoi.c b/ft_atoi.c new file mode 100644 index 0000000..ba87aa9 --- /dev/null +++ b/ft_atoi.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:05:22 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:06:56 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +static bool ft_isspace(char c) +{ + return (c == ' ' || (c >= '\t' && c <= '\r')); +} + +int ft_atoi(const char *nptr) +{ + int sign; + int res; + + sign = 1; + res = 0; + while (ft_isspace(*nptr)) + nptr++; + if (*nptr == '-') + sign = -1; + else if (*nptr != '+') + nptr--; + nptr++; + while (ft_isdigit(*nptr)) + res = res * 10 + sign * (*(nptr++) - '0'); + return (res); +} diff --git a/ft_bzero.c b/ft_bzero.c new file mode 100644 index 0000000..29aafa1 --- /dev/null +++ b/ft_bzero.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:47:42 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:47:59 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_bzero(void *s, size_t n) +{ + return (ft_memset(s, '\0', n)); +} diff --git a/ft_calloc.c b/ft_calloc.c new file mode 100644 index 0000000..5b6d5ce --- /dev/null +++ b/ft_calloc.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:52:41 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:55:36 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include "libft.h" + +void *ft_calloc(size_t nmemb, size_t size) +{ + void *res; + size_t alloc; + + if (__builtin_mul_overflow(nmemb, size, &alloc)) + return (NULL); + res = malloc(alloc); + if (res) + ft_bzero(res, alloc); + return (res); +} diff --git a/ft_isalnum.c b/ft_isalnum.c new file mode 100644 index 0000000..3fbaba8 --- /dev/null +++ b/ft_isalnum.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:42:58 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:43:50 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + return (ft_isalpha(c) || ft_isdigit(c)); +} diff --git a/ft_char.c b/ft_isalpha.c similarity index 64% rename from ft_char.c rename to ft_isalpha.c index ff7a429..b4c95db 100644 --- a/ft_char.c +++ b/ft_isalpha.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* ft_char.c :+: :+: :+: */ +/* ft_isalpha.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/10/27 11:30:03 by agilliar #+# #+# */ -/* Updated: 2025/10/27 13:17:26 by agilliar ### ########.fr */ +/* Created: 2025/10/29 09:42:17 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:42:31 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,23 +14,3 @@ int ft_isalpha(int c) { return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')); } - -int ft_isdigit(int c) -{ - return (c >= '0' && c <= '9'); -} - -int ft_isalnum(int c) -{ - return (ft_isalpha(c) || ft_isdigit(c)); -} - -int ft_isascii(int c) -{ - return (c >= '\0' && c <= '\x7F'); -} - -int ft_isprint(int c) -{ - return (c >= ' ' && c <= '~'); -} diff --git a/ft_isascii.c b/ft_isascii.c new file mode 100644 index 0000000..ca4fb05 --- /dev/null +++ b/ft_isascii.c @@ -0,0 +1,16 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:43:14 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:43:17 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isascii(int c) +{ + return (c >= '\0' && c <= '\x7F'); +} diff --git a/ft_isdigit.c b/ft_isdigit.c new file mode 100644 index 0000000..417eb36 --- /dev/null +++ b/ft_isdigit.c @@ -0,0 +1,16 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:42:38 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:42:45 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isdigit(int c) +{ + return (c >= '0' && c <= '9'); +} diff --git a/ft_isprint.c b/ft_isprint.c new file mode 100644 index 0000000..dcd2df9 --- /dev/null +++ b/ft_isprint.c @@ -0,0 +1,16 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:43:29 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:43:32 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_isprint(int c) +{ + return (c >= ' ' && c <= '~'); +} diff --git a/ft_mem.c b/ft_mem1.c similarity index 79% rename from ft_mem.c rename to ft_mem1.c index 4420cc3..68231e8 100644 --- a/ft_mem.c +++ b/ft_mem1.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* ft_mem.c :+: :+: :+: */ +/* ft_mem1.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/27 12:08:42 by agilliar #+# #+# */ -/* Updated: 2025/10/27 14:51:45 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 09:19:54 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,12 +44,18 @@ void *ft_memmove(void *dest, const void *src, size_t n) { size_t i; - i = 0; - while (i < n) + if (dest < src) { - ((unsigned char *)dest)[i] = ((unsigned char *)src)[i]; - i++; + i = 0; + while (i < n) + { + ((unsigned char *)dest)[i] = ((unsigned char *)src)[i]; + i++; + } } + else + while (n--) + ((unsigned char *)dest)[n] = ((unsigned char *)src)[n]; return (dest); } @@ -60,7 +66,7 @@ void *ft_memchr(const void *s, int c, size_t n) i = 0; while (i < n) { - if (((unsigned char *)s)[i] == c) + if (((unsigned char *)s)[i] == (unsigned char)c) return ((void *)&((unsigned char *)s)[i]); i++; } diff --git a/ft_mem2.c b/ft_mem2.c index 9ca5cb2..94c2707 100644 --- a/ft_mem2.c +++ b/ft_mem2.c @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/27 14:39:28 by agilliar #+# #+# */ -/* Updated: 2025/10/27 15:10:14 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 09:30:07 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,7 +33,7 @@ void *ft_calloc(size_t nmemb, size_t size) { void *res; - if (SIZE_MAX / size < nmemb) + if (size && SIZE_MAX / size < nmemb) return (NULL); res = malloc(nmemb * size); if (res) diff --git a/ft_memchr.c b/ft_memchr.c new file mode 100644 index 0000000..e042f58 --- /dev/null +++ b/ft_memchr.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:48:41 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:48:43 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +void *ft_memchr(const void *s, int c, size_t n) +{ + size_t i; + + i = 0; + while (i < n) + { + if (((unsigned char *)s)[i] == (unsigned char)c) + return ((void *)&((unsigned char *)s)[i]); + i++; + } + return (NULL); +} diff --git a/ft_memcmp.c b/ft_memcmp.c new file mode 100644 index 0000000..c960c15 --- /dev/null +++ b/ft_memcmp.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:51:58 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:52:31 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + size_t i; + int res; + + i = 0; + res = 0; + while (res == 0 && i < n) + { + res = ((unsigned char *) s1)[i] - ((unsigned char *) s2)[i]; + i++; + } + return (res); +} diff --git a/ft_memcpy.c b/ft_memcpy.c new file mode 100644 index 0000000..1d9d244 --- /dev/null +++ b/ft_memcpy.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:48:05 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:48:15 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +void *ft_memcpy(void *restrict dest, const void *src, size_t n) +{ + size_t i; + + i = 0; + while (i < n) + { + ((unsigned char *)dest)[i] = ((unsigned char *)src)[i]; + i++; + } + return (dest); +} diff --git a/ft_memmove.c b/ft_memmove.c new file mode 100644 index 0000000..7b5ddd0 --- /dev/null +++ b/ft_memmove.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:48:19 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:48:31 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +void *ft_memmove(void *dest, const void *src, size_t n) +{ + size_t i; + + if (dest < src) + { + i = 0; + while (i < n) + { + ((unsigned char *)dest)[i] = ((unsigned char *)src)[i]; + i++; + } + } + else + while (n--) + ((unsigned char *)dest)[n] = ((unsigned char *)src)[n]; + return (dest); +} diff --git a/ft_memset.c b/ft_memset.c new file mode 100644 index 0000000..7272039 --- /dev/null +++ b/ft_memset.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:47:17 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:47:32 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +void *ft_memset(void *s, int c, size_t n) +{ + size_t i; + + i = 0; + while (i < n) + ((unsigned char *) s)[i++] = c; + return (s); +} diff --git a/ft_split.c b/ft_split.c new file mode 100644 index 0000000..b4baa4f --- /dev/null +++ b/ft_split.c @@ -0,0 +1,75 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/28 12:08:04 by agilliar #+# #+# */ +/* Updated: 2025/10/28 13:20:17 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include + +static size_t ft_strlen_term(const char *s, char c) +{ + size_t i; + + i = 0; + while (s[i] && s[i] != c) + i++; + return (i); +} + +static char **ft_split_cleanup(char **res, size_t len) +{ + size_t i; + + i = 0; + while (i < len) + free(res[i++]); + free(res); + return (NULL); +} + +static char **ft_split_with(char **res, const char *s, char c) +{ + size_t i; + + if (!res) + return (res); + i = 0; + while (*s) + if (ft_strlen_term(s, c) == 0) + s++; + else + { + res[i] = ft_substr(s, 0, ft_strlen_term(s, c)); + if (!res[i]) + return (ft_split_cleanup(res, i)); + i++; + s += ft_strlen_term(s, c); + } + res[i] = NULL; + return (res); +} + +char **ft_split(const char *s, char c) +{ + size_t i; + size_t len; + + i = 0; + len = 1; + while (s[i]) + if (ft_strlen_term(&s[i], c) == 0) + i++; + else + { + i += ft_strlen_term(&s[i], c); + len++; + } + return (ft_split_with(malloc(sizeof(char *) * len), s, c)); +} diff --git a/ft_str.c b/ft_str1.c similarity index 79% rename from ft_str.c rename to ft_str1.c index df5aa0b..9ef1297 100644 --- a/ft_str.c +++ b/ft_str1.c @@ -1,16 +1,17 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* ft_str.c :+: :+: :+: */ +/* ft_str1.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/27 12:11:26 by agilliar #+# #+# */ -/* Updated: 2025/10/27 13:29:49 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 09:28:34 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft.h" +#include size_t ft_strlen(const char *s) { @@ -22,7 +23,7 @@ size_t ft_strlen(const char *s) return (i); } -size_t ft_strlcpy(char *dest, char *src, size_t size) +size_t ft_strlcpy(char *dest, const char *src, size_t size) { size_t len; size_t i; @@ -39,7 +40,7 @@ size_t ft_strlcpy(char *dest, char *src, size_t size) return (len); } -size_t ft_strlcat(char *dest, char *src, size_t size) +size_t ft_strlcat(char *dest, const char *src, size_t size) { size_t src_len; size_t dest_len; @@ -64,9 +65,9 @@ size_t ft_strlcat(char *dest, char *src, size_t size) char *ft_strchr(const char *s, int c) { - while (*s != c && *s != '\0') + while (*s != (char)c && *s != '\0') s++; - if (*s == c) + if (*s == (char)c) return ((char *) s); return (NULL); } @@ -76,10 +77,15 @@ char *ft_strrchr(const char *s, int c) char *res; res = (char *) s; - while (*s != '\0') - if (*s == c) + while (true) + { + if (*s == (char)c) res = (char *) s; - if (*res == c) + if (!*s) + break; + s++; + } + if (*res == (char)c) return (res); return (NULL); } diff --git a/ft_str2.c b/ft_str2.c index 3ab511f..1c8cdfe 100644 --- a/ft_str2.c +++ b/ft_str2.c @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/27 13:31:21 by agilliar #+# #+# */ -/* Updated: 2025/10/27 15:36:29 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 09:36:36 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,7 @@ #include #include -int ft_strncmp(char *s1, char *s2, size_t n) +int ft_strncmp(const char *s1, const char *s2, size_t n) { unsigned int idx; @@ -78,17 +78,18 @@ int ft_atoi(const char *nptr) char *ft_substr(const char *s, unsigned int start, size_t len) { - size_t i; + size_t s_len; char *res; - s = s + start; - i = 0; - while (s[i] && i < len) - i++; - res = malloc(i + 1); + s_len = ft_strlen(s); + if (start > s_len) + start = s_len; + if (len > s_len - start) + len = s_len - start; + res = malloc(len + 1); if (!res) return (res); - ft_memcpy(res, s, i); - res[i] = '\0'; + ft_memcpy(res, s + start, len); + res[len] = '\0'; return (res); } diff --git a/ft_str3.c b/ft_str3.c new file mode 100644 index 0000000..e9403a6 --- /dev/null +++ b/ft_str3.c @@ -0,0 +1,54 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_str3.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/28 09:18:20 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:40:51 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include +#include + +char *ft_strjoin(const char *s1, const char *s2) +{ + size_t l1; + size_t l2; + char *res; + + l1 = ft_strlen(s1); + l2 = ft_strlen(s2); + res = malloc(l1 + l2 + 1); + if (!res) + return (res); + ft_memcpy(res, s1, l1); + ft_memcpy(&res[l1], s2, l2); + res[l1 + l2] = '\0'; + return (res); +} + +static bool ft_char_in_set(char c, const char *set) +{ + while (*set && *set != c) + set++; + return (*set == c); +} + +char *ft_strtrim(const char *s1, const char *set) +{ + size_t i; + size_t len; + + while (*s1 && ft_char_in_set(*s1, set)) + s1++; + i = 0; + len = 0; + while (s1[i]) + if (!ft_char_in_set(s1[i++], set)) + len = i; + return (ft_substr(s1, 0, len)); +} diff --git a/ft_strchr.c b/ft_strchr.c new file mode 100644 index 0000000..5db2152 --- /dev/null +++ b/ft_strchr.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:50:12 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:51:18 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +char *ft_strchr(const char *s, int c) +{ + while (*s != (char)c && *s != '\0') + s++; + if (*s == (char)c) + return ((char *) s); + return (NULL); +} diff --git a/ft_strdup.c b/ft_strdup.c new file mode 100644 index 0000000..7fc02c5 --- /dev/null +++ b/ft_strdup.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:01:04 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:02:35 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdup(char *src) +{ + return (ft_substr(str, 0, ft_strlen(str))); +} diff --git a/ft_strjoin.c b/ft_strjoin.c new file mode 100644 index 0000000..0bb0d59 --- /dev/null +++ b/ft_strjoin.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:08:19 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:08:40 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include + +char *ft_strjoin(const char *s1, const char *s2) +{ + size_t l1; + size_t l2; + char *res; + + l1 = ft_strlen(s1); + l2 = ft_strlen(s2); + res = malloc(l1 + l2 + 1); + if (!res) + return (res); + ft_memcpy(res, s1, l1); + ft_memcpy(&res[l1], s2, l2); + res[l1 + l2] = '\0'; + return (res); +} diff --git a/ft_strlcat.c b/ft_strlcat.c new file mode 100644 index 0000000..60f0a72 --- /dev/null +++ b/ft_strlcat.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:49:32 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:49:39 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +size_t ft_strlcat(char *dest, const char *src, size_t size) +{ + size_t src_len; + size_t dest_len; + size_t i; + + src_len = 0; + while (src[src_len]) + src_len++; + dest_len = 0; + while (dest_len < size && dest[dest_len]) + dest_len++; + i = 0; + while (dest_len + i + 1 < size && i < src_len) + { + dest[dest_len + i] = src[i]; + i++; + } + if (dest_len != size) + dest[dest_len + i] = '\0'; + return (src_len + dest_len); +} diff --git a/ft_strlcpy.c b/ft_strlcpy.c new file mode 100644 index 0000000..7f7d19e --- /dev/null +++ b/ft_strlcpy.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:49:19 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:49:27 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +size_t ft_strlcpy(char *dest, const char *src, size_t size) +{ + size_t len; + size_t i; + + len = 0; + while (src[len] != '\0') + len++; + if (size == 0) + return (len); + i = 0; + while (i < len && i < size - 1) + *dest++ = src[i++]; + *dest = '\0'; + return (len); +} diff --git a/ft_strlen.c b/ft_strlen.c new file mode 100644 index 0000000..9854e72 --- /dev/null +++ b/ft_strlen.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:48:58 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:49:12 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +size_t ft_strlen(const char *s) +{ + size_t i; + + i = 0; + while (s[i] != '\0') + i++; + return (i); +} diff --git a/ft_strncmp.c b/ft_strncmp.c new file mode 100644 index 0000000..f53ddbc --- /dev/null +++ b/ft_strncmp.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:03:01 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:04:21 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t idx; + + if (n == 0) + return (0); + idx = 0; + while (s1[idx] != '\0' && s1[idx] == s2[idx] && idx < n - 1) + idx++; + return ((unsigned char) s1[idx] - (unsigned char) s2[idx]); +} diff --git a/ft_strnstr.c b/ft_strnstr.c new file mode 100644 index 0000000..80ed25d --- /dev/null +++ b/ft_strnstr.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:04:47 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:05:14 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + size_t j; + + i = 0; + j = 0; + while (little[i] && i + j < len && big[i + j]) + { + if (big[i + j] != little[i]) + { + i = 0; + j++; + } + else + i++; + } + if (little[i]) + return (NULL); + return ((char *)&big[j]); +} diff --git a/ft_strrchr.c b/ft_strrchr.c new file mode 100644 index 0000000..560a637 --- /dev/null +++ b/ft_strrchr.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:51:22 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:51:35 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include + +char *ft_strrchr(const char *s, int c) +{ + char *res; + + res = (char *) s; + while (true) + { + if (*s == (char)c) + res = (char *) s; + if (!*s) + break; + s++; + } + if (*res == (char)c) + return (res); + return (NULL); +} diff --git a/ft_strtrim.c b/ft_strtrim.c new file mode 100644 index 0000000..4d713ef --- /dev/null +++ b/ft_strtrim.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:08:47 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:09:08 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static bool ft_char_in_set(char c, const char *set) +{ + while (*set && *set != c) + set++; + return (*set == c); +} + +char *ft_strtrim(const char *s1, const char *set) +{ + size_t i; + size_t len; + + while (*s1 && ft_char_in_set(*s1, set)) + s1++; + i = 0; + len = 0; + while (s1[i]) + if (!ft_char_in_set(s1[i++], set)) + len = i; + return (ft_substr(s1, 0, len)); +} diff --git a/ft_substr.c b/ft_substr.c new file mode 100644 index 0000000..bd41643 --- /dev/null +++ b/ft_substr.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 10:07:38 by agilliar #+# #+# */ +/* Updated: 2025/10/29 10:08:13 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_substr(const char *s, unsigned int start, size_t len) +{ + size_t s_len; + char *res; + + s_len = ft_strlen(s); + if (start > s_len) + start = s_len; + if (len > s_len - start) + len = s_len - start; + res = malloc(len + 1); + if (!res) + return (res); + ft_memcpy(res, s + start, len); + res[len] = '\0'; + return (res); +} diff --git a/ft_char2.c b/ft_tolower.c similarity index 73% rename from ft_char2.c rename to ft_tolower.c index a5c80c0..1797e5d 100644 --- a/ft_char2.c +++ b/ft_tolower.c @@ -1,22 +1,15 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* ft_char2.c :+: :+: :+: */ +/* ft_tolower.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/10/27 12:56:07 by agilliar #+# #+# */ -/* Updated: 2025/10/27 13:08:18 by agilliar ### ########.fr */ +/* Created: 2025/10/29 09:44:28 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:44:39 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ -int ft_toupper(int c) -{ - if (c >= 'a' && c <= 'z') - c = c - 'a' + 'A'; - return (c); -} - int ft_tolower(int c) { if (c >= 'A' && c <= 'Z') diff --git a/ft_toupper.c b/ft_toupper.c new file mode 100644 index 0000000..570fbe7 --- /dev/null +++ b/ft_toupper.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: agilliar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/10/29 09:44:12 by agilliar #+# #+# */ +/* Updated: 2025/10/29 09:44:20 by agilliar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int ft_toupper(int c) +{ + if (c >= 'a' && c <= 'z') + c = c - 'a' + 'A'; + return (c); +} diff --git a/libft.h b/libft.h index 295fe96..05e8f48 100644 --- a/libft.h +++ b/libft.h @@ -6,7 +6,7 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/27 11:27:06 by agilliar #+# #+# */ -/* Updated: 2025/10/27 15:34:27 by agilliar ### ########.fr */ +/* Updated: 2025/10/29 09:26:33 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,28 +15,31 @@ # include -int ft_strncmp(char *s1, char *s2, size_t n); -char *ft_strnstr(const char *big, const char *little, size_t len); -int ft_atoi(const char *nptr); int ft_memcmp(const void *s1, const void *s2, size_t n); void *ft_calloc(size_t nmemb, size_t size); char *ft_strdup(char *src); +int ft_strncmp(const char *s1, const char *s2, size_t n); +char *ft_strnstr(const char *big, const char *little, size_t len); +int ft_atoi(const char *nptr); +char *ft_substr(const char *s, unsigned int start, size_t len); void *ft_memset(void *s, int c, size_t n); void *ft_bzero(void *s, size_t n); -void *ft_memcpy(void *restrict dest, const void *src, 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); void *ft_memchr(const void *s, int c, size_t n); -int ft_toupper(int c); -int ft_tolower(int c); +size_t ft_strlen(const char *s); +size_t ft_strlcpy(char *dest, const char *src, size_t size); +size_t ft_strlcat(char *dest, const char *src, size_t size); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, 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); -size_t ft_strlcpy(char *dest, char *src, size_t size); -size_t ft_strlcat(char *dest, char *src, size_t size); -char *ft_strchr(const char *s, int c); -char *ft_strrchr(const char *s, int c); +char *ft_strjoin(const char *s1, const char *s2); +char *ft_strtrim(const char *s1, const char *set); +int ft_toupper(int c); +int ft_tolower(int c); #endif