27#include "dbus-marshal-byteswap.h"
28#include "dbus-marshal-basic.h"
29#include "dbus-signature.h"
38 dbus_bool_t walk_reader_to_end,
42 unsigned char **new_p)
57 p = _DBUS_ALIGN_ADDRESS (p, 2);
58 *((dbus_uint16_t *) (
void *) p) =
59 DBUS_UINT16_SWAP_LE_BE (*((dbus_uint16_t *) (
void *) p));
69 p = _DBUS_ALIGN_ADDRESS (p, 4);
70 *((dbus_uint32_t *) (
void *) p) =
71 DBUS_UINT32_SWAP_LE_BE (*((dbus_uint32_t *) (
void *) p));
80 p = _DBUS_ALIGN_ADDRESS (p, 8);
81 *((dbus_uint64_t *) (
void *) p) =
82 DBUS_UINT64_SWAP_LE_BE (*((dbus_uint64_t *) (
void *) p));
91 dbus_uint32_t array_len;
93 p = _DBUS_ALIGN_ADDRESS (p, 4);
97 *((dbus_uint32_t *) (
void *) p) =
98 DBUS_UINT32_SWAP_LE_BE (*((dbus_uint32_t *) (
void *) p));
111 p = _DBUS_ALIGN_ADDRESS (p, alignment);
122 const unsigned char *array_end;
124 array_end = p + array_len;
128 while (p < array_end)
130 byteswap_body_helper (&sub,
143 p += (array_len + 1);
150 dbus_uint32_t sig_len;
163 dbus_uint32_t sig_len;
166 int contained_alignment;
177 p = _DBUS_ALIGN_ADDRESS (p, contained_alignment);
181 byteswap_body_helper (&sub,
FALSE, old_byte_order, new_byte_order, p, &p);
190 p = _DBUS_ALIGN_ADDRESS (p, 8);
194 byteswap_body_helper (&sub,
TRUE, old_byte_order, new_byte_order, p, &p);
203 if (walk_reader_to_end)
236 if (old_byte_order == new_byte_order)
240 signature, signature_start);
242 byteswap_body_helper (&reader,
TRUE,
243 old_byte_order, new_byte_order,
244 _dbus_string_get_udata_len (value_str, value_pos, 0),
#define _dbus_assert_not_reached(explanation)
Aborts with an error message if called.
#define _dbus_assert(condition)
Aborts with an error message if the condition is false.
#define NULL
A null pointer, defined appropriately for C or C++.
#define TRUE
Expands to "1".
#define FALSE
Expands to "0".
void _dbus_type_reader_recurse(DBusTypeReader *reader, DBusTypeReader *sub)
Initialize a new reader pointing to the first type and corresponding value that's a child of the curr...
int _dbus_type_get_alignment(int typecode)
Gets the alignment requirement for the given type; will be 1, 2, 4, or 8.
void _dbus_type_reader_init_types_only(DBusTypeReader *reader, const DBusString *type_str, int type_pos)
Like _dbus_type_reader_init() but the iteration is over the signature, not over values.
dbus_uint32_t _dbus_unpack_uint32(int byte_order, const unsigned char *data)
Unpacks a 32 bit unsigned integer from a data pointer.
int _dbus_first_type_in_signature(const DBusString *str, int pos)
Get the first type in the signature.
void _dbus_marshal_byteswap(const DBusString *signature, int signature_start, int old_byte_order, int new_byte_order, DBusString *value_str, int value_pos)
Byteswaps the marshaled data in the given value_str.
int _dbus_type_reader_get_element_type(const DBusTypeReader *reader)
Gets the type of an element of the array the reader is currently pointing to.
dbus_bool_t _dbus_type_reader_next(DBusTypeReader *reader)
Skip to the next value on this "level".
int _dbus_type_reader_get_current_type(const DBusTypeReader *reader)
Gets the type of the value the reader is currently pointing to; or for a types-only reader gets the t...
void _dbus_swap_array(unsigned char *data, int n_elements, int alignment)
Swaps the elements of an array to the opposite byte order.
#define DBUS_TYPE_SIGNATURE
Type code marking a D-Bus type signature.
#define DBUS_TYPE_OBJECT_PATH
Type code marking a D-Bus object path.
#define DBUS_TYPE_BYTE
Type code marking an 8-bit unsigned integer.
#define DBUS_TYPE_INT16
Type code marking a 16-bit signed integer.
#define DBUS_TYPE_VARIANT
Type code marking a D-Bus variant type.
#define DBUS_MAXIMUM_ARRAY_LENGTH
Max length of a marshaled array in bytes (64M, 2^26) We use signed int for lengths so must be INT_MAX...
#define DBUS_TYPE_INT32
Type code marking a 32-bit signed integer.
#define DBUS_TYPE_UNIX_FD
Type code marking a unix file descriptor.
#define DBUS_TYPE_BOOLEAN
Type code marking a boolean.
#define DBUS_TYPE_STRING
Type code marking a UTF-8 encoded, nul-terminated Unicode string.
#define DBUS_TYPE_ARRAY
Type code marking a D-Bus array type.
#define DBUS_TYPE_INVALID
Type code that is never equal to a legitimate type code.
#define DBUS_TYPE_INT64
Type code marking a 64-bit signed integer.
#define DBUS_TYPE_DOUBLE
Type code marking an 8-byte double in IEEE 754 format.
#define DBUS_TYPE_UINT64
Type code marking a 64-bit unsigned integer.
#define DBUS_TYPE_DICT_ENTRY
Type code used to represent a dict entry; however, this type code does not appear in type signatures,...
#define DBUS_TYPE_UINT16
Type code marking a 16-bit unsigned integer.
#define DBUS_TYPE_STRUCT
STRUCT and DICT_ENTRY are sort of special since their codes can't appear in a type string,...
#define DBUS_TYPE_UINT32
Type code marking a 32-bit unsigned integer.
dbus_bool_t dbus_type_is_fixed(int typecode)
Tells you whether values of this type can change length if you set them to some other value.
void _dbus_string_init_const_len(DBusString *str, const char *value, int len)
Initializes a constant string with a length.
int _dbus_string_get_length(const DBusString *str)
Gets the length of a string (not including nul termination).
The type reader is an iterator for reading values from a block of values.