]> git.alsa-project.org Git - alsa-lib.git/commitdiff
conf: merge card specific contents per file (whole) after parsing
authorJaroslav Kysela <perex@perex.cz>
Tue, 9 Dec 2025 17:04:07 +0000 (18:04 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 9 Dec 2025 17:08:29 +0000 (18:08 +0100)
Unfortunately, mentioned fix caused a regression for items stored in one file.
Merge the file contents after parsing not inside parsing process.

BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=2420645
Fixes: eda76146 ("conf: fix load_for_all_cards() - do not merge the card specific contents")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/conf.c

index 49499ecdfc3c840e9b76af44c348097822c58329..b1ec9b382d666eb6b8c82b10283c8c69717307c2 100644 (file)
@@ -4119,14 +4119,21 @@ static int config_filename_filter(const struct dirent64 *dirent)
 static int config_file_open(snd_config_t *root, const char *filename, int merge)
 {
        snd_input_t *in;
+       snd_config_t *top;
        int err;
 
        err = snd_input_stdio_open(&in, filename, "r");
        if (err >= 0) {
-               if (merge)
+               if (merge) {
                        err = snd_config_load(root, in);
-               else
-                       err = snd_config_load_override(root, in);
+               } else {
+                       err = snd_config_top(&top);
+                       if (err >= 0) {
+                               err = snd_config_load(top, in);
+                               if (err >= 0)
+                                       err = snd_config_merge(root, top, 1);
+                       }
+               }
                snd_input_close(in);
                if (err < 0)
                        snd_error(CORE, "%s may be old or corrupted: consider to remove or fix it", filename);