From: Jaroslav Kysela Date: Tue, 2 Nov 2021 09:41:07 +0000 (+0100) Subject: conf: introduce safe_strtol_base() X-Git-Tag: v1.2.6~15 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=f547b2e35f71e89397e8b29cd0b9083bb68b00a6;p=alsa-lib.git conf: introduce safe_strtol_base() It is useful to parse hexadecimal strings, too. Signed-off-by: Jaroslav Kysela --- diff --git a/include/local.h b/include/local.h index 7cfcec53..3e55b9d9 100644 --- a/include/local.h +++ b/include/local.h @@ -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); diff --git a/src/conf.c b/src/conf.c index d863dec6..0c3cc736 100644 --- a/src/conf.c +++ b/src/conf.c @@ -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) diff --git a/src/ucm/utils.c b/src/ucm/utils.c index 2fbc4c8c..33802a38 100644 --- a/src/ucm/utils.c +++ b/src/ucm/utils.c @@ -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;