[alsa-devel] [PATCH] dapm_new_mixer and 32 bytes limitation
Dapm mixer names are truncated to 32 bytes, while alsa control names are 44 bytes wide.
Subsequent usage of functions like snd_ctl_find_id fail because of the mismatch. Unless there's a limitation I don't understand, the following patch fixes the limit back to 44 bytes.
-- Robert
At 18 Jan 2008 21:13:36 +0100, Robert Jarzmik wrote:
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index ea20138..f22a1bb 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -281,7 +281,7 @@ static int dapm_new_mixer(struct snd_soc_codec *codec, struct snd_soc_dapm_widget *w) { int i, ret = 0;
- char name[32];
- char name[44];
Let's add a global const in asound.h instead of using a magic number everywhere.
struct snd_soc_dapm_path *path;
/* add kcontrol */ @@ -295,7 +295,8 @@ static int dapm_new_mixer(struct snd_soc_codec *codec, continue;
/* add dapm control with long name */
snprintf(name, 32, "%s %s", w->name, w->kcontrols[i].name);
snprintf(name, 43, "%s %s", w->name, w->kcontrols[i].name);
name[43] = 0;
snprintf() terminates the string. The usual call is
snprintf(name, sizeof(name), ...);
Thanks,
Takashi
On Mon, 21 Jan 2008, Takashi Iwai wrote:
At 18 Jan 2008 21:13:36 +0100, Robert Jarzmik wrote:
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index ea20138..f22a1bb 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -281,7 +281,7 @@ static int dapm_new_mixer(struct snd_soc_codec *codec, struct snd_soc_dapm_widget *w) { int i, ret = 0;
- char name[32];
- char name[44];
Let's add a global const in asound.h instead of using a magic number everywhere.
What about this:
int namelen = sizeof(w->kcontrols[0].name);
Jaroslav
----- Jaroslav Kysela perex@perex.cz Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc.
At Mon, 21 Jan 2008 12:05:55 +0100 (CET), Jaroslav Kysela wrote:
On Mon, 21 Jan 2008, Takashi Iwai wrote:
At 18 Jan 2008 21:13:36 +0100, Robert Jarzmik wrote:
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index ea20138..f22a1bb 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -281,7 +281,7 @@ static int dapm_new_mixer(struct snd_soc_codec *codec, struct snd_soc_dapm_widget *w) { int i, ret = 0;
- char name[32];
- char name[44];
Let's add a global const in asound.h instead of using a magic number everywhere.
What about this:
int namelen = sizeof(w->kcontrols[0].name);
I thought of it, too, but it's too ugly, I'd say.
Takashi
participants (3)
-
Jaroslav Kysela
-
Robert Jarzmik
-
Takashi Iwai