At Mon, 19 Jul 2010 10:14:04 +0300, Peter Ujfalusi wrote: > > When converting from dB value to raw value, the control's > full range was not checked in case of SND_CTL_TLVT_DB_RANGE. > > Check out of range dB values, and return apropriate raw > value for the caller. > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@xxxxxxxxx> > --- > src/control/tlv.c | 9 ++++++++- > 1 files changed, 8 insertions(+), 1 deletions(-) > > diff --git a/src/control/tlv.c b/src/control/tlv.c > index 0ff052e..d09766a 100644 > --- a/src/control/tlv.c > +++ b/src/control/tlv.c > @@ -285,13 +285,20 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, > { > switch (tlv[0]) { > case SND_CTL_TLVT_DB_RANGE: { > + long dbmin, dbmax; > unsigned int pos, len; > len = int_index(tlv[1]); > if (len > MAX_TLV_RANGE_SIZE) > return -EINVAL; > + if (snd_tlv_get_dB_range(tlv, rangemin, rangemax, > + &dbmin, &dbmax)) > + return -EINVAL; > + if (db_gain <= dbmin || db_gain >= dbmax) { > + *value = db_gain <= dbmin ? rangemin : rangemax; > + return 0; > + } The check looks good, but IMO, just plain two if's are more intuitive: if (db_gain <= dbmin) { *value = rangemin; return 0; } else if (db_gain >= dbmax) { *value = rangemax; return 0; } thanks, Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel