unsigned int member_count,
long min, long max, long step)
{
- snd_ctl_elem_info_t *info;
- snd_ctl_elem_value_t *data;
+ snd_ctl_elem_info_t info = {0};
+ snd_ctl_elem_value_t data = {0};
unsigned int i;
unsigned int j;
unsigned int numid;
assert(ctl && id && id->name[0]);
- snd_ctl_elem_info_alloca(&info);
- info->id = *id;
- info->type = SND_CTL_ELEM_TYPE_INTEGER;
- info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_USER;
- info->owner = element_count;
- info->count = member_count;
- info->value.integer.min = min;
- info->value.integer.max = max;
- info->value.integer.step = step;
-
- err = ctl->ops->element_add(ctl, info);
+ info.id = *id;
+ info.type = SND_CTL_ELEM_TYPE_INTEGER;
+ info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_USER;
+ info.owner = element_count;
+ info.count = member_count;
+ info.value.integer.min = min;
+ info.value.integer.max = max;
+ info.value.integer.step = step;
+
+ err = ctl->ops->element_add(ctl, &info);
if (err < 0)
return err;
- numid = snd_ctl_elem_id_get_numid(&info->id);
+ numid = snd_ctl_elem_id_get_numid(&info.id);
/* Set initial value to all of members in all of added elements. */
- snd_ctl_elem_value_alloca(&data);
- data->id = info->id;
+ data.id = info.id;
for (i = 0; i < element_count; i++) {
- snd_ctl_elem_id_set_numid(&data->id, numid + i);
+ snd_ctl_elem_id_set_numid(&data.id, numid + i);
for (j = 0; j < member_count; j++)
- data->value.integer.value[j] = min;
+ data.value.integer.value[j] = min;
- err = ctl->ops->element_write(ctl, data);
+ err = ctl->ops->element_write(ctl, &data);
if (err < 0)
return err;
}
- *id = info->id;
+ *id = info.id;
return 0;
}
unsigned int member_count,
long long min, long long max, long long step)
{
- snd_ctl_elem_info_t *info;
- snd_ctl_elem_value_t *data;
+ snd_ctl_elem_info_t info = {0};
+ snd_ctl_elem_value_t data = {0};
unsigned int i;
unsigned int j;
unsigned int numid;
assert(ctl && id && id->name[0]);
- snd_ctl_elem_info_alloca(&info);
- info->id = *id;
- info->type = SND_CTL_ELEM_TYPE_INTEGER64;
- info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_USER;
- info->owner = element_count;
- info->count = member_count;
- info->value.integer64.min = min;
- info->value.integer64.max = max;
- info->value.integer64.step = step;
-
- err = ctl->ops->element_add(ctl, info);
+ info.id = *id;
+ info.type = SND_CTL_ELEM_TYPE_INTEGER64;
+ info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_USER;
+ info.owner = element_count;
+ info.count = member_count;
+ info.value.integer64.min = min;
+ info.value.integer64.max = max;
+ info.value.integer64.step = step;
+
+ err = ctl->ops->element_add(ctl, &info);
if (err < 0)
return err;
- numid = snd_ctl_elem_id_get_numid(&info->id);
+ numid = snd_ctl_elem_id_get_numid(&info.id);
/* Set initial value to all of members in all of added elements. */
- snd_ctl_elem_value_alloca(&data);
- data->id = info->id;
+ data.id = info.id;
for (i = 0; i < element_count; i++) {
- snd_ctl_elem_id_set_numid(&data->id, numid + i);
+ snd_ctl_elem_id_set_numid(&data.id, numid + i);
for (j = 0; j < member_count; j++)
- data->value.integer64.value[j] = min;
+ data.value.integer64.value[j] = min;
- err = ctl->ops->element_write(ctl, data);
+ err = ctl->ops->element_write(ctl, &data);
if (err < 0)
return err;
}
- *id = info->id;
+ *id = info.id;
return 0;
}
unsigned int element_count,
unsigned int member_count)
{
- snd_ctl_elem_info_t *info;
+ snd_ctl_elem_info_t info = {0};
int err;
assert(ctl && id && id->name[0]);
- snd_ctl_elem_info_alloca(&info);
- info->id = *id;
- info->type = SND_CTL_ELEM_TYPE_BOOLEAN;
- info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_USER;
- info->owner = element_count;
- info->count = member_count;
- info->value.integer.min = 0;
- info->value.integer.max = 1;
-
- err = ctl->ops->element_add(ctl, info);
+ info.id = *id;
+ info.type = SND_CTL_ELEM_TYPE_BOOLEAN;
+ info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_USER;
+ info.owner = element_count;
+ info.count = member_count;
+ info.value.integer.min = 0;
+ info.value.integer.max = 1;
+
+ err = ctl->ops->element_add(ctl, &info);
if (err >= 0)
- *id = info->id;
+ *id = info.id;
return err;
}
unsigned int items,
const char *const labels[])
{
- snd_ctl_elem_info_t *info;
+ snd_ctl_elem_info_t info = {0};
unsigned int i, bytes;
char *buf, *p;
int err;
assert(ctl && id && id->name[0] && labels);
- snd_ctl_elem_info_alloca(&info);
- info->id = *id;
- info->type = SND_CTL_ELEM_TYPE_ENUMERATED;
- info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_USER;
- info->owner = element_count;
- info->count = member_count;
- info->value.enumerated.items = items;
+ info.id = *id;
+ info.type = SND_CTL_ELEM_TYPE_ENUMERATED;
+ info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_USER;
+ info.owner = element_count;
+ info.count = member_count;
+ info.value.enumerated.items = items;
bytes = 0;
for (i = 0; i < items; ++i)
buf = malloc(bytes);
if (buf == NULL)
return -ENOMEM;
- info->value.enumerated.names_ptr = (uintptr_t)buf;
- info->value.enumerated.names_length = bytes;
+ info.value.enumerated.names_ptr = (uintptr_t)buf;
+ info.value.enumerated.names_length = bytes;
p = buf;
for (i = 0; i < items; ++i) {
strcpy(p, labels[i]);
p += strlen(labels[i]) + 1;
}
- err = ctl->ops->element_add(ctl, info);
+ err = ctl->ops->element_add(ctl, &info);
if (err >= 0)
- *id = info->id;
+ *id = info.id;
free(buf);
unsigned int element_count,
unsigned int member_count)
{
- snd_ctl_elem_info_t *info;
+ snd_ctl_elem_info_t info = {0};
int err;
assert(ctl && id && id->name[0]);
- snd_ctl_elem_info_alloca(&info);
- info->id = *id;
- info->type = SND_CTL_ELEM_TYPE_BYTES;
- info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
- SNDRV_CTL_ELEM_ACCESS_USER;
- info->owner = element_count;
- info->count = member_count;
+ info.id = *id;
+ info.type = SND_CTL_ELEM_TYPE_BYTES;
+ info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_USER;
+ info.owner = element_count;
+ info.count = member_count;
- err = ctl->ops->element_add(ctl, info);
+ err = ctl->ops->element_add(ctl, &info);
if (err >= 0)
- *id = info->id;
+ *id = info.id;
return err;
}
unsigned int member_count,
long min, long max, long step)
{
- snd_ctl_elem_id_t *local_id;
+ snd_ctl_elem_id_t local_id = {0};
- snd_ctl_elem_id_alloca(&local_id);
- *local_id = *id;
+ local_id = *id;
- return snd_ctl_elem_add_integer_set(ctl, local_id, 1, member_count,
+ return snd_ctl_elem_add_integer_set(ctl, &local_id, 1, member_count,
min, max, step);
}
unsigned int member_count,
long long min, long long max, long long step)
{
- snd_ctl_elem_id_t *local_id;
+ snd_ctl_elem_id_t local_id = {0};
- snd_ctl_elem_id_alloca(&local_id);
- *local_id = *id;
+ local_id = *id;
- return snd_ctl_elem_add_integer64_set(ctl, local_id, 1, member_count,
+ return snd_ctl_elem_add_integer64_set(ctl, &local_id, 1, member_count,
min, max, step);
}
int snd_ctl_elem_add_boolean(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
unsigned int member_count)
{
- snd_ctl_elem_id_t *local_id;
+ snd_ctl_elem_id_t local_id = {0};
- snd_ctl_elem_id_alloca(&local_id);
- *local_id = *id;
+ local_id = *id;
- return snd_ctl_elem_add_boolean_set(ctl, local_id, 1, member_count);
+ return snd_ctl_elem_add_boolean_set(ctl, &local_id, 1, member_count);
}
/**
unsigned int member_count, unsigned int items,
const char *const labels[])
{
- snd_ctl_elem_id_t *local_id;
+ snd_ctl_elem_id_t local_id = {0};
- snd_ctl_elem_id_alloca(&local_id);
- *local_id = *id;
+ local_id = *id;
- return snd_ctl_elem_add_enumerated_set(ctl, local_id, 1, member_count,
+ return snd_ctl_elem_add_enumerated_set(ctl, &local_id, 1, member_count,
items, labels);
}
*/
int snd_ctl_elem_add_iec958(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id)
{
- snd_ctl_elem_info_t *info;
+ snd_ctl_elem_info_t info = {0};
assert(ctl && id && id->name[0]);
- snd_ctl_elem_info_alloca(&info);
- info->id = *id;
- info->type = SND_CTL_ELEM_TYPE_IEC958;
- info->owner = 1;
- info->count = 1;
- return ctl->ops->element_add(ctl, info);
+
+ info.id = *id;
+ info.type = SND_CTL_ELEM_TYPE_IEC958;
+ info.owner = 1;
+ info.count = 1;
+ return ctl->ops->element_add(ctl, &info);
}
/**
#ifdef BUILD_HWDEP
case SND_CTL_ELEM_IFACE_HWDEP:
{
- snd_hwdep_info_t *info;
- snd_hwdep_info_alloca(&info);
- snd_hwdep_info_set_device(info, device);
- if (snd_ctl_hwdep_info(list->ctl, info) < 0)
+ snd_hwdep_info_t info = {0};
+ snd_hwdep_info_set_device(&info, device);
+ if (snd_ctl_hwdep_info(list->ctl, &info) < 0)
return 0;
- *res = strdup(snd_hwdep_info_get_name(info));
+ *res = strdup(snd_hwdep_info_get_name(&info));
return 0;
}
#endif
#ifdef BUILD_PCM
case SND_CTL_ELEM_IFACE_PCM:
{
- snd_pcm_info_t *info;
- snd_pcm_info_alloca(&info);
- snd_pcm_info_set_device(info, device);
- snd_pcm_info_set_stream(info, stream ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK);
- if (snd_ctl_pcm_info(list->ctl, info) < 0)
+ snd_pcm_info_t info = {0};
+ snd_pcm_info_set_device(&info, device);
+ snd_pcm_info_set_stream(&info, stream ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK);
+ if (snd_ctl_pcm_info(list->ctl, &info) < 0)
return 0;
- switch (snd_pcm_info_get_class(info)) {
+ switch (snd_pcm_info_get_class(&info)) {
case SND_PCM_CLASS_MODEM:
case SND_PCM_CLASS_DIGITIZER:
return -ENODEV;
default:
break;
}
- *res = strdup(snd_pcm_info_get_name(info));
+ *res = strdup(snd_pcm_info_get_name(&info));
return 0;
}
#endif
#ifdef BUILD_RAWMIDI
case SND_CTL_ELEM_IFACE_RAWMIDI:
{
- snd_rawmidi_info_t *info;
- snd_rawmidi_info_alloca(&info);
- snd_rawmidi_info_set_device(info, device);
- snd_rawmidi_info_set_stream(info, stream ? SND_RAWMIDI_STREAM_INPUT : SND_RAWMIDI_STREAM_OUTPUT);
- if (snd_ctl_rawmidi_info(list->ctl, info) < 0)
+ snd_rawmidi_info_t info = {0};
+ snd_rawmidi_info_set_device(&info, device);
+ snd_rawmidi_info_set_stream(&info, stream ? SND_RAWMIDI_STREAM_INPUT : SND_RAWMIDI_STREAM_OUTPUT);
+ if (snd_ctl_rawmidi_info(list->ctl, &info) < 0)
return 0;
- *res = strdup(snd_rawmidi_info_get_name(info));
+ *res = strdup(snd_rawmidi_info_get_name(&info));
return 0;
}
#endif
snd_config_iterator_t i, next;
const char *str;
char ctl_name[16];
- snd_ctl_card_info_t *info;
+ snd_ctl_card_info_t info = {0};
int device, max_device = 0;
- snd_ctl_card_info_alloca(&info);
- list->info = info;
+ list->info = &info;
err = snd_config_search(config, list->siface, &conf);
if (err < 0)
return err;
err = snd_ctl_open(&list->ctl, ctl_name, 0);
if (err < 0)
return err;
- err = snd_ctl_card_info(list->ctl, info);
+ err = snd_ctl_card_info(list->ctl, &info);
if (err < 0)
goto __error;
snd_config_for_each(i, next, conf) {