mirror of
https://github.com/glfw/glfw.git
synced 2025-10-01 04:10:59 +00:00
Fix crash on big-endian systems when calling _glfwAppendDictDataDBusPOSIX()
See https://github.com/libsdl-org/SDL/pull/14029 for reference
This commit is contained in:
parent
7d23b3c6c1
commit
d915058373
@ -35,6 +35,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
void _glfwInitDBusPOSIX(void)
|
void _glfwInitDBusPOSIX(void)
|
||||||
{
|
{
|
||||||
@ -436,7 +437,9 @@ dbus_bool_t _glfwAppendDictDataDBusPOSIX(struct DBusMessageIter* iterator, int k
|
|||||||
if(!_glfwAppendDataDBusPOSIX(&keyIterator, keyType, keyData))
|
if(!_glfwAppendDataDBusPOSIX(&keyIterator, keyType, keyData))
|
||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
|
|
||||||
if(!_glfwOpenContainerDBusPOSIX(&keyIterator, DBUS_TYPE_VARIANT, (const char*)&valueType, &valueIterator))
|
char* valueTypeStr = _glfwDBusTypeToStrPOSIX(valueType);
|
||||||
|
assert(valueTypeStr != NULL);
|
||||||
|
if(!_glfwOpenContainerDBusPOSIX(&keyIterator, DBUS_TYPE_VARIANT, valueTypeStr, &valueIterator))
|
||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
|
|
||||||
//Append value data
|
//Append value data
|
||||||
@ -470,4 +473,47 @@ dbus_bool_t _glfwSendMessageDBusPOSIX(struct DBusMessage* message)
|
|||||||
dbus_connection_flush(_glfw.dbus.connection);
|
dbus_connection_flush(_glfw.dbus.connection);
|
||||||
|
|
||||||
return GLFW_TRUE;
|
return GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* _glfwDBusTypeToStrPOSIX(int valueType)
|
||||||
|
{
|
||||||
|
switch (valueType)
|
||||||
|
{
|
||||||
|
case DBUS_TYPE_STRING:
|
||||||
|
return DBUS_TYPE_STRING_AS_STRING;
|
||||||
|
case DBUS_TYPE_ARRAY:
|
||||||
|
return DBUS_TYPE_ARRAY_AS_STRING;
|
||||||
|
case DBUS_TYPE_DICT_ENTRY:
|
||||||
|
return DBUS_TYPE_DICT_ENTRY_AS_STRING;
|
||||||
|
case DBUS_TYPE_VARIANT:
|
||||||
|
return DBUS_TYPE_VARIANT_AS_STRING;
|
||||||
|
case DBUS_TYPE_BOOLEAN:
|
||||||
|
return DBUS_TYPE_BOOLEAN_AS_STRING;
|
||||||
|
case DBUS_TYPE_DOUBLE:
|
||||||
|
return DBUS_TYPE_DOUBLE_AS_STRING;
|
||||||
|
case DBUS_TYPE_INT16:
|
||||||
|
return DBUS_TYPE_INT16_AS_STRING;
|
||||||
|
case DBUS_TYPE_UINT16:
|
||||||
|
return DBUS_TYPE_UINT16_AS_STRING;
|
||||||
|
case DBUS_TYPE_INT32:
|
||||||
|
return DBUS_TYPE_INT32_AS_STRING;
|
||||||
|
case DBUS_TYPE_UINT32:
|
||||||
|
return DBUS_TYPE_UINT32_AS_STRING;
|
||||||
|
case DBUS_TYPE_INT64:
|
||||||
|
return DBUS_TYPE_INT64_AS_STRING;
|
||||||
|
case DBUS_TYPE_UINT64:
|
||||||
|
return DBUS_TYPE_UINT64_AS_STRING;
|
||||||
|
case DBUS_TYPE_STRUCT_OPEN:
|
||||||
|
return DBUS_TYPE_STRUCT_OPEN_AS_STRING;
|
||||||
|
case DBUS_TYPE_STRUCT_CLOSE:
|
||||||
|
return DBUS_TYPE_STRUCT_CLOSE_AS_STRING;
|
||||||
|
case DBUS_TYPE_BYTE:
|
||||||
|
return DBUS_TYPE_BYTE_AS_STRING;
|
||||||
|
case DBUS_TYPE_OBJECT_PATH:
|
||||||
|
return DBUS_TYPE_OBJECT_PATH_AS_STRING;
|
||||||
|
case DBUS_TYPE_SIGNATURE:
|
||||||
|
return DBUS_TYPE_SIGNATURE_AS_STRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
@ -80,6 +80,24 @@ struct DBusMessageIter
|
|||||||
#define DBUS_TYPE_OBJECT_PATH (unsigned int)'o'
|
#define DBUS_TYPE_OBJECT_PATH (unsigned int)'o'
|
||||||
#define DBUS_TYPE_SIGNATURE (unsigned int)'g'
|
#define DBUS_TYPE_SIGNATURE (unsigned int)'g'
|
||||||
|
|
||||||
|
#define DBUS_TYPE_STRING_AS_STRING "s"
|
||||||
|
#define DBUS_TYPE_ARRAY_AS_STRING "a"
|
||||||
|
#define DBUS_TYPE_DICT_ENTRY_AS_STRING "e"
|
||||||
|
#define DBUS_TYPE_VARIANT_AS_STRING "v"
|
||||||
|
#define DBUS_TYPE_BOOLEAN_AS_STRING "b"
|
||||||
|
#define DBUS_TYPE_DOUBLE_AS_STRING "d"
|
||||||
|
#define DBUS_TYPE_INT16_AS_STRING "n"
|
||||||
|
#define DBUS_TYPE_UINT16_AS_STRING "q"
|
||||||
|
#define DBUS_TYPE_INT32_AS_STRING "i"
|
||||||
|
#define DBUS_TYPE_UINT32_AS_STRING "u"
|
||||||
|
#define DBUS_TYPE_INT64_AS_STRING "x"
|
||||||
|
#define DBUS_TYPE_UINT64_AS_STRING "t"
|
||||||
|
#define DBUS_TYPE_STRUCT_OPEN_AS_STRING "("
|
||||||
|
#define DBUS_TYPE_STRUCT_CLOSE_AS_STRING ")"
|
||||||
|
#define DBUS_TYPE_BYTE_AS_STRING "y"
|
||||||
|
#define DBUS_TYPE_OBJECT_PATH_AS_STRING "o"
|
||||||
|
#define DBUS_TYPE_SIGNATURE_AS_STRING "g"
|
||||||
|
|
||||||
typedef void (* PFN_dbus_error_init)(struct DBusError*);
|
typedef void (* PFN_dbus_error_init)(struct DBusError*);
|
||||||
typedef dbus_bool_t (* PFN_dbus_error_is_set)(const struct DBusError*);
|
typedef dbus_bool_t (* PFN_dbus_error_is_set)(const struct DBusError*);
|
||||||
typedef void (* PFN_dbus_error_free)(struct DBusError*);
|
typedef void (* PFN_dbus_error_free)(struct DBusError*);
|
||||||
@ -155,4 +173,5 @@ dbus_bool_t _glfwOpenContainerDBusPOSIX(struct DBusMessageIter* iterator, int DB
|
|||||||
dbus_bool_t _glfwCloseContainerDBusPOSIX(struct DBusMessageIter* iterator, struct DBusMessageIter* subIterator);
|
dbus_bool_t _glfwCloseContainerDBusPOSIX(struct DBusMessageIter* iterator, struct DBusMessageIter* subIterator);
|
||||||
dbus_bool_t _glfwAppendDataDBusPOSIX(struct DBusMessageIter* iterator, int DBusType, const void* data);
|
dbus_bool_t _glfwAppendDataDBusPOSIX(struct DBusMessageIter* iterator, int DBusType, const void* data);
|
||||||
dbus_bool_t _glfwAppendDictDataDBusPOSIX(struct DBusMessageIter* iterator, int keyType, const void* keyData, int valueType, const void* valueData);
|
dbus_bool_t _glfwAppendDictDataDBusPOSIX(struct DBusMessageIter* iterator, int keyType, const void* keyData, int valueType, const void* valueData);
|
||||||
dbus_bool_t _glfwSendMessageDBusPOSIX(struct DBusMessage* message);
|
dbus_bool_t _glfwSendMessageDBusPOSIX(struct DBusMessage* message);
|
||||||
|
char* _glfwDBusTypeToStrPOSIX(int valueType);
|
||||||
|
Loading…
Reference in New Issue
Block a user