int snd_config_hook_load_for_all_cards(snd_config_t *root, snd_config_t *config, snd_config_t **dst, snd_config_t *private_data ATTRIBUTE_UNUSED)
{
int card = -1, err;
- snd_config_t *loaded; // trace loaded cards
- err = snd_config_top(&loaded);
- if (err < 0)
- return err;
do {
err = snd_card_next(&card);
if (err < 0)
- goto __fin_err;
+ return err;
if (card >= 0) {
- snd_config_t *n, *m, *private_data = NULL;
+ snd_config_t *n, *private_data = NULL;
const char *driver;
char *fdriver = NULL;
- bool load;
err = snd_determine_driver(card, &fdriver);
if (err < 0)
- goto __fin_err;
+ return err;
if (snd_config_search(root, fdriver, &n) >= 0) {
if (snd_config_get_string(n, &driver) < 0) {
if (snd_config_get_type(n) == SND_CONFIG_TYPE_COMPOUND) {
driver = fdriver;
}
__std:
- load = true;
- err = snd_config_imake_integer(&m, driver, 1);
- if (err < 0)
- goto __err;
- err = snd_config_add(loaded, m);
- if (err < 0) {
- if (err == -EEXIST) {
- snd_config_delete(m);
- load = false;
- } else {
- goto __err;
- }
- }
private_data = _snd_config_hook_private_data(card, driver);
if (!private_data) {
err = -ENOMEM;
err = _snd_config_hook_table(root, config, private_data);
if (err < 0)
goto __err;
- if (load)
- err = snd_config_hook_load(root, config, &n, private_data);
+ err = snd_config_hook_load(root, config, &n, private_data);
__err:
if (private_data)
snd_config_delete(private_data);
free(fdriver);
if (err < 0)
- goto __fin_err;
+ return err;
}
} while (card >= 0);
- snd_config_delete(loaded);
*dst = NULL;
return 0;
-__fin_err:
- snd_config_delete(loaded);
- return err;
}
#ifndef DOC_HIDDEN
SND_DLSYM_BUILD_VERSION(snd_config_hook_load_for_all_cards, SND_CONFIG_DLSYM_VERSION_HOOK);