summaryrefslogtreecommitdiff
path: root/src/control/tlv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/control/tlv.c')
-rw-r--r--src/control/tlv.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/control/tlv.c b/src/control/tlv.c
index cfd9b973..0ff052ee 100644
--- a/src/control/tlv.c
+++ b/src/control/tlv.c
@@ -140,10 +140,13 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax,
pos = 2;
while (pos + 4 <= len) {
long rmin, rmax;
- rangemin = (int)tlv[pos];
- rangemax = (int)tlv[pos + 1];
+ long submin, submax;
+ submin = (int)tlv[pos];
+ submax = (int)tlv[pos + 1];
+ if (rangemax < submax)
+ submax = rangemax;
err = snd_tlv_get_dB_range(tlv + pos + 2,
- rangemin, rangemax,
+ submin, submax,
&rmin, &rmax);
if (err < 0)
return err;
@@ -156,6 +159,8 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax,
*min = rmin;
*max = rmax;
}
+ if (rangemax == submax)
+ return 0;
pos += int_index(tlv[pos + 3]) + 4;
}
return 0;