From: Enlightenment S. <no-...@en...> - 2012-09-21 22:44:17
|
Log: edbus: Reduce variable scope and add const where it's due Author: lucas Date: 2012-09-21 15:44:11 -0700 (Fri, 21 Sep 2012) New Revision: 77006 Trac: http://trac.enlightenment.org/e/changeset/77006 Modified: trunk/edbus/src/lib/edbus_signal_handler.c Modified: trunk/edbus/src/lib/edbus_signal_handler.c =================================================================== --- trunk/edbus/src/lib/edbus_signal_handler.c 2012-09-21 22:44:05 UTC (rev 77005) +++ trunk/edbus/src/lib/edbus_signal_handler.c 2012-09-21 22:44:11 UTC (rev 77006) @@ -79,8 +79,7 @@ edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...) { va_list ap; - char *key = NULL, *read; - Signal_Argument *arg; + const char *key = NULL, *read; DBusError err; EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(sh, EINA_FALSE); @@ -93,6 +92,8 @@ va_start(ap, sh); for (read = va_arg(ap, char *); read; read = va_arg(ap, char *)) { + Signal_Argument *arg; + if (!key) { key = read; |
From: Enlightenment S. <no-...@en...> - 2012-09-26 18:16:44
|
Log: edbus: Add edbus_signal_handler_match_extra_vset Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-09-26 11:16:34 -0700 (Wed, 26 Sep 2012) New Revision: 77095 Trac: http://trac.enlightenment.org/e/changeset/77095 Modified: trunk/edbus/src/lib/edbus_signal_handler.c trunk/edbus/src/lib/edbus_signal_handler.h Modified: trunk/edbus/src/lib/edbus_signal_handler.c =================================================================== --- trunk/edbus/src/lib/edbus_signal_handler.c 2012-09-26 18:16:28 UTC (rev 77094) +++ trunk/edbus/src/lib/edbus_signal_handler.c 2012-09-26 18:16:34 UTC (rev 77095) @@ -76,9 +76,8 @@ } EAPI Eina_Bool -edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...) +edbus_signal_handler_match_extra_vset(EDBus_Signal_Handler *sh, va_list ap) { - va_list ap; const char *key = NULL, *read; DBusError err; @@ -89,7 +88,6 @@ eina_strbuf_string_get(sh->match), &err); EINA_SAFETY_ON_TRUE_RETURN_VAL(dbus_error_is_set(&err), EINA_FALSE); - va_start(ap, sh); for (read = va_arg(ap, char *); read; read = va_arg(ap, char *)) { Signal_Argument *arg; @@ -119,7 +117,6 @@ } key = NULL; } - va_end(ap); dbus_error_init(&err); dbus_bus_add_match(sh->conn->dbus_conn, @@ -131,7 +128,6 @@ return EINA_FALSE; error: - va_end(ap); dbus_error_init(&err); dbus_bus_add_match(sh->conn->dbus_conn, eina_strbuf_string_get(sh->match), &err); @@ -140,6 +136,18 @@ return EINA_FALSE; } +EAPI Eina_Bool +edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...) +{ + Eina_Bool ret; + va_list ap; + + va_start(ap, sh); + ret = edbus_signal_handler_match_extra_vset(sh, ap); + va_end(ap); + return ret; +} + EAPI EDBus_Signal_Handler * edbus_signal_handler_add(EDBus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, EDBus_Signal_Cb cb, const void *cb_data) { Modified: trunk/edbus/src/lib/edbus_signal_handler.h =================================================================== --- trunk/edbus/src/lib/edbus_signal_handler.h 2012-09-26 18:16:28 UTC (rev 77094) +++ trunk/edbus/src/lib/edbus_signal_handler.h 2012-09-26 18:16:34 UTC (rev 77095) @@ -51,6 +51,23 @@ * http://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules */ EAPI Eina_Bool edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...) EINA_ARG_NONNULL(1) EINA_SENTINEL; +/** + * @brief Add extra argument in match of signal handler to obtain specifics signals. + * + * Example: + * edbus_signal_handler_match_extra_set(sh, "arg0", "org.bansheeproject.Banshee", "arg1", "", NULL); + * With this extra arguments this signal handler callback only will be called + * when Banshee is started. + * + * @note For now is only supported argX. + * + * @param sh signal handler + * @param ap va_list with the keys and values, must be ended with a NULL + * + * @note To information: + * http://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules + */ +EAPI Eina_Bool edbus_signal_handler_match_extra_vset(EDBus_Signal_Handler *sh, va_list ap); /** * @brief Add a callback function to be called when signal handler will be freed. |
From: Enlightenment S. <no-...@en...> - 2012-10-02 21:02:23
|
Log: edbus: Fix typos Patch by: Luis Felipe Strano Moraes <lui...@gm...> Author: lucas Date: 2012-10-02 14:02:16 -0700 (Tue, 02 Oct 2012) New Revision: 77335 Trac: http://trac.enlightenment.org/e/changeset/77335 Modified: trunk/edbus/src/lib/EDBus.h trunk/edbus/src/lib/edbus_connection.h trunk/edbus/src/lib/edbus_message.h trunk/edbus/src/lib/edbus_object.h trunk/edbus/src/lib/edbus_proxy.h trunk/edbus/src/lib/edbus_service.h trunk/edbus/src/lib/edbus_signal_handler.h Modified: trunk/edbus/src/lib/EDBus.h =================================================================== --- trunk/edbus/src/lib/EDBus.h 2012-10-02 20:28:17 UTC (rev 77334) +++ trunk/edbus/src/lib/EDBus.h 2012-10-02 21:02:16 UTC (rev 77335) @@ -81,19 +81,19 @@ /** * @typedef EDBus_Object * - * Represents a object path already attach with bus name or unique id. + * Represents an object path already attached with bus name or unique id. */ typedef struct _EDBus_Object EDBus_Object; /** * @typedef EDBus_Proxy * - * Represents a interface of a object path. + * Represents an interface of an object path. */ typedef struct _EDBus_Proxy EDBus_Proxy; /** * @typedef EDBus_Message * - * Represents the way of how the data is send and received in DBus. + * Represents the way data is sent and received in DBus. */ typedef struct _EDBus_Message EDBus_Message; /** @@ -107,7 +107,7 @@ /** * @typedef EDBus_Pending * - * Represents a message that was been sent but has not yet reached its + * Represents a message that has been sent but has not yet reached its * destination. */ typedef struct _EDBus_Pending EDBus_Pending; Modified: trunk/edbus/src/lib/edbus_connection.h =================================================================== --- trunk/edbus/src/lib/edbus_connection.h 2012-10-02 20:28:17 UTC (rev 77334) +++ trunk/edbus/src/lib/edbus_connection.h 2012-10-02 21:02:16 UTC (rev 77335) @@ -36,7 +36,7 @@ EAPI EDBus_Connection *edbus_connection_ref(EDBus_Connection *conn) EINA_ARG_NONNULL(1); /** - * @brief Decrement object reference count. + * @brief Decrement connection reference count. * * If reference count reaches 0, the connection to bus will be dropped and all * its children will be invalidated. @@ -48,7 +48,7 @@ * * @param conn The connection object to add the callback to. * @param cb callback to be called - * @param data passed to callback + * @param data data passed to callback */ EAPI void edbus_connection_cb_free_add(EDBus_Connection *conn, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2); @@ -69,8 +69,8 @@ /** * @brief Get data stored in connection. * - * @param conn connection where data are stored - * @param key that identify data + * @param conn connection where data is stored + * @param key key that identifies data * * @return pointer to data if found otherwise NULL */ @@ -79,8 +79,8 @@ /** * @brief Del data stored in connection. * - * @param conn connection where data are stored - * @param key that identify data + * @param conn connection where data is stored + * @param key that identifies data * * @return pointer to data if found otherwise NULL */ @@ -116,7 +116,7 @@ typedef void (*EDBus_Connection_Event_Cb)(void *data, EDBus_Connection *conn, void *event_info); /** - * @brief Add a callback function to be called when occurs a event of the + * @brief Add a callback function to be called when an event occurs of the * type passed. */ EAPI void edbus_connection_event_callback_add(EDBus_Connection *conn, EDBus_Connection_Event_Type type, EDBus_Connection_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3); @@ -129,12 +129,12 @@ /** * @brief Send a message. * - * @param conn the connection where the message will be send - * @param msg message that will be send + * @param conn the connection where the message will be sent + * @param msg message that will be sent * @param cb if msg is a method call a callback should be passed - * to be execute when response arrive + * to be executed when a response arrives * @param cb_data data passed to callback - * @param timeout timeout in milliseconds, -1 to default internal value or + * @param timeout timeout in milliseconds, -1 to use default internal value or * EDBUS_TIMEOUT_INFINITE for no timeout */ EAPI EDBus_Pending *edbus_connection_send(EDBus_Connection *conn, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout) EINA_ARG_NONNULL(1, 2); Modified: trunk/edbus/src/lib/edbus_message.h =================================================================== --- trunk/edbus/src/lib/edbus_message.h 2012-10-02 20:28:17 UTC (rev 77334) +++ trunk/edbus/src/lib/edbus_message.h 2012-10-02 21:02:16 UTC (rev 77335) @@ -25,7 +25,7 @@ EAPI EDBus_Message *edbus_message_ref(EDBus_Message *msg) EINA_ARG_NONNULL(1); /** * @brief Decrease message reference. - * If reference == 0 message will be freed and all your children's. + * If reference == 0 message will be freed and all its children. */ EAPI void edbus_message_unref(EDBus_Message *msg) EINA_ARG_NONNULL(1); @@ -72,29 +72,29 @@ EAPI Eina_Bool edbus_message_error_get(const EDBus_Message *msg, const char **name, const char **text) EINA_ARG_NONNULL(1); /** - * @brief Get data from EDBus_Message, for each complete type must have - * a pointer to store his value, in case of complex type a - * EDBus_Message_Iter will be need. + * @brief Get data from EDBus_Message. For each complete type we must have + * a pointer to store its value. In case of complex type EDBus_Message_Iter + * needs to be need. */ EAPI Eina_Bool edbus_message_arguments_get(const EDBus_Message *msg, const char *signature, ...) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; /** - * @brief Get data from EDBus_Message, for each complete type must have - * a pointer to store his value, in case of complex type a - * EDBus_Message_Iter will be need. + * @brief Get data from EDBus_Message. For each complete type we must have + * a pointer to store its value, in case of complex type + * EDBus_Message_Iter needs to be used. */ EAPI Eina_Bool edbus_message_arguments_vget(const EDBus_Message *msg, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; /** * @brief Set data to EDBus_Message. * - * This function only support basic type from complex type use + * This function only supports basic type, for complex types use * edbus_message_iter_* functions. */ EAPI Eina_Bool edbus_message_arguments_set(EDBus_Message *msg, const char *signature, ...) EINA_ARG_NONNULL(1, 2); /** * @brief Set data to EDBus_Message. * - * This function only support basic type from complex type use + * This function only supports basic types, for complex types use * edbus_message_iter_* functions. */ EAPI Eina_Bool edbus_message_arguments_vset(EDBus_Message *msg, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2); Modified: trunk/edbus/src/lib/edbus_object.h =================================================================== --- trunk/edbus/src/lib/edbus_object.h 2012-10-02 20:28:17 UTC (rev 77334) +++ trunk/edbus/src/lib/edbus_object.h 2012-10-02 21:02:16 UTC (rev 77335) @@ -7,10 +7,10 @@ * @{ */ /** - * @brief Get a object of the following bus and path. + * @brief Get an object of the given bus and path. * * @param conn connection where object belongs - * @param bus name of bus or unique-id of who listen for calls of this object + * @param bus name of bus or unique-id of who listens for calls of this object * @param path object path of this object */ EAPI EDBus_Object *edbus_object_get(EDBus_Connection *conn, const char *bus, const char *path) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT; @@ -20,15 +20,15 @@ EAPI EDBus_Object *edbus_object_ref(EDBus_Object *obj) EINA_ARG_NONNULL(1); /** * @brief Decrease object reference. - * If reference == 0 object will be freed and all your children's. + * If reference == 0 object will be freed and all its children. */ EAPI void edbus_object_unref(EDBus_Object *obj) EINA_ARG_NONNULL(1); /** * @brief Add a callback function to be called when object will be freed. * - * @param obj object that you want to know when it will be free - * @param cb callback that will be execute + * @param obj object that you want to monitor + * @param cb callback that will be executed * @param data passed to callback */ EAPI void edbus_object_cb_free_add(EDBus_Object *obj, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2); @@ -76,8 +76,8 @@ typedef void (*EDBus_Object_Event_Cb)(void *data, EDBus_Object *obj, void *event_info); /** - * @brief Add a callback function to be called when occurs a event of the - * type passed. + * @brief Add a callback function to be called when an event of the specified + * type occurs. */ EAPI void edbus_object_event_callback_add(EDBus_Object *obj, EDBus_Object_Event_Type type, EDBus_Object_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3); /** @@ -92,10 +92,10 @@ /** * @brief Send a message. * - * @param obj the msg will be send in connection that obj belongs - * @param msg message that will be send + * @param obj the msg will be sent in connection to this object + * @param msg message that will be sent * @param cb if msg is a method call a callback should be passed - * to be execute when response arrive + * to be executed when a response arrives * @param cb_data data passed to callback * @param timeout timeout in milliseconds, -1 to default internal value or * EDBUS_TIMEOUT_INFINITE for no timeout Modified: trunk/edbus/src/lib/edbus_proxy.h =================================================================== --- trunk/edbus/src/lib/edbus_proxy.h 2012-10-02 20:28:17 UTC (rev 77334) +++ trunk/edbus/src/lib/edbus_proxy.h 2012-10-02 21:02:16 UTC (rev 77335) @@ -16,7 +16,7 @@ EAPI EDBus_Proxy *edbus_proxy_ref(EDBus_Proxy *proxy) EINA_ARG_NONNULL(1); /** * @brief Decrease proxy reference. - * If reference == 0 proxy will be freed and all your children's. + * If reference == 0 proxy will be freed and all your children. */ EAPI void edbus_proxy_unref(EDBus_Proxy *proxy) EINA_ARG_NONNULL(1); Modified: trunk/edbus/src/lib/edbus_service.h =================================================================== --- trunk/edbus/src/lib/edbus_service.h 2012-10-02 20:28:17 UTC (rev 77334) +++ trunk/edbus/src/lib/edbus_service.h 2012-10-02 21:02:16 UTC (rev 77335) @@ -46,7 +46,7 @@ } EDBus_Signal; /** - * @brief Register a interface on the passed path and connection. + * @brief Register an interface in the given path and connection. * * @param conn where the interface should listen * @param path object path @@ -63,8 +63,8 @@ EAPI EDBus_Service_Interface *edbus_service_interface_register(EDBus_Connection *conn, const char *path, const char *interface, const EDBus_Method methods[], const EDBus_Signal signals[]); /** * @brief Unregister a interface. - * If this is the last interface of object path, the object path will be - * remove too. + * If this is the last interface of the object path, the object path will be + * removed too. */ EAPI void edbus_service_interface_unregister(EDBus_Service_Interface *iface); /** @@ -89,7 +89,7 @@ * @brief Create signal message. * Each signal handler have a internal id, the first signal handler of * interface is = 0 the second = 1 and go on. - * This function is used when signal have complex types. + * This function is used when the signal has complex types. * * @param iface interface of the signal * @param signal_id id of signal @@ -100,7 +100,7 @@ */ EAPI Eina_Bool edbus_service_signal_send(EDBus_Service_Interface *iface, EDBus_Message *signal_msg) EINA_ARG_NONNULL(1, 2); /** - * @brief Store data at object path, this data can be get from all interfaces + * @brief Store data at object path, this data can be obtained from all interfaces * of the same object. * * @param iface interface that belong to the object path where data will @@ -112,7 +112,7 @@ /** * @brief Get data stored in object path. * - * @param iface interface that belong to the object path where data are stored + * @param iface interface that belongs to the object path where data are stored * @param key that identify data * * @return pointer to data if found otherwise NULL @@ -121,7 +121,7 @@ /** * @brief Del data stored in object path. * - * @param iface interface that belong to the object path where data are stored + * @param iface interface that belongs to the object path where data are stored * @param key that identify data * * @return pointer to data if found otherwise NULL Modified: trunk/edbus/src/lib/edbus_signal_handler.h =================================================================== --- trunk/edbus/src/lib/edbus_signal_handler.h 2012-10-02 20:28:17 UTC (rev 77334) +++ trunk/edbus/src/lib/edbus_signal_handler.h 2012-10-02 21:02:16 UTC (rev 77335) @@ -30,8 +30,8 @@ EAPI void edbus_signal_handler_unref(EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1); /** * @brief Decrease signal handler reference like edbus_signal_handler_unref() - * but if reference > 0 this signal handler will stop listen signals. In other - * words will be canceled but memory will not be freed. + * but if reference > 0 this signal handler will stop listening to signals. In other + * words it will be canceled but memory will not be freed. */ EAPI void edbus_signal_handler_del(EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1); /** @@ -42,12 +42,12 @@ * With this extra arguments this signal handler callback only will be called * when Banshee is started. * - * @note For now is only supported argX. + * @note For now only argX is supported. * * @param sh signal handler * @param ... variadic of key and value and must be ended with a NULL * - * @note To information: + * @note For more information: * http://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules */ EAPI Eina_Bool edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...) EINA_ARG_NONNULL(1) EINA_SENTINEL; |
From: Enlightenment S. <no-...@en...> - 2012-10-02 21:42:09
|
Log: edbus: Improve doc of name_owner_changed_callback_add() Explain the reason for the extra flag on this function. Author: lucas Date: 2012-10-02 14:42:02 -0700 (Tue, 02 Oct 2012) New Revision: 77339 Trac: http://trac.enlightenment.org/e/changeset/77339 Modified: trunk/edbus/src/lib/edbus_freedesktop.h Modified: trunk/edbus/src/lib/edbus_freedesktop.h =================================================================== --- trunk/edbus/src/lib/edbus_freedesktop.h 2012-10-02 21:41:58 UTC (rev 77338) +++ trunk/edbus/src/lib/edbus_freedesktop.h 2012-10-02 21:42:02 UTC (rev 77339) @@ -40,6 +40,12 @@ /** * Add a callback to be called when unique id of a bus name changed. * + * This function implicitly calls edbus_name_owner_get() in order to be able to + * monitor the name. If the only interest is to receive notifications when the + * name in fact changes, pass EINA_FALSE to @param allow_initial_call so your + * callback will not be called on first retrieval of name owner. If the + * initial state is important, pass EINA_TRUE to this parameter. + * * @param conn connection * @param bus name of bus * @param cb callback |
From: Enlightenment S. <no-...@en...> - 2012-10-09 15:23:34
|
Log: edbus: Remove edbus_real_method Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-09 08:23:25 -0700 (Tue, 09 Oct 2012) New Revision: 77656 Trac: http://trac.enlightenment.org/e/changeset/77656 Modified: trunk/edbus/src/lib/edbus_private_types.h trunk/edbus/src/lib/edbus_service.c Modified: trunk/edbus/src/lib/edbus_private_types.h =================================================================== --- trunk/edbus/src/lib/edbus_private_types.h 2012-10-09 15:23:13 UTC (rev 77655) +++ trunk/edbus/src/lib/edbus_private_types.h 2012-10-09 15:23:25 UTC (rev 77656) @@ -159,10 +159,4 @@ const char *value; } Signal_Argument; -typedef struct _EDBus_Real_Method -{ - const EDBus_Method *method; - const char *in; -} EDBus_Real_Method; - #endif Modified: trunk/edbus/src/lib/edbus_service.c =================================================================== --- trunk/edbus/src/lib/edbus_service.c 2012-10-09 15:23:13 UTC (rev 77655) +++ trunk/edbus/src/lib/edbus_service.c 2012-10-09 15:23:25 UTC (rev 77656) @@ -121,7 +121,7 @@ static void _introspect_append_interface(Eina_Strbuf *buf, EDBus_Service_Interface *iface) { - EDBus_Real_Method *method; + EDBus_Method *method; Eina_Iterator *iterator; unsigned short i; unsigned int size; @@ -129,7 +129,7 @@ eina_strbuf_append_printf(buf, "<interface name=\"%s\">", iface->name); iterator = eina_hash_iterator_data_new(iface->methods); EINA_ITERATOR_FOREACH(iterator, method) - _introspect_append_method(buf, method->method); + _introspect_append_method(buf, method); eina_iterator_free(iterator); size = eina_array_count(iface->sign_of_signals); @@ -180,30 +180,20 @@ static void _introspectable_create(void) { - EDBus_Real_Method *r_instrospect; introspectable = calloc(1, sizeof(EDBus_Service_Interface)); EINA_SAFETY_ON_NULL_RETURN(introspectable); - r_instrospect = malloc(sizeof(EDBus_Real_Method)); - EINA_SAFETY_ON_NULL_RETURN(r_instrospect); - r_instrospect->in = ""; - r_instrospect->method = &instrospect; - EINA_MAGIC_SET(introspectable, EDBUS_SERVICE_INTERFACE_MAGIC); introspectable->sign_of_signals = eina_array_new(1); introspectable->name = eina_stringshare_add("org.freedesktop.DBus.Introspectable"); introspectable->methods = eina_hash_string_small_new(NULL); - eina_hash_add(introspectable->methods, instrospect.member, r_instrospect); + eina_hash_add(introspectable->methods, instrospect.member, &instrospect); } static void _instrospectable_free(void) { - EDBus_Real_Method *method; - method = eina_hash_find(introspectable->methods, instrospect.member); - eina_stringshare_del(method->in); - free(method); eina_hash_free(introspectable->methods); eina_stringshare_del(introspectable->name); eina_array_free(introspectable->sign_of_signals); @@ -270,47 +260,37 @@ } static Eina_Bool +_have_signature(const EDBus_Arg_Info *args, EDBus_Message *msg) +{ + const char *sig = dbus_message_get_signature(msg->dbus_msg); + const char *p = NULL; + + for (; args->signature && *args->signature && *sig; args++) + { + p = args->signature; + for (; *sig && *p; sig++, p++) + { + if (*p != *sig) + return EINA_FALSE; + } + } + + if (*sig || (p && *p) || (args->signature && *args->signature)) + return EINA_FALSE; + + return EINA_TRUE; +} + +static Eina_Bool _edbus_service_method_add(EDBus_Service_Interface *interface, EDBus_Method *method) { - EDBus_Real_Method *rm; - Eina_Strbuf *buf; - int z; EINA_SAFETY_ON_TRUE_RETURN_VAL(!!eina_hash_find(interface->methods, method->member), EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(method->member, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(method->cb, EINA_FALSE); - buf = eina_strbuf_new(); - for (z = 0; &method->in[z] && method->in[z].signature; z++) - eina_strbuf_append(buf, method->in[z].signature); - EINA_SAFETY_ON_FALSE_GOTO( - dbus_signature_validate(eina_strbuf_string_get(buf), NULL), - error); - - rm = malloc(sizeof(EDBus_Real_Method)); - EINA_SAFETY_ON_NULL_GOTO(rm, error); - rm->method = method; - rm->in = eina_stringshare_add(eina_strbuf_string_get(buf)); - eina_strbuf_free(buf); - - //check if out is valid - buf = eina_strbuf_new(); - for (z = 0; &method->out[z] && method->out[z].signature; z++) - eina_strbuf_append(buf, method->out[z].signature); - EINA_SAFETY_ON_FALSE_GOTO( - dbus_signature_validate(eina_strbuf_string_get(buf), NULL), - invalid_out); - - eina_strbuf_free(buf); - eina_hash_add(interface->methods, method->member, rm); + eina_hash_add(interface->methods, method->member, method); return EINA_TRUE; - -invalid_out: - eina_stringshare_del(rm->in); - free(rm); -error: - eina_strbuf_free(buf); - return EINA_FALSE; } EAPI EDBus_Service_Interface * @@ -377,17 +357,8 @@ _interface_free(EDBus_Service_Interface *interface) { unsigned size, i; - Eina_Iterator *iterator; - EDBus_Real_Method *method; if (interface == introspectable) return; - iterator = eina_hash_iterator_data_new(interface->methods); - EINA_ITERATOR_FOREACH(iterator, method) - { - eina_stringshare_del(method->in); - free(method); - } - eina_iterator_free(iterator); eina_hash_free(interface->methods); eina_stringshare_del(interface->name); size = eina_array_count(interface->sign_of_signals); @@ -458,7 +429,7 @@ { EDBus_Service_Object *obj; EDBus_Service_Interface *iface; - EDBus_Real_Method *method; + EDBus_Method *method; EDBus_Message *edbus_msg; EDBus_Message *reply; @@ -488,18 +459,16 @@ edbus_msg->dbus_msg = msg; dbus_message_iter_init(edbus_msg->dbus_msg, &edbus_msg->iterator->dbus_iterator); - if (method->in && !dbus_message_has_signature(msg, method->in)) + if (!_have_signature(method->in, edbus_msg)) { - char buf[DBUS_MAXIMUM_SIGNATURE_LENGTH + - sizeof("Expected signature: ")]; - snprintf(buf, sizeof(buf), "Expected signature: %s", method->in); reply = edbus_message_error_new(edbus_msg, - DBUS_ERROR_INVALID_SIGNATURE, buf); + DBUS_ERROR_INVALID_SIGNATURE, + "See introspectable to know the expected signature"); } else { if (iface->obj) - reply = method->method->cb(iface, edbus_msg); + reply = method->cb(iface, edbus_msg); else { //if iface does have obj it is some of FreeDesktop interfaces: @@ -513,7 +482,7 @@ return DBUS_HANDLER_RESULT_NEED_MEMORY; } cpy->obj = obj; - reply = method->method->cb(cpy, edbus_msg); + reply = method->cb(cpy, edbus_msg); free(cpy); } } |
From: Enlightenment S. <no-...@en...> - 2012-10-16 15:07:27
|
Log: edbus: Add const EDBus_Message parameter of edbus_message_iter_get Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-16 08:07:17 -0700 (Tue, 16 Oct 2012) New Revision: 78068 Trac: http://trac.enlightenment.org/e/changeset/78068 Modified: trunk/edbus/src/lib/edbus_message.c trunk/edbus/src/lib/edbus_message.h Modified: trunk/edbus/src/lib/edbus_message.c =================================================================== --- trunk/edbus/src/lib/edbus_message.c 2012-10-16 15:07:11 UTC (rev 78067) +++ trunk/edbus/src/lib/edbus_message.c 2012-10-16 15:07:17 UTC (rev 78068) @@ -241,7 +241,7 @@ } EAPI EDBus_Message_Iter * -edbus_message_iter_get(EDBus_Message *msg) +edbus_message_iter_get(const EDBus_Message *msg) { EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL); /* Something went wrong, msg->iterator should not be NULL */ Modified: trunk/edbus/src/lib/edbus_message.h =================================================================== --- trunk/edbus/src/lib/edbus_message.h 2012-10-16 15:07:11 UTC (rev 78067) +++ trunk/edbus/src/lib/edbus_message.h 2012-10-16 15:07:17 UTC (rev 78068) @@ -177,7 +177,7 @@ /** * @brief Get the main EDBus_Message_Iter from the EDBus_Message. */ -EAPI EDBus_Message_Iter *edbus_message_iter_get(EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; +EAPI EDBus_Message_Iter *edbus_message_iter_get(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; /** * @brief Get a basic type from EDBus_Iterator. */ |
From: Enlightenment S. <no-...@en...> - 2012-10-16 22:35:56
|
Log: edbus: Fix type check of solo structs When reading messages that contain structs the type that comes from the wire (and obtained with dbus_message_iter_get_arg_type()) is 'r'. However 'r' never appears in a signature and dbus_signature_iter_* returns '('. Ref: http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-signatures "STRUCT has a type code, ASCII character 'r', but this type code does not appear in signatures. Instead, ASCII characters '(' and ')' are used to mark the beginning and end of the struct. So for example, a struct containing two integers would have this signature:" Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-16 15:35:50 -0700 (Tue, 16 Oct 2012) New Revision: 78072 Trac: http://trac.enlightenment.org/e/changeset/78072 Modified: trunk/edbus/src/lib/edbus_message.c Modified: trunk/edbus/src/lib/edbus_message.c =================================================================== --- trunk/edbus/src/lib/edbus_message.c 2012-10-16 22:35:44 UTC (rev 78071) +++ trunk/edbus/src/lib/edbus_message.c 2012-10-16 22:35:50 UTC (rev 78072) @@ -705,8 +705,13 @@ dbus_free(iter_sig); dbus_signature_iter_next(&signature_iter); - EINA_SAFETY_ON_FALSE_RETURN_VAL(c == current_type, EINA_FALSE); + if ((c != current_type) && !(current_type == 'r' && c == '(')) + { + ERR("Type in iterator different of signature"); + return EINA_FALSE; + } + if (dbus_type_is_basic(current_type)) get_basic(current_type, &iter->dbus_iterator, MAKE_PTR_FROM_VA_LIST(ap)); else |
From: Enlightenment S. <no-...@en...> - 2012-10-18 20:11:11
|
Log: edbus: Avoid call _on_signal_handler_free over freed object or proxy If a signal handler callback remove the last reference of his parent, his parent will unref all your childrens including signal handler, but signal handler could not be freed until your callback was finish so a event to delete it will be created and when this event happen the signal handler parent was already freed and we could not call _on_signal_handler_free(). Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-18 13:11:04 -0700 (Thu, 18 Oct 2012) New Revision: 78198 Trac: http://trac.enlightenment.org/e/changeset/78198 Modified: trunk/edbus/src/lib/edbus_object.c trunk/edbus/src/lib/edbus_proxy.c Modified: trunk/edbus/src/lib/edbus_object.c =================================================================== --- trunk/edbus/src/lib/edbus_object.c 2012-10-18 19:56:19 UTC (rev 78197) +++ trunk/edbus/src/lib/edbus_object.c 2012-10-18 20:11:04 UTC (rev 78198) @@ -59,6 +59,7 @@ static void _edbus_object_event_callback_call(EDBus_Object *obj, EDBus_Object_Event_Type type, const void *event_info); static void _edbus_object_context_event_cb_del(EDBus_Object_Context_Event *ce, EDBus_Object_Context_Event_Cb *ctx); static void _on_connection_free(void *data, const void *dead_pointer); +static void _on_signal_handler_free(void *data, const void *dead_pointer); static void _edbus_object_call_del(EDBus_Object *obj) @@ -122,6 +123,8 @@ _edbus_object_free(EDBus_Object *obj) { unsigned int i; + EDBus_Signal_Handler *h; + if (obj->proxies) { Eina_Iterator *iterator = eina_hash_iterator_data_new(obj->proxies); @@ -133,11 +136,11 @@ eina_hash_free(obj->proxies); } - if (obj->signal_handlers) + EINA_LIST_FREE (obj->signal_handlers, h) { - EDBus_Signal_Handler *h; - CRITICAL("Object %p released with live signal handlers!", obj); - EINA_LIST_FREE (obj->signal_handlers, h) + if (h->dangling) + edbus_signal_handler_cb_free_del(h, _on_signal_handler_free, obj); + else ERR("obj=%p alive handler=%p %s", obj, h, edbus_signal_handler_match_get(h)); } Modified: trunk/edbus/src/lib/edbus_proxy.c =================================================================== --- trunk/edbus/src/lib/edbus_proxy.c 2012-10-18 19:56:19 UTC (rev 78197) +++ trunk/edbus/src/lib/edbus_proxy.c 2012-10-18 20:11:04 UTC (rev 78198) @@ -84,6 +84,7 @@ static void _edbus_proxy_event_callback_call(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type, const void *event_info); static void _edbus_proxy_context_event_cb_del(EDBus_Proxy_Context_Event *ce, EDBus_Proxy_Context_Event_Cb *ctx); +static void _on_signal_handler_free(void *data, const void *dead_pointer); static void _edbus_proxy_call_del(EDBus_Proxy *proxy) @@ -145,13 +146,15 @@ _edbus_proxy_free(EDBus_Proxy *proxy) { unsigned int i; - if (proxy->handlers) + EDBus_Signal_Handler *h; + + EINA_LIST_FREE (proxy->handlers, h) { - EDBus_Signal_Handler *h; - CRITICAL("Proxy %p released with live signal handlers!", proxy); - EINA_LIST_FREE (proxy->handlers, h) - ERR("proxy=%p alive handler=%p %s", proxy, h, - edbus_signal_handler_match_get(h)); + if (h->dangling) + edbus_signal_handler_cb_free_del(h, _on_signal_handler_free, proxy); + else + ERR("proxy=%p alive handler=%p %s", proxy, h, + edbus_signal_handler_match_get(h)); } if (proxy->pendings) |
From: Enlightenment S. <no-...@en...> - 2012-10-18 20:11:16
|
Log: edbus: Add a private function edbus_message_iter_sub_iter_get() Function will be used in a future patch. Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-18 13:11:10 -0700 (Thu, 18 Oct 2012) New Revision: 78199 Trac: http://trac.enlightenment.org/e/changeset/78199 Modified: trunk/edbus/src/lib/edbus_message.c trunk/edbus/src/lib/edbus_message.h trunk/edbus/src/lib/edbus_private.h Modified: trunk/edbus/src/lib/edbus_message.c =================================================================== --- trunk/edbus/src/lib/edbus_message.c 2012-10-18 20:11:04 UTC (rev 78198) +++ trunk/edbus/src/lib/edbus_message.c 2012-10-18 20:11:10 UTC (rev 78199) @@ -527,6 +527,20 @@ dbus_message_iter_get_basic(&iter->dbus_iterator, value); } +EDBus_Message_Iter * +edbus_message_iter_sub_iter_get(EDBus_Message_Iter *iter) +{ + EDBus_Message_Iter *sub; + EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, NULL); + + sub = _message_iterator_new(EINA_FALSE); + dbus_message_iter_recurse(&iter->dbus_iterator, &sub->dbus_iterator); + iter->iterators = eina_inlist_append(iter->iterators, + EINA_INLIST_GET(sub)); + return sub; +} + EAPI char* edbus_message_iter_signature_get(EDBus_Message_Iter *iter) { Modified: trunk/edbus/src/lib/edbus_message.h =================================================================== --- trunk/edbus/src/lib/edbus_message.h 2012-10-18 20:11:04 UTC (rev 78198) +++ trunk/edbus/src/lib/edbus_message.h 2012-10-18 20:11:10 UTC (rev 78199) @@ -182,6 +182,7 @@ * @brief Get a basic type from EDBus_Iterator. */ EAPI void edbus_message_iter_basic_get(EDBus_Message_Iter *iter, void *value) EINA_ARG_NONNULL(1, 2); + /** * @brief Returns the current signature of a message iterator. * Modified: trunk/edbus/src/lib/edbus_private.h =================================================================== --- trunk/edbus/src/lib/edbus_private.h 2012-10-18 20:11:04 UTC (rev 78198) +++ trunk/edbus/src/lib/edbus_private.h 2012-10-18 20:11:10 UTC (rev 78199) @@ -72,6 +72,8 @@ EDBus_Pending *_edbus_connection_send(EDBus_Connection *conn, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout); +EDBus_Message_Iter *edbus_message_iter_sub_iter_get(EDBus_Message_Iter *iter); + #ifdef HAVE_VA_LIST_AS_ARRAY #define MAKE_PTR_FROM_VA_LIST(arg) ((va_list *)(arg)) #else |
From: Enlightenment S. <no-...@en...> - 2012-10-19 18:24:37
|
Log: edbus: Remove space after for-like macros Author: lucas Date: 2012-10-19 11:24:30 -0700 (Fri, 19 Oct 2012) New Revision: 78262 Trac: http://trac.enlightenment.org/e/changeset/78262 Modified: trunk/edbus/src/lib/edbus_core.c trunk/edbus/src/lib/edbus_object.c trunk/edbus/src/lib/edbus_proxy.c Modified: trunk/edbus/src/lib/edbus_core.c =================================================================== --- trunk/edbus/src/lib/edbus_core.c 2012-10-19 16:45:08 UTC (rev 78261) +++ trunk/edbus/src/lib/edbus_core.c 2012-10-19 18:24:30 UTC (rev 78262) @@ -176,7 +176,7 @@ else { EDBus_Pending *p; - EINA_INLIST_FOREACH (conn->pendings, p) + EINA_INLIST_FOREACH(conn->pendings, p) ERR("conn=%p alive pending call=%p dest=%s path=%s %s.%s()", conn, p, edbus_pending_destination_get(p), @@ -272,7 +272,7 @@ { EDBus_Context_Free_Cb *ctx; - EINA_INLIST_FOREACH (lst, ctx) + EINA_INLIST_FOREACH(lst, ctx) { if (ctx->cb != cb) continue; if ((data) && (ctx->data != data)) continue; @@ -300,7 +300,7 @@ unsigned int keylen = strlen(key); EDBus_Data *d; - EINA_INLIST_FOREACH (*p_lst, d) + EINA_INLIST_FOREACH(*p_lst, d) { if ((keylen == d->keylen) && (memcmp(key, d->key, keylen) == 0)) { @@ -845,7 +845,7 @@ &edbus_msg->iterator->dbus_iterator); conn->running_signal = EINA_TRUE; - EINA_INLIST_FOREACH (conn->signal_handlers, sh) + EINA_INLIST_FOREACH(conn->signal_handlers, sh) { if (sh->sender) { @@ -1061,7 +1061,7 @@ { CRITICAL("Connection %p released with live pending calls!", conn); - EINA_INLIST_FOREACH (conn->pendings, p) + EINA_INLIST_FOREACH(conn->pendings, p) ERR("conn=%p alive pending call=%p dest=%s path=%s %s.%s()", conn, p, edbus_pending_destination_get(p), @@ -1091,10 +1091,10 @@ dbus_connection_unref(conn->dbus_conn); conn->dbus_conn = NULL; - EINA_INLIST_FOREACH_SAFE (conn->fd_handlers, list, fd_handler) + EINA_INLIST_FOREACH_SAFE(conn->fd_handlers, list, fd_handler) edbus_fd_handler_del(fd_handler); - EINA_INLIST_FOREACH_SAFE (conn->timeouts, list, timer) + EINA_INLIST_FOREACH_SAFE(conn->timeouts, list, timer) edbus_timeout_data_free(timer->handler); edbus_data_del_all(&conn->data); @@ -1245,7 +1245,7 @@ cn = eina_hash_find(conn->names, bus); EINA_SAFETY_ON_NULL_RETURN(cn); - EINA_INLIST_FOREACH (cn->event_handlers.list, iter) + EINA_INLIST_FOREACH(cn->event_handlers.list, iter) { if (cb != iter->cb) continue; if ((cb_data) && (cb_data != iter->cb_data)) continue; @@ -1316,7 +1316,7 @@ ce = conn->event_handlers + type; - EINA_INLIST_FOREACH (ce->list, iter) + EINA_INLIST_FOREACH(ce->list, iter) { if (cb != iter->cb) continue; if ((cb_data) && (cb_data != iter->cb_data)) continue; @@ -1347,7 +1347,7 @@ ce = conn->event_handlers + type; ce->walking++; - EINA_INLIST_FOREACH (ce->list, iter) + EINA_INLIST_FOREACH(ce->list, iter) { if (iter->deleted) continue; iter->cb((void *)iter->cb_data, conn, (void *)event_info); @@ -1355,7 +1355,7 @@ ce->walking--; if (ce->walking > 0) return; - EINA_LIST_FREE (ce->to_delete, iter) + EINA_LIST_FREE(ce->to_delete, iter) _edbus_connection_context_event_cb_del(ce, iter); } Modified: trunk/edbus/src/lib/edbus_object.c =================================================================== --- trunk/edbus/src/lib/edbus_object.c 2012-10-19 16:45:08 UTC (rev 78261) +++ trunk/edbus/src/lib/edbus_object.c 2012-10-19 18:24:30 UTC (rev 78262) @@ -129,14 +129,14 @@ { Eina_Iterator *iterator = eina_hash_iterator_data_new(obj->proxies); EDBus_Proxy *proxy; - EINA_ITERATOR_FOREACH (iterator, proxy) + EINA_ITERATOR_FOREACH(iterator, proxy) ERR("obj=%p alive proxy=%p %s", obj, proxy, edbus_proxy_interface_get(proxy)); eina_iterator_free(iterator); eina_hash_free(obj->proxies); } - EINA_LIST_FREE (obj->signal_handlers, h) + EINA_LIST_FREE(obj->signal_handlers, h) { if (h->dangling) edbus_signal_handler_cb_free_del(h, _on_signal_handler_free, obj); @@ -302,7 +302,7 @@ ce = obj->event_handlers + type; - EINA_INLIST_FOREACH (ce->list, iter) + EINA_INLIST_FOREACH(ce->list, iter) { if (cb != iter->cb) continue; if ((cb_data) && (cb_data != iter->cb_data)) continue; @@ -333,7 +333,7 @@ ce = obj->event_handlers + type; ce->walking++; - EINA_INLIST_FOREACH (ce->list, iter) + EINA_INLIST_FOREACH(ce->list, iter) { if (iter->deleted) continue; iter->cb((void *)iter->cb_data, obj, (void *)event_info); @@ -341,7 +341,7 @@ ce->walking--; if (ce->walking > 0) return; - EINA_LIST_FREE (ce->to_delete, iter) + EINA_LIST_FREE(ce->to_delete, iter) _edbus_object_context_event_cb_del(ce, iter); } Modified: trunk/edbus/src/lib/edbus_proxy.c =================================================================== --- trunk/edbus/src/lib/edbus_proxy.c 2012-10-19 16:45:08 UTC (rev 78261) +++ trunk/edbus/src/lib/edbus_proxy.c 2012-10-19 18:24:30 UTC (rev 78262) @@ -148,7 +148,7 @@ unsigned int i; EDBus_Signal_Handler *h; - EINA_LIST_FREE (proxy->handlers, h) + EINA_LIST_FREE(proxy->handlers, h) { if (h->dangling) edbus_signal_handler_cb_free_del(h, _on_signal_handler_free, proxy); @@ -306,7 +306,7 @@ ce = proxy->event_handlers + type; - EINA_INLIST_FOREACH (ce->list, iter) + EINA_INLIST_FOREACH(ce->list, iter) { if (cb != iter->cb) continue; if ((cb_data) && (cb_data != iter->cb_data)) continue; @@ -337,7 +337,7 @@ ce = proxy->event_handlers + type; ce->walking++; - EINA_INLIST_FOREACH (ce->list, iter) + EINA_INLIST_FOREACH(ce->list, iter) { if (iter->deleted) continue; iter->cb((void *)iter->cb_data, proxy, (void *)event_info); @@ -345,7 +345,7 @@ ce->walking--; if (ce->walking > 0) return; - EINA_LIST_FREE (ce->to_delete, iter) + EINA_LIST_FREE(ce->to_delete, iter) _edbus_proxy_context_event_cb_del(ce, iter); } |
From: Enlightenment S. <no-...@en...> - 2012-10-26 16:46:06
|
Log: edbus: Fix instrospect signature Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-26 09:45:58 -0700 (Fri, 26 Oct 2012) New Revision: 78541 Trac: http://trac.enlightenment.org/e/changeset/78541 Modified: trunk/edbus/src/lib/edbus_service.c Modified: trunk/edbus/src/lib/edbus_service.c =================================================================== --- trunk/edbus/src/lib/edbus_service.c 2012-10-26 16:00:51 UTC (rev 78540) +++ trunk/edbus/src/lib/edbus_service.c 2012-10-26 16:45:58 UTC (rev 78541) @@ -172,10 +172,9 @@ return reply; } -static const EDBus_Method instrospect = { "Introspect", EDBUS_ARGS({ "", "" }), - EDBUS_ARGS({ "s", "xml" }), - cb_introspect, 0 - }; +static const EDBus_Method instrospect = { + "Introspect", NULL, EDBUS_ARGS({ "s", "xml" }), cb_introspect +}; static void _introspectable_create(void) |
From: Enlightenment S. <no-...@en...> - 2012-10-26 18:19:53
|
Log: edbus: Add edbus_proxy_properties_changed_callback_add Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-26 11:19:46 -0700 (Fri, 26 Oct 2012) New Revision: 78547 Trac: http://trac.enlightenment.org/e/changeset/78547 Modified: trunk/edbus/src/lib/edbus_freedesktop.h trunk/edbus/src/lib/edbus_proxy.c Modified: trunk/edbus/src/lib/edbus_freedesktop.h =================================================================== --- trunk/edbus/src/lib/edbus_freedesktop.h 2012-10-26 18:19:42 UTC (rev 78546) +++ trunk/edbus/src/lib/edbus_freedesktop.h 2012-10-26 18:19:46 UTC (rev 78547) @@ -102,7 +102,7 @@ EAPI EDBus_Pending *edbus_proxy_property_get(EDBus_Proxy *proxy, const char *name, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2, 3); EAPI EDBus_Pending *edbus_proxy_property_set(EDBus_Proxy *proxy, const char *name, char type, const void *value, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2, 4); EAPI EDBus_Pending *edbus_proxy_property_get_all(EDBus_Proxy *proxy, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2); -EAPI EDBus_Signal_Handler *edbus_proxy_properties_changed_callback_add(EDBus_Proxy *proxy, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2); +EAPI EDBus_Signal_Handler *edbus_proxy_properties_changed_callback_add(EDBus_Proxy *proxy, EDBus_Signal_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2); /** * Return the cached value of property. Modified: trunk/edbus/src/lib/edbus_proxy.c =================================================================== --- trunk/edbus/src/lib/edbus_proxy.c 2012-10-26 18:19:42 UTC (rev 78546) +++ trunk/edbus/src/lib/edbus_proxy.c 2012-10-26 18:19:46 UTC (rev 78547) @@ -346,16 +346,6 @@ eina_value_free(value); } -static void -_properties_changed_add(EDBus_Proxy *proxy) -{ - proxy->properties_changed = - edbus_proxy_signal_handler_add(get_properties_proxy(proxy), - "PropertiesChanged", _properties_changed, proxy); - edbus_signal_handler_match_extra_set(proxy->properties_changed, "arg0", - proxy->interface, NULL); -} - EAPI void edbus_proxy_event_callback_add(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type, EDBus_Proxy_Event_Cb cb, const void *cb_data) { @@ -380,12 +370,18 @@ if (proxy->properties_changed) return; if (!proxy->props) proxy->props = eina_hash_string_superfast_new(_props_cache_free); - _properties_changed_add(proxy); + proxy->properties_changed = + edbus_proxy_properties_changed_callback_add(proxy, + _properties_changed, + proxy); } else if (type == EDBUS_PROXY_EVENT_PROPERTY_REMOVED) { if (proxy->properties_changed) return; - _properties_changed_add(proxy); + proxy->properties_changed = + edbus_proxy_properties_changed_callback_add(proxy, + _properties_changed, + proxy); } } @@ -676,6 +672,18 @@ "s", proxy->interface); } +EAPI EDBus_Signal_Handler * +edbus_proxy_properties_changed_callback_add(EDBus_Proxy *proxy, EDBus_Signal_Cb cb, const void *data) +{ + EDBus_Signal_Handler *sh; + EDBUS_PROXY_CHECK_RETVAL(proxy, NULL); + sh = edbus_proxy_signal_handler_add(get_properties_proxy(proxy), + "PropertiesChanged", cb, data); + EINA_SAFETY_ON_NULL_RETURN_VAL(sh, NULL); + edbus_signal_handler_match_extra_set(sh, "arg0", proxy->interface, NULL); + return sh; +} + static void _property_iter(void *data, const void *key, EDBus_Message_Iter *var) { @@ -733,7 +741,10 @@ if (proxy->properties_changed) return; - _properties_changed_add(proxy); + proxy->properties_changed = + edbus_proxy_properties_changed_callback_add(proxy, + _properties_changed, + proxy); } else { |
From: Enlightenment S. <no-...@en...> - 2012-10-26 18:20:04
|
Log: edbus: Break while if a error happen in message_arguments_set Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-26 11:19:57 -0700 (Fri, 26 Oct 2012) New Revision: 78549 Trac: http://trac.enlightenment.org/e/changeset/78549 Modified: trunk/edbus/src/lib/edbus_message.c Modified: trunk/edbus/src/lib/edbus_message.c =================================================================== --- trunk/edbus/src/lib/edbus_message.c 2012-10-26 18:19:52 UTC (rev 78548) +++ trunk/edbus/src/lib/edbus_message.c 2012-10-26 18:19:57 UTC (rev 78549) @@ -283,7 +283,7 @@ EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE); dbus_signature_iter_init(&signature_iter, signature); - while ((type = dbus_signature_iter_get_signature(&signature_iter)) && r) + while ((type = dbus_signature_iter_get_signature(&signature_iter))) { if (type[0] != DBUS_TYPE_VARIANT && !type[1]) r = append_basic(type[0], MAKE_PTR_FROM_VA_LIST(ap), @@ -325,7 +325,7 @@ } dbus_free(type); - if (!dbus_signature_iter_next(&signature_iter)) break; + if (!r || !dbus_signature_iter_next(&signature_iter)) break; continue; error: r = EINA_FALSE; @@ -429,7 +429,7 @@ EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE); dbus_signature_iter_init(&signature_iter, signature); - while ((type = dbus_signature_iter_get_signature(&signature_iter)) && r) + while ((type = dbus_signature_iter_get_signature(&signature_iter))) { if (dbus_type_is_basic(type[0])) r = append_basic(type[0], MAKE_PTR_FROM_VA_LIST(ap), @@ -443,7 +443,7 @@ } dbus_free(type); - if (!dbus_signature_iter_next(&signature_iter)) break; + if (!r || !dbus_signature_iter_next(&signature_iter)) break; } return r; |
From: Enlightenment S. <no-...@en...> - 2012-10-26 18:20:20
|
Log: edbus: Revert 'Add initializers to stop warnings' r78292 http://www.mail-archive.com/enl...@li.../msg46587.html Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-26 11:20:14 -0700 (Fri, 26 Oct 2012) New Revision: 78552 Trac: http://trac.enlightenment.org/e/changeset/78552 Modified: trunk/edbus/src/lib/edbus_service.h Modified: trunk/edbus/src/lib/edbus_service.h =================================================================== --- trunk/edbus/src/lib/edbus_service.h 2012-10-26 18:20:09 UTC (rev 78551) +++ trunk/edbus/src/lib/edbus_service.h 2012-10-26 18:20:14 UTC (rev 78552) @@ -24,7 +24,7 @@ * The signature will be "ss" and each string will have a tag name on * introspect XML with the respective name. */ -#define EDBUS_ARGS(args...) (const EDBus_Arg_Info[]){ args, { NULL, NULL } } +#define EDBUS_ARGS(args...) (const EDBus_Arg_Info[]){ args, { } } typedef struct _EDBus_Service_Interface EDBus_Service_Interface; typedef EDBus_Message * (*EDBus_Method_Cb)(const EDBus_Service_Interface *iface, const EDBus_Message *message); |
From: Enlightenment S. <no-...@en...> - 2012-10-26 18:20:26
|
Log: edbus: Add some EINA_SAFETY to public API Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-26 11:20:19 -0700 (Fri, 26 Oct 2012) New Revision: 78553 Trac: http://trac.enlightenment.org/e/changeset/78553 Modified: trunk/edbus/src/lib/edbus_message.c Modified: trunk/edbus/src/lib/edbus_message.c =================================================================== --- trunk/edbus/src/lib/edbus_message.c 2012-10-26 18:20:14 UTC (rev 78552) +++ trunk/edbus/src/lib/edbus_message.c 2012-10-26 18:20:19 UTC (rev 78553) @@ -280,7 +280,9 @@ Eina_Bool r = EINA_TRUE; char *type; + EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE); EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE); dbus_signature_iter_init(&signature_iter, signature); while ((type = dbus_signature_iter_get_signature(&signature_iter))) @@ -422,8 +424,9 @@ char *type; Eina_Bool r = EINA_TRUE; - if (!signature || !signature[0]) return EINA_TRUE; - EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_signature_validate(signature, NULL), EINA_FALSE); + if (!signature[0]) return EINA_TRUE; + EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_signature_validate(signature, NULL), + EINA_FALSE); iter = edbus_message_iter_get(msg); EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE); @@ -436,9 +439,9 @@ &iter->dbus_iterator); else { - ERR("edbus_message_arguments_set() and \ + ERR("sig = %s | edbus_message_arguments_set() and \ edbus_message_arguments_vset() only support basic types, \ - to complex types use edbus_message_iter_* functions"); + to complex types use edbus_message_iter_* functions", signature); r = EINA_FALSE; } @@ -541,9 +544,10 @@ return sub; } -EAPI char* +EAPI char * edbus_message_iter_signature_get(EDBus_Message_Iter *iter) { + EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL); return dbus_message_iter_get_signature(&iter->dbus_iterator); } |
From: Enlightenment S. <no-...@en...> - 2012-10-29 22:02:43
|
Log: edbus: Add missed eina_magic names Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-29 15:02:36 -0700 (Mon, 29 Oct 2012) New Revision: 78624 Trac: http://trac.enlightenment.org/e/changeset/78624 Modified: trunk/edbus/src/lib/edbus_core.c Modified: trunk/edbus/src/lib/edbus_core.c =================================================================== --- trunk/edbus/src/lib/edbus_core.c 2012-10-29 22:02:32 UTC (rev 78623) +++ trunk/edbus/src/lib/edbus_core.c 2012-10-29 22:02:36 UTC (rev 78624) @@ -118,7 +118,10 @@ eina_magic_string_set(EDBUS_PENDING_MAGIC, "EDBus_Pending"); eina_magic_string_set(EDBUS_OBJECT_MAGIC, "EDBus_Object"); eina_magic_string_set(EDBUS_PROXY_MAGIC, "EDBus_Proxy"); + eina_magic_string_set(EDBUS_MESSAGE_ITERATOR_MAGIC, "EDBus_Message_Iterator"); + eina_magic_string_set(EDBUS_SERVICE_INTERFACE_MAGIC, "EDBus_Service_Interface"); + if (!edbus_message_init()) goto message_failed; if (!edbus_signal_handler_init()) goto signal_handler_failed; if (!edbus_pending_init()) goto pending_failed; |
From: Enlightenment S. <no-...@en...> - 2012-10-29 22:02:48
|
Log: edbus: Remove unnecessary define Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-29 15:02:41 -0700 (Mon, 29 Oct 2012) New Revision: 78625 Trac: http://trac.enlightenment.org/e/changeset/78625 Modified: trunk/edbus/src/lib/edbus_core.c Modified: trunk/edbus/src/lib/edbus_core.c =================================================================== --- trunk/edbus/src/lib/edbus_core.c 2012-10-29 22:02:36 UTC (rev 78624) +++ trunk/edbus/src/lib/edbus_core.c 2012-10-29 22:02:41 UTC (rev 78625) @@ -4,10 +4,6 @@ #include <Ecore.h> -#define NAME_OWNER_MATCH "type='signal',sender='org.freedesktop.DBus',\ - path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',\ - member='NameOwnerChanged',arg0='%s'" - #define EDBUS_CONNECTION_CHECK(conn) \ do \ { \ |
From: Enlightenment S. <no-...@en...> - 2012-10-29 22:02:52
|
Log: edbus: Make on_name_owner_changed() return upon error getting args Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-10-29 15:02:46 -0700 (Mon, 29 Oct 2012) New Revision: 78626 Trac: http://trac.enlightenment.org/e/changeset/78626 Modified: trunk/edbus/src/lib/edbus_core.c Modified: trunk/edbus/src/lib/edbus_core.c =================================================================== --- trunk/edbus/src/lib/edbus_core.c 2012-10-29 22:02:41 UTC (rev 78625) +++ trunk/edbus/src/lib/edbus_core.c 2012-10-29 22:02:46 UTC (rev 78626) @@ -472,15 +472,14 @@ static void on_name_owner_changed(void *data, const EDBus_Message *msg) { - char *bus, *older_id, *new_id; - const char *name, *text; + const char *bus, *older_id, *new_id; EDBus_Connection_Name *cn = data; - if (edbus_message_error_get(msg, &name, &text)) - ERR("NameOwnerChanged cn=%s name=%s text=%s", - cn->name, name, text); if (!edbus_message_arguments_get(msg, "sss", &bus, &older_id, &new_id)) - ERR("Error getting arguments from NameOwnerChanged cn=%s", cn->name); + { + ERR("Error getting arguments from NameOwnerChanged cn=%s", cn->name); + return; + } eina_stringshare_del(cn->unique_id); cn->unique_id = eina_stringshare_add(new_id); |
From: Enlightenment S. <no-...@en...> - 2012-11-01 16:41:18
|
Log: edbus: Add Properties to edbus service API Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-11-01 09:41:11 -0700 (Thu, 01 Nov 2012) New Revision: 78802 Trac: http://trac.enlightenment.org/e/changeset/78802 Modified: trunk/edbus/src/lib/edbus_service.h Modified: trunk/edbus/src/lib/edbus_service.h =================================================================== --- trunk/edbus/src/lib/edbus_service.h 2012-11-01 16:41:04 UTC (rev 78801) +++ trunk/edbus/src/lib/edbus_service.h 2012-11-01 16:41:11 UTC (rev 78802) @@ -29,6 +29,9 @@ typedef struct _EDBus_Service_Interface EDBus_Service_Interface; typedef EDBus_Message * (*EDBus_Method_Cb)(const EDBus_Service_Interface *iface, const EDBus_Message *message); +typedef Eina_Bool (*EDBus_Property_Get_Cb)(EDBus_Service_Interface *iface, const char *propname, EDBus_Message_Iter *iter, EDBus_Message **error); +typedef EDBus_Message *(*EDBus_Property_Set_Cb)(EDBus_Service_Interface *iface, const char *propname, EDBus_Message *input_msg); + typedef struct _EDBus_Method { const char *member; @@ -45,11 +48,23 @@ unsigned int flags; } EDBus_Signal; +typedef struct _EDBus_Property +{ + const char *name; + const char *type; + unsigned int flags; + EDBus_Property_Set_Cb set_func; + EDBus_Property_Get_Cb get_func; +} EDBus_Property; + typedef struct _EDBus_Service_Interface_Desc { const char *interface; const EDBus_Method *methods; const EDBus_Signal *signals; + const EDBus_Property *properties; + const EDBus_Property_Set_Cb default_set; + const EDBus_Property_Get_Cb default_get; } EDBus_Service_Interface_Desc; /** |
From: Enlightenment S. <no-...@en...> - 2012-11-12 16:06:52
|
Log: edbus: Append path of child objects in Introspectable Patch by: Jos?\195?\169 Roberto de Souza <zeh...@pr...> Author: lucas Date: 2012-11-12 08:06:41 -0800 (Mon, 12 Nov 2012) New Revision: 79175 Trac: http://trac.enlightenment.org/e/changeset/79175 Modified: trunk/edbus/src/lib/edbus_private_types.h trunk/edbus/src/lib/edbus_service.c Modified: trunk/edbus/src/lib/edbus_private_types.h =================================================================== --- trunk/edbus/src/lib/edbus_private_types.h 2012-11-12 15:46:00 UTC (rev 79174) +++ trunk/edbus/src/lib/edbus_private_types.h 2012-11-12 16:06:41 UTC (rev 79175) @@ -61,6 +61,7 @@ Ecore_Idler *idler; Eina_Bool running_signal; EDBus_Connection_Context_Event event_handlers[EDBUS_CONNECTION_EVENT_LAST]; + Eina_Inlist *root_objs;//service_object }; struct _EDBus_Object @@ -132,15 +133,19 @@ EDBus_Message_Iter *iterator; }; -typedef struct _EDBus_Service_Object +typedef struct _EDBus_Service_Object EDBus_Service_Object; +struct _EDBus_Service_Object { + EINA_INLIST; EDBus_Connection *conn; const char *path; Eina_Hash *interfaces; Eina_Strbuf *introspection_data; Eina_Bool introspection_dirty; Eina_Inlist *data; -} EDBus_Service_Object; + EDBus_Service_Object *parent; + Eina_Inlist *children; +}; struct _EDBus_Service_Interface { Modified: trunk/edbus/src/lib/edbus_service.c =================================================================== --- trunk/edbus/src/lib/edbus_service.c 2012-11-12 15:46:00 UTC (rev 79174) +++ trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:06:41 UTC (rev 79175) @@ -52,6 +52,7 @@ static void _object_free(EDBus_Service_Object *obj); static void _interface_free(EDBus_Service_Interface *interface); static void _on_connection_free(void *data, const void *dead_pointer); +static EDBus_Service_Object *_edbus_service_object_parent_find(EDBus_Service_Object *obj); static DBusObjectPathVTable vtable = { _object_unregister, @@ -354,6 +355,7 @@ { Eina_Iterator *iterator; EDBus_Service_Interface *iface; + EDBus_Service_Object *child; if (obj->introspection_data) eina_strbuf_reset(obj->introspection_data); @@ -369,8 +371,18 @@ EINA_ITERATOR_FOREACH(iterator, iface) _introspect_append_interface(obj->introspection_data, iface); eina_iterator_free(iterator); + + EINA_INLIST_FOREACH(obj->children, child) + { + const char *subpath; + if (strlen(obj->path) == 1) + subpath = child->path+strlen(obj->path); + else + subpath = child->path+strlen(obj->path)+1; + eina_strbuf_append_printf(obj->introspection_data, "<node name=\"%s\" />", subpath); + } + eina_strbuf_append(obj->introspection_data, "</node>"); - obj->introspection_dirty = EINA_FALSE; } @@ -477,7 +489,8 @@ static EDBus_Service_Object * _edbus_service_object_add(EDBus_Connection *conn, const char *path) { - EDBus_Service_Object *obj; + EDBus_Service_Object *obj, *aux; + Eina_Inlist *safe; obj = calloc(1, sizeof(EDBus_Service_Object)); EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL); @@ -497,6 +510,27 @@ eina_hash_add(obj->interfaces, introspectable->name, introspectable); eina_hash_add(obj->interfaces, properties_iface->name, properties_iface); + obj->parent = _edbus_service_object_parent_find(obj); + if (obj->parent) + { + obj->parent->children = eina_inlist_append(obj->parent->children, + EINA_INLIST_GET(obj)); + return obj; + } + + EINA_INLIST_FOREACH_SAFE(conn->root_objs, safe, aux) + { + if (!strncmp(obj->path, aux->path, strlen(obj->path))) + { + conn->root_objs = eina_inlist_remove(conn->root_objs, + EINA_INLIST_GET(aux)); + obj->children = eina_inlist_append(obj->children, + EINA_INLIST_GET(aux)); + aux->parent = obj; + } + } + conn->root_objs = eina_inlist_append(conn->root_objs, EINA_INLIST_GET(obj)); + return obj; } @@ -681,6 +715,31 @@ EINA_ITERATOR_FOREACH(iterator, iface) _interface_free(iface); + while (obj->children) + { + EDBus_Service_Object *child; + child = EINA_INLIST_CONTAINER_GET(obj->children, EDBus_Service_Object); + obj->children = eina_inlist_remove(obj->children, obj->children); + if (obj->parent) + { + obj->parent->children = eina_inlist_append(obj->parent->children, + EINA_INLIST_GET(child)); + child->parent = obj->parent; + } + else + { + obj->conn->root_objs = eina_inlist_append(obj->conn->root_objs, + EINA_INLIST_GET(child)); + child->parent = NULL; + } + } + if (obj->parent) + obj->parent->children = eina_inlist_remove(obj->parent->children, + EINA_INLIST_GET(obj)); + else + obj->conn->root_objs = eina_inlist_remove(obj->conn->root_objs, + EINA_INLIST_GET(obj)); + edbus_data_del_all(&obj->data); eina_hash_free(obj->interfaces); @@ -1032,3 +1091,31 @@ iface->prop_invalidated = eina_array_new(1); return eina_array_push(iface->prop_invalidated, prop); } + +static EDBus_Service_Object * +_edbus_service_object_parent_find(EDBus_Service_Object *obj) +{ + size_t len = strlen(obj->path); + char *path = strdup(obj->path); + char *slash; + + for (slash = path[len] != '/' ? &path[len - 1] : &path[len - 2]; + slash > path; slash--) + { + EDBus_Service_Object *parent = NULL; + + if (*slash != '/') + continue; + + *slash = '\0'; + + if (dbus_connection_get_object_path_data(obj->conn->dbus_conn, path,(void **)&parent) && parent != NULL) + { + free(path); + return parent; + } + } + + free(path); + return NULL; +} |
From: Enlightenment S. <no-...@en...> - 2012-11-12 16:07:02
|
Log: edbus: simplify and explain code No need to strlen(obj->path) twice per loop iteration. Do it only once and add a comment explaining the difference between handling "/" and "/my/path/to/obj". Author: lucas Date: 2012-11-12 08:06:51 -0800 (Mon, 12 Nov 2012) New Revision: 79176 Trac: http://trac.enlightenment.org/e/changeset/79176 Modified: trunk/edbus/src/lib/edbus_service.c Modified: trunk/edbus/src/lib/edbus_service.c =================================================================== --- trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:06:41 UTC (rev 79175) +++ trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:06:51 UTC (rev 79176) @@ -356,6 +356,7 @@ Eina_Iterator *iterator; EDBus_Service_Interface *iface; EDBus_Service_Object *child; + size_t baselen; if (obj->introspection_data) eina_strbuf_reset(obj->introspection_data); @@ -372,15 +373,15 @@ _introspect_append_interface(obj->introspection_data, iface); eina_iterator_free(iterator); + baselen = strlen(obj->path); + /* account for the last '/' */ + if (baselen != 1) + baselen++; + EINA_INLIST_FOREACH(obj->children, child) - { - const char *subpath; - if (strlen(obj->path) == 1) - subpath = child->path+strlen(obj->path); - else - subpath = child->path+strlen(obj->path)+1; - eina_strbuf_append_printf(obj->introspection_data, "<node name=\"%s\" />", subpath); - } + eina_strbuf_append_printf(obj->introspection_data, + "<node name=\"%s\" />", + child->path + baselen); eina_strbuf_append(obj->introspection_data, "</node>"); obj->introspection_dirty = EINA_FALSE; |
From: Enlightenment S. <no-...@en...> - 2012-11-12 16:07:12
|
Log: edbus: move function up - no fwd declaration when not needed Author: lucas Date: 2012-11-12 08:07:01 -0800 (Mon, 12 Nov 2012) New Revision: 79177 Trac: http://trac.enlightenment.org/e/changeset/79177 Modified: trunk/edbus/src/lib/edbus_service.c Modified: trunk/edbus/src/lib/edbus_service.c =================================================================== --- trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:06:51 UTC (rev 79176) +++ trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:07:01 UTC (rev 79177) @@ -52,7 +52,6 @@ static void _object_free(EDBus_Service_Object *obj); static void _interface_free(EDBus_Service_Interface *interface); static void _on_connection_free(void *data, const void *dead_pointer); -static EDBus_Service_Object *_edbus_service_object_parent_find(EDBus_Service_Object *obj); static DBusObjectPathVTable vtable = { _object_unregister, @@ -488,6 +487,34 @@ } static EDBus_Service_Object * +_edbus_service_object_parent_find(EDBus_Service_Object *obj) +{ + size_t len = strlen(obj->path); + char *path = strdup(obj->path); + char *slash; + + for (slash = path[len] != '/' ? &path[len - 1] : &path[len - 2]; + slash > path; slash--) + { + EDBus_Service_Object *parent = NULL; + + if (*slash != '/') + continue; + + *slash = '\0'; + + if (dbus_connection_get_object_path_data(obj->conn->dbus_conn, path,(void **)&parent) && parent != NULL) + { + free(path); + return parent; + } + } + + free(path); + return NULL; +} + +static EDBus_Service_Object * _edbus_service_object_add(EDBus_Connection *conn, const char *path) { EDBus_Service_Object *obj, *aux; @@ -1092,31 +1119,3 @@ iface->prop_invalidated = eina_array_new(1); return eina_array_push(iface->prop_invalidated, prop); } - -static EDBus_Service_Object * -_edbus_service_object_parent_find(EDBus_Service_Object *obj) -{ - size_t len = strlen(obj->path); - char *path = strdup(obj->path); - char *slash; - - for (slash = path[len] != '/' ? &path[len - 1] : &path[len - 2]; - slash > path; slash--) - { - EDBus_Service_Object *parent = NULL; - - if (*slash != '/') - continue; - - *slash = '\0'; - - if (dbus_connection_get_object_path_data(obj->conn->dbus_conn, path,(void **)&parent) && parent != NULL) - { - free(path); - return parent; - } - } - - free(path); - return NULL; -} |
From: Enlightenment S. <no-...@en...> - 2012-11-12 16:07:15
|
Log: edbus: simplify and fix formatting Author: lucas Date: 2012-11-12 08:07:06 -0800 (Mon, 12 Nov 2012) New Revision: 79178 Trac: http://trac.enlightenment.org/e/changeset/79178 Modified: trunk/edbus/src/lib/edbus_service.c Modified: trunk/edbus/src/lib/edbus_service.c =================================================================== --- trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:07:01 UTC (rev 79177) +++ trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:07:06 UTC (rev 79178) @@ -489,6 +489,7 @@ static EDBus_Service_Object * _edbus_service_object_parent_find(EDBus_Service_Object *obj) { + EDBus_Service_Object *parent = NULL; size_t len = strlen(obj->path); char *path = strdup(obj->path); char *slash; @@ -496,22 +497,18 @@ for (slash = path[len] != '/' ? &path[len - 1] : &path[len - 2]; slash > path; slash--) { - EDBus_Service_Object *parent = NULL; - if (*slash != '/') continue; *slash = '\0'; - if (dbus_connection_get_object_path_data(obj->conn->dbus_conn, path,(void **)&parent) && parent != NULL) - { - free(path); - return parent; - } + if (dbus_connection_get_object_path_data(obj->conn->dbus_conn, + path, (void **) &parent) && parent != NULL) + break; } free(path); - return NULL; + return parent; } static EDBus_Service_Object * |
From: Enlightenment S. <no-...@en...> - 2012-11-12 16:07:23
|
Log: edbus: fix checking if root objects are our son strncmp'ing is not sufficient because it whould fail in case an object like "/org/bla" is registered (and in conn->root_objs) and we were registering "/org/blatest/". We would incorrectly put "/org/bla" as son of "/org/blatest". Fix this by looking up the next char, checking if it's a slash. Also re-format the code a little bit. Author: lucas Date: 2012-11-12 08:07:12 -0800 (Mon, 12 Nov 2012) New Revision: 79179 Trac: http://trac.enlightenment.org/e/changeset/79179 Modified: trunk/edbus/src/lib/edbus_service.c Modified: trunk/edbus/src/lib/edbus_service.c =================================================================== --- trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:07:06 UTC (rev 79178) +++ trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:07:12 UTC (rev 79179) @@ -514,8 +514,9 @@ static EDBus_Service_Object * _edbus_service_object_add(EDBus_Connection *conn, const char *path) { - EDBus_Service_Object *obj, *aux; + EDBus_Service_Object *obj, *rootobj; Eina_Inlist *safe; + size_t pathlen; obj = calloc(1, sizeof(EDBus_Service_Object)); EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL); @@ -543,16 +544,24 @@ return obj; } - EINA_INLIST_FOREACH_SAFE(conn->root_objs, safe, aux) + /* + * If there wasn't any object above us, check if anyone in conn->root_obj + * should become our child and append ourselves there. + */ + pathlen = strlen(obj->path); + EINA_INLIST_FOREACH_SAFE(conn->root_objs, safe, rootobj) { - if (!strncmp(obj->path, aux->path, strlen(obj->path))) - { - conn->root_objs = eina_inlist_remove(conn->root_objs, - EINA_INLIST_GET(aux)); - obj->children = eina_inlist_append(obj->children, - EINA_INLIST_GET(aux)); - aux->parent = obj; - } + if (strncmp(obj->path, rootobj->path, pathlen) != 0) + continue; + + if (rootobj->path[pathlen] != '/') + continue; + + conn->root_objs = eina_inlist_remove(conn->root_objs, + EINA_INLIST_GET(rootobj)); + obj->children = eina_inlist_append(obj->children, + EINA_INLIST_GET(rootobj)); + rootobj->parent = obj; } conn->root_objs = eina_inlist_append(conn->root_objs, EINA_INLIST_GET(obj)); |
From: Enlightenment S. <no-...@en...> - 2012-11-12 16:16:01
|
Log: edbus: compat introspection with no annotation/arg Author: lucas Date: 2012-11-12 08:15:52 -0800 (Mon, 12 Nov 2012) New Revision: 79181 Trac: http://trac.enlightenment.org/e/changeset/79181 Modified: trunk/edbus/src/lib/edbus_service.c Modified: trunk/edbus/src/lib/edbus_service.c =================================================================== --- trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:15:43 UTC (rev 79180) +++ trunk/edbus/src/lib/edbus_service.c 2012-11-12 16:15:52 UTC (rev 79181) @@ -71,7 +71,16 @@ int i; const char *part, *name; - eina_strbuf_append_printf(buf, "<signal name=\"%s\">", sig->name); + eina_strbuf_append_printf(buf, "<signal name=\"%s\"", sig->name); + + if (!sig->flags && !(sig->args && sig->args->signature)) + { + eina_strbuf_append(buf, " />"); + return; + } + + eina_strbuf_append(buf, ">"); + if (sig->flags & EDBUS_SIGNAL_FLAG_DEPRECATED) eina_strbuf_append(buf, DBUS_ANNOTATION_DEPRECATED); @@ -94,10 +103,19 @@ { eina_strbuf_append_printf(buf, "<property name=\"%s\" type=\"%s\" access=\"", prop->name, prop->type); + if (iface->get_func || prop->get_func) eina_strbuf_append(buf, "read"); + if (iface->set_func || prop->set_func) eina_strbuf_append(buf, "write"); + + if (!prop->flags) + { + eina_strbuf_append(buf, "\" />"); + return; + } + eina_strbuf_append(buf, "\">"); if (prop->flags & EDBUS_PROPERTY_FLAG_DEPRECATED) |