From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: Bug in alsa-lib (Was: alsa-lib: Error code 1 from snd_mixer_selem_set_capture_switch_all() ) Date: Wed, 19 Nov 2003 16:38:10 +0100 Sender: alsa-devel-admin@lists.sourceforge.net Message-ID: References: <200311121303.42282.c.esken@cityweb.de> <200311151124.10473.c.esken@cityweb.de> Mime-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: multipart/mixed; boundary="Multipart_Wed_Nov_19_16:38:10_2003-1" Return-path: In-Reply-To: <200311151124.10473.c.esken@cityweb.de> Errors-To: alsa-devel-admin@lists.sourceforge.net List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: To: Christian Esken Cc: alsa-devel@lists.sourceforge.net List-Id: alsa-devel@alsa-project.org --Multipart_Wed_Nov_19_16:38:10_2003-1 Content-Type: text/plain; charset=US-ASCII 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 --Multipart_Wed_Nov_19_16:38:10_2003-1 Content-Type: application/octet-stream Content-Disposition: attachment; filename="mixer-retval-fix.dif" Content-Transfer-Encoding: 7bit Index: alsa-lib/src/mixer/simple.c =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-lib/src/mixer/simple.c,v retrieving revision 1.40 diff -u -r1.40 simple.c --- alsa-lib/src/mixer/simple.c 16 Sep 2002 15:50:21 -0000 1.40 +++ alsa-lib/src/mixer/simple.c 19 Nov 2003 15:30:57 -0000 @@ -597,7 +597,9 @@ if ((err = snd_hctl_elem_write(c->elem, &ctl)) < 0) return err; /* update the element, don't remove */ - return selem_read(elem); + err = selem_read(elem); + if (err < 0) + return err; } return 0; } --Multipart_Wed_Nov_19_16:38:10_2003-1-- ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/