[mutter] backends: Allow opening /sys/ files on MetaLauncher
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] backends: Allow opening /sys/ files on MetaLauncher
- Date: Thu, 16 Feb 2017 12:51:10 +0000 (UTC)
commit 2d18b18fe5db4dfad695b0da0bd0fa515b8423ad
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat Feb 11 00:00:59 2017 +0100
backends: Allow opening /sys/ files on MetaLauncher
libinput may want to access those for fetching LED status, as those are
requested readonly, just forward the request to plain open().
https://bugzilla.gnome.org/show_bug.cgi?id=778472
src/backends/native/meta-launcher.c | 20 ++++++++++++++++++++
1 files changed, 20 insertions(+), 0 deletions(-)
---
diff --git a/src/backends/native/meta-launcher.c b/src/backends/native/meta-launcher.c
index 75d07ce..b93a172 100644
--- a/src/backends/native/meta-launcher.c
+++ b/src/backends/native/meta-launcher.c
@@ -58,6 +58,7 @@ struct _MetaLauncher
Login1Session *session_proxy;
Login1Seat *seat_proxy;
+ GHashTable *sysfs_fds;
gboolean session_active;
int kms_fd;
@@ -220,6 +221,15 @@ on_evdev_device_open (const char *path,
int fd;
int major, minor;
+ /* Allow readonly access to sysfs */
+ if (g_str_has_prefix (path, "/sys/"))
+ {
+ fd = open (path, flags);
+ if (fd >= 0)
+ g_hash_table_add (self->sysfs_fds, GINT_TO_POINTER (fd));
+ return fd;
+ }
+
if (!get_device_info_from_path (path, &major, &minor))
{
g_set_error (error,
@@ -243,6 +253,14 @@ on_evdev_device_close (int fd,
int major, minor;
GError *error = NULL;
+ if (g_hash_table_lookup (self->sysfs_fds, GINT_TO_POINTER (fd)))
+ {
+ /* /sys/ paths just need close() here */
+ g_hash_table_remove (self->sysfs_fds, GINT_TO_POINTER (fd));
+ close (fd);
+ return;
+ }
+
if (!get_device_info_from_fd (fd, &major, &minor))
{
g_warning ("Could not get device info for fd %d: %m", fd);
@@ -540,6 +558,7 @@ meta_launcher_new (GError **error)
self = g_slice_new0 (MetaLauncher);
self->session_proxy = g_object_ref (session_proxy);
self->seat_proxy = g_object_ref (seat_proxy);
+ self->sysfs_fds = g_hash_table_new (NULL, NULL);
self->session_active = TRUE;
self->kms_fd = kms_fd;
@@ -565,6 +584,7 @@ meta_launcher_free (MetaLauncher *self)
{
g_object_unref (self->seat_proxy);
g_object_unref (self->session_proxy);
+ g_hash_table_destroy (self->sysfs_fds);
g_free (self->kms_file_path);
g_slice_free (MetaLauncher, self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]