]> Untitled Git - axy/ft/libft.git/commitdiff
Moved each function to individual file
author= <=>
Wed, 29 Oct 2025 09:09:31 +0000 (10:09 +0100)
committer= <=>
Wed, 29 Oct 2025 09:09:31 +0000 (10:09 +0100)
34 files changed:
Makefile
ft_atoi.c [new file with mode: 0644]
ft_bzero.c [new file with mode: 0644]
ft_calloc.c [new file with mode: 0644]
ft_isalnum.c [new file with mode: 0644]
ft_isalpha.c [moved from ft_char.c with 64% similarity]
ft_isascii.c [new file with mode: 0644]
ft_isdigit.c [new file with mode: 0644]
ft_isprint.c [new file with mode: 0644]
ft_mem1.c [moved from ft_mem.c with 79% similarity]
ft_mem2.c
ft_memchr.c [new file with mode: 0644]
ft_memcmp.c [new file with mode: 0644]
ft_memcpy.c [new file with mode: 0644]
ft_memmove.c [new file with mode: 0644]
ft_memset.c [new file with mode: 0644]
ft_split.c [new file with mode: 0644]
ft_str1.c [moved from ft_str.c with 79% similarity]
ft_str2.c
ft_str3.c [new file with mode: 0644]
ft_strchr.c [new file with mode: 0644]
ft_strdup.c [new file with mode: 0644]
ft_strjoin.c [new file with mode: 0644]
ft_strlcat.c [new file with mode: 0644]
ft_strlcpy.c [new file with mode: 0644]
ft_strlen.c [new file with mode: 0644]
ft_strncmp.c [new file with mode: 0644]
ft_strnstr.c [new file with mode: 0644]
ft_strrchr.c [new file with mode: 0644]
ft_strtrim.c [new file with mode: 0644]
ft_substr.c [new file with mode: 0644]
ft_tolower.c [moved from ft_char2.c with 73% similarity]
ft_toupper.c [new file with mode: 0644]
libft.h

index 3b720175065bfb72e99332853ab48c61ca0e30e3..23f219939554bbd30f448ab699e3052e4328dd5d 100644 (file)
--- 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 (file)
index 0000000..ba87aa9
--- /dev/null
+++ b/ft_atoi.c
@@ -0,0 +1,37 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_atoi.c                                          :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/29 10:05:22 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 10:06:56 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include <libft.h>
+
+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 (file)
index 0000000..29aafa1
--- /dev/null
@@ -0,0 +1,18 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_bzero.c                                         :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..5b6d5ce
--- /dev/null
@@ -0,0 +1,28 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_calloc.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/29 09:52:41 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 09:55:36 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include <stdint.h>
+#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 (file)
index 0000000..3fbaba8
--- /dev/null
@@ -0,0 +1,18 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_isalnum.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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));
+}
similarity index 64%
rename from ft_char.c
rename to ft_isalpha.c
index ff7a429e826c1baf8801f654c30f57ae2ae28649..b4c95dbd606521467405676e6ff141c406fe412a 100644 (file)
--- a/ft_char.c
@@ -1,12 +1,12 @@
 /* ************************************************************************** */
 /*                                                                            */
 /*                                                        :::      ::::::::   */
-/*   ft_char.c                                          :+:      :+:    :+:   */
+/*   ft_isalpha.c                                       :+:      :+:    :+:   */
 /*                                                    +:+ +:+         +:+     */
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
-/*   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 (file)
index 0000000..ca4fb05
--- /dev/null
@@ -0,0 +1,16 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_isascii.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..417eb36
--- /dev/null
@@ -0,0 +1,16 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_isdigit.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..dcd2df9
--- /dev/null
@@ -0,0 +1,16 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_isprint.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 <= '~');
+}
similarity index 79%
rename from ft_mem.c
rename to ft_mem1.c
index 4420cc31734ed9ec7c2292a1aa6a58b42fe2c95c..68231e8f4f9573f3f8ce6ad57aafcaf6f6a00be6 100644 (file)
--- a/ft_mem.c
+++ b/ft_mem1.c
@@ -1,12 +1,12 @@
 /* ************************************************************************** */
 /*                                                                            */
 /*                                                        :::      ::::::::   */
-/*   ft_mem.c                                           :+:      :+:    :+:   */
+/*   ft_mem1.c                                          :+:      :+:    :+:   */
 /*                                                    +:+ +:+         +:+     */
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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++;
        }
index 9ca5cb26e5f29da1e2d302b8b6aa829ffabdf528..94c27072bae0014e67ba06e7e669091241dc0448 100644 (file)
--- a/ft_mem2.c
+++ b/ft_mem2.c
@@ -6,7 +6,7 @@
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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 (file)
index 0000000..e042f58
--- /dev/null
@@ -0,0 +1,25 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_memchr.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..c960c15
--- /dev/null
@@ -0,0 +1,26 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_memcmp.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..1d9d244
--- /dev/null
@@ -0,0 +1,24 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_memcpy.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..7b5ddd0
--- /dev/null
@@ -0,0 +1,30 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_memmove.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..7272039
--- /dev/null
@@ -0,0 +1,21 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_memset.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..b4baa4f
--- /dev/null
@@ -0,0 +1,75 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_split.c                                         :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/28 12:08:04 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/28 13:20:17 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+#include <stdlib.h>
+
+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));
+}
similarity index 79%
rename from ft_str.c
rename to ft_str1.c
index df5aa0b375ec851cb5c13fb8733c5a26c0b72f66..9ef129700766a689e84fc9c864e9701c4e9048f2 100644 (file)
--- a/ft_str.c
+++ b/ft_str1.c
@@ -1,16 +1,17 @@
 /* ************************************************************************** */
 /*                                                                            */
 /*                                                        :::      ::::::::   */
-/*   ft_str.c                                           :+:      :+:    :+:   */
+/*   ft_str1.c                                          :+:      :+:    :+:   */
 /*                                                    +:+ +:+         +:+     */
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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 <stdbool.h>
 
 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);
 }
index 3ab511f29bd3f7bab052be4aae98b1f08939e632..1c8cdfe4165fad2aeac4cf04da5945faed1939d1 100644 (file)
--- a/ft_str2.c
+++ b/ft_str2.c
@@ -6,7 +6,7 @@
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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 <stdbool.h>
 #include <stdlib.h>
 
-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 (file)
index 0000000..e9403a6
--- /dev/null
+++ b/ft_str3.c
@@ -0,0 +1,54 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_str3.c                                          :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/28 09:18:20 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 09:40:51 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+#include <stdlib.h>
+#include <stdbool.h>
+
+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 (file)
index 0000000..5db2152
--- /dev/null
@@ -0,0 +1,22 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strchr.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/29 09:50:12 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 09:51:18 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include <stddef.h>
+
+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 (file)
index 0000000..7fc02c5
--- /dev/null
@@ -0,0 +1,18 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strdup.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..0bb0d59
--- /dev/null
@@ -0,0 +1,31 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strjoin.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/29 10:08:19 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 10:08:40 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+#include <stdlib.h>
+
+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 (file)
index 0000000..60f0a72
--- /dev/null
@@ -0,0 +1,34 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strlcat.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..7f7d19e
--- /dev/null
@@ -0,0 +1,28 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strlcpy.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..9854e72
--- /dev/null
@@ -0,0 +1,21 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strlen.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..f53ddbc
--- /dev/null
@@ -0,0 +1,25 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strncmp.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/29 10:03:01 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 10:04:21 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include <stddef.h>
+
+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 (file)
index 0000000..80ed25d
--- /dev/null
@@ -0,0 +1,35 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strnstr.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/29 10:04:47 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 10:05:14 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include <stddef.h>
+
+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 (file)
index 0000000..560a637
--- /dev/null
@@ -0,0 +1,31 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strrchr.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/29 09:51:22 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 09:51:35 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include <stddef.h>
+
+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 (file)
index 0000000..4d713ef
--- /dev/null
@@ -0,0 +1,35 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_strtrim.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..bd41643
--- /dev/null
@@ -0,0 +1,32 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_substr.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2025/10/29 10:07:38 by agilliar          #+#    #+#             */
+/*   Updated: 2025/10/29 10:08:13 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#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);
+}
similarity index 73%
rename from ft_char2.c
rename to ft_tolower.c
index a5c80c097bb4adcc2c5afb18e4acf74616a734dc..1797e5d70f8c503d652153e104cfcef9651e3ac0 100644 (file)
@@ -1,22 +1,15 @@
 /* ************************************************************************** */
 /*                                                                            */
 /*                                                        :::      ::::::::   */
-/*   ft_char2.c                                         :+:      :+:    :+:   */
+/*   ft_tolower.c                                       :+:      :+:    :+:   */
 /*                                                    +:+ +:+         +:+     */
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
-/*   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 (file)
index 0000000..570fbe7
--- /dev/null
@@ -0,0 +1,18 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_toupper.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 295fe9645146c2f03b293c9913dbf2530142bdb8..05e8f4820d3a4c203c6b07714a0c116fb834d907 100644 (file)
--- a/libft.h
+++ b/libft.h
@@ -6,7 +6,7 @@
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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       */
 /*                                                                            */
 /* ************************************************************************** */
 
 
 # include <stddef.h>
 
-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