Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_dbus


Modified Files:
        Ecore_DBus.h ecore_dbus.c ecore_dbus_message.c 
        ecore_dbus_methods.c ecore_dbus_private.h 
        ecore_dbus_unmarshal.c ecore_dbus_utils.c 


Log Message:
Fix Fix

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/Ecore_DBus.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- Ecore_DBus.h        25 Jul 2006 14:12:21 -0000      1.10
+++ Ecore_DBus.h        25 Jul 2006 16:03:05 -0000      1.11
@@ -84,6 +84,7 @@
    struct _Ecore_DBus_Event_Server_Data
      {
        Ecore_DBus_Server  *server;
+       char               *method;
        Ecore_DBus_Message *message;
      };
 
@@ -120,6 +121,16 @@
    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_body_field_get(Ecore_DBus_Message 
*msg, unsigned int pos);
+
+   /* methods */
+   EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr);
+   EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr);
+   EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char 
*name);
+   EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, 
char *name, unsigned int flags);
+   EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char 
*name);
+   EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, 
char *connection);
+   EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match);
+   EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char 
*match);
 
 #ifdef __cplusplus
 }
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- ecore_dbus.c        25 Jul 2006 14:34:47 -0000      1.14
+++ ecore_dbus.c        25 Jul 2006 16:03:05 -0000      1.15
@@ -342,8 +342,9 @@
        printf("[ecore_dbus] received server data, %d bytes\n", e->size);
        while (e->size)
          {
-            Ecore_DBus_Event_Server_Data *ev;
+            Ecore_DBus_Event_Server_Data    *ev;
             Ecore_DBus_Message_Field_UInt32 *serial;
+            char                            *method;
 
             msg = _ecore_dbus_message_unmarshal(svr, (unsigned char 
*)(e->data) + offset, e->size);
             if (msg == NULL) break;
@@ -351,12 +352,11 @@
             e->size -= msg->length;
             printf("[ecore_dbus] dbus message length %u bytes, still %d\n",
                    msg->length, e->size);
-            //ecore_dbus_message_print(msg);
+            ecore_dbus_message_print(msg);
             /* Trap known messages */
             serial = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL);
             if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
               {
-                 char *method;
 
                  method = ecore_hash_remove(svr->methods, (void 
*)serial->value);
                  if (method)
@@ -369,35 +369,19 @@
                            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);
+                 method = NULL;
               }
+            ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
+            ev->server = svr;
+            ev->message = msg;
+            ev->method = method;
+            ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev,
+                            _ecore_dbus_event_server_data_free, NULL);
          }
      }
    return 0;
@@ -410,5 +394,6 @@
 
    event = ev;
    _ecore_dbus_message_free(event->message);
+   if (event->method) free(event->method);
    free(ev);
 }
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_message.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_dbus_message.c        25 Jul 2006 14:12:21 -0000      1.2
+++ ecore_dbus_message.c        25 Jul 2006 16:03:05 -0000      1.3
@@ -77,7 +77,7 @@
 
        s = _ecore_dbus_message_marshal_struct_begin(msg);
        _ecore_dbus_message_marshal_byte(msg, 
ECORE_DBUS_HEADER_FIELD_SIGNATURE);
-       _ecore_dbus_message_marshal_variant(msg, 
ECORE_DBUS_DATA_TYPE_SIGNATURE, method);
+       _ecore_dbus_message_marshal_variant(msg, 
ECORE_DBUS_DATA_TYPE_SIGNATURE, fmt);
        _ecore_dbus_message_marshal_struct_end(msg, s);
      }
    _ecore_dbus_message_marshal_array_end(msg, arr);
@@ -243,8 +243,79 @@
                   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:
+                    {
+                       Ecore_DBus_Message_Field_Container *c;
+                       Ecore_List                         *list;
+                       void                               *value;
+
+                       list = ecore_list_new();
+                       c = ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f);
+                       ecore_list_goto_first(c->values);
+                       switch 
(ECORE_DBUS_MESSAGE_FIELD_ARRAY(f)->contained_type)
+                         {
+                          case ECORE_DBUS_DATA_TYPE_BYTE:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_BYTE(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_BOOLEAN:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_INT16:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_INT16(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_UINT16:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_UINT16(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_INT32:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_INT32(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_UINT32:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_UINT32(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_INT64:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_INT64(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_UINT64:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_UINT64(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_DOUBLE:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_DOUBLE(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_STRING:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
ECORE_DBUS_MESSAGE_FIELD_STRING(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_OBJECT_PATH:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(value)->value);
+                             break;
+                          case ECORE_DBUS_DATA_TYPE_SIGNATURE:
+                             while ((value = ecore_list_next(c->values)))
+                               ecore_list_append(list, 
ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(value)->value);
+                             break;
+                          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:
+                             return NULL;
+                         }
+                       return list;
+                    }
+               case ECORE_DBUS_DATA_TYPE_INVALID:
                case ECORE_DBUS_DATA_TYPE_VARIANT:
                case ECORE_DBUS_DATA_TYPE_STRUCT:
                case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN:
@@ -279,8 +350,9 @@
    msg->size = 128;
    msg->buffer = calloc(msg->size, sizeof(unsigned char));
 
+   msg->all = ecore_list_new();
+   ecore_list_set_free_cb(msg->all, _ecore_dbus_message_field_free);
    msg->fields = ecore_list_new();
-   ecore_list_set_free_cb(msg->fields, _ecore_dbus_message_field_free);
    msg->recurse = ecore_list_new();
 
    return msg;
@@ -335,20 +407,14 @@
       case ECORE_DBUS_DATA_TYPE_ARRAY:
         f = calloc(1, sizeof(Ecore_DBus_Message_Field_Array));
         ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f)->values = ecore_list_new();
-        ecore_list_set_free_cb(ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f)->values,
-                               _ecore_dbus_message_field_free);
         break;
       case ECORE_DBUS_DATA_TYPE_VARIANT:
         f = calloc(1, sizeof(Ecore_DBus_Message_Field_Variant));
         ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f)->values = ecore_list_new();
-        ecore_list_set_free_cb(ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f)->values,
-                               _ecore_dbus_message_field_free);
         break;
       case ECORE_DBUS_DATA_TYPE_STRUCT:
         f = calloc(1, sizeof(Ecore_DBus_Message_Field_Struct));
         ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f)->values = ecore_list_new();
-        ecore_list_set_free_cb(ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f)->values,
-                               _ecore_dbus_message_field_free);
         break;
       case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN:
         f = NULL;
@@ -380,6 +446,7 @@
      {
        ecore_list_append(msg->fields, f);
      }
+   ecore_list_append(msg->all, f);
 
    f->offset = msg->length;
    f->buffer = msg->buffer + f->offset;
@@ -389,9 +456,9 @@
 void
 _ecore_dbus_message_free(Ecore_DBus_Message *msg)
 {
-   _ecore_dbus_message_field_free(msg->header);
    ecore_list_destroy(msg->fields);
    ecore_list_destroy(msg->recurse);
+   ecore_list_destroy(msg->all);
    free(msg->buffer);
    free(msg);
 }
@@ -593,12 +660,12 @@
    printf("[ecore_dbus] raw message:\n");
    for (i = 0; i < msg->length; i++)
      {
-       if ((i % 16) == 0)
+       if ((i % 8) == 0)
          printf("\n");
        if ((msg->buffer[i] > 31) && (msg->buffer[i] < 128))
-         printf("%c", msg->buffer[i]);
+         printf(" '%c' ", msg->buffer[i]);
        else
-         printf("*");//, msg->buffer[i]);
+         printf("0x%02x ", msg->buffer[i]);
      }
    printf("\n");
    printf("[ecore_dbus] end raw message\n");
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_dbus_methods.c        25 Jul 2006 14:34:47 -0000      1.1
+++ ecore_dbus_methods.c        25 Jul 2006 16:03:05 -0000      1.2
@@ -8,7 +8,7 @@
 #include "Ecore_DBus.h"
 #include "ecore_dbus_private.h"
 
-int
+EAPI int
 ecore_dbus_method_hello(Ecore_DBus_Server *svr)
 {
    return ecore_dbus_message_new_method_call(svr,
@@ -18,7 +18,7 @@
                                             "Hello" /*method*/, NULL /*fmt*/);
 }
 
-int
+EAPI int
 ecore_dbus_method_list_names(Ecore_DBus_Server *svr)
 {
    return ecore_dbus_message_new_method_call(svr,
@@ -28,7 +28,7 @@
                                             "ListNames" /*method*/, NULL 
/*fmt*/);
 }
 
-int
+EAPI int
 ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name)
 {
    return ecore_dbus_message_new_method_call(svr,
@@ -39,7 +39,7 @@
                                             "s" /*fmt*/, name);
 }
 
-int
+EAPI int
 ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, 
unsigned int flags)
 {
    return ecore_dbus_message_new_method_call(svr,
@@ -50,7 +50,7 @@
                                             "su" /*fmt*/, name, flags);
 }
 
-int
+EAPI int
 ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name)
 {
    return ecore_dbus_message_new_method_call(svr,
@@ -61,7 +61,7 @@
                                             "s" /*fmt*/, name);
 }
 
-int
+EAPI int
 ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char 
*connection)
 {
    return ecore_dbus_message_new_method_call(svr,
@@ -72,7 +72,7 @@
                                             "s" /*fmt*/, connection);
 }
 
-int
+EAPI int
 ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match)
 {
    return ecore_dbus_message_new_method_call(svr,
@@ -83,7 +83,7 @@
                                             "s" /*fmt*/, match);
 }
 
-int
+EAPI int
 ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match)
 {
    return ecore_dbus_message_new_method_call(svr,
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_private.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- ecore_dbus_private.h        25 Jul 2006 14:12:21 -0000      1.6
+++ ecore_dbus_private.h        25 Jul 2006 16:03:05 -0000      1.7
@@ -8,9 +8,9 @@
 
 typedef struct _Ecore_DBus_Auth                      Ecore_DBus_Auth;
 
-#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(x)             ((Ecore_DBus_Message_Field 
*)(x))
 typedef struct _Ecore_DBus_Message_Field_Container   
Ecore_DBus_Message_Field_Container;
+#define ECORE_DBUS_MESSAGE_FIELD_CONTAINER(x)   
((Ecore_DBus_Message_Field_Container *)(x))
 
 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))
@@ -96,6 +96,7 @@
    unsigned char     *buffer;
 
    void              *header;
+   Ecore_List        *all;
    Ecore_List        *fields;
    Ecore_List        *recurse;
 };
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_unmarshal.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore_dbus_unmarshal.c      25 Jul 2006 14:12:21 -0000      1.3
+++ ecore_dbus_unmarshal.c      25 Jul 2006 16:03:05 -0000      1.4
@@ -7,7 +7,9 @@
 #include "Ecore_DBus.h"
 #include "ecore_dbus_private.h"
 
-static Ecore_DBus_Message_Field_Byte *
+typedef void *(*Ecore_DBus_Unmarshal_Func)(Ecore_DBus_Message *msg, int *size);
+
+static void *
 _ecore_dbus_message_unmarshal_byte(Ecore_DBus_Message *msg, int *size)
 {
    Ecore_DBus_Message_Field_Byte *f;
@@ -27,7 +29,7 @@
    return f;
 }
 
-static Ecore_DBus_Message_Field_Int32 *
+static void *
 _ecore_dbus_message_unmarshal_int32(Ecore_DBus_Message *msg, int *size)
 {
    Ecore_DBus_Message_Field_Int32 *f;
@@ -48,7 +50,7 @@
    return f;
 }
 
-static Ecore_DBus_Message_Field_UInt32 *
+static void *
 _ecore_dbus_message_unmarshal_uint32(Ecore_DBus_Message *msg, int *size)
 {
    Ecore_DBus_Message_Field_UInt32 *f;
@@ -69,7 +71,7 @@
    return f;
 }
 
-static Ecore_DBus_Message_Field_String *
+static void *
 _ecore_dbus_message_unmarshal_string(Ecore_DBus_Message *msg, int *size)
 {
    Ecore_DBus_Message_Field_String *f;
@@ -92,7 +94,7 @@
    return f;
 }
 
-static Ecore_DBus_Message_Field_Object_Path *
+static void *
 _ecore_dbus_message_unmarshal_object_path(Ecore_DBus_Message *msg, int *size)
 {
    Ecore_DBus_Message_Field_Object_Path *f;
@@ -115,7 +117,7 @@
    return f;
 }
 
-static Ecore_DBus_Message_Field_Signature *
+static void *
 _ecore_dbus_message_unmarshal_signature(Ecore_DBus_Message *msg, int *size)
 {
    Ecore_DBus_Message_Field_Signature *f;
@@ -137,7 +139,7 @@
    return f;
 }
 
-static Ecore_DBus_Message_Field_Array *
+static void *
 _ecore_dbus_message_unmarshal_array_begin(Ecore_DBus_Message *msg,
                                          Ecore_DBus_Data_Type contained_type, 
int *size)
 {
@@ -148,6 +150,7 @@
    _ecore_dbus_message_padding_skip(msg, 4);
 
    arr = _ecore_dbus_message_field_new(msg, ECORE_DBUS_DATA_TYPE_ARRAY);
+   arr->contained_type = contained_type;
    arr->start = 0;
    arr->end = _ecore_dbus_message_read_uint32(msg);
 
@@ -175,7 +178,7 @@
    ecore_list_remove_first(msg->recurse);
 }
 
-static Ecore_DBus_Message_Field_Struct *
+static void *
 _ecore_dbus_message_unmarshal_struct_begin(Ecore_DBus_Message *msg,
                                           int *size)
 {
@@ -206,7 +209,7 @@
    ecore_list_remove_first(msg->recurse);
 }
 
-static Ecore_DBus_Message_Field_Variant *
+static void *
 _ecore_dbus_message_unmarshal_variant(Ecore_DBus_Message *msg, int *size)
 {
    Ecore_DBus_Message_Field_Variant *f = NULL;
@@ -279,6 +282,47 @@
    return f;
 }
 
+static Ecore_DBus_Unmarshal_Func
+_ecore_dbus_message_unmarshal_func(Ecore_DBus_Data_Type type)
+{
+   switch (type)
+     {
+     case ECORE_DBUS_DATA_TYPE_BYTE:
+       return _ecore_dbus_message_unmarshal_byte;
+     case ECORE_DBUS_DATA_TYPE_INT32:
+       return _ecore_dbus_message_unmarshal_int32;
+     case ECORE_DBUS_DATA_TYPE_UINT32:
+       return _ecore_dbus_message_unmarshal_uint32;
+     case ECORE_DBUS_DATA_TYPE_STRING:
+       return _ecore_dbus_message_unmarshal_string;
+     case ECORE_DBUS_DATA_TYPE_OBJECT_PATH:
+       return _ecore_dbus_message_unmarshal_object_path;
+     case ECORE_DBUS_DATA_TYPE_SIGNATURE:
+       return _ecore_dbus_message_unmarshal_signature;
+     case ECORE_DBUS_DATA_TYPE_INVALID:
+     case ECORE_DBUS_DATA_TYPE_BOOLEAN:
+     case ECORE_DBUS_DATA_TYPE_INT16:
+     case ECORE_DBUS_DATA_TYPE_UINT16:
+     case ECORE_DBUS_DATA_TYPE_INT64:
+     case ECORE_DBUS_DATA_TYPE_UINT64:
+     case ECORE_DBUS_DATA_TYPE_DOUBLE:
+     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
+       printf("[ecore_dbus] unknown/unhandled data type %c\n", type);
+       break;
+     }
+   return NULL;
+}
+
 Ecore_DBus_Message *
 _ecore_dbus_message_unmarshal(Ecore_DBus_Server *svr, unsigned char *message, 
int size)
 {
@@ -362,6 +406,20 @@
                case ECORE_DBUS_DATA_TYPE_SIGNATURE:
                    _ecore_dbus_message_unmarshal_signature(msg, &size);
                   break;
+               case ECORE_DBUS_DATA_TYPE_ARRAY:
+                    {
+                       Ecore_DBus_Message_Field_Array *arr;
+                       Ecore_DBus_Unmarshal_Func func;
+                       s++;
+                       type = *s;
+                       arr = _ecore_dbus_message_unmarshal_array_begin(msg, 
type, &size);
+                       func = _ecore_dbus_message_unmarshal_func(type);
+                       printf("Arr: %d %d %d %c %p\n", msg->length, 
arr->start, arr->end, type, func);
+                       while (msg->length < arr->end)
+                         (*func)(msg, &size);
+                       _ecore_dbus_message_unmarshal_array_end(msg, arr);
+                    }
+                  break;
                case ECORE_DBUS_DATA_TYPE_INVALID:
                case ECORE_DBUS_DATA_TYPE_BYTE:
                case ECORE_DBUS_DATA_TYPE_BOOLEAN:
@@ -370,7 +428,6 @@
                case ECORE_DBUS_DATA_TYPE_INT64:
                case ECORE_DBUS_DATA_TYPE_UINT64:
                case ECORE_DBUS_DATA_TYPE_DOUBLE:
-               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:
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_utils.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_dbus_utils.c  25 Jul 2006 12:44:19 -0000      1.2
+++ ecore_dbus_utils.c  25 Jul 2006 16:03:05 -0000      1.3
@@ -16,11 +16,19 @@
 {
    if (msg->length + size >= msg->size)
      {
+       Ecore_DBus_Message_Field *f;
+
        size = (((msg->size + size) / 128) + 1) * 128;
 
        msg->buffer = realloc(msg->buffer, size);
+
        memset(msg->buffer + msg->size, 0, size - msg->size);
        msg->size = size;
+
+       /* Update buffer references */
+       ecore_list_goto_first(msg->all);
+       while ((f = ecore_list_next(msg->all)))
+         f->buffer = msg->buffer + f->offset;
      }
 }
 



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to