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
mixer-retval-fix.dif
Description: Binary data