X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=gdbus%2Fobject.c;h=318692184ceed997ae1cbf23caba3d0139008e38;hb=HEAD;hp=a417ab98d51cd54761d4ab8d145e0fdbab03133c;hpb=e3a4699f34f751d47d8fd8e5a488e4b95343732f;p=connman diff --git a/gdbus/object.c b/gdbus/object.c index a417ab9..3186921 100644 --- a/gdbus/object.c +++ b/gdbus/object.c @@ -2,7 +2,7 @@ * * D-Bus helper library * - * Copyright (C) 2004-2008 Marcel Holtmann + * Copyright (C) 2004-2009 Marcel Holtmann * * * This program is free software; you can redistribute it and/or modify @@ -59,7 +59,8 @@ static void print_arguments(GString *gstr, const char *sig, for (i = 0; sig[i]; i++) { char type[32]; - int len, struct_level, dict_level; + int struct_level, dict_level; + unsigned int len; gboolean complete; complete = FALSE; @@ -223,6 +224,9 @@ static struct interface_data *find_interface(GSList *interfaces, { GSList *list; + if (!name) + return NULL; + for (list = interfaces; list; list = list->next) { struct interface_data *iface = list->data; if (!strcmp(name, iface->name)) @@ -303,7 +307,11 @@ static void invalidate_parent_data(DBusConnection *conn, const char *child_path) if (!slash) goto done; - *slash = '\0'; + if (slash == parent_path && parent_path[1] != '\0') + parent_path[1] = '\0'; + else + *slash = '\0'; + if (!strlen(parent_path)) goto done; @@ -390,7 +398,6 @@ static gboolean check_signal(DBusConnection *conn, const char *path, } iface = find_interface(data->interfaces, interface); - if (!iface) { error("dbus_connection_emit_signal: %s does not implement %s", path, interface); @@ -493,6 +500,9 @@ gboolean g_dbus_unregister_interface(DBusConnection *connection, struct generic_data *data = NULL; struct interface_data *iface; + if (!path) + return FALSE; + if (dbus_connection_get_object_path_data(connection, path, (void *) &data) == FALSE) return FALSE; @@ -523,7 +533,11 @@ gboolean g_dbus_unregister_interface(DBusConnection *connection, DBusMessage *g_dbus_create_error_valist(DBusMessage *message, const char *name, const char *format, va_list args) { - return dbus_message_new_error(message, name, format); + char str[1024]; + + vsnprintf(str, sizeof(str), format, args); + + return dbus_message_new_error(message, name, str); } DBusMessage *g_dbus_create_error(DBusMessage *message, const char *name, @@ -576,6 +590,9 @@ gboolean g_dbus_send_message(DBusConnection *connection, DBusMessage *message) { dbus_bool_t result; + if (dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_METHOD_CALL) + dbus_message_set_no_reply(message, TRUE); + result = dbus_connection_send(connection, message, NULL); dbus_message_unref(message); @@ -619,17 +636,17 @@ gboolean g_dbus_emit_signal(DBusConnection *connection, const char *path, const char *interface, const char *name, int type, ...) { - va_list args; + va_list args; gboolean result; - va_start(args, type); + va_start(args, type); result = emit_signal_valist(connection, path, interface, name, type, args); - va_end(args); + va_end(args); - return result; + return result; } gboolean g_dbus_emit_signal_valist(DBusConnection *connection,