#define _POSIX_C_SOURCE 200809L #include "utils.h" #include #include #include #include #include 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; }