From d121dae56fb4e868d4f2ef604e58fa00d9c47f12 Mon Sep 17 00:00:00 2001 From: Willem Haffmans Date: Sat, 2 Nov 2024 20:25:57 +0000 Subject: [PATCH] Libft with ft_printf --- Makefile | 72 +++++++++++++++++++++++++++++ inc/ft_printf.h | 32 +++++++++++++ inc/libft.h | 77 +++++++++++++++++++++++++++++++ src/conversion/ft_atoi.c | 40 ++++++++++++++++ src/conversion/ft_itoa.c | 58 +++++++++++++++++++++++ src/conversion/ft_tolower.c | 20 ++++++++ src/conversion/ft_toupper.c | 20 ++++++++ src/ft_printf/ft_isbase.c | 33 +++++++++++++ src/ft_printf/ft_printf.c | 42 +++++++++++++++++ src/ft_printf/ft_putnbr_base.c | 29 ++++++++++++ src/ft_printf/ft_putnbr_signed.c | 24 ++++++++++ src/ft_printf/ft_write_str.c | 24 ++++++++++ src/ft_printf/parse_conversion.c | 39 ++++++++++++++++ src/ft_printf/parse_placeholder.c | 31 +++++++++++++ src/ft_printf/print_char.c | 22 +++++++++ src/ft_printf/print_hex.c | 38 +++++++++++++++ src/ft_printf/print_number.c | 35 ++++++++++++++ src/ft_printf/print_pointer.c | 38 +++++++++++++++ src/ft_printf/print_string.c | 28 +++++++++++ src/ft_printf/print_unumber.c | 36 +++++++++++++++ src/list/ft_lstadd_back.c | 28 +++++++++++ src/list/ft_lstadd_front.c | 22 +++++++++ src/list/ft_lstclear.c | 32 +++++++++++++ src/list/ft_lstdelone.c | 22 +++++++++ src/list/ft_lstiter.c | 24 ++++++++++ src/list/ft_lstlast.c | 22 +++++++++ src/list/ft_lstmap.c | 37 +++++++++++++++ src/list/ft_lstnew.c | 27 +++++++++++ src/list/ft_lstsize.c | 28 +++++++++++ src/memory/ft_bzero.c | 18 ++++++++ src/memory/ft_calloc.c | 28 +++++++++++ src/memory/ft_memchr.c | 24 ++++++++++ src/memory/ft_memcmp.c | 31 +++++++++++++ src/memory/ft_memcpy.c | 22 +++++++++ src/memory/ft_memmove.c | 35 ++++++++++++++ src/memory/ft_memset.c | 20 ++++++++ src/output/ft_putchar_fd.c | 21 +++++++++ src/output/ft_putendl_fd.c | 22 +++++++++ src/output/ft_putnbr_fd.c | 42 +++++++++++++++++ src/output/ft_putstr_fd.c | 24 ++++++++++ src/string/ft_isalnum.c | 18 ++++++++ src/string/ft_isalpha.c | 18 ++++++++ src/string/ft_isascii.c | 18 ++++++++ src/string/ft_isdigit.c | 18 ++++++++ src/string/ft_isprint.c | 18 ++++++++ src/string/ft_split.c | 70 ++++++++++++++++++++++++++++ src/string/ft_strchr.c | 26 +++++++++++ src/string/ft_strdup.c | 26 +++++++++++ src/string/ft_striteri.c | 27 +++++++++++ src/string/ft_strjoin.c | 33 +++++++++++++ src/string/ft_strlcat.c | 35 ++++++++++++++ src/string/ft_strlcpy.c | 31 +++++++++++++ src/string/ft_strlen.c | 23 +++++++++ src/string/ft_strmapi.c | 34 ++++++++++++++ src/string/ft_strncmp.c | 29 ++++++++++++ src/string/ft_strnstr.c | 33 +++++++++++++ src/string/ft_strrchr.c | 29 ++++++++++++ src/string/ft_strtrim.c | 34 ++++++++++++++ src/string/ft_substr.c | 34 ++++++++++++++ 59 files changed, 1821 insertions(+) create mode 100644 Makefile create mode 100644 inc/ft_printf.h create mode 100644 inc/libft.h create mode 100644 src/conversion/ft_atoi.c create mode 100644 src/conversion/ft_itoa.c create mode 100644 src/conversion/ft_tolower.c create mode 100644 src/conversion/ft_toupper.c create mode 100644 src/ft_printf/ft_isbase.c create mode 100644 src/ft_printf/ft_printf.c create mode 100644 src/ft_printf/ft_putnbr_base.c create mode 100644 src/ft_printf/ft_putnbr_signed.c create mode 100644 src/ft_printf/ft_write_str.c create mode 100644 src/ft_printf/parse_conversion.c create mode 100644 src/ft_printf/parse_placeholder.c create mode 100644 src/ft_printf/print_char.c create mode 100644 src/ft_printf/print_hex.c create mode 100644 src/ft_printf/print_number.c create mode 100644 src/ft_printf/print_pointer.c create mode 100644 src/ft_printf/print_string.c create mode 100644 src/ft_printf/print_unumber.c create mode 100644 src/list/ft_lstadd_back.c create mode 100644 src/list/ft_lstadd_front.c create mode 100644 src/list/ft_lstclear.c create mode 100644 src/list/ft_lstdelone.c create mode 100644 src/list/ft_lstiter.c create mode 100644 src/list/ft_lstlast.c create mode 100644 src/list/ft_lstmap.c create mode 100644 src/list/ft_lstnew.c create mode 100644 src/list/ft_lstsize.c create mode 100644 src/memory/ft_bzero.c create mode 100644 src/memory/ft_calloc.c create mode 100644 src/memory/ft_memchr.c create mode 100644 src/memory/ft_memcmp.c create mode 100644 src/memory/ft_memcpy.c create mode 100644 src/memory/ft_memmove.c create mode 100644 src/memory/ft_memset.c create mode 100644 src/output/ft_putchar_fd.c create mode 100644 src/output/ft_putendl_fd.c create mode 100644 src/output/ft_putnbr_fd.c create mode 100644 src/output/ft_putstr_fd.c create mode 100644 src/string/ft_isalnum.c create mode 100644 src/string/ft_isalpha.c create mode 100644 src/string/ft_isascii.c create mode 100644 src/string/ft_isdigit.c create mode 100644 src/string/ft_isprint.c create mode 100644 src/string/ft_split.c create mode 100644 src/string/ft_strchr.c create mode 100644 src/string/ft_strdup.c create mode 100644 src/string/ft_striteri.c create mode 100644 src/string/ft_strjoin.c create mode 100644 src/string/ft_strlcat.c create mode 100644 src/string/ft_strlcpy.c create mode 100644 src/string/ft_strlen.c create mode 100644 src/string/ft_strmapi.c create mode 100644 src/string/ft_strncmp.c create mode 100644 src/string/ft_strnstr.c create mode 100644 src/string/ft_strrchr.c create mode 100644 src/string/ft_strtrim.c create mode 100644 src/string/ft_substr.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..16e73b9 --- /dev/null +++ b/Makefile @@ -0,0 +1,72 @@ +# **************************************************************************** # +# # +# ::: o_ :::::: ::: # +# Makefile :+: / :+::+: :+: # +# +:+ > +:++:+ +:+ # +# By: whaffman +#+ +:+ +#++#++:++#++ # +# +#+ +#+#+ +#++#+ +#+ \o/ # +# Created: 2024/10/10 16:44:36 by whaffman #+#+# #+#+# #+# #+# | # +# Updated: 2024/10/10 18:00:05 by whaffman ### ### ### ### / \ # +# # +# **************************************************************************** # + +NAME = libft.a + +INC_DIR = inc + +OBJ_DIR = obj + +CC = cc + +WARNINGS = -Wall -Wextra -Werror + +CFLAGS = $(WARNINGS) + +VPATH = src:src/conversion:src/ft_printf:src/list:src/memory:src/output:\ + src/string + +SRC_CONVERSION = ft_atoi.c ft_itoa.c ft_tolower.c ft_toupper.c \ + +SRC_MEMORY = ft_memchr.c ft_memcmp.c ft_memcpy.c ft_memmove.c ft_memset.c \ + ft_bzero.c ft_calloc.c + +SRC_STRING = ft_isalnum.c ft_isalpha.c ft_isascii.c ft_isdigit.c ft_isprint.c \ + ft_split.c ft_strchr.c ft_strdup.c ft_striteri.c ft_strjoin.c \ + ft_strlcat.c ft_strlcpy.c ft_strlen.c ft_strmapi.c ft_strncmp.c \ + ft_strnstr.c ft_strrchr.c ft_strtrim.c ft_substr.c + +SRC_LIST = ft_lstadd_back.c ft_lstadd_front.c ft_lstclear.c ft_lstdelone.c \ + ft_lstiter.c ft_lstlast.c ft_lstmap.c ft_lstnew.c ft_lstsize.c + +SRC_OUTPUT = ft_putchar_fd.c ft_putendl_fd.c ft_putnbr_fd.c ft_putstr_fd.c + +SRC_FT_PRINTF = ft_isbase.c ft_putnbr_base.c ft_write_str.c parse_placeholder.c \ + print_hex.c print_pointer.c print_unumber.c ft_printf.c \ + ft_putnbr_signed.c parse_conversion.c print_char.c \ + print_number.c print_string.c + +SOURCES = $(SRC_CONVERSION) $(SRC_MEMORY) $(SRC_STRING) \ + $(SRC_LIST) $(SRC_OUTPUT) $(SRC_FT_PRINTF) + +OBJECTS = $(addprefix $(OBJ_DIR)/, $(SOURCES:.c=.o)) + +all: $(NAME) + +$(NAME): $(OBJECTS) + $(AR) rcs $@ $^ + +$(OBJ_DIR): + mkdir -p $@ + +$(OBJ_DIR)/%.o: %.c | $(OBJ_DIR) + $(CC) $(CFLAGS) -I $(INC_DIR) -c $< -o $@ + +clean: + rm -rf $(OBJ_DIR) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY: all clean fclean re diff --git a/inc/ft_printf.h b/inc/ft_printf.h new file mode 100644 index 0000000..6e5740b --- /dev/null +++ b/inc/ft_printf.h @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_printf.h :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/15 13:04:31 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/15 13:07:34 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PRINTF_H +# define FT_PRINTF_H + +# include + +int ft_isbase(char *str); +void ft_write_str(char c, char *str); +void ft_putnbr_base(unsigned long nbr, char *base, char *result); +void ft_putnbr_signed(long nbr, char *base, char *result); +int print_char(va_list args); +int print_string(va_list args); +int print_number(va_list args); +int print_unumber(va_list args); +int print_hex(va_list args, int uppercase); +int print_pointer(va_list args); +int parse_conversion(const char **format, va_list args); +int parse_placeholder(const char **format, va_list args); + + +#endif diff --git a/inc/libft.h b/inc/libft.h new file mode 100644 index 0000000..70a72be --- /dev/null +++ b/inc/libft.h @@ -0,0 +1,77 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: whaffman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/06 11:15:10 by whaffman #+# #+# */ +/* Updated: 2024/07/10 16:27:58 by whaffman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H +# include + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +size_t ft_strlen(const char *s); +void *ft_memset(void *s, int c, size_t n); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dest, const void *src, size_t n); +void *ft_memmove(void *dest, const void *src, size_t n); +size_t ft_strlcpy(char *dst, const char *src, size_t size); +size_t ft_strlcat(char *dst, const char *src, size_t size); +int ft_toupper(int c); +int ft_tolower(int c); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +int ft_strncmp(const char *s1, const char *s2, size_t n); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +char *ft_strnstr(const char *big, const char *little, size_t len); +int ft_atoi(const char *nptr); +void *ft_calloc(size_t nmemb, size_t size); +char *ft_strdup(const char *s); +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(char const *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); + +/* + * Lists + */ + +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 *)); + +/* + * Printf +*/ + +int ft_printf(const char *format, ...); +#endif diff --git a/src/conversion/ft_atoi.c b/src/conversion/ft_atoi.c new file mode 100644 index 0000000..14d9ecc --- /dev/null +++ b/src/conversion/ft_atoi.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_atoi.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:13 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:13 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_isspace(int c) +{ + return (' ' == c || '\f' == c || \ + '\n' == c || '\r' == c || \ + '\t' == c || '\v' == c); +} + +int ft_atoi(const char *nptr) +{ + int sign; + int res; + + while (ft_isspace(*nptr)) + nptr++; + res = 0; + sign = 1; + if (*nptr == '-' || *nptr == '+') + { + if (*nptr == '-') + sign *= -1; + nptr++; + } + while (ft_isdigit(*nptr)) + res = 10 * res + sign * (*nptr++ - '0'); + return (res); +} diff --git a/src/conversion/ft_itoa.c b/src/conversion/ft_itoa.c new file mode 100644 index 0000000..71d9d07 --- /dev/null +++ b/src/conversion/ft_itoa.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_itoa.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:17 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:17 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +static char *itoa_stralloc(int n) +{ + int i; + + i = 0; + if (n <= 0) + i++; + while (n) + { + i++; + n /= 10; + } + return (ft_calloc((i + 1), sizeof(char))); +} + +char *ft_itoa(int n) +{ + int i; + long ln; + long divider; + char *result; + + result = itoa_stralloc(n); + if (!result) + return (NULL); + ln = n; + i = 0; + divider = 1; + if (ln < 0) + { + ln *= -1; + result[i++] = '-'; + } + while (divider * 10 <= ln) + divider *= 10; + while (divider) + { + result[i++] = ln / divider + '0'; + ln %= divider; + divider /= 10; + } + return (result); +} diff --git a/src/conversion/ft_tolower.c b/src/conversion/ft_tolower.c new file mode 100644 index 0000000..c22cbd7 --- /dev/null +++ b/src/conversion/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_tolower.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:33 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:33 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if ('A' <= c && 'Z' >= c) + return (c - 'A' + 'a'); + return (c); +} diff --git a/src/conversion/ft_toupper.c b/src/conversion/ft_toupper.c new file mode 100644 index 0000000..63ee2fa --- /dev/null +++ b/src/conversion/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_toupper.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:33 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:33 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if ('a' <= c && 'z' >= c) + return (c - 'a' + 'A'); + return (c); +} diff --git a/src/ft_printf/ft_isbase.c b/src/ft_printf/ft_isbase.c new file mode 100644 index 0000000..f39ae28 --- /dev/null +++ b/src/ft_printf/ft_isbase.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_isbase.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:18:39 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:19:43 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +int ft_isbase(char *str) +{ + int i; + int n; + + n = 0; + while (str[n]) + { + i = 1; + if (str[n] == '-' || str[n] == '+') + return (0); + while (str[n + i]) + { + if (str[n] == str[n + i]) + return (0); + i++; + } + n++; + } + return (n); +} diff --git a/src/ft_printf/ft_printf.c b/src/ft_printf/ft_printf.c new file mode 100644 index 0000000..0572b05 --- /dev/null +++ b/src/ft_printf/ft_printf.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_printf.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/11 14:49:07 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:37:46 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include "libft.h" +#include "ft_printf.h" + +int ft_printf(const char *format, ...) +{ + int wrote; + int result; + va_list args; + + result = 0; + va_start(args, format); + while (*format && result >= 0) + { + if (*format == '%') + wrote = parse_placeholder(&format, args); + else + wrote = write(1, format, 1); + if (wrote < 0) + { + result = wrote; + break ; + } + result += wrote; + format++; + } + va_end(args); + return (result); +} diff --git a/src/ft_printf/ft_putnbr_base.c b/src/ft_printf/ft_putnbr_base.c new file mode 100644 index 0000000..f111ab2 --- /dev/null +++ b/src/ft_printf/ft_putnbr_base.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putnbr_base.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:21:37 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:22:22 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_putnbr_base(unsigned long nbr, char *base, char *result) +{ + unsigned int b; + + b = ft_isbase(base); + if (b < 2) + return ; + if (nbr < b) + ft_write_str(base[nbr], result); + else if (nbr >= b) + { + ft_putnbr_base(nbr / b, base, result); + ft_putnbr_base(nbr % b, base, result); + } +} diff --git a/src/ft_printf/ft_putnbr_signed.c b/src/ft_printf/ft_putnbr_signed.c new file mode 100644 index 0000000..12e112d --- /dev/null +++ b/src/ft_printf/ft_putnbr_signed.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putnbr_signed.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:22:39 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:23:02 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_putnbr_signed(long nbr, char *base, char *result) +{ + if (nbr < 0) + { + *result = '-'; + ft_putnbr_base((unsigned long)(-nbr), base, result); + } + else + ft_putnbr_base((unsigned long) nbr, base, result); +} diff --git a/src/ft_printf/ft_write_str.c b/src/ft_printf/ft_write_str.c new file mode 100644 index 0000000..c6269cd --- /dev/null +++ b/src/ft_printf/ft_write_str.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_write_str.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:19:20 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:19:53 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +void ft_write_str(char c, char *str) +{ + int i; + + i = 0; + while (str[i]) + { + i++; + } + str[i++] = c; + str[i] = '\0'; +} diff --git a/src/ft_printf/parse_conversion.c b/src/ft_printf/parse_conversion.c new file mode 100644 index 0000000..c0ba21d --- /dev/null +++ b/src/ft_printf/parse_conversion.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* parse_conversion.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:34:43 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:34:49 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include "libft.h" +#include "ft_printf.h" + +int parse_conversion(const char **format, va_list args) +{ + int wrote; + + if (**format == 'c') + wrote = print_char(args); + else if (**format == 's') + wrote = print_string(args); + else if (ft_strchr("di", **format)) + wrote = print_number(args); + else if (ft_strchr("u", **format)) + wrote = print_unumber(args); + else if (ft_strchr("p", **format)) + wrote = print_pointer(args); + else if (ft_strchr("x", **format)) + wrote = print_hex(args, 0); + else if (ft_strchr("X", **format)) + wrote = print_hex(args, 1); + else + wrote = -1; + return (wrote); +} diff --git a/src/ft_printf/parse_placeholder.c b/src/ft_printf/parse_placeholder.c new file mode 100644 index 0000000..c30dd35 --- /dev/null +++ b/src/ft_printf/parse_placeholder.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* parse_placeholder.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:34:28 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:35:09 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include "libft.h" +#include "ft_printf.h" + +int parse_placeholder(const char **format, va_list args) +{ + const char conversions[] = "cspdiuxX%"; + int wrote; + + (*format)++; + while (**format && !ft_strchr(conversions, **format)) + (*format)++; + if (**format == '%') + wrote = write(1, *format, 1); + else + wrote = parse_conversion(format, args); + return (wrote); +} diff --git a/src/ft_printf/print_char.c b/src/ft_printf/print_char.c new file mode 100644 index 0000000..d2a2037 --- /dev/null +++ b/src/ft_printf/print_char.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* print_char.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:28:10 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:28:12 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include + +int print_char(va_list args) +{ + char c; + + c = va_arg(args, int); + return (write(1, &c, 1)); +} diff --git a/src/ft_printf/print_hex.c b/src/ft_printf/print_hex.c new file mode 100644 index 0000000..17ed540 --- /dev/null +++ b/src/ft_printf/print_hex.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* print_hex.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:29:01 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:30:00 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include "libft.h" +#include "ft_printf.h" + +int print_hex(va_list args, int uppercase) +{ + long n; + size_t len; + char *str; + int wrote; + + str = ft_calloc(sizeof(char), 20); + if (!str) + return (-1); + n = va_arg(args, unsigned int); + if (uppercase) + ft_putnbr_base(n, "0123456789ABCDEF", str); + else + ft_putnbr_base(n, "0123456789abcdef", str); + len = ft_strlen(str); + wrote = write(1, str, len); + free(str); + return (wrote); +} diff --git a/src/ft_printf/print_number.c b/src/ft_printf/print_number.c new file mode 100644 index 0000000..5bc660e --- /dev/null +++ b/src/ft_printf/print_number.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* print_number.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:31:23 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:31:37 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include "libft.h" +#include "ft_printf.h" + +int print_number(va_list args) +{ + long n; + size_t len; + char *str; + int wrote; + + str = ft_calloc(sizeof(char), 12); + if (!str) + return (-1); + n = va_arg(args, int); + ft_putnbr_signed(n, "0123456789", str); + len = ft_strlen(str); + wrote = write(1, str, len); + free(str); + return (wrote); +} diff --git a/src/ft_printf/print_pointer.c b/src/ft_printf/print_pointer.c new file mode 100644 index 0000000..aa25405 --- /dev/null +++ b/src/ft_printf/print_pointer.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* print_pointer.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:26:58 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:31:19 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include "libft.h" +#include "ft_printf.h" + +int print_pointer(va_list args) +{ + long n; + size_t len; + char *str; + int wrote; + + n = va_arg(args, unsigned long); + if (!n) + return (write(1, "(nil)", 5)); + str = ft_calloc(sizeof(char), 20); + if (!str) + return (-1); + ft_strlcpy(str, "0x", 3); + ft_putnbr_base(n, "0123456789abcdef", str); + len = ft_strlen(str); + wrote = write(1, str, len); + free(str); + return (wrote); +} diff --git a/src/ft_printf/print_string.c b/src/ft_printf/print_string.c new file mode 100644 index 0000000..1a60b1b --- /dev/null +++ b/src/ft_printf/print_string.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* print_string.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:31:48 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:32:23 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include "libft.h" +#include "ft_printf.h" + +int print_string(va_list args) +{ + char *str; + size_t len; + + str = va_arg(args, char *); + if (!str) + return (write(1, "(null)", 6)); + len = ft_strlen(str); + return (write(1, str, len)); +} diff --git a/src/ft_printf/print_unumber.c b/src/ft_printf/print_unumber.c new file mode 100644 index 0000000..ea51397 --- /dev/null +++ b/src/ft_printf/print_unumber.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* print_unumber.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/27 16:32:36 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/27 16:32:49 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include "libft.h" +#include "ft_printf.h" + +int print_unumber(va_list args) +{ + long n; + size_t len; + char *str; + int wrote; + + wrote = 0; + str = ft_calloc(sizeof(char), 12); + if (!str) + return (-1); + n = va_arg(args, unsigned int); + ft_putnbr_base(n, "0123456789", str); + len = ft_strlen(str); + wrote = write(1, str, len); + free(str); + return (wrote); +} diff --git a/src/list/ft_lstadd_back.c b/src/list/ft_lstadd_back.c new file mode 100644 index 0000000..d082af3 --- /dev/null +++ b/src/list/ft_lstadd_back.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstadd_back.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:18 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:18 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + t_list *last; + + if (!new) + return ; + if (!*lst) + { + *lst = new; + return ; + } + last = ft_lstlast(*lst); + last->next = new; +} diff --git a/src/list/ft_lstadd_front.c b/src/list/ft_lstadd_front.c new file mode 100644 index 0000000..c6b3b8a --- /dev/null +++ b/src/list/ft_lstadd_front.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstadd_front.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:18 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:18 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + if (new) + { + new->next = *lst; + *lst = new; + } +} diff --git a/src/list/ft_lstclear.c b/src/list/ft_lstclear.c new file mode 100644 index 0000000..703f25f --- /dev/null +++ b/src/list/ft_lstclear.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstclear.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:19 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:19 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void *)) +{ + t_list *next; + + if (!del || !lst) + return ; + while (*lst) + { + if ((*lst)->next) + next = (*lst)->next; + else + next = NULL; + del((*lst)->content); + free(*lst); + *lst = next; + } +} diff --git a/src/list/ft_lstdelone.c b/src/list/ft_lstdelone.c new file mode 100644 index 0000000..4a43b09 --- /dev/null +++ b/src/list/ft_lstdelone.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstdelone.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:19 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:19 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void *)) +{ + if (!lst || !del) + return ; + del(lst->content); + free(lst); +} diff --git a/src/list/ft_lstiter.c b/src/list/ft_lstiter.c new file mode 100644 index 0000000..c13c11a --- /dev/null +++ b/src/list/ft_lstiter.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstiter.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:19 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:19 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + if (!lst || !f) + return ; + while (lst) + { + (*f)(lst->content); + lst = lst->next; + } +} diff --git a/src/list/ft_lstlast.c b/src/list/ft_lstlast.c new file mode 100644 index 0000000..b63451f --- /dev/null +++ b/src/list/ft_lstlast.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstlast.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:20 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:20 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (!lst) + return (NULL); + while (lst->next) + lst = lst->next; + return (lst); +} diff --git a/src/list/ft_lstmap.c b/src/list/ft_lstmap.c new file mode 100644 index 0000000..fa3a112 --- /dev/null +++ b/src/list/ft_lstmap.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstmap.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:20 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:20 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new_list; + t_list *new_elem; + void *new_content; + + new_list = NULL; + while (lst) + { + new_content = f(lst->content); + new_elem = ft_lstnew(new_content); + if (!new_elem) + { + del(new_content); + ft_lstclear(&new_list, del); + return (NULL); + } + ft_lstadd_back(&new_list, new_elem); + lst = lst->next; + } + return (new_list); +} diff --git a/src/list/ft_lstnew.c b/src/list/ft_lstnew.c new file mode 100644 index 0000000..586f273 --- /dev/null +++ b/src/list/ft_lstnew.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstnew.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:21 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:21 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *node; + + node = malloc(sizeof(t_list)); + if (node) + { + node->content = content; + node->next = NULL; + } + return (node); +} diff --git a/src/list/ft_lstsize.c b/src/list/ft_lstsize.c new file mode 100644 index 0000000..0d19b96 --- /dev/null +++ b/src/list/ft_lstsize.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_lstsize.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:21 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:21 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int count; + + count = 1; + if (!lst) + return (0); + while (lst->next) + { + lst = lst->next; + count++; + } + return (count); +} diff --git a/src/memory/ft_bzero.c b/src/memory/ft_bzero.c new file mode 100644 index 0000000..d65233d --- /dev/null +++ b/src/memory/ft_bzero.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_bzero.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:14 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:14 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + ft_memset(s, 0, n); +} diff --git a/src/memory/ft_calloc.c b/src/memory/ft_calloc.c new file mode 100644 index 0000000..99f0f76 --- /dev/null +++ b/src/memory/ft_calloc.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_calloc.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:14 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:14 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void *ft_calloc(size_t nmemb, size_t size) +{ + void *ptr; + + if (nmemb && size > (size_t) -1 / nmemb) + { + return (0); + } + ptr = malloc(nmemb * size); + if (ptr) + ft_bzero(ptr, nmemb * size); + return (ptr); +} diff --git a/src/memory/ft_memchr.c b/src/memory/ft_memchr.c new file mode 100644 index 0000000..b9d8b3c --- /dev/null +++ b/src/memory/ft_memchr.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_memchr.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:22 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:22 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + while (0 < n--) + { + if (*(unsigned char *)s == (unsigned char) c) + return ((void *) s); + s++; + } + return (NULL); +} diff --git a/src/memory/ft_memcmp.c b/src/memory/ft_memcmp.c new file mode 100644 index 0000000..0c138ee --- /dev/null +++ b/src/memory/ft_memcmp.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_memcmp.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:22 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:22 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned char *str1; + unsigned char *str2; + size_t i; + + str1 = (unsigned char *)s1; + str2 = (unsigned char *)s2; + i = 0; + while (i < n) + { + if (str1[i] != str2[i]) + return (str1[i] - str2[i]); + i++; + } + return (0); +} diff --git a/src/memory/ft_memcpy.c b/src/memory/ft_memcpy.c new file mode 100644 index 0000000..63742b0 --- /dev/null +++ b/src/memory/ft_memcpy.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_memcpy.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:23 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:23 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dest, const void *src, size_t n) +{ + if (dest == NULL && src == NULL) + return (NULL); + while (0 < n--) + ((unsigned char *)dest)[n] = ((unsigned char *)src)[n]; + return (dest); +} diff --git a/src/memory/ft_memmove.c b/src/memory/ft_memmove.c new file mode 100644 index 0000000..86a2395 --- /dev/null +++ b/src/memory/ft_memmove.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_memmove.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:23 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:23 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memmove(void *dest, const void *src, size_t n) +{ + unsigned char *dest_ptr; + unsigned char *src_ptr; + + dest_ptr = (unsigned char *)dest; + src_ptr = (unsigned char *)src; + if (dest_ptr == src_ptr) + return (dest); + else if (dest_ptr < src_ptr) + { + while (n-- > 0) + *dest_ptr++ = *src_ptr++; + } + else + { + while (n-- > 0) + dest_ptr[n] = src_ptr[n]; + } + return (dest); +} diff --git a/src/memory/ft_memset.c b/src/memory/ft_memset.c new file mode 100644 index 0000000..9cd0b10 --- /dev/null +++ b/src/memory/ft_memset.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_memset.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:24 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:24 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memset(void *s, int c, size_t n) +{ + while (0 < n--) + ((unsigned char *)s)[n] = (unsigned char) c; + return (s); +} diff --git a/src/output/ft_putchar_fd.c b/src/output/ft_putchar_fd.c new file mode 100644 index 0000000..3c46a60 --- /dev/null +++ b/src/output/ft_putchar_fd.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putchar_fd.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:24 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:24 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + if (fd < 0) + return ; + write(fd, &c, 1); +} diff --git a/src/output/ft_putendl_fd.c b/src/output/ft_putendl_fd.c new file mode 100644 index 0000000..1eb1d8f --- /dev/null +++ b/src/output/ft_putendl_fd.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putendl_fd.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:25 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:25 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + if (fd < 0 || s == NULL) + return ; + ft_putstr_fd(s, fd); + write(fd, "\n", 1); +} diff --git a/src/output/ft_putnbr_fd.c b/src/output/ft_putnbr_fd.c new file mode 100644 index 0000000..7069b7d --- /dev/null +++ b/src/output/ft_putnbr_fd.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putnbr_fd.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:25 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:25 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putnbr_fd(int n, int fd) +{ + long ln; + long divider; + char c; + + if (fd < 0) + return ; + ln = n; + divider = 1; + if (n < 0) + { + if (!write(fd, "-", 1)) + return ; + ln *= -1; + } + while (divider * 10 <= ln) + divider *= 10; + while (divider) + { + c = ln / divider + '0'; + if (!write(fd, &c, 1)) + return ; + ln %= divider; + divider /= 10; + } +} diff --git a/src/output/ft_putstr_fd.c b/src/output/ft_putstr_fd.c new file mode 100644 index 0000000..eda4cf8 --- /dev/null +++ b/src/output/ft_putstr_fd.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_putstr_fd.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:26 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:26 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + size_t length; + + if (s == NULL || fd < 0) + return ; + length = ft_strlen(s); + write(fd, s, length); +} diff --git a/src/string/ft_isalnum.c b/src/string/ft_isalnum.c new file mode 100644 index 0000000..7439e0e --- /dev/null +++ b/src/string/ft_isalnum.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_isalnum.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:15 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:15 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + return (ft_isdigit(c) || ft_isalpha(c)); +} diff --git a/src/string/ft_isalpha.c b/src/string/ft_isalpha.c new file mode 100644 index 0000000..1d35b48 --- /dev/null +++ b/src/string/ft_isalpha.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_isalpha.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:15 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:15 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalpha(int c) +{ + return (('A' <= c && 'Z' >= c) || ('a' <= c && 'z' >= c)); +} diff --git a/src/string/ft_isascii.c b/src/string/ft_isascii.c new file mode 100644 index 0000000..25cc440 --- /dev/null +++ b/src/string/ft_isascii.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_isascii.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:16 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:16 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isascii(int c) +{ + return (0 <= c && 127 >= c); +} diff --git a/src/string/ft_isdigit.c b/src/string/ft_isdigit.c new file mode 100644 index 0000000..f1d4fb8 --- /dev/null +++ b/src/string/ft_isdigit.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_isdigit.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:16 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:16 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isdigit(int c) +{ + return ('0' <= c && '9' >= c); +} diff --git a/src/string/ft_isprint.c b/src/string/ft_isprint.c new file mode 100644 index 0000000..b7cc59f --- /dev/null +++ b/src/string/ft_isprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_isprint.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:17 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:17 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isprint(int c) +{ + return (32 <= c && 126 >= c); +} diff --git a/src/string/ft_split.c b/src/string/ft_split.c new file mode 100644 index 0000000..33cb5e9 --- /dev/null +++ b/src/string/ft_split.c @@ -0,0 +1,70 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_split.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:26 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:26 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include "libft.h" + +static int count_words(char const *s, char c) +{ + int n; + int i; + + n = 0; + i = 0; + while (s[i]) + { + if (s[i] != c && (s[i + 1] == c || s[i + 1] == '\0')) + n++; + i++; + } + return (n); +} + +static void *free_arr(int n, char ***arr) +{ + while (n-- > 0) + { + free((*arr)[n]); + } + free(*arr); + return (NULL); +} + +char **ft_split(char const *s, char c) +{ + char **result; + int n; + int i; + int j; + + result = malloc((count_words(s, c) + 1) * sizeof(char *)); + if (!result) + return (NULL); + i = 0; + n = 0; + while (s[i]) + { + j = 0; + while (s[i] == c) + i++; + while (s[i + j] && s[i + j] != c) + j++; + if (j) + result[n] = ft_substr(s, i, j); + if (j && !result[n++]) + return (free_arr(n, &result)); + i += j; + } + result[n] = NULL; + return (result); +} diff --git a/src/string/ft_strchr.c b/src/string/ft_strchr.c new file mode 100644 index 0000000..b57b931 --- /dev/null +++ b/src/string/ft_strchr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strchr.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:27 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:27 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + while (*s) + { + if (*(unsigned char *) s == (unsigned char) c) + return ((char *) s); + s++; + } + if (*(unsigned char *) s == (unsigned char) c) + return ((char *) s); + return (NULL); +} diff --git a/src/string/ft_strdup.c b/src/string/ft_strdup.c new file mode 100644 index 0000000..d589159 --- /dev/null +++ b/src/string/ft_strdup.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strdup.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:27 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:27 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strdup(const char *s) +{ + size_t size; + char *d; + + size = ft_strlen(s) + 1; + d = (char *) malloc(size * sizeof(char)); + if (d) + ft_strlcpy(d, s, size); + return (d); +} diff --git a/src/string/ft_striteri.c b/src/string/ft_striteri.c new file mode 100644 index 0000000..c335a44 --- /dev/null +++ b/src/string/ft_striteri.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_striteri.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:28 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:28 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char*)) +{ + unsigned int i; + + i = 0; + if (!s) + return ; + while (s[i]) + { + f(i, &s[i]); + i++; + } +} diff --git a/src/string/ft_strjoin.c b/src/string/ft_strjoin.c new file mode 100644 index 0000000..a2f1ec3 --- /dev/null +++ b/src/string/ft_strjoin.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strjoin.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:28 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:28 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *str; + size_t len_s1; + size_t len_s2; + + if (!s1 || !s2) + return (NULL); + len_s1 = ft_strlen(s1); + len_s2 = ft_strlen(s2); + str = (char *)malloc(len_s1 + len_s2 + 1); + if (!str) + return (NULL); + ft_memcpy(str, s1, len_s1); + ft_memcpy(str + len_s1, s2, len_s2); + str[len_s1 + len_s2] = '\0'; + return (str); +} diff --git a/src/string/ft_strlcat.c b/src/string/ft_strlcat.c new file mode 100644 index 0000000..a5b5cd1 --- /dev/null +++ b/src/string/ft_strlcat.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strlcat.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:29 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:29 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + size_t src_len; + size_t dst_len; + size_t i; + + src_len = ft_strlen(src); + if (size == 0) + return (src_len); + dst_len = ft_strlen(dst); + if (dst_len >= size) + return (size + src_len); + i = 0; + while (src[i] && i < size - dst_len - 1) + { + dst[dst_len + i] = src[i]; + i++; + } + dst[dst_len + i] = '\0'; + return (src_len + dst_len); +} diff --git a/src/string/ft_strlcpy.c b/src/string/ft_strlcpy.c new file mode 100644 index 0000000..76b0730 --- /dev/null +++ b/src/string/ft_strlcpy.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strlcpy.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:29 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:29 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcpy(char *dest, const char *src, size_t size) +{ + size_t i; + size_t result; + + i = 0; + if (size == 0) + return (ft_strlen(src)); + while (src[i] && i < size - 1) + { + dest[i] = src[i]; + i++; + } + dest[i] = '\0'; + result = ft_strlen(src); + return (result); +} diff --git a/src/string/ft_strlen.c b/src/string/ft_strlen.c new file mode 100644 index 0000000..01cfa5f --- /dev/null +++ b/src/string/ft_strlen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strlen.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:30 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:30 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + size_t length; + + length = 0; + while (*s++) + length++; + return (length); +} diff --git a/src/string/ft_strmapi.c b/src/string/ft_strmapi.c new file mode 100644 index 0000000..0917410 --- /dev/null +++ b/src/string/ft_strmapi.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strmapi.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:30 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:30 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + int i; + char *result; + + if (!s) + return (NULL); + result = malloc((ft_strlen(s) + 1) * sizeof(char)); + if (!result) + return (NULL); + i = 0; + while (s[i]) + { + result[i] = f(i, s[i]); + i++; + } + result[i] = '\0'; + return (result); +} diff --git a/src/string/ft_strncmp.c b/src/string/ft_strncmp.c new file mode 100644 index 0000000..874432e --- /dev/null +++ b/src/string/ft_strncmp.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strncmp.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:31 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:31 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t i; + + i = 0; + if (n == 0) + return (0); + while (*s1 && *s1 == *s2 && i < n - 1) + { + s1++; + s2++; + i++; + } + return ((unsigned char) *s1 - (unsigned char) *s2); +} diff --git a/src/string/ft_strnstr.c b/src/string/ft_strnstr.c new file mode 100644 index 0000000..e92eaef --- /dev/null +++ b/src/string/ft_strnstr.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strnstr.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:31 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:31 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + size_t j; + + i = 0; + if (*little == '\0') + return ((char *) big); + while (big[i] && i < len) + { + j = 0; + while (little[j] && big[i + j] == little [j] && i + j < len) + j++; + if (little[j] == '\0') + return ((char *) &big[i]); + i++; + } + return (NULL); +} diff --git a/src/string/ft_strrchr.c b/src/string/ft_strrchr.c new file mode 100644 index 0000000..d8e688d --- /dev/null +++ b/src/string/ft_strrchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strrchr.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:32 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:32 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + char *result; + + result = NULL; + while (*s) + { + if (*s == (char) c) + result = (char *) s; + s++; + } + if ('\0' == (char) c) + result = (char *) s; + return (result); +} diff --git a/src/string/ft_strtrim.c b/src/string/ft_strtrim.c new file mode 100644 index 0000000..a8145d2 --- /dev/null +++ b/src/string/ft_strtrim.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_strtrim.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:32 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:32 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtrim(char const *s1, char const *set) +{ + char *front; + char *back; + + if (!s1) + return (NULL); + if (!ft_strlen(set)) + return (ft_strdup(s1)); + front = (char *) s1; + back = (char *) s1; + while (*back) + back++; + back--; + while (ft_strchr(set, *front)) + front++; + while (ft_strchr(set, *back)) + back--; + return (ft_substr(s1, front - s1, back - front + 1)); +} diff --git a/src/string/ft_substr.c b/src/string/ft_substr.c new file mode 100644 index 0000000..601f2f8 --- /dev/null +++ b/src/string/ft_substr.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: o_ :::::: ::: */ +/* ft_substr.c :+: / :+::+: :+: */ +/* +:+ > +:++:+ +:+ */ +/* By: whaffman +#+ +:+ +#++#++:++#++ */ +/* +#+ +#+#+ +#++#+ +#+ \o/ */ +/* Created: 2024/10/10 17:00:33 by whaffman #+#+# #+#+# #+# #+# | */ +/* Updated: 2024/10/10 17:00:33 by whaffman ### ### ### ### / \ */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *substr; + size_t len_s; + + if (!s) + return (NULL); + len_s = ft_strlen(s); + if (start >= len_s) + return (ft_strdup("")); + if (len_s - start < len) + len = len_s - start; + substr = malloc(len * sizeof(char) + 1); + if (!substr) + return (NULL); + ft_memcpy(substr, &s[start], len); + substr[len] = '\0'; + return (substr); +}