mixer: remove alloca() from simple_add1()

Both of alloca() and automatic variables keep storages on stack, while
the former generates more instructions than the latter. It's better to use
the latter if the size of storage is computable at pre-compile or compile
time; i.e. just for structures.

This commit obsolete usages of alloca() with automatic variables.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Sakamoto 2016-07-15 09:23:31 +09:00 committed by Takashi Iwai
parent 98194d5f98
commit c2a59624f1

View file

@ -1419,18 +1419,17 @@ static int simple_add1(snd_mixer_class_t *class, const char *name,
snd_mixer_selem_id_t *id; snd_mixer_selem_id_t *id;
int new = 0; int new = 0;
int err; int err;
snd_ctl_elem_info_t *info; snd_ctl_elem_info_t info = {0};
selem_none_t *simple; selem_none_t *simple;
const char *name1; const char *name1;
snd_ctl_elem_type_t ctype; snd_ctl_elem_type_t ctype;
unsigned long values; unsigned long values;
snd_ctl_elem_info_alloca(&info); err = snd_hctl_elem_info(helem, &info);
err = snd_hctl_elem_info(helem, info);
if (err < 0) if (err < 0)
return err; return err;
ctype = snd_ctl_elem_info_get_type(info); ctype = snd_ctl_elem_info_get_type(&info);
values = snd_ctl_elem_info_get_count(info); values = snd_ctl_elem_info_get_count(&info);
switch (type) { switch (type) {
case CTL_SINGLE: case CTL_SINGLE:
if (ctype == SND_CTL_ELEM_TYPE_ENUMERATED) if (ctype == SND_CTL_ELEM_TYPE_ENUMERATED)
@ -1553,20 +1552,20 @@ static int simple_add1(snd_mixer_class_t *class, const char *name,
goto __error; goto __error;
} }
simple->ctls[type].elem = helem; simple->ctls[type].elem = helem;
simple->ctls[type].type = snd_ctl_elem_info_get_type(info); simple->ctls[type].type = snd_ctl_elem_info_get_type(&info);
simple->ctls[type].inactive = snd_ctl_elem_info_is_inactive(info); simple->ctls[type].inactive = snd_ctl_elem_info_is_inactive(&info);
simple->ctls[type].values = values; simple->ctls[type].values = values;
if ( (type == CTL_GLOBAL_ENUM) || if ( (type == CTL_GLOBAL_ENUM) ||
(type == CTL_PLAYBACK_ENUM) || (type == CTL_PLAYBACK_ENUM) ||
(type == CTL_CAPTURE_ENUM) ) { (type == CTL_CAPTURE_ENUM) ) {
simple->ctls[type].min = 0; simple->ctls[type].min = 0;
simple->ctls[type].max = snd_ctl_elem_info_get_items(info); simple->ctls[type].max = snd_ctl_elem_info_get_items(&info);
} else { } else {
if (ctype == SND_CTL_ELEM_TYPE_INTEGER) { if (ctype == SND_CTL_ELEM_TYPE_INTEGER) {
simple->ctls[type].min = simple->ctls[type].min =
snd_ctl_elem_info_get_min(info); snd_ctl_elem_info_get_min(&info);
simple->ctls[type].max = simple->ctls[type].max =
snd_ctl_elem_info_get_max(info); snd_ctl_elem_info_get_max(&info);
} }
} }
switch (type) { switch (type) {