commit d215954dec49b48abba87df88eed30eb2bf76137 Author: null Date: Mon Aug 4 13:20:27 2025 +0200 UtilLib diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ec7c14f --- /dev/null +++ b/Makefile @@ -0,0 +1,47 @@ +# Nom de la bibliothèque +NAME = libft.a + +# Options de compilation +CC = cc +CFLAGS = -Wall -Wextra -Werror -g3 +AR = ar rcs +RM = rm -f + +# Liste des fichiers source +SRCS = ft_calloc.c ft_isascii.c ft_itoa.c ft_memcpy.c ft_putchar_fd.c ft_putstr_fd.c ft_strdup.c ft_strlcat.c ft_strmapi.c ft_strrchr.c ft_tolower.c \ + ft_atoi.c ft_isalnum.c ft_isdigit.c ft_memchr.c ft_memmove.c ft_putendl_fd.c ft_split.c ft_striteri.c ft_strlcpy.c ft_strncmp.c ft_strtrim.c ft_toupper.c \ + ft_bzero.c ft_isalpha.c ft_isprint.c ft_memcmp.c ft_memset.c ft_putnbr_fd.c ft_strchr.c ft_strjoin.c ft_strlen.c ft_strnstr.c ft_substr.c \ + gnl.c gnl_utils.c ft_is_space.c ft_strtod.c printf_fd.c + +# Les fichiers objets correspondants +OBJS = ft_calloc.o ft_isascii.o ft_itoa.o ft_memcpy.o ft_putchar_fd.o ft_putstr_fd.o ft_strdup.o ft_strlcat.o ft_strmapi.o ft_strrchr.o ft_tolower.o \ + ft_atoi.o ft_isalnum.o ft_isdigit.o ft_memchr.o ft_memmove.o ft_putendl_fd.o ft_split.o ft_striteri.o ft_strlcpy.o ft_strncmp.o ft_strtrim.o ft_toupper.o \ + ft_bzero.o ft_isalpha.o ft_isprint.o ft_memcmp.o ft_memset.o ft_putnbr_fd.o ft_strchr.o ft_strjoin.o ft_strlen.o ft_strnstr.o ft_substr.o \ + gnl.o gnl_utils.o ft_is_space.o ft_strtod.o printf_fd.o + +# Règle par défaut, créer la bibliothèque +all: $(NAME) + +# Règle pour créer la bibliothèque statique +$(NAME): $(OBJS) + $(AR) $(NAME) $(OBJS) + +# Règle pour compiler les fichiers .c en fichiers .o +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + + +# Règle pour nettoyer les fichiers objets et l'exécutable +clean: + @$(RM) $(OBJS) + +# Règle pour nettoyer les fichiers objets et la bibliothèque +fclean: clean + @$(RM) $(NAME) + +# Règle pour tout nettoyer et recompiler +re: fclean all + +# Spécifie que certaines cibles ne sont pas des fichiers réels +.PHONY: all clean fclean re + diff --git a/ft_atoi.c b/ft_atoi.c new file mode 100644 index 0000000..c28bd6f --- /dev/null +++ b/ft_atoi.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/13 15:57:24 by hexplor #+# #+# */ +/* Updated: 2024/07/01 17:59:13 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_isspace(char c) +{ + if (c == '\t' || c == '\n' || c == '\v' \ + || c == '\f' || c == '\r' || c == ' ') + return (1); + return (0); +} + +static int ft_fsign(char c) +{ + if (c == '-') + return (-1); + return (1); +} + +int ft_atoi(const char *text) +{ + long sign; + long number; + + number = 0; + sign = 1; + while (ft_isspace(*text) == 1) + text++; + if (*text == '-' || *text == '+') + { + sign = ft_fsign(*text); + text++; + } + while (ft_isdigit(*text) == 1) + { + number *= 10; + number += *text - '0'; + text++; + } + return (sign * number); +} diff --git a/ft_bzero.c b/ft_bzero.c new file mode 100644 index 0000000..a02eb4c --- /dev/null +++ b/ft_bzero.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 10:47:55 by yantoine #+# #+# */ +/* Updated: 2023/11/09 15:02:31 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include +#include +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + if (n <= 0) + return ; + ft_memset(s, 0, n); +} + +/*int main() +{ + void mess[10] = "oui"; + + ft_bzero() + return (0); +}*/ diff --git a/ft_calloc.c b/ft_calloc.c new file mode 100644 index 0000000..152ee4c --- /dev/null +++ b/ft_calloc.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/14 15:24:33 by hexplor #+# #+# */ +/* Updated: 2023/11/30 08:53:17 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_calloc(size_t n, size_t size) +{ + char *tab; + size_t sizemax; + + sizemax = n * size; + if (size && sizemax / size < n) + return (NULL); + if (n == 0 || size == 0) + { + tab = malloc(1); + return (tab); + } + tab = malloc(n * size); + if (!tab) + return (NULL); + ft_bzero(tab, n * size); + return (tab); +} +/*#include +int main() +{ + void *p; + + p = ft_calloc(SIZE_MAX, SIZE_MAX); + free(p); + return (0); +}*/ diff --git a/ft_is_space.c b/ft_is_space.c new file mode 100644 index 0000000..8a52d23 --- /dev/null +++ b/ft_is_space.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_is_space.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/10/26 13:54:02 by yantoine #+# #+# */ +/* Updated: 2024/10/26 13:55:48 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_is_space(char c) +{ + return (c == ' ' || c == '\t' || c == '\n' || \ + c == '\v' || c == '\f' || c == '\r'); +} diff --git a/ft_isalnum.c b/ft_isalnum.c new file mode 100644 index 0000000..cbaa49b --- /dev/null +++ b/ft_isalnum.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 10:17:01 by yantoine #+# #+# */ +/* Updated: 2023/11/08 08:05:51 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isalnum(int c) +{ + if (ft_isalpha(c) == 1 || ft_isdigit(c) == 1) + return (1); + else + return (0); +} diff --git a/ft_isalpha.c b/ft_isalpha.c new file mode 100644 index 0000000..b7095b0 --- /dev/null +++ b/ft_isalpha.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 10:02:38 by yantoine #+# #+# */ +/* Updated: 2023/11/08 08:06:13 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isalpha(int c) +{ + if ((c >= 65 && c <= 90) \ + || (c >= 97 && c <= 122)) + return (1); + else + return (0); +} diff --git a/ft_isascii.c b/ft_isascii.c new file mode 100644 index 0000000..b9521fa --- /dev/null +++ b/ft_isascii.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 10:17:41 by yantoine #+# #+# */ +/* Updated: 2023/11/08 08:06:30 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isascii(int c) +{ + if (c >= 0 && c <= 127) + return (1); + else + return (0); +} diff --git a/ft_isdigit.c b/ft_isdigit.c new file mode 100644 index 0000000..087f589 --- /dev/null +++ b/ft_isdigit.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 10:06:07 by yantoine #+# #+# */ +/* Updated: 2023/11/08 08:06:49 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isdigit(int c) +{ + if ((c >= 48 && c <= 57) || c == 46) + return (1); + else + return (0); +} diff --git a/ft_isprint.c b/ft_isprint.c new file mode 100644 index 0000000..9d79e61 --- /dev/null +++ b/ft_isprint.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/09 12:37:20 by yantoine #+# #+# */ +/* Updated: 2023/11/30 09:02:47 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +int ft_isprint(int c) +{ + if (c >= 32 && c <= 126) + return (1); + return (0); +} diff --git a/ft_itoa.c b/ft_itoa.c new file mode 100644 index 0000000..e325b44 --- /dev/null +++ b/ft_itoa.c @@ -0,0 +1,104 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/22 15:16:11 by hexplor #+# #+# */ +/* Updated: 2023/11/30 07:44:52 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_n_digit(int n) +{ + long index; + + if (n == 0) + return (1); + index = 0; + while (n != 0) + { + n /= 10; + index++; + } + return (index); +} + +static int ft_pow(int n) +{ + long index; + + index = 1; + while (n != 0) + { + index *= 10; + n--; + } + return (index / 10); +} + +static void ft_set_number(char *tab) +{ + long index; + + index = 0; + while (index != 11) + { + tab[index] = index + '0'; + index++; + } + tab[index] = '\0'; +} + +static void ft_set_digit(long nbr_digit, long index, char *nbr, long n) +{ + char digit[15]; + long pow; + + if (n == 0) + { + *nbr = '0'; + *(nbr + 1) = 0; + return ; + } + ft_set_number(digit); + pow = ft_pow(nbr_digit); + while (nbr_digit != 0) + { + *(nbr + index++) = digit[(n / pow) % 10]; + nbr_digit--; + pow /= 10; + } + *(nbr + index++) = '\0'; +} + +char *ft_itoa(int n) +{ + char *nbr; + long index; + long n2; + long nbr_digit; + + n2 = (long) n; + nbr_digit = ft_n_digit(n); + index = 0; + if (n2 < 0) + { + nbr = ft_calloc((nbr_digit + 2), 1); + if (!nbr) + return (NULL); + *(nbr + index++) = '-'; + n2 *= -1; + } + else + { + nbr = ft_calloc((nbr_digit + 1), 1); + if (!nbr) + return (NULL); + } + ft_set_digit(nbr_digit, index, nbr, n2); + return (nbr); +} diff --git a/ft_memchr.c b/ft_memchr.c new file mode 100644 index 0000000..380504c --- /dev/null +++ b/ft_memchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/11 09:03:40 by yantoine #+# #+# */ +/* Updated: 2024/10/25 21:46:01 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + unsigned char *p; + size_t index; + + p = (unsigned char *)s; + index = 0; + while (p[index] && index < n) + { + if (p[index] == (unsigned char) c) + return ((void *)(p + index)); + index++; + } + return (NULL); +} diff --git a/ft_memcmp.c b/ft_memcmp.c new file mode 100644 index 0000000..16a42a6 --- /dev/null +++ b/ft_memcmp.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/11 10:08:42 by yantoine #+# #+# */ +/* Updated: 2023/11/13 16:23:41 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned char *p1; + unsigned char *p2; + size_t index; + + index = 0; + p1 = (unsigned char *)s1; + p2 = (unsigned char *)s2; + while (index < n) + { + if (*(p1 + index) != *(p2 + index)) + return ((*(p1 + index) - *(p2 + index))); + index++; + } + return (0); +} + +/*int main() +{ + ft_memcmp("001270", "coucou", 7); + return (0); +}*/ diff --git a/ft_memcpy.c b/ft_memcpy.c new file mode 100644 index 0000000..030e42e --- /dev/null +++ b/ft_memcpy.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 11:03:13 by yantoine #+# #+# */ +/* Updated: 2023/11/09 12:15:15 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dest, const void *src, size_t n) +{ + size_t index; + + index = 0; + while (index < n) + { + *(unsigned char *)(dest + index) = *(unsigned char *)(src + index); + index++; + } + return (dest); +} diff --git a/ft_memmove.c b/ft_memmove.c new file mode 100644 index 0000000..1e79e41 --- /dev/null +++ b/ft_memmove.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/08 15:13:56 by hexplor #+# #+# */ +/* Updated: 2023/11/09 12:45:23 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memmove(void *dest, const void *src, size_t n) +{ + size_t index; + int index2; + + if (dest > src) + { + index2 = n - 1; + while (index2 >= 0) + { + *(unsigned char *)(dest + index2) = \ + *(unsigned char *)(src + index2); + index2--; + } + } + else + { + index = 0; + while (index < n) + { + *(unsigned char *)(dest + index) = *(unsigned char *)(src + index); + index++; + } + } + return (dest); +} diff --git a/ft_memset.c b/ft_memset.c new file mode 100644 index 0000000..ee95790 --- /dev/null +++ b/ft_memset.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/06 11:33:18 by yantoine #+# #+# */ +/* Updated: 2023/11/09 14:55:20 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include +#include +#include "libft.h" + +void *ft_memset(void *s, int c, size_t n) +{ + size_t index; + + index = 0; + while (index < n) + { + *(unsigned char *)(s + index) = c; + index++; + } + return (s); +} diff --git a/ft_putchar_fd.c b/ft_putchar_fd.c new file mode 100644 index 0000000..9666580 --- /dev/null +++ b/ft_putchar_fd.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/23 14:08:31 by hexplor #+# #+# */ +/* Updated: 2023/11/23 15:04:00 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + write(fd, &c, 1); +} diff --git a/ft_putendl_fd.c b/ft_putendl_fd.c new file mode 100644 index 0000000..4797c84 --- /dev/null +++ b/ft_putendl_fd.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/23 14:34:12 by hexplor #+# #+# */ +/* Updated: 2023/11/24 17:45:40 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + ft_putstr_fd(s, fd); + ft_putchar_fd('\n', fd); +} diff --git a/ft_putnbr_fd.c b/ft_putnbr_fd.c new file mode 100644 index 0000000..6e3cf3e --- /dev/null +++ b/ft_putnbr_fd.c @@ -0,0 +1,87 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/23 14:41:48 by hexplor #+# #+# */ +/* Updated: 2023/11/27 22:27:06 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_n_digit(int n) +{ + long index; + + index = 0; + while (n != 0) + { + n /= 10; + index++; + } + return (index); +} + +static int ft_pow(int n) +{ + long index; + + index = 1; + while (n != 0) + { + index *= 10; + n--; + } + return (index / 10); +} + +static void ft_set_number(char *tab) +{ + long index; + + index = 0; + while (index != 11) + { + tab[index] = index + '0'; + index++; + } + tab[index] = '\0'; +} + +static void ft_set_digit(long nbr_digit, long n, int fd) +{ + char digit[15]; + long pow; + + if (n == 0) + { + ft_putchar_fd('0', fd); + return ; + } + ft_set_number(digit); + pow = ft_pow(nbr_digit); + while (nbr_digit != 0) + { + ft_putchar_fd(digit[(n / pow) % 10], fd); + nbr_digit--; + pow /= 10; + } +} + +void ft_putnbr_fd(int n, int fd) +{ + long n2; + long nbr_digit; + + n2 = (long) n; + nbr_digit = ft_n_digit(n); + if (n2 < 0) + { + ft_putchar_fd('-', fd); + n2 *= -1; + } + ft_set_digit(nbr_digit, n2, fd); +} diff --git a/ft_putstr_fd.c b/ft_putstr_fd.c new file mode 100644 index 0000000..e6cf7d7 --- /dev/null +++ b/ft_putstr_fd.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/23 14:24:20 by hexplor #+# #+# */ +/* Updated: 2023/11/23 14:32:00 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + unsigned int i; + + i = 0; + while (*(s + i)) + { + ft_putchar_fd(*(s + i), fd); + i++; + } +} diff --git a/ft_split.c b/ft_split.c new file mode 100644 index 0000000..7ea16c3 --- /dev/null +++ b/ft_split.c @@ -0,0 +1,108 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/16 17:06:15 by hexplor #+# #+# */ +/* Updated: 2023/11/29 13:19:56 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static size_t count_word(char *str, char c) +{ + int count; + + count = 0; + while (*str) + { + while (*str == c) + str++; + if (*str != c && *str) + count++; + while (*str && *str != c) + str++; + } + return (count); +} + +static size_t len_word(char *s, char c, size_t start) +{ + size_t i; + + i = 0; + while (s[start] && s[start] != c) + { + i++; + start++; + } + return (i); +} + +static void free_array(char **s1) +{ + size_t i; + + i = 0; + while (s1[i]) + { + free(s1[i]); + i++; + } + free(s1); +} + +static char **divisor(char *str1, char c, char **array, size_t len) +{ + size_t i; + size_t j; + + i = 0; + j = 0; + while (i < len) + { + while (str1[j] && str1[j] == c) + j++; + array[i] = ft_substr(str1, j, len_word(str1, c, j)); + if (!array[i]) + { + free_array(array); + return (NULL); + } + while (str1[j] && str1[j] != c) + j++; + i++; + } + array[i] = NULL; + return (array); +} + +char **ft_split(char const *s, char c) +{ + size_t words; + char **array; + + if (!s) + return (NULL); + words = count_word((char *)s, c); + array = (char **)malloc((words + 1) * (sizeof(char *))); + if (!array) + return (NULL); + array = divisor((char *)s, c, array, words); + return (array); +} +/* +int main() +{ + char **list; + + list = ft_split("--1-2--3---4----5-----42", '-'); + for (int i = 0; list[i] != NULL; ++i) + free(list[i]); + free(list); + return (0); +} +*/ diff --git a/ft_strchr.c b/ft_strchr.c new file mode 100644 index 0000000..f16e965 --- /dev/null +++ b/ft_strchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/10 12:07:02 by hexplor #+# #+# */ +/* Updated: 2023/11/29 15:22:10 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + char *chaine; + + chaine = (char *)s; + while (*chaine) + { + if (*chaine == (unsigned char)c) + return (chaine); + chaine++; + } + if (c == '\0') + return (chaine); + return (NULL); +} diff --git a/ft_strdup.c b/ft_strdup.c new file mode 100644 index 0000000..562f9a7 --- /dev/null +++ b/ft_strdup.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/15 15:58:53 by hexplor #+# #+# */ +/* Updated: 2023/11/29 14:52:09 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdup(const char *s1) +{ + char *s2; + int index; + + s2 = (char *)ft_calloc(ft_strlen(s1) + 1, 1); + if (s2 == NULL) + return (NULL); + index = 0; + while (*(s1 + index)) + { + *(s2 + index) = *(s1 + index); + index++; + } + *(s2 + index) = '\0'; + return (s2); +} + +/*int main() +{ + char *dest; + + dest = ft_strdup("BONJOUR"); + dest = ft_strdup(""); + dest = ft_strdup("\0"); + return (0); +}*/ diff --git a/ft_striteri.c b/ft_striteri.c new file mode 100644 index 0000000..68de181 --- /dev/null +++ b/ft_striteri.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/23 12:50:39 by hexplor #+# #+# */ +/* Updated: 2023/11/23 13:54:15 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char *)) +{ + unsigned int i; + + i = 0; + while (*s) + { + f(i, s); + i++; + s++; + } +} diff --git a/ft_strjoin.c b/ft_strjoin.c new file mode 100644 index 0000000..06d5c68 --- /dev/null +++ b/ft_strjoin.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/16 12:21:11 by hexplor #+# #+# */ +/* Updated: 2023/11/30 08:49:26 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + size_t len; + char *str; + + len = ft_strlen(s1); + len += ft_strlen(s2); + str = (char *)ft_calloc((len + 1), 1); + if (!str) + return (NULL); + ft_memmove(str, s1, ft_strlen(s1)); + ft_memmove((str + ft_strlen(s1)), s2, ft_strlen(s2)); + return (str); +} diff --git a/ft_strlcat.c b/ft_strlcat.c new file mode 100644 index 0000000..1e4b455 --- /dev/null +++ b/ft_strlcat.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/09 09:02:08 by hexplor #+# #+# */ +/* Updated: 2023/11/10 09:54:44 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +size_t ft_strlcat(char *dest, const char *src, size_t size) +{ + size_t i; + size_t k; + + i = 0; + k = 0; + while (dest[i] && i < size) + i++; + while (src[k] && (i + k + 1) < size) + { + dest[i + k] = src[k]; + k++; + } + if (i < size) + dest[i + k] = '\0'; + return (i + ft_strlen(src)); +} + +/*int main() +{ + char mess1[10] = "oui"; + char mess2[10] = "non"; + + ft_strlcat(mess1, mess2, 3); + return (0); +}*/ diff --git a/ft_strlcpy.c b/ft_strlcpy.c new file mode 100644 index 0000000..4cedd6b --- /dev/null +++ b/ft_strlcpy.c @@ -0,0 +1,43 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/09 17:27:30 by hexplor #+# #+# */ +/* Updated: 2023/11/09 20:22:10 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcpy(char *dest, const char *src, size_t size) +{ + size_t c; + size_t i; + + c = 0; + while (src[c] != '\0') + c++; + i = 0; + if (size != 0) + { + while (src[i] != '\0' && i < (size - 1)) + { + dest[i] = src[i]; + i++; + } + dest[i] = '\0'; + } + return (c); +} + +/*int main() +{ + char dest[10] = "oui"; + char src[3] = "non"; + + ft_strlcpy(dest, src, 10); + return (0); +}*/ diff --git a/ft_strlen.c b/ft_strlen.c new file mode 100644 index 0000000..7ed76b2 --- /dev/null +++ b/ft_strlen.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 10:18:42 by yantoine #+# #+# */ +/* Updated: 2023/11/09 12:31:17 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +size_t ft_strlen(const char *c) +{ + int index; + + index = 0; + while (c[index] != 0) + index += 1; + return (index); +} diff --git a/ft_strmapi.c b/ft_strmapi.c new file mode 100644 index 0000000..83db4d1 --- /dev/null +++ b/ft_strmapi.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/23 11:52:03 by hexplor #+# #+# */ +/* Updated: 2023/11/30 09:04:01 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + unsigned int i; + char *str; + + i = 0; + str = ft_calloc((ft_strlen(s) + 1), 1); + if (!str) + return (0); + while (*(s + i)) + { + *(str + i) = f(i, *(s + i)); + i++; + } + *(str + i) = '\0'; + return (str); +} diff --git a/ft_strncmp.c b/ft_strncmp.c new file mode 100644 index 0000000..6fe7de9 --- /dev/null +++ b/ft_strncmp.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/11 08:46:16 by yantoine #+# #+# */ +/* Updated: 2024/10/25 21:47:18 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t index; + + index = 0; + while (s1[index] && s2[index] && index < n) + { + if (*(s1 + index) != *(s2 + index)) + return (*(s1 + index) - *(s2 + index)); + index++; + } + return (0); +} diff --git a/ft_strnstr.c b/ft_strnstr.c new file mode 100644 index 0000000..dc17b15 --- /dev/null +++ b/ft_strnstr.c @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/12 12:16:17 by yantoine #+# #+# */ +/* Updated: 2023/11/27 22:29:37 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + size_t j; + char *b; + + b = (char *) big; + i = 0; + if (little[i] == '\0' || little == NULL) + return (b); + if (len == 0) + return (0); + while (b[i] != '\0' && i < len) + { + j = 0; + while (little[j] && (i + j) < len) + { + if (b[i + j] == little[j]) + j++; + else + break ; + } + if (little[j] == 0) + return (&b[i]); + i++; + } + return (0); +} +/*int main() +{ + ft_strnstr("aaabcabcd", "abcd", -1); + return (0); +}*/ diff --git a/ft_strrchr.c b/ft_strrchr.c new file mode 100644 index 0000000..dfc1be3 --- /dev/null +++ b/ft_strrchr.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/11 08:02:01 by yantoine #+# #+# */ +/* Updated: 2023/11/29 14:34:30 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + int len; + + len = 0; + while (*s) + { + len++; + s++; + } + if (c == '\0' && *s == '\0') + return ((char *)s); + while (len >= 0) + { + if (*s == (unsigned char)c) + return ((char *)s); + s--; + len--; + } + return (NULL); +} diff --git a/ft_strtod.c b/ft_strtod.c new file mode 100644 index 0000000..402861c --- /dev/null +++ b/ft_strtod.c @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtod.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/10/27 16:49:09 by yantoine #+# #+# */ +/* Updated: 2024/11/13 23:04:59 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int partie_entiere(double *entier, char *string, int i, double *sign) +{ + if (string[i] == '-') + { + *sign = -1; + i++; + } + while (string[i] && ft_isdigit(string[i])) + { + *entier = *entier * 10 + (string[i] - '0'); + i++; + } + return (i); +} + +//fonction qui convertie une string en double +double ft_strtod(char *string) +{ + double entier; + double decimal; + double diviseur; + double sign; + int i; + + i = 0; + entier = 0; + decimal = 0; + diviseur = 1; + sign = 1; + i = partie_entiere(&entier, string, i, &sign); + if (string[i] == '.') + { + i++; + while (string[i] && ft_isdigit(string[i])) + { + decimal = decimal * 10 + (string[i] - '0'); + diviseur *= 10; + i++; + } + } + return ((entier + decimal / diviseur) * sign); +} diff --git a/ft_strtrim.c b/ft_strtrim.c new file mode 100644 index 0000000..d23003e --- /dev/null +++ b/ft_strtrim.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/16 13:48:16 by hexplor #+# #+# */ +/* Updated: 2023/11/29 13:09:29 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtrim(char const *s1, char const *set) +{ + int i; + int j; + + i = 0; + j = ft_strlen(s1) - 1; + while (s1[i] && ft_strchr(set, s1[i])) + i++; + while (s1[j] && ft_strchr(set, s1[j])) + j--; + return (ft_substr(s1, i, (j - i + 1))); +} diff --git a/ft_substr.c b/ft_substr.c new file mode 100644 index 0000000..89ada2c --- /dev/null +++ b/ft_substr.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/15 20:04:44 by hexplor #+# #+# */ +/* Updated: 2023/11/30 08:45:42 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *str; + size_t i; + + if (!s) + return (NULL); + i = 0; + if (len > ft_strlen(s) - start) + { + len = ft_strlen(s) - start; + } + if (start >= ft_strlen(s)) + return (ft_strdup("")); + str = (char *)malloc(((sizeof(char) * (len + 1)))); + if (!str) + return (NULL); + while (i < len && s[start] != '\0') + { + str[i++] = s[start++]; + } + str[i] = '\0'; + return (str); +} +/* +int main() +{ + char *text; + + text = ft_substr("tripouille", 100, 1); + free(text); + return (0); +}*/ diff --git a/ft_tolower.c b/ft_tolower.c new file mode 100644 index 0000000..604ca24 --- /dev/null +++ b/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/10 10:09:46 by hexplor #+# #+# */ +/* Updated: 2023/11/10 10:13:40 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if (c >= 97 - 32 && c <= 122 - 32) + return (c + 32); + return (c); +} diff --git a/ft_toupper.c b/ft_toupper.c new file mode 100644 index 0000000..1f09844 --- /dev/null +++ b/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hexplor +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/10 10:05:42 by hexplor #+# #+# */ +/* Updated: 2023/11/10 10:09:20 by hexplor ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if (c >= 97 && c <= 122) + return (c - 32); + return (c); +} diff --git a/get_next_line.h b/get_next_line.h new file mode 100644 index 0000000..4966705 --- /dev/null +++ b/get_next_line.h @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/12/20 14:34:57 by hexplor #+# #+# */ +/* Updated: 2024/10/25 21:23:32 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_H +# define GET_NEXT_LINE_H + +# include +# include +# include +# include + +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 42 +# endif + +char *get_next_line(int fd); +char *gnl_ft_getline(char *static_str); +char *gnl_ft_strjoin(char *s1, char *s2); +char *gnl_ft_strchr(char *s, int c); +size_t gnl_ft_strlen(char *s); +char *gnl_ft_remove_bn(char *static_str); +char *gnl_read_fd(int fd, char *str); + +#endif diff --git a/gnl.c b/gnl.c new file mode 100644 index 0000000..c0758b6 --- /dev/null +++ b/gnl.c @@ -0,0 +1,106 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* gnl.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/12/20 14:35:58 by hexplor #+# #+# */ +/* Updated: 2024/10/25 21:47:48 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line.h" + +char *get_next_line(int fd) +{ + static char *static_str; + char *line; + + if (fd < 0 || BUFFER_SIZE <= 0) + return (0); + static_str = gnl_read_fd(fd, static_str); + if (!static_str) + return (NULL); + line = gnl_ft_getline(static_str); + static_str = gnl_ft_remove_bn(static_str); + return (line); +} + +char *gnl_read_fd(int fd, char *str) +{ + char *tmp; + int bytes; + + tmp = malloc((BUFFER_SIZE + 1) * sizeof(char)); + if (!tmp) + return (NULL); + bytes = 1; + while (!gnl_ft_strchr(str, '\n') && (bytes != 0)) + { + bytes = read(fd, tmp, BUFFER_SIZE); + if (bytes == -1) + { + free(tmp); + return (NULL); + } + tmp[bytes] = '\0'; + str = gnl_ft_strjoin(str, tmp); + } + free(tmp); + return (str); +} + +char *gnl_ft_getline(char *static_str) +{ + int i; + char *line; + + i = 0; + if (!static_str[i]) + return (NULL); + while (static_str[i] && static_str[i] != '\n') + i++; + line = (char *)malloc(sizeof(char) * (i + 2)); + if (!line) + return (NULL); + i = 0; + while (static_str[i] && static_str[i] != '\n') + { + line[i] = static_str[i]; + i++; + } + if (static_str[i] == '\n') + { + line[i] = static_str[i]; + i++; + } + line[i] = '\0'; + return (line); +} + +char *gnl_ft_remove_bn(char *static_str) +{ + int i; + int j; + char *restof; + + i = 0; + while (static_str[i] && static_str[i] != '\n') + i++; + if (!static_str[i]) + { + free(static_str); + return (NULL); + } + restof = (char *)malloc(sizeof(char) * (gnl_ft_strlen(static_str) - i + 1)); + if (!restof) + return (NULL); + i++; + j = 0; + while (static_str[i]) + restof[j++] = static_str[i++]; + restof[j] = '\0'; + free(static_str); + return (restof); +} diff --git a/gnl_utils.c b/gnl_utils.c new file mode 100644 index 0000000..82dae6e --- /dev/null +++ b/gnl_utils.c @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* gnl_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/12/20 14:34:32 by hexplor #+# #+# */ +/* Updated: 2024/10/25 21:47:56 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line.h" + +size_t gnl_ft_strlen(char *s) +{ + size_t i; + + i = 0; + if (!s) + return (0); + while (s[i] != '\0') + i++; + return (i); +} + +char *gnl_ft_strchr(char *s, int c) +{ + int i; + + i = 0; + if (!s) + return (0); + if (c == '\0') + return ((char *)&s[gnl_ft_strlen(s)]); + while (s[i] != '\0') + { + if (s[i] == (char) c) + return ((char *)&s[i]); + i++; + } + return (0); +} + +char *gnl_ft_strjoin(char *s1, char *s2) +{ + size_t i; + size_t j; + char *str; + + if (!s1) + { + s1 = (char *)malloc(1 * sizeof(char)); + s1[0] = '\0'; + } + if (!s1 || !s2) + return (NULL); + str = malloc(sizeof(char) * ((gnl_ft_strlen(s1) + gnl_ft_strlen(s2)) + 1)); + if (str == NULL) + return (NULL); + i = -1; + j = 0; + if (s1) + while (s1[++i] != '\0') + str[i] = s1[i]; + while (s2[j] != '\0') + str[i++] = s2[j++]; + str[gnl_ft_strlen(s1) + gnl_ft_strlen(s2)] = '\0'; + free(s1); + return (str); +} diff --git a/libft.h b/libft.h new file mode 100644 index 0000000..bc85673 --- /dev/null +++ b/libft.h @@ -0,0 +1,115 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 09:46:33 by yantoine #+# #+# */ +/* Updated: 2025/02/25 18:11:57 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H + +# include +# include +# include +# include +# include +# include + +typedef unsigned long t_lu; +typedef unsigned int t_ui; +typedef struct s_info t_info; +# define HEXUP "0123456789ABCDEF" +# define HEXLO "0123456789abcdef" +# define DEC "0123456789" +# define STR 0 +# define CHAR 1 + +struct s_info +{ + int fd; + int base; + size_t i; + size_t counter; +}; + +void *ft_calloc(size_t count, size_t size); + +void ft_putnbr_fd(int n, int fd); + +void ft_putendl_fd(char *s, int fd); + +void ft_striteri(char *s, void (*f)(unsigned int, char*)); + +void *ft_memchr(const void *s, int c, size_t n); + +void *ft_memmove(void *dest, const void *src, size_t n); + +void ft_putchar_fd(char c, int fd); + +void ft_putstr_fd(char *s, int fd); + +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); + +size_t ft_strlcat(char *dest, const char *src, size_t size); + +size_t ft_strlcpy(char *dest, const char *src, size_t size); + +size_t ft_strlen(const char *c); + +char **ft_split(char const *s, char c); + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); + +char *ft_itoa(int n); + +char *ft_strtrim(char const *s1, char const *set); + +char *ft_strjoin(char const *s1, char const *s2); + +char *ft_substr(char const *s, unsigned int start, size_t len); + +char *ft_strdup(const char *s1); + +char *ft_strchr(const char *s, int c); + +char *ft_strrchr(const char *s, int c); + +char *ft_strnstr(const char *big, const char *little, size_t len); + +int ft_atoi(const char *str); + +int ft_memcmp(const void *s1, const void *s2, size_t n); + +int ft_strncmp(const char *s1, const char *s2, size_t n); + +int ft_toupper(int c); + +int ft_tolower(int c); + +int ft_isprint(int c); + +int ft_isalpha(int c); + +int ft_isdigit(int c); + +int ft_isalnum(int c); + +int ft_isascii(int c); + +int ft_is_space(char c); + +double ft_strtod(char *string); + +int print_double_fd(double value, int fd); + +int printf_fd(int fd, const char *str, ...); +#endif diff --git a/printf_fd.c b/printf_fd.c new file mode 100644 index 0000000..d5f5d76 --- /dev/null +++ b/printf_fd.c @@ -0,0 +1,101 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* printf_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/09 17:02:50 by yantoine #+# #+# */ +/* Updated: 2024/11/13 23:41:20 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int putstr(char *str, char c, int is_char, t_info *info) +{ + int len; + + len = 0; + if (is_char) + return (write(info->fd, &c, 1)); + if (!str) + str = "(null)"; + while (str[len]) + len++; + return (write(info->fd, str, len)); +} + +static int putnbr_b(t_lu n, char *str, int numdig, t_info *info) +{ + if (n > (t_lu)info->base - 1) + numdig += putnbr_b(n / info->base, str, numdig, info); + putstr(NULL, str[n % info->base], CHAR, info); + return (++numdig); +} + +static int treat_int(int n, char *str, int numdig, t_info *info) +{ + int nb; + long signal; + + info->base = 10; + nb = n; + signal = 1; + if (nb < 0) + putstr(0, '-', CHAR, info); + signal = ((nb > 0) - (nb < 0)); + return ((n < 0) + putnbr_b(nb * signal, str, numdig, info)); +} + +static int format(const char *str, t_info *info, va_list *args) +{ + if (str[info->i] == 'c') + return (putstr(0, va_arg(*args, int), CHAR, info)); + if (str[info->i] == 's') + return (putstr(va_arg(*args, char *), 0, STR, info)); + if (str[info->i] == 'd' || str[info->i] == 'i') + return (treat_int(va_arg(*args, int), DEC, 0, info)); + if (str[info->i] == 'f') + return (print_double_fd(va_arg(*args, double), info->fd)); + if (str[info->i] == 'u') + { + info->base = 10; + return (putnbr_b((t_lu)va_arg(*args, t_ui), DEC, 0, info)); + } + if (str[info->i] == 'x') + return (putnbr_b((t_lu)va_arg(*args, t_ui), HEXLO, 0, info)); + if (str[info->i] == 'X') + return (putnbr_b((t_lu)va_arg(*args, t_ui), HEXUP, 0, info)); + if (str[info->i] == '%') + return (putstr(0, '%', CHAR, info)); + if (str[info->i] == 'p') + return (putstr("0x", 0, CHAR, info) + putnbr_b(va_arg(*args, t_lu), + HEXLO, 16, 0)); + return (0); +} + +int printf_fd(int fd, const char *str, ...) +{ + va_list args; + t_info info; + + va_start(args, str); + info.i = 0; + info.counter = 0; + info.base = 16; + info.fd = fd; + while (str[info.i]) + { + if (str[info.i] == '%') + { + info.i++; + info.counter += format(str, &info, &args); + } + else + info.counter += putstr(0, str[info.i], CHAR, &info); + info.i++; + } + va_end(args); + return (info.counter); +} diff --git a/tags b/tags new file mode 100644 index 0000000..cd36d36 --- /dev/null +++ b/tags @@ -0,0 +1,160 @@ +!_TAG_EXTRA_DESCRIPTION anonymous /Include tags for non-named objects like lambda/ +!_TAG_EXTRA_DESCRIPTION fileScope /Include tags of file scope/ +!_TAG_EXTRA_DESCRIPTION pseudo /Include pseudo tags/ +!_TAG_EXTRA_DESCRIPTION subparser /Include tags generated by subparsers/ +!_TAG_FIELD_DESCRIPTION epoch /the last modified time of the input file (only for F\/file kind tag)/ +!_TAG_FIELD_DESCRIPTION file /File-restricted scoping/ +!_TAG_FIELD_DESCRIPTION input /input file/ +!_TAG_FIELD_DESCRIPTION name /tag name/ +!_TAG_FIELD_DESCRIPTION pattern /pattern/ +!_TAG_FIELD_DESCRIPTION typeref /Type and name of a variable or typedef/ +!_TAG_FIELD_DESCRIPTION!C++ name /aliased names/ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_KIND_DESCRIPTION!C d,macro /macro definitions/ +!_TAG_KIND_DESCRIPTION!C e,enumerator /enumerators (values inside an enumeration)/ +!_TAG_KIND_DESCRIPTION!C f,function /function definitions/ +!_TAG_KIND_DESCRIPTION!C g,enum /enumeration names/ +!_TAG_KIND_DESCRIPTION!C h,header /included header files/ +!_TAG_KIND_DESCRIPTION!C m,member /struct, and union members/ +!_TAG_KIND_DESCRIPTION!C s,struct /structure names/ +!_TAG_KIND_DESCRIPTION!C t,typedef /typedefs/ +!_TAG_KIND_DESCRIPTION!C u,union /union names/ +!_TAG_KIND_DESCRIPTION!C v,variable /variable definitions/ +!_TAG_KIND_DESCRIPTION!C++ M,module /modules/ +!_TAG_KIND_DESCRIPTION!C++ P,partition /partitions/ +!_TAG_KIND_DESCRIPTION!C++ c,class /classes/ +!_TAG_KIND_DESCRIPTION!C++ d,macro /macro definitions/ +!_TAG_KIND_DESCRIPTION!C++ e,enumerator /enumerators (values inside an enumeration)/ +!_TAG_KIND_DESCRIPTION!C++ f,function /function definitions/ +!_TAG_KIND_DESCRIPTION!C++ g,enum /enumeration names/ +!_TAG_KIND_DESCRIPTION!C++ h,header /included header files/ +!_TAG_KIND_DESCRIPTION!C++ m,member /class, struct, and union members/ +!_TAG_KIND_DESCRIPTION!C++ n,namespace /namespaces/ +!_TAG_KIND_DESCRIPTION!C++ s,struct /structure names/ +!_TAG_KIND_DESCRIPTION!C++ t,typedef /typedefs/ +!_TAG_KIND_DESCRIPTION!C++ u,union /union names/ +!_TAG_KIND_DESCRIPTION!C++ v,variable /variable definitions/ +!_TAG_KIND_DESCRIPTION!Make I,makefile /makefiles/ +!_TAG_KIND_DESCRIPTION!Make m,macro /macros/ +!_TAG_KIND_DESCRIPTION!Make t,target /targets/ +!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ +!_TAG_OUTPUT_FILESEP slash /slash or backslash/ +!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ +!_TAG_OUTPUT_VERSION 0.0 /current.age/ +!_TAG_PARSER_VERSION!C 1.1 /current.age/ +!_TAG_PARSER_VERSION!C++ 1.1 /current.age/ +!_TAG_PARSER_VERSION!Make 0.0 /current.age/ +!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ +!_TAG_PROC_CWD /home/null/Documents/better_ray_tracer/libft/ // +!_TAG_PROGRAM_AUTHOR Universal Ctags Team // +!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ +!_TAG_PROGRAM_URL https://ctags.io/ /official site/ +!_TAG_PROGRAM_VERSION 6.1.0 /653ca9204/ +!_TAG_ROLE_DESCRIPTION!C!function foreigndecl /declared in foreign languages/ +!_TAG_ROLE_DESCRIPTION!C!header local /local header/ +!_TAG_ROLE_DESCRIPTION!C!header system /system header/ +!_TAG_ROLE_DESCRIPTION!C!macro undef /undefined/ +!_TAG_ROLE_DESCRIPTION!C!struct foreigndecl /declared in foreign languages/ +!_TAG_ROLE_DESCRIPTION!C++!header exported /exported with "exported imported ..."/ +!_TAG_ROLE_DESCRIPTION!C++!header imported /imported with "imported ..."/ +!_TAG_ROLE_DESCRIPTION!C++!header local /local header/ +!_TAG_ROLE_DESCRIPTION!C++!header system /system header/ +!_TAG_ROLE_DESCRIPTION!C++!macro undef /undefined/ +!_TAG_ROLE_DESCRIPTION!C++!module imported /imported with "imported ..."/ +!_TAG_ROLE_DESCRIPTION!C++!module partOwner /used for specifying a partition/ +!_TAG_ROLE_DESCRIPTION!C++!partition imported /imported with "imported ..."/ +!_TAG_ROLE_DESCRIPTION!Make!makefile included /included/ +!_TAG_ROLE_DESCRIPTION!Make!makefile optional /optionally included/ +$(NAME) Makefile /^$(NAME): $(OBJS)$/;" t +%.o Makefile /^%.o: %.c$/;" t +AR Makefile /^AR = ar rcs$/;" m +BUFFER_SIZE get_next_line.h /^# define BUFFER_SIZE /;" d +CC Makefile /^CC = cc$/;" m +CFLAGS Makefile /^CFLAGS = -Wall -Wextra -Werror -g3$/;" m +CHAR libft.h /^# define CHAR /;" d +DEC libft.h /^# define DEC /;" d +GET_NEXT_LINE_H get_next_line.h /^# define GET_NEXT_LINE_H$/;" d +HEXLO libft.h /^# define HEXLO /;" d +HEXUP libft.h /^# define HEXUP /;" d +LIBFT_H libft.h /^# define LIBFT_H$/;" d +NAME Makefile /^NAME = libft.a$/;" m +OBJS Makefile /^OBJS = ft_calloc.o ft_isascii.o ft_itoa.o ft_memcpy.o ft_putchar_fd.o ft_putstr_fd.o f/;" m +RM Makefile /^RM = rm -f$/;" m +SRCS Makefile /^SRCS = ft_calloc.c ft_isascii.c ft_itoa.c ft_memcpy.c ft_putchar_fd.c ft_putstr_fd.c f/;" m +STR libft.h /^# define STR /;" d +all Makefile /^all: $(NAME)$/;" t +base libft.h /^ int base;$/;" m struct:s_info typeref:typename:int +clean Makefile /^clean:$/;" t +count_word ft_split.c /^static size_t count_word(char *str, char c)$/;" f typeref:typename:size_t file: +counter libft.h /^ size_t counter;$/;" m struct:s_info typeref:typename:size_t +divisor ft_split.c /^static char **divisor(char *str1, char c, char **array, size_t len)$/;" f typeref:typename:char ** file: +fclean Makefile /^fclean: clean$/;" t +fd libft.h /^ int fd;$/;" m struct:s_info typeref:typename:int +format printf_fd.c /^static int format(const char *str, t_info *info, va_list *args)$/;" f typeref:typename:int file: +free_array ft_split.c /^static void free_array(char **s1)$/;" f typeref:typename:void file: +ft_atoi ft_atoi.c /^int ft_atoi(const char *text)$/;" f typeref:typename:int +ft_bzero ft_bzero.c /^void ft_bzero(void *s, size_t n)$/;" f typeref:typename:void +ft_calloc ft_calloc.c /^void *ft_calloc(size_t n, size_t size)$/;" f typeref:typename:void * +ft_fsign ft_atoi.c /^static int ft_fsign(char c)$/;" f typeref:typename:int file: +ft_is_space ft_is_space.c /^int ft_is_space(char c)$/;" f typeref:typename:int +ft_isalnum ft_isalnum.c /^int ft_isalnum(int c)$/;" f typeref:typename:int +ft_isalpha ft_isalpha.c /^int ft_isalpha(int c)$/;" f typeref:typename:int +ft_isascii ft_isascii.c /^int ft_isascii(int c)$/;" f typeref:typename:int +ft_isdigit ft_isdigit.c /^int ft_isdigit(int c)$/;" f typeref:typename:int +ft_isprint ft_isprint.c /^int ft_isprint(int c)$/;" f typeref:typename:int +ft_isspace ft_atoi.c /^static int ft_isspace(char c)$/;" f typeref:typename:int file: +ft_itoa ft_itoa.c /^char *ft_itoa(int n)$/;" f typeref:typename:char * +ft_memchr ft_memchr.c /^void *ft_memchr(const void *s, int c, size_t n)$/;" f typeref:typename:void * +ft_memcmp ft_memcmp.c /^int ft_memcmp(const void *s1, const void *s2, size_t n)$/;" f typeref:typename:int +ft_memcpy ft_memcpy.c /^void *ft_memcpy(void *dest, const void *src, size_t n)$/;" f typeref:typename:void * +ft_memmove ft_memmove.c /^void *ft_memmove(void *dest, const void *src, size_t n)$/;" f typeref:typename:void * +ft_memset ft_memset.c /^void *ft_memset(void *s, int c, size_t n)$/;" f typeref:typename:void * +ft_n_digit ft_itoa.c /^static int ft_n_digit(int n)$/;" f typeref:typename:int file: +ft_n_digit ft_putnbr_fd.c /^static int ft_n_digit(int n)$/;" f typeref:typename:int file: +ft_pow ft_itoa.c /^static int ft_pow(int n)$/;" f typeref:typename:int file: +ft_pow ft_putnbr_fd.c /^static int ft_pow(int n)$/;" f typeref:typename:int file: +ft_putchar_fd ft_putchar_fd.c /^void ft_putchar_fd(char c, int fd)$/;" f typeref:typename:void +ft_putendl_fd ft_putendl_fd.c /^void ft_putendl_fd(char *s, int fd)$/;" f typeref:typename:void +ft_putnbr_fd ft_putnbr_fd.c /^void ft_putnbr_fd(int n, int fd)$/;" f typeref:typename:void +ft_putstr_fd ft_putstr_fd.c /^void ft_putstr_fd(char *s, int fd)$/;" f typeref:typename:void +ft_set_digit ft_itoa.c /^static void ft_set_digit(long nbr_digit, long index, char *nbr, long n)$/;" f typeref:typename:void file: +ft_set_digit ft_putnbr_fd.c /^static void ft_set_digit(long nbr_digit, long n, int fd)$/;" f typeref:typename:void file: +ft_set_number ft_itoa.c /^static void ft_set_number(char *tab)$/;" f typeref:typename:void file: +ft_set_number ft_putnbr_fd.c /^static void ft_set_number(char *tab)$/;" f typeref:typename:void file: +ft_split ft_split.c /^char **ft_split(char const *s, char c)$/;" f typeref:typename:char ** +ft_strchr ft_strchr.c /^char *ft_strchr(const char *s, int c)$/;" f typeref:typename:char * +ft_strdup ft_strdup.c /^char *ft_strdup(const char *s1)$/;" f typeref:typename:char * +ft_striteri ft_striteri.c /^void ft_striteri(char *s, void (*f)(unsigned int, char *))$/;" f typeref:typename:void +ft_strjoin ft_strjoin.c /^char *ft_strjoin(char const *s1, char const *s2)$/;" f typeref:typename:char * +ft_strlcat ft_strlcat.c /^size_t ft_strlcat(char *dest, const char *src, size_t size)$/;" f typeref:typename:size_t +ft_strlcpy ft_strlcpy.c /^size_t ft_strlcpy(char *dest, const char *src, size_t size)$/;" f typeref:typename:size_t +ft_strlen ft_strlen.c /^size_t ft_strlen(const char *c)$/;" f typeref:typename:size_t +ft_strmapi ft_strmapi.c /^char *ft_strmapi(char const *s, char (*f)(unsigned int, char))$/;" f typeref:typename:char * +ft_strncmp ft_strncmp.c /^int ft_strncmp(const char *s1, const char *s2, size_t n)$/;" f typeref:typename:int +ft_strnstr ft_strnstr.c /^char *ft_strnstr(const char *big, const char *little, size_t len)$/;" f typeref:typename:char * +ft_strrchr ft_strrchr.c /^char *ft_strrchr(const char *s, int c)$/;" f typeref:typename:char * +ft_strtod ft_strtod.c /^double ft_strtod(char *string)$/;" f typeref:typename:double +ft_strtrim ft_strtrim.c /^char *ft_strtrim(char const *s1, char const *set)$/;" f typeref:typename:char * +ft_substr ft_substr.c /^char *ft_substr(char const *s, unsigned int start, size_t len)$/;" f typeref:typename:char * +ft_tolower ft_tolower.c /^int ft_tolower(int c)$/;" f typeref:typename:int +ft_toupper ft_toupper.c /^int ft_toupper(int c)$/;" f typeref:typename:int +get_next_line gnl.c /^char *get_next_line(int fd)$/;" f typeref:typename:char * +gnl_ft_getline gnl.c /^char *gnl_ft_getline(char *static_str)$/;" f typeref:typename:char * +gnl_ft_remove_bn gnl.c /^char *gnl_ft_remove_bn(char *static_str)$/;" f typeref:typename:char * +gnl_ft_strchr gnl_utils.c /^char *gnl_ft_strchr(char *s, int c)$/;" f typeref:typename:char * +gnl_ft_strjoin gnl_utils.c /^char *gnl_ft_strjoin(char *s1, char *s2)$/;" f typeref:typename:char * +gnl_ft_strlen gnl_utils.c /^size_t gnl_ft_strlen(char *s)$/;" f typeref:typename:size_t +gnl_read_fd gnl.c /^char *gnl_read_fd(int fd, char *str)$/;" f typeref:typename:char * +i libft.h /^ size_t i;$/;" m struct:s_info typeref:typename:size_t +len_word ft_split.c /^static size_t len_word(char *s, char c, size_t start)$/;" f typeref:typename:size_t file: +partie_entiere ft_strtod.c /^static int partie_entiere(double *entier, char *string, int i, double *sign)$/;" f typeref:typename:int file: +printf_fd printf_fd.c /^int printf_fd(int fd, const char *str, ...)$/;" f typeref:typename:int +putnbr_b printf_fd.c /^static int putnbr_b(t_lu n, char *str, int numdig, t_info *info)$/;" f typeref:typename:int file: +putstr printf_fd.c /^static int putstr(char *str, char c, int is_char, t_info *info)$/;" f typeref:typename:int file: +re Makefile /^re: fclean all$/;" t +s_info libft.h /^struct s_info$/;" s +t_info libft.h /^typedef struct s_info t_info;$/;" t typeref:struct:s_info +t_lu libft.h /^typedef unsigned long t_lu;$/;" t typeref:typename:unsigned long +t_ui libft.h /^typedef unsigned int t_ui;$/;" t typeref:typename:unsigned int +treat_int printf_fd.c /^static int treat_int(int n, char *str, int numdig, t_info *info)$/;" f typeref:typename:int file: