Blob Blame History Raw
From cde19e1cf575d33f7cd34bc0b6a4daea5d91cdc5 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 16 Sep 2015 18:01:04 +0200
Subject: [PATCH] ffi: Marshal flags like enums

Flags are enums.
Fixes broken marshalling on BE 64bit architectures.

https://bugzilla.gnome.org/show_bug.cgi?id=754882
---
 gobject/gclosure.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gobject/gclosure.c b/gobject/gclosure.c
index 014e40a..3c6894a 100644
--- a/gobject/gclosure.c
+++ b/gobject/gclosure.c
@@ -1186,9 +1186,15 @@ value_to_ffi_type (const GValue *gvalue,
       *value = enum_tmpval;
       *tmpval_used = TRUE;
       break;
+    case G_TYPE_FLAGS:
+      g_assert (enum_tmpval != NULL);
+      rettype = &ffi_type_uint;
+      *enum_tmpval = g_value_get_flags (gvalue);
+      *value = enum_tmpval;
+      *tmpval_used = TRUE;
+      break;
     case G_TYPE_UCHAR:
     case G_TYPE_UINT:
-    case G_TYPE_FLAGS:
       rettype = &ffi_type_uint;
       *value = (gpointer)&(gvalue->data[0].v_uint);
       break;
-- 
2.4.3