diff options
author | Ray Strode <rstrode@redhat.com> | 2016-10-19 10:01:45 -0400 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2016-11-02 18:32:22 +0100 |
commit | 7cf0fde672e6b0eb6c48fc5ab533da948b1ab74a (patch) | |
tree | 4930f1f2deac5a7d253a0ff45969cae61e3e3d84 /gudev/gudevclient.c | |
parent | 177ea07f3411353d9eb964b4d9c0812685d71738 (diff) | |
download | libgudev-7cf0fde672e6b0eb6c48fc5ab533da948b1ab74a.tar.gz |
enumerator: Ensure client subsystems are implicitly matched
g_udev_client_new takes an optional list of subsystems
(and device types) to filter the udev event stream on. These
subsystems aren't automatically matched for device enumeration,
though, which is unexpected.
This commit changes gudevenumerator to get its udev_enumerate object
from gudevclient with the appropriate subsystem and device matches
already set up.
https://bugzilla.gnome.org/show_bug.cgi?id=773224
Diffstat (limited to 'gudev/gudevclient.c')
-rw-r--r-- | gudev/gudevclient.c | 39 |
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; } |