From 97ce3bf40bba444641b756c8bde5cdd27c5e848c Mon Sep 17 00:00:00 2001 From: Maoake Teriierooiterai Date: Mon, 12 Jan 2026 14:00:08 +0100 Subject: [PATCH] fixing the parsing --- checker/check_error.c | 13 +++++++++++++ checker/verif_flag.c | 10 +++++----- checker/verif_is_digit.c | 6 ++++-- headers/check_error.h | 1 + main.c | 8 ++++++++ test_one.c | 3 +++ 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/checker/check_error.c b/checker/check_error.c index 1f24a07..fbdd341 100644 --- a/checker/check_error.c +++ b/checker/check_error.c @@ -11,6 +11,17 @@ /* ************************************************************************** */ #include "check_error.h" +#include "parsing.h" + +int verif_is_number(char **tab) +{ + int len; + + len = len_split(tab); + if (tab[len - 1][0] == '-') + return (0); + return (1); +} int check_error(char **tab, int mod) { @@ -22,5 +33,7 @@ int check_error(char **tab, int mod) return (0); if (!verif_double(tab, mod)) return (0); + if (!verif_is_number(tab)) + return (0); return (1); } diff --git a/checker/verif_flag.c b/checker/verif_flag.c index 52b6794..f121c95 100644 --- a/checker/verif_flag.c +++ b/checker/verif_flag.c @@ -17,11 +17,11 @@ static int is_exist_flag(char **tab, int pos) int verif; verif = 0; - if (ft_strncmp(tab[pos], "--bench", 7) - || ft_strncmp(tab[pos], "--simple", 8) - || ft_strncmp(tab[pos], "--medium", 8) - || ft_strncmp(tab[pos], "--adaptive", 10) - || ft_strncmp(tab[pos], "--complex", 9)) + if (ft_strncmp(tab[pos], "--bench", 30) + || ft_strncmp(tab[pos], "--simple", 30) + || ft_strncmp(tab[pos], "--medium", 30) + || ft_strncmp(tab[pos], "--adaptive", 30) + || ft_strncmp(tab[pos], "--complex", 30)) verif = 1; return (verif); } diff --git a/checker/verif_is_digit.c b/checker/verif_is_digit.c index 9bbd134..6d6f6d7 100644 --- a/checker/verif_is_digit.c +++ b/checker/verif_is_digit.c @@ -12,7 +12,7 @@ #include "parsing.h" -static int scan_str_is_digit(char *tab) +int scan_str_is_digit(char *tab) { int i; @@ -21,7 +21,9 @@ static int scan_str_is_digit(char *tab) { if (!ft_isdigit(tab[i]) && (tab[i] == '-' && !ft_isdigit(tab[i + 1]))) return (0); - if (tab[i] == '+' && !ft_isdigit(tab[i + 1])) + else if (tab[i] == '+' && !ft_isdigit(tab[i + 1])) + return (0); + else if (!ft_isdigit(tab[i])) return (0); i++; } diff --git a/headers/check_error.h b/headers/check_error.h index a9a506a..b6f64f1 100644 --- a/headers/check_error.h +++ b/headers/check_error.h @@ -18,5 +18,6 @@ int check_error(char **tab, int mod); int verif_is_digit(char **tab, int mod); int verif_overflow(char **tab, int mod); int verif_double(char **tab, int mod); +int scan_str_is_digit(char *tab); #endif diff --git a/main.c b/main.c index 4c8434e..4233fc8 100644 --- a/main.c +++ b/main.c @@ -22,10 +22,18 @@ int main(int argc, char **argv) int mod; int len; + if (argc < 2) + return (0); tab = split_all(join_all(argc, argv)); if (!tab) return (0); len = len_split(tab); + if (!scan_str_is_digit(tab[len - 1])) + { + free_tab(tab); + write(2, "Error\n", 7); + return (0); + } mod = calcul_mod(len, tab); if (check_error(tab, mod)) test1(tab, len, mod); diff --git a/test_one.c b/test_one.c index 88a33bb..3cdb0ee 100644 --- a/test_one.c +++ b/test_one.c @@ -27,7 +27,10 @@ int test1(char **tab, int len, int mod) if (!stacks) return (0); if (check_order(stacks->a)) + { + free_all(stacks); return (0); + } flags(pos_flag(tab, mod), pos_bench(tab, mod), tab, stacks); if (stacks->bench == 1) print_bench(stacks);