/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 14:24:47 by agilliar #+# #+# */
-/* Updated: 2025/10/31 00:28:58 by agilliar ### ########.fr */
+/* Updated: 2025/10/31 12:49:51 by agilliar ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdbool.h>
#include <stddef.h>
#include <unistd.h>
+#include <stdint.h>
/*
Because of variadic argument promotion,
SPECIFIER_PERCENT,
} t_specifier;
-typedef enum e_num_prefix
-{
- NUM_PREFIX_NONE,
- NUM_PREFIX_FORMAT,
-} t_num_prefix;
-
typedef struct s_format
{
t_specifier specifier;
t_sign_flag sign_flag;
t_justify justify;
- t_num_prefix num_prefix;
+ bool num_prefix;
int width;
bool zero_pad;
int precision;
bool enable_precision;
} t_format;
-int ft_putchar_sim(char c, bool simulated)
+typedef struct s_uintptr_format
+{
+ bool print_zeros;
+ uintptr_t base;
+ const char *base_s;
+} t_uintptr_format;
+
+int ft_putchar_sim(char c, bool sim)
{
- if (!simulated && write(STDOUT_FILENO, &c, 1) != 1)
+ if (!sim && write(STDOUT_FILENO, &c, 1) != 1)
return (-1);
return (1);
}
-int ft_putnchar(char c, int n, bool simulated)
+int ft_putnchar(char c, int n, bool sim)
{
int i;
i = 0;
while (i++ < n)
- if (ft_putchar_sim(c, simulated) == -1)
+ if (ft_putchar_sim(c, sim) == -1)
return (-1);
return (n);
}
-int ft_put_size(size_t n, bool simulated, int base, const char *base_s,
- bool print_zero)
+uintptr_t ft_int_abs(int64_t n)
+{
+ if (n < 0)
+ return (-n);
+ return (n);
+}
+
+t_uintptr_format ft_uintptr_format_new(const t_format *format)
+{
+ t_uintptr_format res;
+ t_specifier spec;
+
+ res.print_zeros = !format->enable_precision;
+ spec = format->specifier;
+ res.base = 16;
+ res.base_s = "0123456789abcdef";
+ if (spec == SPECIFIER_INT || spec == SPECIFIER_UINT)
+ res.base = 10;
+ if (spec == SPECIFIER_UINT_HEX_UPPER)
+ res.base_s = "0123456789ABCDEF";
+ return (res);
+}
+
+/*
+ Prints a uintptr_t without prefixes, padding or precision padding
+*/
+int ft_put_uintptr(t_uintptr_format format, uintptr_t n, bool sim)
{
int written;
+ uintptr_t base;
+ const char *base_s;
- if (!n && !print_zero)
+ if (!n && !format.print_zeros)
return (0);
+ format.print_zeros = true;
+ base = format.base;
+ base_s = format.base_s;
if (n < base)
written = 0;
else
- written = ft_put_size(n / base, simulated, base, base_s, true);
- if (written == -1 || ft_putchar_sim(base_s[n % base], simulated) == -1)
+ written = ft_put_uintptr(format, n / base, sim);
+ if (written == -1 || ft_putchar_sim(base_s[n % base], sim) == -1)
return (-1);
return (written + 1);
}
-int ft_precision_pad(const t_format *format, int written, bool simulated)
+int ft_putprefix(const t_format *format, bool sim)
+{
+ t_specifier spec;
+ char c;
+
+ spec = format->specifier;
+ if (!format->num_prefix && spec != SPECIFIER_PTR)
+ return (0);
+ if (spec == SPECIFIER_PTR || spec == SPECIFIER_UINT_HEX_LOWER)
+ c = 'x';
+ else if (spec == SPECIFIER_UINT_HEX_UPPER)
+ c = 'X';
+ else
+ return (0);
+ if (ft_putchar_sim('0', sim) == -1
+ || ft_putchar_sim(c, sim) == -1)
+ return (-1);
+ return (2);
+}
+
+int ft_precision_pad(const t_format *format, int written, bool sim)
{
if (written >= format->precision || !format->enable_precision)
return (0);
- return (ft_putnchar('0', format->precision - written, simulated));
+ return (ft_putnchar('0', format->precision - written, sim));
}
-int ft_zero_pad(const t_format *format, int written, bool simulated)
+int ft_zero_pad(const t_format *format, int written, bool sim)
{
if (written >= format->width || !format->zero_pad)
return (0);
- return (ft_putnchar('0', format->width - written, simulated));
+ return (ft_putnchar('0', format->width - written, sim));
}
-int ft_putformat_char(const t_format *format, t_step_arg arg, bool simulated)
+int ft_putformat_char(const t_format *format, t_step_arg arg, bool sim)
{
- return (ft_putchar_sim(arg.v_int, simulated));
+ (void) format;
+ return (ft_putchar_sim(arg.v_int, sim));
}
-int ft_putformat_str(const t_format *format, t_step_arg arg, bool simulated)
+int ft_putformat_str(const t_format *format, t_step_arg arg, bool sim)
{
int i;
const char *s;
if (!s)
s = "(null)";
while ((!format->enable_precision || format->precision > i) && s[i])
- if (ft_putchar_sim(s[i++], simulated) == -1)
+ if (ft_putchar_sim(s[i++], sim) == -1)
return (-1);
return (i);
}
-int ft_putformat_ptr(const t_format *format, t_step_arg arg, bool simulated)
+int ft_putformat_ptr(const t_format *format, t_step_arg arg, bool sim)
{
int written;
- int n;
- size_t val;
+ uintptr_t val;
+ val = (uintptr_t) arg.v_ptr;
if (!arg.v_ptr)
{
arg.v_ptr = "(nil)";
- return (ft_putformat_str(format, arg, simulated));
+ return (ft_putformat_str(format, arg, sim));
}
- val = (size_t) arg.v_ptr;
- if (ft_putchar_sim('0', simulated) == -1
- || ft_putchar_sim('x', simulated) == -1)
+ if (ft_putprefix(format, sim) == -1)
+ return (-1);
+ written = ft_put_uintptr(ft_uintptr_format_new(format), val, sim);
+ if (written == -1)
return (-1);
- written = ft_put_size(val, true, 16, "0123456789abcdef",
- format->enable_precision);
- n = ft_precision_pad(format, written, simulated);
- if (n == -1)
+ return (written + 2);
+}
+
+uintptr_t ft_int_arg_abs(const t_format *format, t_step_arg arg)
+{
+ if (format->specifier == SPECIFIER_INT)
+ return (ft_int_abs(arg.v_int));
+ return (arg.v_uint);
+}
+
+int ft_putsign(const t_format *format, t_step_arg arg, bool sim)
+{
+ if (format->specifier != SPECIFIER_INT)
+ return (0);
+ if (arg.v_int < 0)
+ return (ft_putchar_sim('-', sim));
+ if (format->sign_flag == SIGN_FORCED)
+ return (ft_putchar_sim('+', sim));
+ if (format->sign_flag == SIGN_SPACE)
+ return (ft_putchar_sim(' ', sim));
+ return (0);
+}
+
+int ft_putformat_scalar(const t_format *format, t_step_arg arg, bool sim)
+{
+ int sign;
+ int prefix;
+ int core;
+ int precision;
+ int zero_pad;
+
+ sign = ft_putsign(format, arg, sim);
+ if (sign == -1)
+ return (-1);
+ prefix = ft_putprefix(format, sim);
+ if (prefix == -1)
return (-1);
- written += n + 2;
- n = ft_zero_pad(format, written, simulated);
- if (n == -1 || ft_put_size(val, simulated, 16, "0123456789abcdef",
- format->enable_precision) == -1)
+ core = ft_put_uintptr(ft_uintptr_format_new(format),
+ ft_int_arg_abs(format, arg), true);
+ precision = ft_precision_pad(format, core, sim);
+ if (precision == -1)
return (-1);
- return (written + n);
+ zero_pad = ft_zero_pad(format, sign + prefix + precision + core, sim);
+ if (zero_pad == -1)
+ return (-1);
+ if (ft_put_uintptr(ft_uintptr_format_new(format),
+ ft_int_arg_abs(format, arg), sim) == -1)
+ return (-1);
+ return (sign + prefix + zero_pad + precision + core);
+}
+
+int ft_putformat_percent(const t_format *format, t_step_arg arg, bool sim)
+{
+ (void)format;
+ (void)arg;
+
+ return (ft_putchar_sim('%', sim));
}
int ft_putformat(const t_format *format, t_step_arg arg)
{
- int (*f)(const t_format *, t_step_arg, bool);
- int len;
+ int (*f)(const t_format *, t_step_arg, bool);
+ int len;
+ t_specifier spec;
- if (format->specifier == SPECIFIER_CHAR)
+ spec = format->specifier;
+ if (spec == SPECIFIER_CHAR)
f = ft_putformat_char;
- else if (format->specifier == SPECIFIER_STR)
+ else if (spec == SPECIFIER_STR)
f = ft_putformat_str;
- else if (format->specifier == SPECIFIER_PTR)
+ else if (spec == SPECIFIER_PTR)
f = ft_putformat_ptr;
+ else if (spec == SPECIFIER_INT || spec == SPECIFIER_UINT
+ || spec == SPECIFIER_UINT_HEX_LOWER || spec == SPECIFIER_UINT_HEX_UPPER)
+ f = ft_putformat_scalar;
+ else if (spec == SPECIFIER_PERCENT)
+ f = ft_putformat_percent;
else
return (-1);
len = f(format, arg, true);
if ((format->justify == JUSTIFY_LEFT && f(format, arg, false) == -1)
- || (format->width > len && ft_putnchar(' ', format->width - len, false) == -1)
+ || (format->width > len
+ && ft_putnchar(' ', format->width - len, false) == -1)
|| (format->justify == JUSTIFY_RIGHT && f(format, arg, false) == -1))
return (-1);
return (len);
res.specifier = SPECIFIER_NONE;
res.sign_flag = SIGN_NEG_ONLY;
res.justify = JUSTIFY_RIGHT;
- res.num_prefix = NUM_PREFIX_NONE;
+ res.num_prefix = false;
res.width = 0;
res.zero_pad = false;
res.precision = 0;
else if (c == ' ')
format->sign_flag = SIGN_SPACE;
else if (c == '#')
- format->num_prefix = NUM_PREFIX_FORMAT;
+ format->num_prefix = true;
else if (c == '0')
format->zero_pad = true;
else
return (SPECIFIER_NONE);
}
-void ft_format_normalize(t_format *format)
-{
- if (format->justify == JUSTIFY_LEFT)
- format->zero_pad = false;
-}
-
t_format ft_parse_format(const char **s)
{
t_format res;
ft_parse_width(s, &res);
ft_parse_precision(s, &res);
res.specifier = ft_parse_specifier(*((*s)++));
- ft_format_normalize(&res);
return (res);
}
{
int written;
-
if (format->specifier == SPECIFIER_NONE && **s != '%')
return (ft_putchar_sim(*((*s)++), false));
if (format->specifier != SPECIFIER_NONE)
}
#include <stdio.h>
+
int main(void)
{
- const char *s = "hai";
- ft_printf("c%-25.17p", s);
- printf("c%-25.17p", s);
+ ft_printf("%12.5u\n", 120);
+ printf("%12.5u\n", 120);
}
+++ /dev/null
-NAME=libft.a
-
-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
-
-all : ${NAME}
-
-%.o : %.c
- ${CC} ${CFLAGS} -c -o $@ -- $<
-
-${NAME} : ${OBJS}
- ar -rcs $@ $^
-
-bonus : ${BONUS_OBJS}
- ar -rcs ${NAME} $^
-
-clean :
- rm -f ${OBJS} ${BONUS_OBJS}
-
-fclean : clean
- rm -f ${NAME}
-
-re : fclean all
-
-.PHONY : all clean fclean re
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_atoi.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 10:05:22 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:13:14 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include <stdbool.h>
-#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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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));
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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));
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_isalpha.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:42:17 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:42:31 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-int ft_isalpha(int c)
-{
- return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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');
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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');
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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 <= '~');
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_itoa.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 10:19:15 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:34:53 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include <stddef.h>
-#include <stdlib.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);
-}
-
-static void ft_itoa_count(size_t *count, char _c)
-{
- (void) _c;
- (*count)++;
-}
-
-static void ft_itoa_write(char **buf, char c)
-{
- *((*buf)++) = c;
-}
-
-char *ft_itoa(int n)
-{
- size_t len;
- char *res;
- char *dat;
-
- 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_memchr.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:48:41 by agilliar #+# #+# */
-/* 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;
-
- i = 0;
- while (i < n)
- {
- if (((unsigned char *)s)[i] == (unsigned char)c)
- return ((void *)&((unsigned char *)s)[i]);
- i++;
- }
- return (NULL);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_memcmp.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:51:58 by agilliar #+# #+# */
-/* 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;
- int res;
-
- i = 0;
- res = 0;
- while (res == 0 && i < n)
- {
- res = ((unsigned char *) s1)[i] - ((unsigned char *) s2)[i];
- i++;
- }
- return (res);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_memcpy.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:48:05 by agilliar #+# #+# */
-/* 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;
-
- i = 0;
- while (i < n)
- {
- ((unsigned char *)dest)[i] = ((unsigned char *)src)[i];
- i++;
- }
- return (dest);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_memmove.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:48:19 by agilliar #+# #+# */
-/* 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;
-
- 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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_memset.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:47:17 by agilliar #+# #+# */
-/* 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;
-
- i = 0;
- while (i < n)
- ((unsigned char *) s)[i++] = c;
- return (s);
-}
+++ /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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_split.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/28 12:08:04 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:37:49 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);
-}
-
-/*
- 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;
-
- 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));
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_strdup.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 10:01:04 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:12:32 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include "libft.h"
-
-char *ft_strdup(char *src)
-{
- 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++;
- }
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_strlcat.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:49:32 by agilliar #+# #+# */
-/* 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;
- 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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_strlcpy.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:49:19 by agilliar #+# #+# */
-/* 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;
- 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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_strlen.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:48:58 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:14:59 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include <stddef.h>
-
-size_t ft_strlen(const char *s)
-{
- size_t i;
-
- i = 0;
- while (s[i] != '\0')
- i++;
- return (i);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_strmapi.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 10:39:05 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:46:55 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include <stdlib.h>
-#include "libft.h"
-
-char *ft_strmapi(const char *s, char (*f)(unsigned int, char))
-{
- size_t len;
- char *res;
- size_t i;
-
- len = ft_strlen(s);
- res = malloc(len + 1);
- if (!res)
- return (res);
- i = 0;
- while (i < len)
- {
- res[i] = f(i, s[i]);
- i++;
- }
- res[i] = '\0';
- return (res);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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]);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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]);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_strrchr.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:51:22 by agilliar #+# #+# */
-/* Updated: 2025/10/29 10:37:33 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include <stddef.h>
-#include <stdbool.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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_strtrim.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 10:08:47 by agilliar #+# #+# */
-/* 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)
-{
- 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));
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_tolower.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/29 09:44:28 by agilliar #+# #+# */
-/* Updated: 2025/10/29 09:44:39 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-int ft_tolower(int c)
-{
- if (c >= 'A' && c <= 'Z')
- c = c - 'A' + 'a';
- return (c);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* 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);
-}
+++ /dev/null
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* libft.h :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: agilliar <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2025/10/27 11:27:06 by agilliar #+# #+# */
-/* Updated: 2025/10/29 13:31:51 by agilliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#ifndef LIBFT_H
-# define LIBFT_H
-
-# include <stddef.h>
-
-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 *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);
-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);
-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);
-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