diff options
author | Keith Packard <keithp@keithp.com> | 2014-03-11 22:04:36 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-03-11 22:04:36 -0700 |
commit | 81a4952d3dcab9ca3a1ee399c773f5ac352036c4 (patch) | |
tree | 6bfb271b3c1ed55c2fc40ad48d1e8a3d343fdd53 /hw | |
parent | 96a28e9c914d7ae9b269f73a27b99cbd3c465ac8 (diff) | |
parent | 795066477ee81b5b82e490eac8bed6b656d01f17 (diff) |
Merge remote-tracking branch 'whot/for-keith'
Diffstat (limited to 'hw')
-rw-r--r-- | hw/xfree86/common/xf86Xinput.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index 7c3e479e5..36b92a9f7 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -81,6 +81,7 @@ #include <stdarg.h> #include <stdint.h> /* for int64_t */ +#include <sys/stat.h> #include <unistd.h> #include "mi.h" @@ -804,6 +805,18 @@ xf86InputDevicePostInit(DeviceIntPtr dev) return Success; } +static void +xf86stat(const char *path, int *maj, int *min) +{ + struct stat st; + + if (stat(path, &st) == -1) + return; + + *maj = major(st.st_rdev); + *min = minor(st.st_rdev); +} + /** * Create a new input device, activate and enable it. * @@ -828,6 +841,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable) DeviceIntPtr dev = NULL; Bool paused; int rval; + const char *path; /* Memory leak for every attached device if we don't * test if the module is already loaded first */ @@ -841,9 +855,13 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable) goto unwind; } - if (drv->capabilities & XI86_DRV_CAP_SERVER_FD) { + path = xf86CheckStrOption(pInfo->options, "Device", NULL); + if (path && pInfo->major == 0 && pInfo->minor == 0) + xf86stat(path, &pInfo->major, &pInfo->minor); + + if (path && (drv->capabilities & XI86_DRV_CAP_SERVER_FD)){ int fd = systemd_logind_take_fd(pInfo->major, pInfo->minor, - pInfo->attrs->device, &paused); + path, &paused); if (fd != -1) { if (paused) { /* Put on new_input_devices list for delayed probe */ |