File 0003-conf-merge-card-specific-contents-per-file-whole-aft.patch of Package alsa
From a6238053c4fa518b214f99d91a01b96c5ef6e3ca Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Tue, 9 Dec 2025 18:04:07 +0100
Subject: [PATCH 3/7] conf: merge card specific contents per file (whole) after
parsing
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 | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/conf.c b/src/conf.c
index 49499ecdfc3c..b1ec9b382d66 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -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);
--
2.52.0