summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2016-07-15 09:23:31 +0900
committerTakashi Iwai <tiwai@suse.de>2016-07-15 08:16:36 +0200
commitc2a59624f124eafee1e441af248165b32fe515e3 (patch)
tree16ed9934d716eb5ff8a1914cf0ead0dd7a71760c
parent98194d5f98d5332f7eba2e969501601b1a0c961a (diff)
downloadalsa-lib-c2a59624f124eafee1e441af248165b32fe515e3.tar.gz
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>
-rw-r--r--src/mixer/simple_none.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/mixer/simple_none.c b/src/mixer/simple_none.c
index 1ccccc42..68ab37eb 100644
--- a/src/mixer/simple_none.c
+++ b/src/mixer/simple_none.c
@@ -1419,18 +1419,17 @@ static int simple_add1(snd_mixer_class_t *class, const char *name,
snd_mixer_selem_id_t *id;
int new = 0;
int err;
- snd_ctl_elem_info_t *info;
+ snd_ctl_elem_info_t info = {0};
selem_none_t *simple;
const char *name1;
snd_ctl_elem_type_t ctype;
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)
return err;
- ctype = snd_ctl_elem_info_get_type(info);
- values = snd_ctl_elem_info_get_count(info);
+ ctype = snd_ctl_elem_info_get_type(&info);
+ values = snd_ctl_elem_info_get_count(&info);
switch (type) {
case CTL_SINGLE:
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;
}
simple->ctls[type].elem = helem;
- 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].type = snd_ctl_elem_info_get_type(&info);
+ simple->ctls[type].inactive = snd_ctl_elem_info_is_inactive(&info);
simple->ctls[type].values = values;
if ( (type == CTL_GLOBAL_ENUM) ||
(type == CTL_PLAYBACK_ENUM) ||
(type == CTL_CAPTURE_ENUM) ) {
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 {
if (ctype == SND_CTL_ELEM_TYPE_INTEGER) {
simple->ctls[type].min =
- snd_ctl_elem_info_get_min(info);
+ snd_ctl_elem_info_get_min(&info);
simple->ctls[type].max =
- snd_ctl_elem_info_get_max(info);
+ snd_ctl_elem_info_get_max(&info);
}
}
switch (type) {