[PATCH 2/2] xfree86: handle xorg.conf devices with logind
Hans de Goede
hdegoede at redhat.com
Tue Mar 11 00:09:27 PDT 2014
Hi,
On 03/11/2014 05:32 AM, Peter Hutterer wrote:
> 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 at who-t.net>
Looks good:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> Fixes a crash when running with hotplug disabled and fixed devices in the
> xorg.conf
>
> hw/xfree86/common/xf86Xinput.c | 22 ++++++++++++++++++++--
> 1 file changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
> index 7c3e479..36b92a9 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 */
>
More information about the xorg-devel
mailing list