At Sat, 15 Nov 2003 11:24:10 +0100,
Christian Esken wrote:
> 
> On Wednesday 12 November 2003 13:03, Christian Esken wrote:
> > Hello,
> >
> > I have a problem with snd_mixer_selem_set_capture_switch_all() from
> > alsa-lib. The documentation states:
> >
> > /**
> >  * \brief Set value of capture switch control for all channels of a mixer
> > simple element
> >  * \param elem Mixer simple element handle
> >  * \param value control value
> >  * \return 0 on success otherwise a negative error code
> >  */
> > int snd_mixer_selem_set_capture_switch_all(snd_mixer_elem_t *elem, int
> > value)
> >
> > So I should receive either 0 or a negative value. But I receive a return
> > value of 1. Does anybody know what this means?!? Any help is appreciated
> > greatly.
> 
> I have investigated and found a possible bug in alsa-lib.
> The documentation of snd_mixer_selem_set_capture_switch_all() only mentions 
> return codes 0 and <0. As I said 1 is returned in my case - I now found a 
> place where this could happen in the alsa-lib source code. The code is from 
> src/mixer/simple.c , revision .59.

yes, you're right.  it's a bug.


> snd_mixer_selem_set_capture_switch_all() calls selem_write, which calls 
> selem_read(). At the end of selem_read(), you find the following code 
> snippet:
> 
> 
>         if (memcmp(pvol, s->str[PLAY].vol, sizeof(pvol)) ||
>             psw != s->str[PLAY].sw ||
>             memcmp(cvol, s->str[CAPT].vol, sizeof(cvol)) ||
>             csw != s->str[CAPT].sw)
>                 return 1;
> 
> 
> This is where 1 is returned. But I do not understand the code. Can anybody 
> explain to me. It looks a bit like I am passing "bad" parameters, but then I 
> would expect to be returned an error code like EINVAL.

the return value of selem_read() is evaluated to throw the event after
read internally (i.e. if positive value is returned).

the attached patch should fix the positive return-value problem.
i change this on cvs.


thanks,

Takashi

Attachment: mixer-retval-fix.dif
Description: Binary data

Reply via email to