summaryrefslogtreecommitdiff
path: root/gudev/gudevclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'gudev/gudevclient.c')
-rw-r--r--gudev/gudevclient.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/gudev/gudevclient.c b/gudev/gudevclient.c
index 587b57a..39a8040 100644
--- a/gudev/gudevclient.c
+++ b/gudev/gudevclient.c
@@ -524,9 +524,40 @@ g_udev_client_query_by_subsystem_and_name (GUdevClient *client,
return device;
}
-struct udev *
-_g_udev_client_get_udev (GUdevClient *client)
+struct udev_enumerate *
+_g_udev_client_new_enumerate (GUdevClient *client)
{
- g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL);
- return client->priv->udev;
+ struct udev_enumerate *enumerate;
+
+ enumerate = udev_enumerate_new (client->priv->udev);
+
+ if (client->priv->subsystems != NULL)
+ {
+ guint n;
+ for (n = 0; client->priv->subsystems[n] != NULL; n++)
+ {
+ gchar *subsystem;
+ gchar *devtype;
+ gchar *s;
+
+ subsystem = g_strdup (client->priv->subsystems[n]);
+ devtype = NULL;
+
+ s = strstr (subsystem, "/");
+ if (s != NULL)
+ {
+ devtype = s + 1;
+ *s = '\0';
+ }
+
+ udev_enumerate_add_match_subsystem (enumerate, subsystem);
+
+ if (devtype != NULL)
+ udev_enumerate_add_match_property (enumerate, "DEVTYPE", devtype);
+
+ g_free (subsystem);
+ }
+ }
+
+ return enumerate;
}