NAME=libft.a
-SRCS=ft_char1.c ft_char2.c ft_mem1.c ft_mem2.c ft_str1.c ft_str2.c ft_str3.c ft_split.c
+SRCS=ft_calloc.c ft_strnstr.c ft_isdigit.c ft_strrchr.c ft_strncmp.c ft_strjoin.c ft_toupper.c ft_tolower.c ft_strlcat.c ft_strchr.c ft_strdup.c ft_atoi.c ft_strtrim.c ft_substr.c ft_split.c ft_isalpha.c ft_isascii.c ft_isprint.c ft_isalnum.c ft_memset.c ft_bzero.c ft_memcpy.c ft_memmove.c ft_memchr.c ft_strlen.c ft_strlcpy.c ft_memcmp.c ft_itoa.c ft_strmapi.c ft_striteri.c ft_putchar_fd.c ft_putstr_fd.c ft_putendl_fd.c ft_putnbr_fd.c
+
+BONUS_SRCS=ft_lstnew.c ft_lstadd_front.c ft_lstsize.c ft_lstlast.c ft_lstadd_back.c ft_lstdelone.c ft_lstclear.c ft_lstiter.c ft_lstmap.c
OBJS=${SRCS:.c=.o}
+BONUS_OBJS=${BONUS_SRCS:.c=.o}
+
CFLAGS=-Wall -Wextra -Werror
CC=cc
${NAME} : ${OBJS}
ar -rcs $@ $^
+bonus : ${BONUS_OBJS}
+ ar -rcs ${NAME} $^
+
clean :
rm -f ${OBJS}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 10:05:22 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:06:56 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:13:14 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
-#include <libft.h>
+#include <stdbool.h>
+#include "libft.h"
static bool ft_isspace(char c)
{
/* ************************************************************************** */
/* */
/* ::: :::::::: */
-/* ft_str3.c :+: :+: :+: */
+/* ft_itoa.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 */
+/* Created: 2025/10/29 10:19:15 by agilliar #+# #+# */
+/* Updated: 2025/10/29 10:34:53 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
-#include "libft.h"
+#include <stddef.h>
#include <stdlib.h>
-#include <stdbool.h>
-char *ft_strjoin(const char *s1, const char *s2)
+static void ft_itoa_visit(long n, void (*f)(void *, char), void *f_dat)
{
- size_t l1;
- size_t l2;
- char *res;
+ if (n < 0)
+ {
+ f(f_dat, '-');
+ return (ft_itoa_visit(-n, f, f_dat));
+ }
+ if (n > 9)
+ ft_itoa_visit(n / 10, f, f_dat);
+ f(f_dat, '0' + n % 10);
+}
- l1 = ft_strlen(s1);
- l2 = ft_strlen(s2);
- res = malloc(l1 + l2 + 1);
- if (!res)
- return (res);
- ft_memcpy(res, s1, l1);
- ft_memcpy(&res[l1], s2, l2);
- res[l1 + l2] = '\0';
- return (res);
+static void ft_itoa_count(size_t *count, char _c)
+{
+ (void) _c;
+ (*count)++;
}
-static bool ft_char_in_set(char c, const char *set)
+static void ft_itoa_write(char **buf, char c)
{
- while (*set && *set != c)
- set++;
- return (*set == c);
+ *((*buf)++) = c;
}
-char *ft_strtrim(const char *s1, const char *set)
+char *ft_itoa(int n)
{
- size_t i;
size_t len;
+ char *res;
+ char *dat;
- while (*s1 && ft_char_in_set(*s1, set))
- s1++;
- i = 0;
- len = 0;
- while (s1[i])
- if (!ft_char_in_set(s1[i++], set))
- len = i;
- return (ft_substr(s1, 0, len));
+ len = 1;
+ ft_itoa_visit(n, (void (*)(void *, char))ft_itoa_count, &len);
+ res = malloc(len);
+ if (!res)
+ return (res);
+ dat = res;
+ ft_itoa_visit(n, (void (*)(void *, char)) ft_itoa_write, &dat);
+ *dat = '\0';
+ return (res);
}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstadd_back.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 12:55:01 by agilliar #+# #+# */
+/* Updated: 2025/10/29 12:57:51 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void ft_lstadd_back(t_list **lst, t_list *new)
+{
+ if (!(*lst))
+ *lst = new;
+ else
+ ft_lstadd_back(&(*lst)->next, new);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstadd_front.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 12:09:55 by agilliar #+# #+# */
+/* Updated: 2025/10/29 12:14:27 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void ft_lstadd_front(t_list **lst, t_list *new)
+{
+ new->next = *lst;
+ *lst = new;
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstclear.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 13:03:33 by agilliar #+# #+# */
+/* Updated: 2025/10/29 13:10:12 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include "libft.h"
+
+void ft_lstclear(t_list **lst, void (*del)(void *))
+{
+ t_list *lst_next;
+
+ if (!*lst)
+ return ;
+ lst_next = (*lst)->next;
+ ft_lstdelone(*lst, del);
+ *lst = lst_next;
+ ft_lstclear(lst, del);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstdelone.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 12:58:54 by agilliar #+# #+# */
+/* Updated: 2025/10/29 13:00:44 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+#include <stdlib.h>
+
+void ft_lstdelone(t_list *lst, void (*del)(void *))
+{
+ del(lst->content);
+ free(lst);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstiter.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 13:10:47 by agilliar #+# #+# */
+/* Updated: 2025/10/29 13:13:22 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void ft_lstiter(t_list *lst, void (*f)(void *))
+{
+ if (!lst)
+ return ;
+ f(lst->content);
+ ft_lstiter(lst->next, f);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstlast.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 12:18:37 by agilliar #+# #+# */
+/* Updated: 2025/10/29 12:21:34 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+t_list *ft_lstlast(t_list *lst)
+{
+ if (!lst || !lst->next)
+ return (lst);
+ else
+ return (ft_lstlast(lst->next));
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstmap.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 13:13:59 by agilliar #+# #+# */
+/* Updated: 2025/10/29 13:32:14 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include "libft.h"
+
+t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
+{
+ t_list *res;
+ void *content;
+
+ if (!lst)
+ return (NULL);
+ content = f(lst->content);
+ res = ft_lstnew(content);
+ if (!res)
+ return (del(content), NULL);
+ if (!lst->next)
+ return (res);
+ res->next = ft_lstmap(lst->next, f, del);
+ if (res->next)
+ return (res);
+ del(res->content);
+ free(res);
+ return (NULL);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstnew.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 12:05:45 by agilliar #+# #+# */
+/* Updated: 2025/10/29 12:07:12 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+#include <stdlib.h>
+
+t_list *ft_lstnew(void *content)
+{
+ t_list *res;
+
+ res = malloc(sizeof(t_list));
+ if (!res)
+ return (res);
+ res->next = 0;
+ res->content = content;
+ return (res);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstsize.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 12:15:01 by agilliar #+# #+# */
+/* Updated: 2025/10/29 12:16:55 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+int ft_lstsize(t_list *lst)
+{
+ if (lst)
+ return (ft_lstsize(lst->next) + 1);
+ else
+ return (0);
+}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_mem1.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/27 12:08:42 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:19:54 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include "libft.h"
-
-void *ft_memset(void *s, int c, size_t n)
-{
- size_t i;
-
- i = 0;
- while (i < n)
- ((unsigned char *) s)[i++] = c;
- return (s);
-}
-
-void *ft_bzero(void *s, size_t n)
-{
- return (ft_memset(s, '\0', n));
-}
-
-void *ft_memcpy(void *restrict dest, const void *src, size_t n)
-{
- size_t i;
-
- i = 0;
- while (i < n)
- {
- ((unsigned char *)dest)[i] = ((unsigned char *)src)[i];
- i++;
- }
- return (dest);
-}
-
-void *ft_memmove(void *dest, const void *src, size_t n)
-{
- size_t i;
-
- if (dest < src)
- {
- i = 0;
- while (i < n)
- {
- ((unsigned char *)dest)[i] = ((unsigned char *)src)[i];
- i++;
- }
- }
- else
- while (n--)
- ((unsigned char *)dest)[n] = ((unsigned char *)src)[n];
- return (dest);
-}
-
-void *ft_memchr(const void *s, int c, size_t n)
-{
- size_t i;
-
- i = 0;
- while (i < n)
- {
- if (((unsigned char *)s)[i] == (unsigned char)c)
- return ((void *)&((unsigned char *)s)[i]);
- i++;
- }
- return (NULL);
-}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:48:41 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:48:43 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:14:45 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stddef.h>
+
void *ft_memchr(const void *s, int c, size_t n)
{
size_t i;
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:51:58 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:52:31 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:15:40 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stddef.h>
+
int ft_memcmp(const void *s1, const void *s2, size_t n)
{
size_t i;
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:48:05 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:48:15 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:13:48 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stddef.h>
+
void *ft_memcpy(void *restrict dest, const void *src, size_t n)
{
size_t i;
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:48:19 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:48:31 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:14:18 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stddef.h>
+
void *ft_memmove(void *dest, const void *src, size_t n)
{
size_t i;
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:47:17 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:47:32 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:13:36 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stddef.h>
+
void *ft_memset(void *s, int c, size_t n)
{
size_t i;
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_putchar_fd.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 10:52:35 by agilliar #+# #+# */
+/* Updated: 2025/10/29 10:54:15 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <unistd.h>
+
+void ft_putchar_fd(char c, int fd)
+{
+ write(fd, &c, 1);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_putendl_fd.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 10:57:18 by agilliar #+# #+# */
+/* Updated: 2025/10/29 10:58:07 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void ft_putendl_fd(char *s, int fd)
+{
+ ft_putstr_fd(s, fd);
+ ft_putchar_fd('\n', fd);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_putnbr_fd.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 10:59:59 by agilliar #+# #+# */
+/* Updated: 2025/10/29 11:12:16 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+static void ft_itoa_visit(long n, void (*f)(void *, char), void *f_dat)
+{
+ if (n < 0)
+ {
+ f(f_dat, '-');
+ return (ft_itoa_visit(-n, f, f_dat));
+ }
+ if (n > 9)
+ ft_itoa_visit(n / 10, f, f_dat);
+ f(f_dat, '0' + n % 10);
+}
+
+void ft_putnbr_fd_write(int *fd, char c)
+{
+ ft_putchar_fd(c, *fd);
+}
+
+void ft_putnbr_fd(int n, int fd)
+{
+ ft_itoa_visit(n, (void (*)(void *, char))ft_putnbr_fd_write, &fd);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_putstr_fd.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 10:55:24 by agilliar #+# #+# */
+/* Updated: 2025/10/29 10:56:44 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void ft_putstr_fd(char *s, int fd)
+{
+ while (*s)
+ ft_putchar_fd(*(s++), fd);
+}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/28 12:08:04 by agilliar #+# #+# */
-/* Updated: 2025/10/28 13:20:17 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:37:49 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
return (NULL);
}
+/*
+ Weird Formatting from norminette on that else, for some reason
+*/
static char **ft_split_with(char **res, const char *s, char c)
{
size_t i;
return (res);
i = 0;
while (*s)
+ {
if (ft_strlen_term(s, c) == 0)
s++;
else
i++;
s += ft_strlen_term(s, c);
}
+ }
res[i] = NULL;
return (res);
}
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));
}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_str1.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/27 12:11:26 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:28:34 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include "libft.h"
-#include <stdbool.h>
-
-size_t ft_strlen(const char *s)
-{
- size_t i;
-
- i = 0;
- while (s[i] != '\0')
- i++;
- return (i);
-}
-
-size_t ft_strlcpy(char *dest, const char *src, size_t size)
-{
- size_t len;
- size_t i;
-
- len = 0;
- while (src[len] != '\0')
- len++;
- if (size == 0)
- return (len);
- i = 0;
- while (i < len && i < size - 1)
- *dest++ = src[i++];
- *dest = '\0';
- return (len);
-}
-
-size_t ft_strlcat(char *dest, const char *src, size_t size)
-{
- size_t src_len;
- size_t dest_len;
- size_t i;
-
- src_len = 0;
- while (src[src_len])
- src_len++;
- dest_len = 0;
- while (dest_len < size && dest[dest_len])
- dest_len++;
- i = 0;
- while (dest_len + i + 1 < size && i < src_len)
- {
- dest[dest_len + i] = src[i];
- i++;
- }
- if (dest_len != size)
- dest[dest_len + i] = '\0';
- return (src_len + dest_len);
-}
-
-char *ft_strchr(const char *s, int c)
-{
- while (*s != (char)c && *s != '\0')
- s++;
- if (*s == (char)c)
- return ((char *) s);
- return (NULL);
-}
-
-char *ft_strrchr(const char *s, int c)
-{
- char *res;
-
- res = (char *) s;
- while (true)
- {
- if (*s == (char)c)
- res = (char *) s;
- if (!*s)
- break;
- s++;
- }
- if (*res == (char)c)
- return (res);
- return (NULL);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_str2.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/27 13:31:21 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:36:36 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include "libft.h"
-#include <stdbool.h>
-#include <stdlib.h>
-
-int ft_strncmp(const char *s1, const char *s2, size_t n)
-{
- unsigned int idx;
-
- if (n == 0)
- return (0);
- idx = 0;
- while (s1[idx] != '\0' && s1[idx] == s2[idx] && idx < n - 1)
- idx++;
- return ((unsigned char) s1[idx] - (unsigned char) s2[idx]);
-}
-
-char *ft_strnstr(const char *big, const char *little, size_t len)
-{
- size_t i;
- size_t j;
-
- i = 0;
- j = 0;
- while (little[i] && i + j < len && big[i + j])
- {
- if (big[i + j] != little[i])
- {
- i = 0;
- j++;
- }
- else
- i++;
- }
- if (little[i])
- return (NULL);
- return ((char *)&big[j]);
-}
-
-static bool ft_isspace(char c)
-{
- return (c == ' ' || (c >= '\t' && c <= '\r'));
-}
-
-int ft_atoi(const char *nptr)
-{
- int sign;
- int res;
-
- sign = 1;
- res = 0;
- while (ft_isspace(*nptr))
- nptr++;
- if (*nptr == '-')
- sign = -1;
- else if (*nptr != '+')
- nptr--;
- nptr++;
- while (ft_isdigit(*nptr))
- {
- res *= 10;
- res += sign * (*nptr - '0');
- nptr++;
- }
- return (res);
-}
-
-char *ft_substr(const char *s, unsigned int start, size_t len)
-{
- size_t s_len;
- char *res;
-
- s_len = ft_strlen(s);
- if (start > s_len)
- start = s_len;
- if (len > s_len - start)
- len = s_len - start;
- res = malloc(len + 1);
- if (!res)
- return (res);
- ft_memcpy(res, s + start, len);
- res[len] = '\0';
- return (res);
-}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 10:01:04 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:02:35 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:12:32 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
char *ft_strdup(char *src)
{
- return (ft_substr(str, 0, ft_strlen(str)));
+ return (ft_substr(src, 0, ft_strlen(src)));
}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_striteri.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2025/10/29 10:48:45 by agilliar #+# #+# */
+/* Updated: 2025/10/29 10:51:20 by agilliar ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stddef.h>
+
+void ft_striteri(char *s, void (*f)(unsigned int, char*))
+{
+ size_t i;
+
+ i = 0;
+ while (s[i])
+ {
+ f(i, &s[i]);
+ i++;
+ }
+}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:49:32 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:49:39 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:12:16 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stddef.h>
+
size_t ft_strlcat(char *dest, const char *src, size_t size)
{
size_t src_len;
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:49:19 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:49:27 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:15:19 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stddef.h>
+
size_t ft_strlcpy(char *dest, const char *src, size_t size)
{
size_t len;
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:48:58 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:49:12 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:14:59 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stddef.h>
+
size_t ft_strlen(const char *s)
{
size_t i;
/* ************************************************************************** */
/* */
/* ::: :::::::: */
-/* ft_mem2.c :+: :+: :+: */
+/* ft_strmapi.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/27 14:39:28 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:30:07 by agilliar ### ########.fr */
+/* Created: 2025/10/29 10:39:05 by agilliar #+# #+# */
+/* Updated: 2025/10/29 10:46:55 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
-#include "libft.h"
#include <stdlib.h>
-#include <stdint.h>
+#include "libft.h"
-int ft_memcmp(const void *s1, const void *s2, size_t n)
+char *ft_strmapi(const char *s, char (*f)(unsigned int, char))
{
+ size_t len;
+ char *res;
size_t i;
- int res;
+ len = ft_strlen(s);
+ res = malloc(len + 1);
+ if (!res)
+ return (res);
i = 0;
- res = 0;
- while (res == 0 && i < n)
+ while (i < len)
{
- res = ((unsigned char *) s1)[i] - ((unsigned char *) s2)[i];
+ res[i] = f(i, s[i]);
i++;
}
- return (res);
-}
-
-void *ft_calloc(size_t nmemb, size_t size)
-{
- void *res;
-
- if (size && SIZE_MAX / size < nmemb)
- return (NULL);
- res = malloc(nmemb * size);
- if (res)
- ft_bzero(res, nmemb * size);
- return (res);
-}
-
-char *ft_strdup(char *src)
-{
- size_t len;
- char *res;
-
- len = ft_strlen(src) + 1;
- res = malloc(len);
- if (res)
- ft_memcpy(res, src, len);
+ res[i] = '\0';
return (res);
}
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 09:51:22 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:51:35 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 10:37:33 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
#include <stddef.h>
+#include <stdbool.h>
char *ft_strrchr(const char *s, int c)
{
if (*s == (char)c)
res = (char *) s;
if (!*s)
- break;
+ break ;
s++;
}
if (*res == (char)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 */
+/* Updated: 2025/10/29 10:13:24 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stdbool.h>
#include "libft.h"
static bool ft_char_in_set(char c, const char *set)
/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/27 11:27:06 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:26:33 by agilliar ### ########.fr */
+/* Updated: 2025/10/29 13:31:51 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
char *ft_strtrim(const char *s1, const char *set);
int ft_toupper(int c);
int ft_tolower(int c);
+char **ft_split(const char *s, char c);
+char *ft_itoa(int n);
+char *ft_strmapi(const char *s, char (*f)(unsigned int, char));
+void ft_striteri(char *s, void (*f)(unsigned int, char*));
+void ft_putchar_fd(char c, int fd);
+void ft_putstr_fd(char *s, int fd);
+void ft_putendl_fd(char *s, int fd);
+void ft_putnbr_fd(int n, int fd);
+
+typedef struct s_list
+{
+ void *content;
+ struct s_list *next;
+} t_list;
+
+t_list *ft_lstnew(void *content);
+void ft_lstadd_front(t_list **lst, t_list *new);
+int ft_lstsize(t_list *lst);
+t_list *ft_lstlast(t_list *lst);
+void ft_lstadd_back(t_list **lst, t_list *new);
+void ft_lstdelone(t_list *lst, void (*del)(void *));
+void ft_lstclear(t_list **lst, void (*del)(void *));
+void ft_lstiter(t_list *lst, void (*f)(void *));
+t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *));
#endif