Enlightenment CVS committal

Author  : rephorm
Project : e17
Module  : proto

Dir     : e17/proto/e_dbus/src/lib/hal


Modified Files:
        E_Hal.h e_hal_device.c e_hal_manager.c e_hal_util.c 
        e_hal_util.h 


Log Message:
move hal method calls over to dbus callbacks

===================================================================
RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/E_Hal.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- E_Hal.h     3 Apr 2007 19:29:07 -0000       1.4
+++ E_Hal.h     12 Jul 2007 02:14:27 -0000      1.5
@@ -9,17 +9,6 @@
 #define E_HAL_DEVICE_INTERFACE "org.freedesktop.Hal.Device"
 #define E_HAL_DEVICE_VOLUME_INTERFACE "org.freedesktop.Hal.Device.Volume"
 
-/**
- * A callback function for a Hal call
- * @param user_data the data passed in to the method call
- * @param event_data a struct containing the return data.
- *
- * For method calls, the return structs use the following naming convention:
- *   E_Hal_<Interface>_<Method_Call_Name>_Return
- */
-typedef void (*E_Hal_Callback_Func) (void *user_data, void *method_return, 
DBusError *error);
-
-
 /* message return types */
 
 typedef struct E_Hal_Property E_Hal_Property;
@@ -75,18 +64,10 @@
   Ecore_Hash *properties;
 };
 
-typedef struct E_Hal_Callback E_Hal_Callback;
-struct E_Hal_Callback
-{
-  E_Hal_Callback_Func func;
-  void *user_data;
-};
-
-
-
 typedef struct E_Hal_Properties E_Hal_Device_Get_All_Properties_Return;
 typedef struct E_Hal_Property E_Hal_Device_Get_Property_Return;
 typedef struct E_Hal_Bool_Return E_Hal_Device_Query_Capability_Return;
+typedef struct E_Hal_String_List_Return E_Hal_String_List_Return;
 typedef struct E_Hal_String_List_Return E_Hal_Manager_Get_All_Devices_Return;
 typedef struct E_Hal_Bool_Return E_Hal_Manager_Device_Exists_Return;
 typedef struct E_Hal_String_List_Return 
E_Hal_Manager_Find_Device_String_Match_Return;
@@ -98,18 +79,15 @@
 typedef struct E_Hal_Capability E_Hal_Manager_New_Capability;
 
 /* org.freedesktop.Hal.Device */
-int e_hal_device_get_property(E_DBus_Connection *conn, const char *udi, const 
char *property, E_Hal_Callback_Func cb_func, void *data);
-int e_hal_device_get_all_properties(E_DBus_Connection *conn, const char *udi, 
E_Hal_Callback_Func cb_func, void *data);
-int e_hal_device_query_capability(E_DBus_Connection *conn, const char *udi, 
const char *capability, E_Hal_Callback_Func cb_func, void *data);
+int e_hal_device_get_property(E_DBus_Connection *conn, const char *udi, const 
char *property, E_DBus_Callback_Func cb_func, void *data);
+int e_hal_device_get_all_properties(E_DBus_Connection *conn, const char *udi, 
E_DBus_Callback_Func cb_func, void *data);
+int e_hal_device_query_capability(E_DBus_Connection *conn, const char *udi, 
const char *capability, E_DBus_Callback_Func cb_func, void *data);
 
 /* org.freedesktop.Hal.Manager */
-int e_hal_manager_get_all_devices(E_DBus_Connection *conn, E_Hal_Callback_Func 
cb_func, void *data);
-int e_hal_manager_device_exists(E_DBus_Connection *conn, const char *udi, 
E_Hal_Callback_Func cb_func, void *data);
-int e_hal_manager_find_device_string_match(E_DBus_Connection *conn, const char 
*key, const char *value, E_Hal_Callback_Func cb_func, void *data);
-int e_hal_manager_find_device_by_capability(E_DBus_Connection *conn, const 
char *capability, E_Hal_Callback_Func cb_func, void *data);
-
-E_Hal_Callback *e_hal_callback_new(E_Hal_Callback_Func cb_func, void 
*user_data);
-void e_hal_callback_free(E_Hal_Callback *callback);
+int e_hal_manager_get_all_devices(E_DBus_Connection *conn, 
E_DBus_Callback_Func cb_func, void *data);
+int e_hal_manager_device_exists(E_DBus_Connection *conn, const char *udi, 
E_DBus_Callback_Func cb_func, void *data);
+int e_hal_manager_find_device_string_match(E_DBus_Connection *conn, const char 
*key, const char *value, E_DBus_Callback_Func cb_func, void *data);
+int e_hal_manager_find_device_by_capability(E_DBus_Connection *conn, const 
char *capability, E_DBus_Callback_Func cb_func, void *data);
 
 /* utility functions */
 void e_hal_property_free(E_Hal_Property *prop);
@@ -121,9 +99,7 @@
 Ecore_List *e_hal_property_strlist_get(E_Hal_Properties *properties, const 
char *key, int *err);
 
 /* (un)mount */
-int e_hal_device_volume_mount(E_DBus_Connection *conn, const char *udi, const 
char *mount_point, const char *fstype, Ecore_List *options, E_Hal_Callback_Func 
cb_func, void *data);
-int e_hal_device_volume_unmount(E_DBus_Connection *conn, const char *udi, 
Ecore_List *options, E_Hal_Callback_Func cb_func, void *data);
-
-void cb_error_generic(void *data, const char *name, const char *msg);
+int e_hal_device_volume_mount(E_DBus_Connection *conn, const char *udi, const 
char *mount_point, const char *fstype, Ecore_List *options, 
E_DBus_Callback_Func cb_func, void *data);
+int e_hal_device_volume_unmount(E_DBus_Connection *conn, const char *udi, 
Ecore_List *options, E_DBus_Callback_Func cb_func, void *data);
 
 #endif
===================================================================
RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/e_hal_device.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- e_hal_device.c      10 Jul 2007 23:44:01 -0000      1.6
+++ e_hal_device.c      12 Jul 2007 02:14:27 -0000      1.7
@@ -9,19 +9,19 @@
 static void cb_device_query_capability(void *data, DBusMessage *msg, DBusError 
*err);
 
 /* Device.GetProperty */
-static void 
-cb_device_get_property(void *data, DBusMessage *msg, DBusError *err)
+static E_Hal_Device_Get_Property_Return *
+unmarshal_device_get_property(DBusMessage *msg, DBusError *err)
 {
-  E_Hal_Callback *cb = data;
   E_Hal_Device_Get_Property_Return *ret = NULL;
   DBusMessageIter iter;
   int type;
 
-  if (!cb) return;
-  E_HAL_HANDLE_ERROR(cb, err);
-
   ret = calloc(1, sizeof(E_Hal_Device_Get_Property_Return));
-  if (!ret) return;
+  if (!ret) 
+  {
+    dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
+    return NULL;
+  }
 
   dbus_message_iter_init(msg, &iter);
   type = dbus_message_iter_get_arg_type(&iter);
@@ -41,51 +41,42 @@
       break;
   }
 
-  if (dbus_error_is_set(err))
-  {
-    /* XXX do something with an error */
-    printf("ERROR: %s,  %s!\n", err->name, err->message);
-    dbus_error_free(err);
-    goto error;
-  }
-
-  if (cb->func)
-    cb->func(cb->user_data, ret, err);
-
-error:
-  if (ret) free(ret);
-  e_hal_callback_free(cb);
+  return ret;
 }
 
 int
-e_hal_device_get_property(E_DBus_Connection *conn, const char *udi, const char 
*property, E_Hal_Callback_Func cb_func, void *data)
+e_hal_device_get_property(E_DBus_Connection *conn, const char *udi, const char 
*property, E_DBus_Callback_Func cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   DBusMessage *msg;
   int ret;
 
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_device_call_new(udi, "GetProperty");
   dbus_message_append_args(msg, DBUS_TYPE_STRING, &property, 
DBUS_TYPE_INVALID);
-  ret = e_dbus_message_send(conn, msg, cb_device_get_property, -1, cb) ? 1 : 0;
+  ret = e_dbus_method_call_send(conn, msg, unmarshal_device_get_property, 
cb_func, -1, data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
 
 /* Device.GetAllProperties */
 
-static void 
-cb_device_get_all_properties(void *data, DBusMessage *msg, DBusError *err)
+static E_Hal_Device_Get_All_Properties_Return *
+unmarshal_device_get_all_properties(DBusMessage *msg, DBusError *err)
 {
-  E_Hal_Callback *cb = data;
   E_Hal_Device_Get_All_Properties_Return *ret = NULL;
   DBusMessageIter iter, a_iter, s_iter, v_iter;
 
-  if (!cb) return;
-  E_HAL_HANDLE_ERROR(cb, err);
+  if (!dbus_message_has_signature(msg, "a{sv}")) 
+  {
+    dbus_set_error(err, DBUS_ERROR_INVALID_SIGNATURE, "");
+    return NULL;
+  }
 
   ret = calloc(1, sizeof(E_Hal_Device_Get_All_Properties_Return));
-  if (!ret) return;
+  if (!ret) 
+  {
+    dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
+    return NULL;
+  }
 
   ret->properties = ecore_hash_new(ecore_str_hash, ecore_str_compare);
   ecore_hash_set_free_key(ret->properties, 
ECORE_FREE_CB(ecore_string_release));
@@ -93,98 +84,73 @@
 
 
   dbus_message_iter_init(msg, &iter);
-  if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_ARRAY &&
-      dbus_message_iter_get_element_type(&iter) == DBUS_TYPE_DICT_ENTRY)
+  dbus_message_iter_recurse(&iter, &a_iter);
+  while (dbus_message_iter_get_arg_type(&a_iter) != DBUS_TYPE_INVALID)
   {
-    dbus_message_iter_recurse(&iter, &a_iter);
-    while (dbus_message_iter_get_arg_type(&a_iter) != DBUS_TYPE_INVALID)
+    const char *name;
+    E_Hal_Property *prop = calloc(1, sizeof(E_Hal_Property));
+    dbus_message_iter_recurse(&a_iter, &s_iter);
+    dbus_message_iter_get_basic(&s_iter, &name);
+    dbus_message_iter_next(&s_iter);
+    dbus_message_iter_recurse(&s_iter, &v_iter);
+    
+    switch(dbus_message_iter_get_arg_type(&v_iter))
     {
-      const char *name;
-      E_Hal_Property *prop = calloc(1, sizeof(E_Hal_Property));
-      dbus_message_iter_recurse(&a_iter, &s_iter);
-      dbus_message_iter_get_basic(&s_iter, &name);
-      dbus_message_iter_next(&s_iter);
-      dbus_message_iter_recurse(&s_iter, &v_iter);
-      
-      switch(dbus_message_iter_get_arg_type(&v_iter))
-      {
-        case 's':
-          prop->type = E_HAL_PROPERTY_TYPE_STRING;
-          dbus_message_iter_get_basic(&v_iter, &(prop->val.s));
-          break;
-        case 'i':
-          prop->type = E_HAL_PROPERTY_TYPE_INT;
-          dbus_message_iter_get_basic(&v_iter, &(prop->val.i));
-          break;
-        case 't':
-          prop->type = E_HAL_PROPERTY_TYPE_UINT64;
-          dbus_message_iter_get_basic(&v_iter, &(prop->val.u64));
-          break;
-        case 'b':
-          prop->type = E_HAL_PROPERTY_TYPE_BOOL;
-          dbus_message_iter_get_basic(&v_iter, &(prop->val.b));
-          break;
-        case 'd':
-          prop->type = E_HAL_PROPERTY_TYPE_DOUBLE;
-          dbus_message_iter_get_basic(&v_iter, &(prop->val.d));
-          break;
-        case 'a':
-          prop->type = E_HAL_PROPERTY_TYPE_STRLIST;
+      case 's':
+        prop->type = E_HAL_PROPERTY_TYPE_STRING;
+        dbus_message_iter_get_basic(&v_iter, &(prop->val.s));
+        break;
+      case 'i':
+        prop->type = E_HAL_PROPERTY_TYPE_INT;
+        dbus_message_iter_get_basic(&v_iter, &(prop->val.i));
+        break;
+      case 't':
+        prop->type = E_HAL_PROPERTY_TYPE_UINT64;
+        dbus_message_iter_get_basic(&v_iter, &(prop->val.u64));
+        break;
+      case 'b':
+        prop->type = E_HAL_PROPERTY_TYPE_BOOL;
+        dbus_message_iter_get_basic(&v_iter, &(prop->val.b));
+        break;
+      case 'd':
+        prop->type = E_HAL_PROPERTY_TYPE_DOUBLE;
+        dbus_message_iter_get_basic(&v_iter, &(prop->val.d));
+        break;
+      case 'a':
+        prop->type = E_HAL_PROPERTY_TYPE_STRLIST;
+        {
+          DBusMessageIter list_iter;
+          prop->val.strlist = ecore_list_new();
+          dbus_message_iter_recurse(&v_iter, &list_iter);
+          while (dbus_message_iter_get_arg_type(&list_iter) != 
DBUS_TYPE_INVALID)
           {
-            DBusMessageIter list_iter;
-            prop->val.strlist = ecore_list_new();
-            dbus_message_iter_recurse(&v_iter, &list_iter);
-            while (dbus_message_iter_get_arg_type(&list_iter) != 
DBUS_TYPE_INVALID)
-            {
-              char *str;
-              dbus_message_iter_get_basic(&list_iter, &str);
-              ecore_list_append(prop->val.strlist, str);
-              dbus_message_iter_next(&list_iter);
-            }
+            char *str;
+            dbus_message_iter_get_basic(&list_iter, &str);
+            ecore_list_append(prop->val.strlist, str);
+            dbus_message_iter_next(&list_iter);
           }
-          break;
-        default:
-          printf("Error: unexpected property type (%s): %c\n", name, 
dbus_message_iter_get_arg_type(&v_iter));
-          break;
-      }
-      ecore_hash_set(ret->properties, (void *)ecore_string_instance(name), 
prop);
-
-
-      dbus_message_iter_next(&a_iter);
+        }
+        break;
+      default:
+        printf("Error: unexpected property type (%s): %c\n", name, 
dbus_message_iter_get_arg_type(&v_iter));
+        break;
     }
-  }
-  else printf("error, wrong type\n");
+    ecore_hash_set(ret->properties, (void *)ecore_string_instance(name), prop);
 
-  if (dbus_error_is_set(err))
-  {
-    /* XXX do something with an error */
-    printf("ERROR: %s,  %s!\n", err->name, err->message);
-    dbus_error_free(err);
-    goto error;
+    dbus_message_iter_next(&a_iter);
   }
 
-  if (cb->func)
-    cb->func(cb->user_data, ret, err);
-
-error:
-  if (ret) 
-  {
-    if (ret->properties) ecore_hash_destroy(ret->properties);
-    free(ret);
-  }
-  e_hal_callback_free(cb);
+  return ret;
 }
 
 int
-e_hal_device_get_all_properties(E_DBus_Connection *conn, const char *udi, 
E_Hal_Callback_Func cb_func, void *data)
+e_hal_device_get_all_properties(E_DBus_Connection *conn, const char *udi, 
E_DBus_Callback_Func cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   DBusMessage *msg;
   int ret;
 
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_device_call_new(udi, "GetAllProperties");
-  ret = e_dbus_message_send(conn, msg, cb_device_get_all_properties, -1, cb) ? 
1 : 0;
+  ret = e_dbus_method_call_send(conn, msg, 
unmarshal_device_get_all_properties, cb_func, -1, data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
@@ -193,49 +159,41 @@
 
 /* bool Device.QueryCapability(string udi) */
 
-static void 
-cb_device_query_capability(void *data, DBusMessage *msg, DBusError *err)
+// XXX this is same as Device_Exists in manager.
+static E_Hal_Device_Query_Capability_Return *
+unmarshal_device_query_capability(DBusMessage *msg, DBusError *err)
 {
-  E_Hal_Callback *cb = data;
   E_Hal_Device_Query_Capability_Return *ret = NULL;
   dbus_bool_t val;
 
-  if (!cb) return;
-  E_HAL_HANDLE_ERROR(cb, err);
-
-  ret = calloc(1, sizeof(E_Hal_Device_Query_Capability_Return));
-  if (!ret) return;
+  ret = calloc(1, sizeof(E_Hal_Manager_Device_Exists_Return));
+  if (!ret) 
+  {
+    dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
+    return NULL;
+  }
 
   dbus_message_get_args(msg, err, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID);
 
   if (dbus_error_is_set(err))
   {
-    /* XXX do something with an error */
-    printf("ERROR: %s,  %s!\n", err->name, err->message);
-    dbus_error_free(err);
-    goto error;
+    free(ret);
+    return NULL;
   }
 
   ret->boolean = val;
-  if (cb->func)
-    cb->func(cb->user_data, ret, err);
-
-error:
-  if(ret) free(ret);
-  e_hal_callback_free(cb);
+  return ret;
 }
 
 int
-e_hal_device_query_capability(E_DBus_Connection *conn, const char *udi, const 
char *capability, E_Hal_Callback_Func cb_func, void *data)
+e_hal_device_query_capability(E_DBus_Connection *conn, const char *udi, const 
char *capability, E_DBus_Callback_Func cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   DBusMessage *msg;
   int ret;
 
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_device_call_new(udi, "QueryCapability");
   dbus_message_append_args(msg, DBUS_TYPE_STRING, &capability, 
DBUS_TYPE_INVALID);
-  ret = e_dbus_message_send(conn, msg, cb_device_query_capability, -1, cb) ? 1 
: 0;
+  ret = e_dbus_method_call_send(conn, msg, unmarshal_device_query_capability, 
cb_func, -1, data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
@@ -244,20 +202,6 @@
 
 /* void Device.Mount(string mount_point, string fstype, array{string}options) 
*/
 
-static void 
-cb_device_volume_mount(void *data, DBusMessage *msg, DBusError *err)
-{
-  E_Hal_Callback *cb = data;
-
-  if (!cb) return;
-  E_HAL_HANDLE_ERROR(cb, err);
-  if (cb->func)
-    cb->func(cb->user_data, NULL, err);
-
-error:
-  e_hal_callback_free(cb);
-}
-
 /**
  * @brief Mount a Volume
  *
@@ -268,14 +212,12 @@
  * @param options a list of additional options (not sure... fstype dependant?)
  */
 int
-e_hal_device_volume_mount(E_DBus_Connection *conn, const char *udi, const char 
*mount_point, const char *fstype, Ecore_List *options, E_Hal_Callback_Func 
cb_func, void *data)
+e_hal_device_volume_mount(E_DBus_Connection *conn, const char *udi, const char 
*mount_point, const char *fstype, Ecore_List *options, E_DBus_Callback_Func 
cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   DBusMessage *msg;
   DBusMessageIter iter, subiter;
   int ret;
 
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_device_volume_call_new(udi, "Mount");
 
   dbus_message_iter_init_append(msg, &iter);
@@ -294,28 +236,13 @@
   }
   dbus_message_iter_close_container(&iter, &subiter) ;
 
-  ret = e_dbus_message_send(conn, msg, cb_device_volume_mount, -1, cb) ? 1 : 0;
+  ret = e_dbus_method_call_send(conn, msg, NULL, cb_func, -1, data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
 
 /* void Unmount(array{string} options) */
 
-static void 
-cb_device_volume_unmount(void *data, DBusMessage *msg, DBusError *err)
-{
-  E_Hal_Callback *cb = data;
-
-  if (!cb) return;
-  E_HAL_HANDLE_ERROR(cb, err);
-
-  if (cb->func)
-    cb->func(cb->user_data, NULL, err);
-
-error:
-  e_hal_callback_free(cb);
-}
-
 /**
  * @brief Mount a Volume
  *
@@ -324,14 +251,12 @@
  * @param options a list of additional options (not sure... fstype dependant?)
  */
 int
-e_hal_device_volume_unmount(E_DBus_Connection *conn, const char *udi, 
Ecore_List *options, E_Hal_Callback_Func cb_func, void *data)
+e_hal_device_volume_unmount(E_DBus_Connection *conn, const char *udi, 
Ecore_List *options, E_DBus_Callback_Func cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   DBusMessage *msg;
   DBusMessageIter iter, subiter;
   int ret;
 
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_device_volume_call_new(udi, "Unmount");
 
   dbus_message_iter_init_append(msg, &iter);
@@ -347,7 +272,7 @@
   }
   dbus_message_iter_close_container(&iter, &subiter) ;
 
-  ret = e_dbus_message_send(conn, msg, cb_device_volume_unmount, -1, cb) ? 1 : 
0;
+  ret = e_dbus_method_call_send(conn, msg, NULL, cb_func, -1, data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
===================================================================
RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/e_hal_manager.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_hal_manager.c     10 Jul 2007 23:44:01 -0000      1.7
+++ e_hal_manager.c     12 Jul 2007 02:14:27 -0000      1.8
@@ -1,38 +1,38 @@
 #include "E_Hal.h"
 #include "e_hal_private.h"
 
-static void cb_manager_get_all_devices(void *data, DBusMessage *msg, DBusError 
*err);
-static void cb_manager_device_exists(void *data, DBusMessage *msg, DBusError 
*err);
-static void cb_manager_find_device_string_match(void *data, DBusMessage *msg, 
DBusError *err);
-static void cb_manager_find_device_by_capability(void *data, DBusMessage *msg, 
DBusError *err);
-
 #define e_hal_manager_call_new(member) 
dbus_message_new_method_call(E_HAL_SENDER, E_HAL_MANAGER_PATH, 
E_HAL_MANAGER_INTERFACE, member)
 
-
-
 /* GetAllDevices */
 
-static void 
-cb_manager_get_all_devices(void *data, DBusMessage *msg, DBusError *err)
+static E_Hal_String_List_Return *
+unmarshal_string_list(DBusMessage *msg, DBusError *err)
 {
-  E_Hal_Callback *cb = data;
-  E_Hal_Manager_Get_All_Devices_Return *ret = NULL;
+  E_Hal_String_List_Return *ret = NULL;
   DBusMessageIter iter, sub;
 
-  if (!cb) return;
+  if (!dbus_message_has_signature(msg, "as")) 
+  {
+    dbus_set_error(err, DBUS_ERROR_INVALID_SIGNATURE, "");
+    return NULL;
+  }
 
-  E_HAL_HANDLE_ERROR(cb, err);
+  ret = calloc(1, sizeof(E_Hal_String_List_Return));
+  if (!ret) 
+  {
+    dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
+    return NULL;
+  }
 
-  ret = calloc(1, sizeof(E_Hal_Manager_Get_All_Devices_Return));
-  if (!ret) goto error;
   ret->strings = ecore_list_new();
-  if (!ret->strings) goto error;
+  if (!ret->strings)
+  {
+    dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
+    free(ret);
+    return NULL;
+  }
 
   dbus_message_iter_init(msg, &iter);
-
-  if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
-      dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRING) goto 
error;
-
   dbus_message_iter_recurse(&iter, &sub);
   while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID)
   {
@@ -43,193 +43,86 @@
     dbus_message_iter_next(&sub);
   }
 
-  cb->func(cb->user_data, ret, err);
-
-error:
-  if (ret)
-  {
-    if (ret->strings) ecore_list_destroy(ret->strings);
-    free(ret);
-  }
-  e_hal_callback_free(cb);
+  return ret;
 }
 
 int
-e_hal_manager_get_all_devices(E_DBus_Connection *conn, E_Hal_Callback_Func 
cb_func, void *data)
+e_hal_manager_get_all_devices(E_DBus_Connection *conn, E_DBus_Callback_Func 
cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   DBusMessage *msg;
   int ret;
 
-  if (!cb_func) return 0;
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_manager_call_new("GetAllDevices");
-  /* add params here (for method calls that have them) */
-  ret = e_dbus_message_send(conn, msg, cb_manager_get_all_devices, -1, cb) ? 1 
: 0;
+  ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, -1, 
data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
 
 /* Manager.DeviceExists(string udi) */
 
-static void 
-cb_manager_device_exists(void *data, DBusMessage *msg, DBusError *err)
+static E_Hal_Manager_Device_Exists_Return *
+unmarshal_manager_device_exists(DBusMessage *msg, DBusError *err)
 {
-  E_Hal_Callback *cb = data;
   E_Hal_Manager_Device_Exists_Return *ret = NULL;
   dbus_bool_t val;
 
-  if (!cb) return;
-  E_HAL_HANDLE_ERROR(cb, err);
-
   ret = calloc(1, sizeof(E_Hal_Manager_Device_Exists_Return));
-  if (!ret) return;
+  if (!ret) 
+  {
+    dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
+    return NULL;
+  }
 
   dbus_message_get_args(msg, err, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID);
 
   if (dbus_error_is_set(err))
   {
-    if (cb->func)
-      cb->func(cb->user_data, NULL, err);
-    dbus_error_free(err);
-    goto error;
+    free(ret);
+    return NULL;
   }
 
   ret->boolean = val;
-  cb->func(cb->user_data, ret, err);
-
-error:
-  if (ret) free(ret);
-  e_hal_callback_free(cb);
+  return ret;
 }
 
 int
-e_hal_manager_device_exists(E_DBus_Connection *conn, const char *udi, 
E_Hal_Callback_Func cb_func, void *data)
+e_hal_manager_device_exists(E_DBus_Connection *conn, const char *udi, 
E_DBus_Callback_Func cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   int ret;
   DBusMessage *msg;
 
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_manager_call_new("DeviceExists");
   dbus_message_append_args(msg, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);
-  ret = e_dbus_message_send(conn, msg, cb_manager_device_exists, -1, cb) ? 1 : 
0;
+  ret = e_dbus_method_call_send(conn, msg, unmarshal_manager_device_exists, 
cb_func, -1, data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
 
 /* Manager.FindDeviceStringMatch */
-
-static void 
-cb_manager_find_device_string_match(void *data, DBusMessage *msg, DBusError 
*err)
-{
-  E_Hal_Callback *cb = data;
-  E_Hal_Manager_Find_Device_String_Match_Return *ret = NULL;
-  DBusMessageIter iter, sub;
-
-  if (!cb) return;
-  E_HAL_HANDLE_ERROR(cb, err);
-
-  ret = calloc(1, sizeof(E_Hal_Manager_Find_Device_String_Match_Return));
-  if (!ret) return;
-  ret->strings = ecore_list_new();
-  if (!ret->strings) goto error;
-
-  dbus_message_iter_init(msg, &iter);
-
-  if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
-      dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRING) goto 
error;
-
-  dbus_message_iter_recurse(&iter, &sub);
-  while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID)
-  {
-    char *dev = NULL;
-
-    dbus_message_iter_get_basic(&sub, &dev);
-    if (dev) ecore_list_append(ret->strings, dev);
-    dbus_message_iter_next(&sub);
-  }
-
-  cb->func(cb->user_data, ret, err);
-
-error:
-  if (ret)
-  {
-    if (ret->strings) ecore_list_destroy(ret->strings);
-    free(ret);
-  }
-  e_hal_callback_free(cb);
-}
-
 int
-e_hal_manager_find_device_string_match(E_DBus_Connection *conn, const char 
*key, const char *value, E_Hal_Callback_Func cb_func, void *data)
+e_hal_manager_find_device_string_match(E_DBus_Connection *conn, const char 
*key, const char *value, E_DBus_Callback_Func cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   DBusMessage *msg;
   int ret;
 
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_manager_call_new("FindDeviceStringMatch");
   dbus_message_append_args(msg, DBUS_TYPE_STRING, &key, DBUS_TYPE_STRING, 
&value, DBUS_TYPE_INVALID);
-  ret = e_dbus_message_send(conn, msg, cb_manager_find_device_string_match, 
-1, cb) ? 1 : 0;
+  ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, -1, 
data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
 
 /* Manager.FindDeviceByCapability */
 
-static void 
-cb_manager_find_device_by_capability(void *data, DBusMessage *msg, DBusError 
*err)
-{
-  E_Hal_Callback *cb = data;
-  E_Hal_Manager_Find_Device_By_Capability_Return *ret = NULL;
-  DBusMessageIter iter, sub;
-
-  if (!cb) return;
-  E_HAL_HANDLE_ERROR(cb, err);
-
-  ret = calloc(1, sizeof(E_Hal_Manager_Find_Device_By_Capability_Return));
-  if (!ret) return;
-  ret->strings = ecore_list_new();
-  if (!ret->strings) goto error;
-
-  dbus_message_iter_init(msg, &iter);
-
-  if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
-      dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRING) goto 
error;
-
-  dbus_message_iter_recurse(&iter, &sub);
-  while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID)
-  {
-    char *dev = NULL;
-
-    dbus_message_iter_get_basic(&sub, &dev);
-    if (dev) ecore_list_append(ret->strings, dev);
-    dbus_message_iter_next(&sub);
-  }
-
-  cb->func(cb->user_data, ret, err);
-
-error:
-  if (ret)
-  {
-    if (ret->strings) ecore_list_destroy(ret->strings);
-    free(ret);
-  }
-  e_hal_callback_free(cb);
-}
-
 int
-e_hal_manager_find_device_by_capability(E_DBus_Connection *conn, const char 
*capability, E_Hal_Callback_Func cb_func, void *data)
+e_hal_manager_find_device_by_capability(E_DBus_Connection *conn, const char 
*capability, E_DBus_Callback_Func cb_func, void *data)
 {
-  E_Hal_Callback *cb;
   DBusMessage *msg;
   int ret;
 
-  cb = e_hal_callback_new(cb_func, data);
   msg = e_hal_manager_call_new("FindDeviceByCapability");
   dbus_message_append_args(msg, DBUS_TYPE_STRING, &capability, 
DBUS_TYPE_INVALID);
-  ret = e_dbus_message_send(conn, msg, cb_manager_find_device_by_capability, 
-1, cb) ? 1 : 0;
+  ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, -1, 
data) ? 1 : 0;
   dbus_message_unref(msg);
   return ret;
 }
===================================================================
RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/e_hal_util.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_hal_util.c        14 Jun 2007 15:53:25 -0000      1.2
+++ e_hal_util.c        12 Jul 2007 02:14:27 -0000      1.3
@@ -3,37 +3,6 @@
 
 /**
  * @internal
- * @brief Create a callback structure
- * @param cb_func the callback function
- * @param user_data data to pass to the callback
- */
-E_Hal_Callback *
-e_hal_callback_new(E_Hal_Callback_Func cb_func, void *user_data)
-{
-  E_Hal_Callback *cb;
-
-  if (!cb_func) return NULL;
-
-  cb = calloc(1, sizeof(E_Hal_Callback));
-  if (!cb) return NULL;
-  cb->func = cb_func;
-  cb->user_data = user_data;
-  return cb;
-}
-
-/**
- * @internal
- * @brief Free a callback structure
- * @param callback the callback to free
- */
-void
-e_hal_callback_free(E_Hal_Callback *callback)
-{
-  free(callback);
-}
-
-/**
- * @internal
  * @brief free a property structure
  * @param prop the property to free
  */
@@ -127,12 +96,4 @@
 
   if (err) *err = 1;
   return NULL;
-}
-
-void 
-cb_error_generic(void *data, const char *name, const char *msg)
-{
-  E_Hal_Callback *cb = data;
-  printf("Error: %s :: %s\n", name, msg);
-  e_hal_callback_free(cb);
 }
===================================================================
RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/e_hal_util.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_hal_util.h        15 Mar 2007 08:59:19 -0000      1.1
+++ e_hal_util.h        12 Jul 2007 02:14:27 -0000      1.2
@@ -2,26 +2,6 @@
 #define E_HAL_UTIL_H
 
 #include "E_Hal.h"
-/**
- * A callback function for a Hal call
- * @param user_data the data passed in to the method call
- * @param event_data a struct containing the return data.
- *
- * For method calls, the return structs use the following naming convention:
- *   E_Hal_<Interface>_<Method_Call_Name>_Return
- */
-typedef void (*E_Hal_Callback_Func) (void *user_data, void *method_return);
-
-typedef struct E_Hal_Callback E_Hal_Callback;
-struct E_Hal_Callback
-{
-  E_Hal_Callback_Func func;
-  void *user_data;
-};
-
-E_Hal_Callback *e_hal_callback_new(E_Hal_Callback_Func cb_func, void 
*user_data);
-void e_hal_callback_free(E_Hal_Callback *callback);
-
 
 void e_hal_property_free(E_Hal_Property *prop);
 char *e_hal_property_string_get(E_Hal_Properties *properties, const char *key, 
int *err);
@@ -30,8 +10,5 @@
 dbus_uint64_t e_hal_property_uint64_get(E_Hal_Properties *properties, const 
char *key, int *err);
 double e_hal_property_double_get(E_Hal_Properties *properties, const char 
*key, int *err);
 Ecore_List *e_hal_property_strlist_get(E_Hal_Properties *properties, const 
char *key, int *err);
-
-
-void cb_error_generic(void *data, const char *name, const char *msg);
 
 #endif



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to