diff options
Diffstat (limited to 'src/control/tlv.c')
-rw-r--r-- | src/control/tlv.c | 11 |
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; |