From e3690eb85a9456cc1f3ccda751ae7d9fdf2d3b03 Mon Sep 17 00:00:00 2001 From: Hampus Date: Tue, 4 Jan 2022 18:55:51 +0100 Subject: refactor: improve even more --- src/utils.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) (limited to 'src/utils.c') diff --git a/src/utils.c b/src/utils.c index 93f7c53..69ce55d 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,17 +1,57 @@ #include "utils.h" #include #include +#include +#include -/** - * Returns whether or not a string is a number. - */ int is_number(char *str) { - size_t len = strlen(str); - for (int c = 0; c < len; c++) - { + unsigned int length = strlen(str); + + for (unsigned int c = 0; c < length; c++) if (!isdigit(str[c])) return 0; - } + return 1; } + + +void *malloc_s(unsigned long amount) +{ + void *memory = malloc(amount); + + if (memory == NULL) + { + printf("Error: Memory allocation failed"); + exit(EXIT_FAILURE); + } + + return memory; +} + +unsigned int str_to_uint(char *str, char **err) +{ + if (*str == '-') + { + *err = "Not greater than 0"; + return 0; + } + + char *str_waste; + unsigned long num = strtoul(str, &str_waste, 10); + + if (strlen(str_waste) != 0) + { + *err = "Not a number"; + return 0; + } + + if (num > (unsigned long)UINT_MAX) + { + *err = "Too large"; + return 0; + } + + return (unsigned int)num; +} + -- cgit v1.2.3-18-g5258