[PATCH xf86-input-libinput 3/3] Open sysfs files directly instead of going through the server

Peter Hutterer peter.hutterer at who-t.net
Fri Feb 24 03:10:19 UTC 2017


Only use-case here are pad mode LEDs that now live in /sys/class/leds. Asking
the server to open them is pointless, the server only knows how to open Option
"Device". And since the LEDs are in sysfs we should have access to them
anyway, so no need for jumping through or hula-ing hoops.

xf86CloseSerial() works as intended as it's a slim wrapper around close(), so
we only have to worry about the open() path here.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/xf86libinput.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/xf86libinput.c b/src/xf86libinput.c
index ef03d3e..888c8f2 100644
--- a/src/xf86libinput.c
+++ b/src/xf86libinput.c
@@ -2187,6 +2187,12 @@ open_restricted(const char *path, int flags, void *data)
 	InputInfoPtr pInfo;
 	int fd = -1;
 
+	/* Special handling for sysfs files (used for pad LEDs) */
+	if (strneq(path, "/sys/", 5)) {
+		fd = open(path, flags);
+		return fd < 0 ? -errno : fd;
+	}
+
 	nt_list_for_each_entry(pInfo, xf86FirstLocalDevice(), next) {
 		char *device = xf86CheckStrOption(pInfo->options, "Device", NULL);
 
-- 
2.9.3



More information about the xorg-devel mailing list