forked from enlightenment/efl
parent
27071cc23b
commit
ea6d530cfa
|
@ -54,7 +54,7 @@ _ecore_dbus_event_server_add(void *udata, int ev_type, void *ev)
|
||||||
|
|
||||||
event = ev;
|
event = ev;
|
||||||
printf("_ecore_dbus_event_server_add\n");
|
printf("_ecore_dbus_event_server_add\n");
|
||||||
ret = ecore_dbus_message_new_method_call(event->server, "org.freedesktop.DBus" /*service*/,
|
ret = ecore_dbus_message_new_method_call(event->server, "org.freedesktop.DBus" /*destination*/,
|
||||||
"/org/freedesktop/DBus" /*path*/,
|
"/org/freedesktop/DBus" /*path*/,
|
||||||
"org.freedesktop.DBus" /*interface*/,
|
"org.freedesktop.DBus" /*interface*/,
|
||||||
"Hello" /*method*/, NULL /*fmt*/);
|
"Hello" /*method*/, NULL /*fmt*/);
|
||||||
|
|
|
@ -119,9 +119,7 @@ extern "C" {
|
||||||
EAPI void ecore_dbus_message_del(Ecore_DBus_Message *msg);
|
EAPI void ecore_dbus_message_del(Ecore_DBus_Message *msg);
|
||||||
EAPI void ecore_dbus_message_print(Ecore_DBus_Message *msg);
|
EAPI void ecore_dbus_message_print(Ecore_DBus_Message *msg);
|
||||||
EAPI void *ecore_dbus_message_header_field_get(Ecore_DBus_Message *msg, Ecore_DBus_Message_Header_Field field);
|
EAPI void *ecore_dbus_message_header_field_get(Ecore_DBus_Message *msg, Ecore_DBus_Message_Header_Field field);
|
||||||
#if 0
|
EAPI void *ecore_dbus_message_body_field_get(Ecore_DBus_Message *msg, unsigned int pos);
|
||||||
EAPI void *ecore_dbus_get_body_field(Ecore_DBus_Message *msg, Ecore_DBus_Message_Field *field, unsigned int pos);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,6 +147,8 @@ ecore_dbus_server_connect(Ecore_DBus_Type compl_type, char *name, int port,
|
||||||
svr->cnt_msg = 0;
|
svr->cnt_msg = 0;
|
||||||
svr->auth_type = -1;
|
svr->auth_type = -1;
|
||||||
svr->auth_type_transaction = 0;
|
svr->auth_type_transaction = 0;
|
||||||
|
svr->methods = ecore_hash_new(ecore_direct_hash, ecore_direct_compare);
|
||||||
|
ecore_hash_set_free_value(svr->methods, free);
|
||||||
servers = _ecore_list2_append(servers, svr);
|
servers = _ecore_list2_append(servers, svr);
|
||||||
|
|
||||||
return svr;
|
return svr;
|
||||||
|
@ -157,6 +159,8 @@ ecore_dbus_server_del(Ecore_DBus_Server *svr)
|
||||||
{
|
{
|
||||||
if (svr->server) ecore_con_server_del(svr->server);
|
if (svr->server) ecore_con_server_del(svr->server);
|
||||||
servers = _ecore_list2_remove(servers, svr);
|
servers = _ecore_list2_remove(servers, svr);
|
||||||
|
if (svr->unique_name) free(svr->unique_name);
|
||||||
|
ecore_hash_destroy(svr->methods);
|
||||||
free(svr);
|
free(svr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,6 +342,7 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev)
|
||||||
while (e->size)
|
while (e->size)
|
||||||
{
|
{
|
||||||
Ecore_DBus_Event_Server_Data *ev;
|
Ecore_DBus_Event_Server_Data *ev;
|
||||||
|
Ecore_DBus_Message_Field_UInt32 *serial;
|
||||||
|
|
||||||
msg = _ecore_dbus_message_unmarshal(svr, (unsigned char *)(e->data) + offset, e->size);
|
msg = _ecore_dbus_message_unmarshal(svr, (unsigned char *)(e->data) + offset, e->size);
|
||||||
if (msg == NULL) break;
|
if (msg == NULL) break;
|
||||||
|
@ -345,11 +350,53 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev)
|
||||||
e->size -= msg->length;
|
e->size -= msg->length;
|
||||||
printf("[ecore_dbus] dbus message length %u bytes, still %d\n",
|
printf("[ecore_dbus] dbus message length %u bytes, still %d\n",
|
||||||
msg->length, e->size);
|
msg->length, e->size);
|
||||||
ecore_dbus_message_print(msg);
|
//ecore_dbus_message_print(msg);
|
||||||
ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
|
/* Trap known messages */
|
||||||
ev->server = svr;
|
serial = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL);
|
||||||
ev->message = msg;
|
if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
|
||||||
ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev, _ecore_dbus_event_server_data_free, NULL);
|
{
|
||||||
|
char *method;
|
||||||
|
|
||||||
|
method = ecore_hash_remove(svr->methods, (void *)serial->value);
|
||||||
|
if (method)
|
||||||
|
{
|
||||||
|
printf("Return from method: %s\n", method);
|
||||||
|
if (!strcmp(method, "org.freedesktop.DBus.Hello"))
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name = ecore_dbus_message_body_field_get(msg, 0);
|
||||||
|
printf("Got unique name: %s\n", name);
|
||||||
|
svr->unique_name = strdup(name);
|
||||||
|
_ecore_dbus_message_free(msg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
|
||||||
|
ev->server = svr;
|
||||||
|
ev->message = msg;
|
||||||
|
ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev,
|
||||||
|
_ecore_dbus_event_server_data_free, NULL);
|
||||||
|
}
|
||||||
|
free(method);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
|
||||||
|
ev->server = svr;
|
||||||
|
ev->message = msg;
|
||||||
|
ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev,
|
||||||
|
_ecore_dbus_event_server_data_free, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
|
||||||
|
ev->server = svr;
|
||||||
|
ev->message = msg;
|
||||||
|
ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev,
|
||||||
|
_ecore_dbus_event_server_data_free, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -22,9 +22,10 @@ ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination,
|
||||||
char *fmt, ...)
|
char *fmt, ...)
|
||||||
{
|
{
|
||||||
unsigned int serial, body_start;
|
unsigned int serial, body_start;
|
||||||
|
char action[1024];
|
||||||
Ecore_DBus_Message_Field_Array *arr;
|
Ecore_DBus_Message_Field_Array *arr;
|
||||||
|
|
||||||
if ((!destination) && (!path) && (!interface) && (!method)) return 0;
|
if (!method) return 0;
|
||||||
|
|
||||||
/* init message */
|
/* init message */
|
||||||
Ecore_DBus_Message *msg = _ecore_dbus_message_new(svr);
|
Ecore_DBus_Message *msg = _ecore_dbus_message_new(svr);
|
||||||
|
@ -139,9 +140,14 @@ ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination,
|
||||||
*(unsigned int *)(msg->buffer + 4) = msg->length - body_start;
|
*(unsigned int *)(msg->buffer + 4) = msg->length - body_start;
|
||||||
|
|
||||||
/* show message */
|
/* show message */
|
||||||
ecore_dbus_message_print(msg);
|
//ecore_dbus_message_print(msg);
|
||||||
/* send message */
|
/* send message */
|
||||||
ecore_dbus_server_send(svr, (char *)msg->buffer, msg->length);
|
ecore_dbus_server_send(svr, (char *)msg->buffer, msg->length);
|
||||||
|
if (interface)
|
||||||
|
snprintf(action, sizeof(action), "%s.%s", interface, method);
|
||||||
|
else
|
||||||
|
strcpy(action, method);
|
||||||
|
ecore_hash_set(svr->methods, (void *)msg->serial, strdup(action));
|
||||||
|
|
||||||
serial = msg->serial;
|
serial = msg->serial;
|
||||||
_ecore_dbus_message_free(msg);
|
_ecore_dbus_message_free(msg);
|
||||||
|
@ -200,23 +206,62 @@ ecore_dbus_message_header_field_get(Ecore_DBus_Message *m,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
EAPI void *
|
EAPI void *
|
||||||
ecore_dbus_body_field_get(Ecore_DBus_Message *m, Ecore_DBus_Message_Field *mf,
|
ecore_dbus_message_body_field_get(Ecore_DBus_Message *m, unsigned int pos)
|
||||||
unsigned int pos)
|
|
||||||
{
|
{
|
||||||
Ecore_List2 *l;
|
Ecore_DBus_Message_Field *f;
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
|
|
||||||
for (l = (Ecore_List2 *) mf; l; l = l->next)
|
ecore_list_goto_first(m->fields);
|
||||||
|
while ((f = ecore_list_next(m->fields)))
|
||||||
{
|
{
|
||||||
if (i == pos)
|
if (i == pos)
|
||||||
return _ecore_dbus_field_get(m->body, (Ecore_DBus_Message_Field *)l);
|
{
|
||||||
|
switch (f->type)
|
||||||
|
{
|
||||||
|
case ECORE_DBUS_DATA_TYPE_BYTE:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_BYTE(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_BOOLEAN:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_INT16:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_INT16(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_UINT16:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_UINT16(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_INT32:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_INT32(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_UINT32:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_UINT32(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_INT64:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_INT64(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_UINT64:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_UINT64(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_DOUBLE:
|
||||||
|
return &ECORE_DBUS_MESSAGE_FIELD_DOUBLE(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_STRING:
|
||||||
|
return ECORE_DBUS_MESSAGE_FIELD_STRING(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_OBJECT_PATH:
|
||||||
|
return ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_SIGNATURE:
|
||||||
|
return ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(f)->value;
|
||||||
|
case ECORE_DBUS_DATA_TYPE_INVALID:
|
||||||
|
case ECORE_DBUS_DATA_TYPE_ARRAY:
|
||||||
|
case ECORE_DBUS_DATA_TYPE_VARIANT:
|
||||||
|
case ECORE_DBUS_DATA_TYPE_STRUCT:
|
||||||
|
case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN:
|
||||||
|
case ECORE_DBUS_DATA_TYPE_STRUCT_END:
|
||||||
|
case ECORE_DBUS_DATA_TYPE_DICT_ENTRY:
|
||||||
|
case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_BEGIN:
|
||||||
|
case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_END:
|
||||||
|
#if 0
|
||||||
|
default:
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* message functions */
|
/* message functions */
|
||||||
|
|
||||||
|
|
|
@ -8,26 +8,42 @@ typedef unsigned char *(*Ecore_DBus_Auth_Transaction)(void *);
|
||||||
|
|
||||||
typedef struct _Ecore_DBus_Auth Ecore_DBus_Auth;
|
typedef struct _Ecore_DBus_Auth Ecore_DBus_Auth;
|
||||||
|
|
||||||
typedef struct _Ecore_DBus_Message_Field_Container Ecore_DBus_Message_Field_Container;
|
|
||||||
|
|
||||||
#define ECORE_DBUS_MESSAGE_FIELD(x) ((Ecore_DBus_Message_Field *)(x))
|
#define ECORE_DBUS_MESSAGE_FIELD(x) ((Ecore_DBus_Message_Field *)(x))
|
||||||
#define ECORE_DBUS_MESSAGE_FIELD_CONTAINER(x) ((Ecore_DBus_Message_Field_Container *)(x))
|
#define ECORE_DBUS_MESSAGE_FIELD_CONTAINER(x) ((Ecore_DBus_Message_Field_Container *)(x))
|
||||||
|
typedef struct _Ecore_DBus_Message_Field_Container Ecore_DBus_Message_Field_Container;
|
||||||
|
|
||||||
typedef struct _Ecore_DBus_Message_Field_Byte Ecore_DBus_Message_Field_Byte;
|
typedef struct _Ecore_DBus_Message_Field_Byte Ecore_DBus_Message_Field_Byte;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_BYTE(x) ((Ecore_DBus_Message_Field_Byte *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Boolean Ecore_DBus_Message_Field_Boolean;
|
typedef struct _Ecore_DBus_Message_Field_Boolean Ecore_DBus_Message_Field_Boolean;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(x) ((Ecore_DBus_Message_Field_Boolean *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Int16 Ecore_DBus_Message_Field_Int16;
|
typedef struct _Ecore_DBus_Message_Field_Int16 Ecore_DBus_Message_Field_Int16;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_INT16(x) ((Ecore_DBus_Message_Field_Int16 *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_UInt16 Ecore_DBus_Message_Field_UInt16;
|
typedef struct _Ecore_DBus_Message_Field_UInt16 Ecore_DBus_Message_Field_UInt16;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_UINT16(x) ((Ecore_DBus_Message_Field_UInt16 *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Int32 Ecore_DBus_Message_Field_Int32;
|
typedef struct _Ecore_DBus_Message_Field_Int32 Ecore_DBus_Message_Field_Int32;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_INT32(x) ((Ecore_DBus_Message_Field_Int32 *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_UInt32 Ecore_DBus_Message_Field_UInt32;
|
typedef struct _Ecore_DBus_Message_Field_UInt32 Ecore_DBus_Message_Field_UInt32;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_UINT32(x) ((Ecore_DBus_Message_Field_UInt32 *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Int64 Ecore_DBus_Message_Field_Int64;
|
typedef struct _Ecore_DBus_Message_Field_Int64 Ecore_DBus_Message_Field_Int64;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_INT64(x) ((Ecore_DBus_Message_Field_Int64 *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_UInt64 Ecore_DBus_Message_Field_UInt64;
|
typedef struct _Ecore_DBus_Message_Field_UInt64 Ecore_DBus_Message_Field_UInt64;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_UINT64(x) ((Ecore_DBus_Message_Field_UInt64 *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Double Ecore_DBus_Message_Field_Double;
|
typedef struct _Ecore_DBus_Message_Field_Double Ecore_DBus_Message_Field_Double;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_DOUBLE(x) ((Ecore_DBus_Message_Field_Double *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_String Ecore_DBus_Message_Field_String;
|
typedef struct _Ecore_DBus_Message_Field_String Ecore_DBus_Message_Field_String;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_STRING(x) ((Ecore_DBus_Message_Field_String *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Object_Path Ecore_DBus_Message_Field_Object_Path;
|
typedef struct _Ecore_DBus_Message_Field_Object_Path Ecore_DBus_Message_Field_Object_Path;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(x) ((Ecore_DBus_Message_Field_Object_Path *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Signature Ecore_DBus_Message_Field_Signature;
|
typedef struct _Ecore_DBus_Message_Field_Signature Ecore_DBus_Message_Field_Signature;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(x) ((Ecore_DBus_Message_Field_Signature *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Array Ecore_DBus_Message_Field_Array;
|
typedef struct _Ecore_DBus_Message_Field_Array Ecore_DBus_Message_Field_Array;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_ARRAY(x) ((Ecore_DBus_Message_Field_Array *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Variant Ecore_DBus_Message_Field_Variant;
|
typedef struct _Ecore_DBus_Message_Field_Variant Ecore_DBus_Message_Field_Variant;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_VARIANT(x) ((Ecore_DBus_Message_Field_Variant *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Struct Ecore_DBus_Message_Field_Struct;
|
typedef struct _Ecore_DBus_Message_Field_Struct Ecore_DBus_Message_Field_Struct;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_STRUCT(x) ((Ecore_DBus_Message_Field_Struct *)(x))
|
||||||
typedef struct _Ecore_DBus_Message_Field_Dict_Entry Ecore_DBus_Message_Field_Dict_Entry;
|
typedef struct _Ecore_DBus_Message_Field_Dict_Entry Ecore_DBus_Message_Field_Dict_Entry;
|
||||||
|
#define ECORE_DBUS_MESSAGE_FIELD_DICT_ENTRY(x) ((Ecore_DBus_Message_Field_Dict_Entry *)(x))
|
||||||
|
|
||||||
typedef enum _Ecore_DBus_Auth_Type
|
typedef enum _Ecore_DBus_Auth_Type
|
||||||
{
|
{
|
||||||
|
@ -49,12 +65,15 @@ typedef enum _Ecore_DBus_Message_Type
|
||||||
|
|
||||||
struct _Ecore_DBus_Server
|
struct _Ecore_DBus_Server
|
||||||
{
|
{
|
||||||
Ecore_List2 __list_data;
|
Ecore_List2 __list_data;
|
||||||
Ecore_Con_Server *server;
|
Ecore_Con_Server *server;
|
||||||
int authenticated;
|
int authenticated;
|
||||||
int auth_type;
|
int auth_type;
|
||||||
int auth_type_transaction;
|
int auth_type_transaction;
|
||||||
int cnt_msg;
|
int cnt_msg;
|
||||||
|
|
||||||
|
Ecore_Hash *methods;
|
||||||
|
char *unique_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Ecore_DBus_Message
|
struct _Ecore_DBus_Message
|
||||||
|
|
|
@ -34,6 +34,7 @@ _ecore_dbus_message_unmarshal_int32(Ecore_DBus_Message *msg, int *size)
|
||||||
unsigned int old_length;
|
unsigned int old_length;
|
||||||
|
|
||||||
old_length = msg->length;
|
old_length = msg->length;
|
||||||
|
_ecore_dbus_message_padding(msg, 4);
|
||||||
f = _ecore_dbus_message_field_new(msg, ECORE_DBUS_DATA_TYPE_INT32);
|
f = _ecore_dbus_message_field_new(msg, ECORE_DBUS_DATA_TYPE_INT32);
|
||||||
f->value = _ecore_dbus_message_read_uint32(msg);
|
f->value = _ecore_dbus_message_read_uint32(msg);
|
||||||
if (*size < (msg->length - old_length))
|
if (*size < (msg->length - old_length))
|
||||||
|
@ -54,6 +55,7 @@ _ecore_dbus_message_unmarshal_uint32(Ecore_DBus_Message *msg, int *size)
|
||||||
unsigned int old_length;
|
unsigned int old_length;
|
||||||
|
|
||||||
old_length = msg->length;
|
old_length = msg->length;
|
||||||
|
_ecore_dbus_message_padding(msg, 4);
|
||||||
f = _ecore_dbus_message_field_new(msg, ECORE_DBUS_DATA_TYPE_UINT32);
|
f = _ecore_dbus_message_field_new(msg, ECORE_DBUS_DATA_TYPE_UINT32);
|
||||||
f->value = _ecore_dbus_message_read_uint32(msg);
|
f->value = _ecore_dbus_message_read_uint32(msg);
|
||||||
if (*size < (msg->length - old_length))
|
if (*size < (msg->length - old_length))
|
||||||
|
|
Loading…
Reference in New Issue