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