]> git.alsa-project.org Git - alsa-lib.git/commitdiff
conf: add safe_strtoll_base() like safe_strtol_base()
authorJaroslav Kysela <perex@perex.cz>
Mon, 29 Nov 2021 14:01:32 +0000 (15:01 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 29 Nov 2021 14:01:32 +0000 (15:01 +0100)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
include/local.h
src/conf.c

index 3e55b9d97c2dca8eae2b4322db39ceb4ad754786..ebc9350ccc891b8628de3f5fcb09236d37359540 100644 (file)
@@ -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); }
 
index 0c3cc736e7c956e55000ed58e8d1539b99e0e5be..ef421151cc7d6aefaf761c08a24448d55ba1e02e 100644 (file)
@@ -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;