diff --git a/parsing/sources/utils.c b/parsing/sources/utils.c new file mode 100644 index 0000000..11d6fa3 --- /dev/null +++ b/parsing/sources/utils.c @@ -0,0 +1,55 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rparodi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2026/03/28 12:40:08 by rparodi #+# #+# */ +/* Updated: 2026/03/28 15:22:10 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "macro.h" +#include "parsing.h" +#include +#include +#include +#include +#include + +size_t args_size() +{ + size_t i = 0; + while (_flags[i].short_option != 0 || _flags[i].long_option != NULL) { + i++; + } + return i; +} + +static bool _is_valid_number(const char *str) { + if (!str) + return false; + + for (size_t i = 0; str[i]; i++) { + if (!isdigit(str[i])) + return false; + } + return true; +} + +uint64_t check_num_arguments(char *arg) +{ + if (!_is_valid_number(arg)) { + ERROR_LOG(strerror(EINVAL)); + exit(EXIT_FAILURE); + } + + errno = 0; + uint64_t value = strtoull(arg, NULL, 10); + if (errno != 0 || value > UINT64_MAX) { + ERROR_LOG(strerror(errno)) + exit(EXIT_FAILURE); + } + return value; +}