diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-04-18 12:10:05 +0930 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-04-19 18:12:11 +0930 |
commit | c6972c893359f8fa7631ae674330f3f4f7010ba0 (patch) | |
tree | 8a135d3474ab1914700f8119883d8039e2e90008 | |
parent | 999b681cf3973af4191506e49cde06963b11a774 (diff) |
Change dbus 'listDevices' call to not require an argument.
Update dbus-api documentation, plug memory leak on dbus reply error.
-rw-r--r-- | config/config.c | 33 | ||||
-rw-r--r-- | config/dbus-api | 4 |
2 files changed, 24 insertions, 13 deletions
diff --git a/config/config.c b/config/config.c index 9828091f4..4861d9ead 100644 --- a/config/config.c +++ b/config/config.c @@ -280,11 +280,6 @@ configMessage(DBusConnection *connection, DBusMessage *message, void *closure) if (strcmp(dbus_message_get_interface(message), "org.x.config.input") == 0) { - if (!dbus_message_iter_init(message, &iter)) { - ErrorF("[config] failed to init iterator\n"); - dbus_error_free(&error); - return DBUS_HANDLER_RESULT_NEED_MEMORY; /* ?? */ - } if (!(reply = dbus_message_new_method_return(message))) { ErrorF("[config] failed to create the reply message\n"); @@ -292,18 +287,30 @@ configMessage(DBusConnection *connection, DBusMessage *message, void *closure) return DBUS_HANDLER_RESULT_NEED_MEMORY; } dbus_message_iter_init_append(reply, &r_iter); - - if (strcmp(dbus_message_get_member(message), "add") == 0) - ret = configAddDevice(message, &iter, reply, &r_iter, &error); - else if (strcmp(dbus_message_get_member(message), "remove") == 0) - ret = configRemoveDevice(message, &iter, &error); - else if (strcmp(dbus_message_get_member(message), "listDevices") == 0) - ret = configListDevices(message, &iter, reply, &r_iter, &error); - if (ret != BadDrawable && ret != BadAlloc) { + /* listDevices doesn't take any arguments */ + if (strcmp(dbus_message_get_member(message), "listDevices") == 0) + ret = configListDevices(message, NULL, reply, &r_iter, &error); + else + { + if (!dbus_message_iter_init(message, &iter)) { + ErrorF("[config] failed to init iterator\n"); + dbus_message_unref(reply); + dbus_error_free(&error); + return DBUS_HANDLER_RESULT_NEED_MEMORY; /* ?? */ + } + + if (strcmp(dbus_message_get_member(message), "add") == 0) + ret = configAddDevice(message, &iter, reply, &r_iter, &error); + else if (strcmp(dbus_message_get_member(message), "remove") == 0) + ret = configRemoveDevice(message, &iter, &error); + } + + if (ret != BadDrawable && ret != BadAlloc) { if (!strlen(dbus_message_get_signature(reply))) if (!dbus_message_iter_append_basic(&r_iter, DBUS_TYPE_INT32, &ret)) { ErrorF("[config] couldn't append to iterator\n"); + dbus_message_unref(reply); dbus_error_free(&error); return DBUS_HANDLER_RESULT_HANDLED; } diff --git a/config/dbus-api b/config/dbus-api index 53bb3e45d..cada792f5 100644 --- a/config/dbus-api +++ b/config/dbus-api @@ -33,3 +33,7 @@ org.x.config.input: i is the signature. Same return values as org.x.config.input.add. + + org.x.config.input.listDevices: + Lists the currently active devices. + Return value is sequence of <id> <name> <id> <name> ... |