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 <[email protected]>
Looks good: Reviewed-by: Hans de Goede <[email protected]> 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 */ > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
