Skip to content

Commit

Permalink
ALSA: Fix the default suffix string with high card number
Browse files Browse the repository at this point in the history
ALSA core tries to add a suffix as "_1" automatically when the given
id string conflicts.  The current code assumes implicitly that the max
card number is 16 so that the single hex "_X" suffix can be put.
However, with the dynamic device management, the card can be at most
32, so it can put even a non-hex character there.  Also, when the max
card number is increased in future, this would result in worse.

This patch rewrites the code to add the suffix string in a simpler
(thus cleaner) way.  It can support up to three digits, so it should
suffice for most requirements.

Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
tiwai committed May 24, 2013
1 parent e6c2e7e commit 8edbb19
Showing 1 changed file with 13 additions and 17 deletions.
30 changes: 13 additions & 17 deletions sound/core/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,6 @@ static void snd_card_set_id_no_lock(struct snd_card *card, const char *src,
const char *nid)
{
int len, loops;
bool with_suffix;
bool is_default = false;
char *id;

Expand All @@ -565,26 +564,23 @@ static void snd_card_set_id_no_lock(struct snd_card *card, const char *src,
is_default = true;
}

with_suffix = false;
len = strlen(id);
for (loops = 0; loops < SNDRV_CARDS; loops++) {
char *spos;
char sfxstr[5]; /* "_012" */
int sfxlen;

if (card_id_ok(card, id))
return; /* OK */

len = strlen(id);
if (!with_suffix) {
/* add the "_X" suffix */
char *spos = id + len;
if (len > sizeof(card->id) - 3)
spos = id + sizeof(card->id) - 3;
strcpy(spos, "_1");
with_suffix = true;
} else {
/* modify the existing suffix */
if (id[len - 1] != '9')
id[len - 1]++;
else
id[len - 1] = 'A';
}
/* Add _XYZ suffix */
sprintf(sfxstr, "_%X", loops + 1);
sfxlen = strlen(sfxstr);
if (len + sfxlen >= sizeof(card->id))
spos = id + sizeof(card->id) - sfxlen - 1;
else
spos = id + len;
strcpy(spos, sfxstr);
}
/* fallback to the default id */
if (!is_default) {
Expand Down

0 comments on commit 8edbb19

Please sign in to comment.