diff options
| author | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-09-22 17:32:44 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2026-02-13 09:57:39 +0100 |
| commit | 78bf2fe4a5bf37514f6dfd203ef969da0bf40c2e (patch) | |
| tree | 33f9440b8ee0fa7a3b3ad033616d722d2101bb4d /getul_n.c | |
| parent | 107a2e43d54f9a42fb85b00b83cb0d9abb194680 (diff) | |
Diffstat (limited to 'getul_n.c')
| -rw-r--r-- | getul_n.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/getul_n.c b/getul_n.c new file mode 100644 index 0000000..cf150c9 --- /dev/null +++ b/getul_n.c @@ -0,0 +1,33 @@ +#define _POSIX_C_SOURCE 200809L + +#include "utils.h" +#include <errno.h> +#include <limits.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +int getul_n(const char *const s, unsigned long *const out) +{ + char *end; + unsigned long v; + + errno = 0; + v = strtoull(s, &end, 10); + + if (errno) + { + fprintf(stderr, "%s: strtoul(3) %s: %s\n", __func__, s, + strerror(errno)); + return -1; + } + else if (*end || v > LONG_MAX) + { + fprintf(stderr, "%s: invalid number: %.*s\n", __func__, + (int)(end - s), s); + return -1; + } + + *out = v; + return 0; +} |
