]> git.alsa-project.org Git - alsa-lib.git/commitdiff
conf: introduce safe_strtol_base()
authorJaroslav Kysela <perex@perex.cz>
Tue, 2 Nov 2021 09:41:07 +0000 (10:41 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 2 Nov 2021 09:41:11 +0000 (10:41 +0100)
It is useful to parse hexadecimal strings, too.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
include/local.h
src/conf.c
src/ucm/utils.c

index 7cfcec53dd5deec67efd3c7560679028850cb751..3e55b9d97c2dca8eae2b4322db39ceb4ad754786 100644 (file)
@@ -232,7 +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_strtol(const char *str, long *val);
+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); }
 
 int snd_send_fd(int sock, void *data, size_t len, int fd);
 int snd_receive_fd(int sock, void *data, size_t len, int *fd);
index d863dec637cf645635bc9f0b1ab3ce21fe8120df..0c3cc736e7c956e55000ed58e8d1539b99e0e5be 100644 (file)
@@ -668,14 +668,14 @@ static int safe_strtoll(const char *str, long long *val)
        return 0;
 }
 
-int safe_strtol(const char *str, long *val)
+int safe_strtol_base(const char *str, long *val, int base)
 {
        char *end;
        long v;
        if (!*str)
                return -EINVAL;
        errno = 0;
-       v = strtol(str, &end, 0);
+       v = strtol(str, &end, base);
        if (errno)
                return -errno;
        if (*end)
index 2fbc4c8cd4e3c85ca11a07f50323c9c7454c9909..33802a38dd47332abac3a86be84d082709b92b52 100644 (file)
@@ -811,7 +811,6 @@ void uc_mgr_card_close(snd_use_case_mgr_t *uc_mgr)
  */
 const char *uc_mgr_alibcfg_by_device(snd_config_t **top, const char *name)
 {
-       char buf[7];
        long card_num;
        snd_config_t *config;
        snd_use_case_mgr_t *uc_mgr;
@@ -819,11 +818,7 @@ const char *uc_mgr_alibcfg_by_device(snd_config_t **top, const char *name)
 
        if (strncmp(name, "_ucm", 4) || strlen(name) < 12 || name[8] != '.')
                return NULL;
-       buf[0] = '0';
-       buf[1] = 'x';
-       strncpy(buf + 2, name + 4, 4);
-       buf[6] = '\0';
-       err = safe_strtol(buf, &card_num);
+       err = safe_strtol_base(name, &card_num, 16);
        if (err < 0 || card_num < 0 || card_num > 0xffff)
                return NULL;
        config = NULL;