case SND_CTL_EVENT_INFO:
{
int err = 0;
- bag_iterator_t i, n;
- bag_for_each(i, n, bag) {
+ bag_iterator_t i;
+ bag_for_each(i, bag) {
snd_mixer_elem_t *melem = bag_iterator_entry(i);
snd_mixer_class_t *class = melem->class;
err = class->event(class, event, helem, melem);
{
int err;
bag_iterator_t i, n;
- bag_for_each(i, n, bag) {
+ bag_for_each_safe(i, n, bag) {
snd_mixer_elem_t *melem = bag_iterator_entry(i);
snd_mixer_class_t *class = melem->class;
err = class->event(class, event, helem, melem);
switch (event) {
case SND_CTL_EVENT_ADD:
{
- struct list_head *pos, *next;
+ struct list_head *pos;
bag_t *bag;
int err = bag_new(&bag);
if (err < 0)
return err;
snd_hctl_elem_set_callback(elem, hctl_elem_event_handler);
snd_hctl_elem_set_callback_private(elem, bag);
- list_for_each(pos, next, &mixer->classes) {
+ list_for_each(pos, &mixer->classes) {
snd_mixer_class_t *c;
c = list_entry(pos, snd_mixer_class_t, list);
err = c->event(c, event, elem, NULL);
int snd_mixer_detach(snd_mixer_t *mixer, const char *name)
{
- struct list_head *pos, *next;
- list_for_each(pos, next, &mixer->slaves) {
+ struct list_head *pos;
+ list_for_each(pos, &mixer->slaves) {
snd_mixer_slave_t *s;
s = list_entry(pos, snd_mixer_slave_t, list);
if (strcmp(name, snd_hctl_name(s->hctl)) == 0) {
idx = _snd_mixer_find_elem(mixer, elem, &dir);
if (dir != 0)
return -EINVAL;
- __again:
- bag_for_each(i, n, &elem->helems) {
+ bag_for_each_safe(i, n, &elem->helems) {
snd_hctl_elem_t *helem = bag_iterator_entry(i);
snd_mixer_elem_detach(elem, helem);
- goto __again; /* FIXME: optimize */
}
err = snd_mixer_elem_throw_event(elem, SND_CTL_EVENT_REMOVE);
list_del(&elem->list);
int snd_mixer_class_register(snd_mixer_class_t *class, snd_mixer_t *mixer)
{
- struct list_head *pos, *next;
+ struct list_head *pos;
class->mixer = mixer;
list_add_tail(&class->list, &mixer->classes);
if (!class->event)
return 0;
- list_for_each(pos, next, &mixer->slaves) {
+ list_for_each(pos, &mixer->slaves) {
int err;
snd_mixer_slave_t *slave;
snd_hctl_elem_t *elem;
int snd_mixer_load(snd_mixer_t *mixer)
{
- struct list_head *pos, *next;
- list_for_each(pos, next, &mixer->slaves) {
+ struct list_head *pos;
+ list_for_each(pos, &mixer->slaves) {
int err;
snd_mixer_slave_t *s;
s = list_entry(pos, snd_mixer_slave_t, list);
void snd_mixer_free(snd_mixer_t *mixer)
{
- struct list_head *pos, *next;
- list_for_each(pos, next, &mixer->slaves) {
+ struct list_head *pos;
+ list_for_each(pos, &mixer->slaves) {
snd_mixer_slave_t *s;
s = list_entry(pos, snd_mixer_slave_t, list);
snd_hctl_free(s->hctl);
int snd_mixer_poll_descriptors(snd_mixer_t *mixer, struct pollfd *pfds, unsigned int space)
{
- struct list_head *pos, *next;
+ struct list_head *pos;
unsigned int count = 0;
assert(mixer);
- list_for_each(pos, next, &mixer->slaves) {
+ list_for_each(pos, &mixer->slaves) {
snd_mixer_slave_t *s;
int n;
s = list_entry(pos, snd_mixer_slave_t, list);
int snd_mixer_handle_events(snd_mixer_t *mixer)
{
- struct list_head *pos, *next;
+ struct list_head *pos;
assert(mixer);
mixer->events = 0;
- list_for_each(pos, next, &mixer->slaves) {
+ list_for_each(pos, &mixer->slaves) {
int err;
snd_mixer_slave_t *s;
s = list_entry(pos, snd_mixer_slave_t, list);