GVariant: support comparing booleans
authorRyan Lortie <desrt@desrt.ca>
Fri, 6 Jul 2012 21:27:54 +0000 (17:27 -0400)
committerRyan Lortie <desrt@desrt.ca>
Fri, 6 Jul 2012 21:29:30 +0000 (17:29 -0400)
g_variant_compare() is documented as working on booleans but somehow
this case was missed.  Add it and test it.

Problem discovered by Charles Kerr.

glib/gvariant.c
glib/tests/gvariant.c

index 6ff7714..5f2337c 100644 (file)
@@ -2748,6 +2748,10 @@ g_variant_compare (gconstpointer one,
 
   switch (g_variant_classify (a))
     {
+    case G_VARIANT_CLASS_BOOLEAN:
+      return g_variant_get_boolean (a) -
+             g_variant_get_boolean (b);
+
     case G_VARIANT_CLASS_BYTE:
       return ((gint) g_variant_get_byte (a)) -
              ((gint) g_variant_get_byte (b));
index 7f7d56c..d3d8aa2 100644 (file)
@@ -4079,6 +4079,11 @@ test_compare (void)
   g_assert (g_variant_compare (a, b) < 0);
   g_variant_unref (a);
   g_variant_unref (b);
+  a = g_variant_new_boolean (FALSE);
+  b = g_variant_new_boolean (TRUE);
+  g_assert (g_variant_compare (a, b) < 0);
+  g_variant_unref (a);
+  g_variant_unref (b);
 }
 
 static void