OSDN Git Service

alsa-utils: amixer: Fix SND_CTL_TLVT_DB_RANGE handling
authorLars-Peter Clausen <lars@metafoo.de>
Thu, 16 Jun 2011 12:19:18 +0000 (14:19 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 16 Jun 2011 12:57:27 +0000 (14:57 +0200)
Current support for handling SND_CTL_TLVT_DB_RANGE in amixer is completely
broken. This patch fixes it.

Reported-by: Daniel Mack <zonque@gmail.com>
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
amixer/amixer.c

index a177288..9d2855d 100644 (file)
@@ -517,20 +517,20 @@ static void decode_tlv(unsigned int spaces, unsigned int *tlv, unsigned int tlv_
 #ifdef SND_CTL_TLVT_DB_RANGE
        case SND_CTL_TLVT_DB_RANGE:
                printf("dBrange-\n");
-               if ((size / (6 * sizeof(unsigned int))) != 0) {
+               if ((size % (6 * sizeof(unsigned int))) != 0) {
                        while (size > 0) {
                                printf("0x%08x,", tlv[idx++]);
                                size -= sizeof(unsigned int);
                        }
                        break;
                }
-               idx = 0;
-               while (idx < size) {
+               while (size > 0) {
                        print_spaces(spaces + 2);
-                       printf("rangemin=%i,", tlv[0]);
-                       printf(",rangemax=%i\n", tlv[1]);
-                       decode_tlv(spaces + 4, tlv + 2, 6 * sizeof(unsigned int));
-                       idx += 6 * sizeof(unsigned int);
+                       printf("rangemin=%i,", tlv[idx++]);
+                       printf(",rangemax=%i\n", tlv[idx++]);
+                       decode_tlv(spaces + 4, tlv + idx, 4 * sizeof(unsigned int));
+                       idx += 4;
+                       size -= 6 * sizeof(unsigned int);
                }
                break;
 #endif