diff --git a/Makefile b/Makefile index 97037e6..0d0b06c 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,8 @@ INSERTION = insertion.c FLAGS_FILES = algorithms_sort.c flag.c bench.c -PARSING = ft_atoi.c parsing.c ft_strncmp.c ft_split.c ft_strlen.c ft_substr.c checker.c ft_itoa.c ft_isdigit.c +PARSING = ft_atoi.c parsing.c ft_strncmp.c ft_split.c ft_strlen.c ft_substr.c checker.c ft_itoa.c ft_isdigit.c \ + ft_strjoin.c ft_strlcat.c ft_strlcpy.c parsing_2.c STACK_UTILS = push.c rev_rotate.c rotate.c stack_add.c stack_remove.c stacks_len.c swap.c print_stacks.c diff --git a/headers/parsing.h b/headers/parsing.h index 63ed698..72b0410 100644 --- a/headers/parsing.h +++ b/headers/parsing.h @@ -27,5 +27,10 @@ int checker(int argc, char **argv); int len_split(char **tab); char *ft_itoa(int n); int ft_isdigit(int c); +char *ft_strjoin(char const *s1, char const *s2); +int ft_strlcpy(char *dst, const char *src, int size); +int ft_strlcat(char *dst, const char *src, int size); +char *join_all(int argc, char **argv); +char **split_all(char *tab); #endif diff --git a/parsing/ft_strjoin.c b/parsing/ft_strjoin.c new file mode 100644 index 0000000..1e6a961 --- /dev/null +++ b/parsing/ft_strjoin.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mteriier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/11 14:01:54 by mteriier #+# #+# */ +/* Updated: 2025/11/12 08:34:59 by mteriier ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "parsing.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + int total_len; + char *tmp; + + total_len = ft_strlen(s1) + ft_strlen(s2); + tmp = malloc((total_len + 1) * sizeof(char)); + if (!tmp) + return (0); + ft_strlcpy(tmp, s1, total_len + 1); + ft_strlcat(tmp, s2, total_len + 1); + return (tmp); +} diff --git a/parsing/ft_strlcat.c b/parsing/ft_strlcat.c new file mode 100644 index 0000000..2da7336 --- /dev/null +++ b/parsing/ft_strlcat.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mteriier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/10 09:22:05 by mteriier #+# #+# */ +/* Updated: 2025/11/13 11:03:31 by mteriier ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "parsing.h" + +int ft_strlcat(char *dst, const char *src, int size) +{ + int i; + int j; + int len_src; + int len_dst; + + i = 0; + len_src = ft_strlen(src); + if (size == 0) + return (len_src); + j = ft_strlen(dst); + len_dst = ft_strlen(dst); + while (j < size - 1 && src[i]) + { + dst[j] = src[i]; + j++; + i++; + } + dst[j] = '\0'; + if (len_dst > size) + return (len_src + size); + return (len_dst + len_src); +} diff --git a/parsing/ft_strlcpy.c b/parsing/ft_strlcpy.c new file mode 100644 index 0000000..51ff08b --- /dev/null +++ b/parsing/ft_strlcpy.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mteriier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/06 16:33:57 by mteriier #+# #+# */ +/* Updated: 2025/11/13 10:58:32 by mteriier ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "parsing.h" + +int ft_strlcpy(char *dst, const char *src, int size) +{ + int i; + int len; + + len = ft_strlen(src); + i = 0; + if (size == 0) + return (len); + while (i < size - 1 && src[i]) + { + dst[i] = src[i]; + i++; + } + dst[i] = '\0'; + return (len); +} diff --git a/parsing/parsing_2.c b/parsing/parsing_2.c new file mode 100644 index 0000000..0050e5c --- /dev/null +++ b/parsing/parsing_2.c @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parsing_2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mteriier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2026/01/09 08:22:21 by mteriier #+# #+# */ +/* Updated: 2026/01/09 08:22:22 by mteriier ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "parsing.h" + +static char *free_join(char *tab) +{ + free(tab); + return (NULL); +} + +char *join_all(int argc, char **argv) +{ + char *tab; + char *tmp; + int i; + + i = 0; + tab = ft_strjoin(argv[i], " "); + i++; + if (!tab) + return (NULL); + while (i < argc) + { + tmp = ft_strjoin(argv[i], " "); + if (!tmp) + return (free_join(tab)); + tab = ft_strjoin(tab, tmp); + if (!tab) + return (free_join(tmp)); + i++; + } + free(tmp); + return (tab); +} + +char **split_all(char *tab) +{ + char **split; + + if (!tab) + return (NULL); + split = ft_split(tab, ' '); + if (!split) + return (NULL); + return (split); +} diff --git a/test_one.c b/test_one.c index 8b8a8db..8faa47a 100644 --- a/test_one.c +++ b/test_one.c @@ -14,24 +14,29 @@ #include "flags.h" #include "parsing.h" #include "medium_headers.h" -#include #include int test1(int argc, char **argv) { t_stacks *stacks; int mod; + char **tab; + int len; stacks = NULL; - mod = calcul_mod(argc, argv); + tab = split_all(join_all(argc, argv)); + if (!tab) + return (0); + len = len_split(tab); + mod = calcul_mod(len, tab); if (mod == -1) return (0); - stacks = init_stacks(argc, argv, mod); + stacks = init_stacks(len, tab, mod); if (!stacks) return (0); if (check_order(stacks->a)) return (0); - flags(pos_flag(argv, mod), pos_bench(argv, mod), argv, stacks); + flags(pos_flag(tab, mod), pos_bench(tab, mod), tab, stacks); if (stacks->bench == 1) print_bench(stacks); free_all(stacks);