]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: fix wrong operation for values in enumerated type of element
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 12 Jan 2020 04:33:14 +0000 (13:33 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Sun, 12 Jan 2020 09:31:07 +0000 (18:31 +0900)
The 'snd_ctl_elem_value' structure includes union member for values.
Although it includes 'enumerated' member for values in enumerated type
of element, current implementation of alsactl library uses 'integer'
member to pick up the values. As a result, in any 64 bit System V ABI,
the library fails to get/set values for the enumerated type of
element. This commit fixes the bug.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/ctl/elem-value.c

index 2a36d4a79893b0056ddcea3c4ff68e330ddf3932..d0702600a7b18d78b868cc84ee556bb7da10f80f 100644 (file)
@@ -190,9 +190,9 @@ void alsactl_elem_value_set_enum(ALSACtlElemValue *self,
     priv = alsactl_elem_value_get_instance_private(self);
     value = &priv->value;
 
-    value_count = MIN(value_count, G_N_ELEMENTS(value->value.integer.value));
+    value_count = MIN(value_count, G_N_ELEMENTS(value->value.enumerated.item));
     for (i = 0; i < value_count; ++i)
-        value->value.integer.value[i] = (long)values[i];
+        value->value.enumerated.item[i] = (unsigned int)values[i];
 }
 
 /**
@@ -215,9 +215,9 @@ void alsactl_elem_value_get_enum(ALSACtlElemValue *self,
     priv = alsactl_elem_value_get_instance_private(self);
     value = &priv->value;
 
-    *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.integer.value));
+    *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.enumerated.item));
     for (i = 0; i < *value_count; ++i)
-        (*values)[i] = (guint32)value->value.integer.value[i];
+        (*values)[i] = (guint32)value->value.enumerated.item[i];
 }
 
 /**