GDBus: Big-endian fixes
authorDavid Zeuthen <davidz@redhat.com>
Tue, 25 May 2010 15:59:57 +0000 (11:59 -0400)
committerDavid Zeuthen <davidz@redhat.com>
Tue, 25 May 2010 16:03:27 +0000 (12:03 -0400)
Tested this on my Powerbook G4 12", 867MHz PowerPC G4 running Fedora
11ish.

Signed-off-by: David Zeuthen <davidz@redhat.com>
gio/gdbusmessage.c
gio/tests/gdbus-threading.c

index eabe171..eb93c99 100644 (file)
@@ -1195,8 +1195,12 @@ g_dbus_message_bytes_needed (guchar                *blob,
     }
   else if (blob[0] == 'B')
     {
-      /* TODO */
-      g_assert_not_reached ();
+      /* core header (12 bytes) + ARRAY of STRUCT of (BYTE,VARIANT) */
+      ret = 12 + 4 + GUINT32_FROM_BE (((guint32 *) blob)[3]);
+      /* round up so it's a multiple of 8 */
+      ret = 8 * ((ret + 7)/8);
+      /* finally add the body size */
+      ret += GUINT32_FROM_BE (((guint32 *) blob)[1]);
     }
   else
     {
index 6a4e82c..24e0704 100644 (file)
@@ -445,7 +445,7 @@ on_proxy_appeared (GDBusConnection *connection,
 
       /* elapsed_msec should be 4000 msec +/- change for overhead/inaccuracy */
       g_assert_cmpint (elapsed_msec, >=, 3950);
-      g_assert_cmpint (elapsed_msec,  <, 5000);
+      g_assert_cmpint (elapsed_msec,  <, 6000);
 
       g_print (" ");
     }