-/* -*- mode: C; c-file-style: "gnu" -*- */
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* dbus-marshal-byteswap.c Swap a block of marshaled data
*
* Copyright (C) 2005 Red Hat, Inc.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
+#include <config.h>
#include "dbus-marshal-byteswap.h"
#include "dbus-marshal-basic.h"
+#include "dbus-signature.h"
/**
* @addtogroup DBusMarshal
p = _DBUS_ALIGN_ADDRESS (p, 4);
array_len = _dbus_unpack_uint32 (old_byte_order, p);
-
+
*((dbus_uint32_t*)p) = DBUS_UINT32_SWAP_LE_BE (*((dbus_uint32_t*)p));
p += 4;
elem_type = _dbus_type_reader_get_element_type (reader);
alignment = _dbus_type_get_alignment (elem_type);
+ _dbus_assert ((array_len / alignment) < DBUS_MAXIMUM_ARRAY_LENGTH);
+
p = _DBUS_ALIGN_ADDRESS (p, alignment);
- if (_dbus_type_is_fixed (elem_type))
+ if (dbus_type_is_fixed (elem_type))
{
if (alignment > 1)
- _dbus_swap_array (p, array_len / alignment, alignment);
+ _dbus_swap_array (p, array_len / alignment, alignment);
+ p += array_len;
}
else
{
}
break;
+ case DBUS_TYPE_UNIX_FD:
+ /* fds can only be passed on a local machine, so byte order must always match */
+ _dbus_assert_not_reached("attempted to byteswap unix fds which makes no sense");
+ break;
+
default:
_dbus_assert_not_reached ("invalid typecode in supposedly-validated signature");
break;