diff options
-rw-r--r-- | gdbus/client.c | 21 | ||||
-rw-r--r-- | gdbus/gdbus.h | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/gdbus/client.c b/gdbus/client.c index f9095574d..9364be7ae 100644 --- a/gdbus/client.c +++ b/gdbus/client.c @@ -26,6 +26,7 @@ #endif #include <stdio.h> +#include <string.h> #include <glib.h> #include <dbus/dbus.h> @@ -376,6 +377,26 @@ GDBusProxy *g_dbus_proxy_lookup(GList *list, int *index, const char *path, return NULL; } +char *g_dbus_proxy_path_lookup(GList *list, int *index, const char *path) +{ + int len = strlen(path); + GList *l; + + for (l = g_list_nth(list, index ? *index : 0); l; l = g_list_next(l)) { + GDBusProxy *proxy = l->data; + + const char *proxy_path = g_dbus_proxy_get_path(proxy); + + if (index) + (*index)++; + + if (!strncasecmp(proxy_path, path, len)) + return strdup(proxy_path); + } + + return NULL; +} + static gboolean properties_changed(DBusConnection *conn, DBusMessage *msg, void *user_data) { diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h index 85cb9682e..4880c84e7 100644 --- a/gdbus/gdbus.h +++ b/gdbus/gdbus.h @@ -341,6 +341,7 @@ gboolean g_dbus_proxy_get_property(GDBusProxy *proxy, const char *name, GDBusProxy *g_dbus_proxy_lookup(GList *list, int *index, const char *path, const char *interface); +char *g_dbus_proxy_path_lookup(GList *list, int *index, const char *path); gboolean g_dbus_proxy_refresh_property(GDBusProxy *proxy, const char *name); |