summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-marshal.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-marshal.c')
-rw-r--r--dbus/dbus-marshal.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/dbus/dbus-marshal.c b/dbus/dbus-marshal.c
index e29143ea..b199561b 100644
--- a/dbus/dbus-marshal.c
+++ b/dbus/dbus-marshal.c
@@ -23,6 +23,8 @@
#include "dbus-marshal.h"
#include "dbus-internals.h"
+#define DBUS_CAN_USE_DBUS_STRING_PRIVATE 1
+#include "dbus-string-private.h"
#include <string.h>
@@ -538,20 +540,21 @@ _dbus_demarshal_double (const DBusString *str,
*/
dbus_int32_t
_dbus_demarshal_int32 (const DBusString *str,
- int byte_order,
- int pos,
- int *new_pos)
+ int byte_order,
+ int pos,
+ int *new_pos)
{
- const char *buffer;
-
+ const DBusRealString *real = (const DBusRealString*) str;
+
pos = _DBUS_ALIGN_VALUE (pos, sizeof (dbus_int32_t));
- _dbus_string_get_const_data_len (str, &buffer, pos, sizeof (dbus_int32_t));
-
if (new_pos)
*new_pos = pos + sizeof (dbus_int32_t);
- return _dbus_unpack_int32 (byte_order, buffer);
+ if (byte_order == DBUS_LITTLE_ENDIAN)
+ return DBUS_INT32_FROM_LE (*(dbus_int32_t*)(real->str + pos));
+ else
+ return DBUS_INT32_FROM_BE (*(dbus_int32_t*)(real->str + pos));
}
/**
@@ -569,16 +572,17 @@ _dbus_demarshal_uint32 (const DBusString *str,
int pos,
int *new_pos)
{
- const char *buffer;
-
+ const DBusRealString *real = (const DBusRealString*) str;
+
pos = _DBUS_ALIGN_VALUE (pos, sizeof (dbus_uint32_t));
- _dbus_string_get_const_data_len (str, &buffer, pos, sizeof (dbus_uint32_t));
-
if (new_pos)
*new_pos = pos + sizeof (dbus_uint32_t);
- return _dbus_unpack_uint32 (byte_order, buffer);
+ if (byte_order == DBUS_LITTLE_ENDIAN)
+ return DBUS_UINT32_FROM_LE (*(dbus_uint32_t*)(real->str + pos));
+ else
+ return DBUS_UINT32_FROM_BE (*(dbus_uint32_t*)(real->str + pos));
}
/**