xfree86: handle xorg.conf devices with logind

Only devices from the config backend have their attributes set, devices from
the xorg.conf only have Option "Device". That option is also set by the
config backend, so use it.

And since the config backend sets our major/minor but xorg.conf devices don't
have that set, make sure we try to stat it first where needed.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
Peter Hutterer 2014-03-11 14:21:27 +10:00
parent 4754af9ddb
commit fdb4ec86c2

View File

@ -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 */