[alsa-devel] [PATCH 1/2] ALSA: snd_usb_caiaq: give better shortname

Takashi Iwai tiwai at suse.de
Tue Jun 2 13:01:35 CEST 2009


At Tue,  2 Jun 2009 12:36:39 +0200,
Daniel Mack wrote:
> 
> If not passed as module option, provide an own card ID with the newly
> introduced snd_set_card_id() call.
> 
> This will prevent ALSA from calling choose_default_name() which only
> takes the last part of a name containing whitespaces. This for example
> caused 'Audio 4 DJ' to be shortened to 'DJ', which was not very
> descriptive.
> 
> The implementation now takes the short name and removes all whitespaces
> from it which is much nicer.
> 
> Signed-off-by: Daniel Mack <daniel at caiaq.de>
> ---
>  sound/usb/caiaq/device.c |   21 +++++++++++++++++++--
>  1 files changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/usb/caiaq/device.c b/sound/usb/caiaq/device.c
> index 15052e4..43bd0db 100644
> --- a/sound/usb/caiaq/device.c
> +++ b/sound/usb/caiaq/device.c
> @@ -382,10 +382,10 @@ static int create_card(struct usb_device* usb_dev, struct snd_card **cardp)
>  
>  static int __devinit init_card(struct snd_usb_caiaqdev *dev)
>  {
> -	char usbpath[32];
> +	char *c, usbpath[32];
>  	struct usb_device *usb_dev = dev->chip.dev;
>  	struct snd_card *card = dev->chip.card;
> -	int err;
> +	int err, len;
>  
>  	if (usb_set_interface(usb_dev, 0, 1) != 0) {
>  		log("can't set alt interface.\n");
> @@ -427,6 +427,23 @@ static int __devinit init_card(struct snd_usb_caiaqdev *dev)
>  	strlcpy(card->driver, MODNAME, sizeof(card->driver));
>  	strlcpy(card->shortname, dev->product_name, sizeof(card->shortname));
>  
> +	/* if the id was not passed as module option, fill it with a shortened
> +	 * version of the product string which does not contain any
> +	 * whitespaces */
> +
> +	if (*card->id == '\0') {

Hm, at this place, card->id should be never an empty string so
this is always true.


> +		char id[sizeof(card->id)];
> +
> +		memset(id, 0, sizeof(id));
> +
> +		for (c = card->shortname, len = 0;
> +			*c && len < sizeof(card->id); c++)
> +			if (*c != ' ')
> +				id[len++] = *c;

... and here you change the id string unconditionally no matter whether 
it's given explicitly or not.  It should check id[devnum] instead of
card->id.


thanks,

Takashi


More information about the Alsa-devel mailing list