From ed156a218644e3334bc452ef2bc948409735c330 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 24 May 2019 21:11:00 +0200 Subject: [PATCH 21/25] ucm: coverity fixes Signed-off-by: Jaroslav Kysela --- src/ucm/parser.c | 18 ++++++++++++++---- src/ucm/utils.c | 12 +++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/ucm/parser.c b/src/ucm/parser.c index ad6bcec78622..61d5d7f9c47c 100644 --- a/src/ucm/parser.c +++ b/src/ucm/parser.c @@ -1114,7 +1114,7 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr, if (err < 0) { uc_error("error: %s failed to parse verb", file); - return err; + goto _err; } continue; } @@ -1126,7 +1126,7 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr, if (err < 0) { uc_error("error: %s failed to parse device", file); - return err; + goto _err; } continue; } @@ -1138,18 +1138,24 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr, if (err < 0) { uc_error("error: %s failed to parse modifier", file); - return err; + goto _err; } continue; } } + snd_config_delete(cfg); + /* use case verb must have at least 1 device */ if (list_empty(&verb->device_list)) { uc_error("error: no use case device defined", file); return -EINVAL; } return 0; + + _err: + snd_config_delete(cfg); + return err; } /* @@ -1399,6 +1405,7 @@ next_card: return -1; } + static int load_master_config(const char *card_name, snd_config_t **cfg) { char filename[MAX_FILE]; @@ -1610,8 +1617,11 @@ int uc_mgr_scan_master_configs(const char **_list[]) } free(namelist); - if (err >= 0) + if (err >= 0) { *_list = list; + } else { + free(list); + } return err; } diff --git a/src/ucm/utils.c b/src/ucm/utils.c index 14227e0aed5b..efd5a97999b1 100644 --- a/src/ucm/utils.c +++ b/src/ucm/utils.c @@ -58,14 +58,18 @@ int uc_mgr_config_load(const char *file, snd_config_t **cfg) int err; fp = fopen(file, "r"); - err = fp == NULL ? -errno : snd_input_stdio_attach(&in, fp, 1); - if (err < 0) { + if (!fp) { + err = -errno; + __err0: uc_error("could not open configuration file %s", file); return err; } + err = snd_input_stdio_attach(&in, fp, 1); + if (err < 0) + goto __err0; err = snd_config_top(&top); if (err < 0) - return err; + goto __err1; default_path = getenv(ALSA_CONFIG_UCM_VAR); if (!default_path || !*default_path) @@ -88,6 +92,8 @@ int uc_mgr_config_load(const char *file, snd_config_t **cfg) __err2: snd_config_delete(top); + __err1: + snd_input_close(in); return err; } -- 2.16.4