From 32d332b786c19583157f440fb3eb478cbdeee49a Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 29 Nov 2021 15:01:32 +0100 Subject: [PATCH] conf: add safe_strtoll_base() like safe_strtol_base() Signed-off-by: Jaroslav Kysela --- include/local.h | 2 ++ src/conf.c | 13 +++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/local.h b/include/local.h index 3e55b9d9..ebc9350c 100644 --- a/include/local.h +++ b/include/local.h @@ -232,6 +232,8 @@ size_t page_align(size_t size); size_t page_size(void); size_t page_ptr(size_t object_offset, size_t object_size, size_t *offset, size_t *mmap_offset); +int safe_strtoll_base(const char *str, long long *val, int base); +static inline int safe_strtoll(const char *str, long long *val) { return safe_strtoll_base(str, val, 0); } int safe_strtol_base(const char *str, long *val, int base); static inline int safe_strtol(const char *str, long *val) { return safe_strtol_base(str, val, 0); } diff --git a/src/conf.c b/src/conf.c index 0c3cc736..ef421151 100644 --- a/src/conf.c +++ b/src/conf.c @@ -653,16 +653,17 @@ static int input_stdio_open(snd_input_t **inputp, const char *file, return err; } -static int safe_strtoll(const char *str, long long *val) +int safe_strtoll_base(const char *str, long long *val, int base) { - long long v; - int endidx; + char *end; + long v; if (!*str) return -EINVAL; errno = 0; - if (sscanf(str, "%lli%n", &v, &endidx) < 1) - return -EINVAL; - if (str[endidx]) + v = strtoll(str, &end, base); + if (errno) + return -errno; + if (*end) return -EINVAL; *val = v; return 0; -- 2.47.1