From 432768f75da13ee5343957df6ce5cd316a62929f Mon Sep 17 00:00:00 2001 From: marha Date: Sat, 8 Jan 2011 19:40:59 +0000 Subject: xserver mesa libX11 xkbcomp pixman git update 8/1/2011 --- xorg-server/config/udev.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'xorg-server/config') diff --git a/xorg-server/config/udev.c b/xorg-server/config/udev.c index 43e653d2b..eeacff162 100644 --- a/xorg-server/config/udev.c +++ b/xorg-server/config/udev.c @@ -94,6 +94,7 @@ device_added(struct udev_device *udev_device) if (parent) { const char *ppath = udev_device_get_devnode(parent); const char *product = udev_device_get_property_value(parent, "PRODUCT"); + const char *pnp_id = udev_device_get_sysattr_value(parent, "id"); unsigned int usb_vendor, usb_model; name = udev_device_get_sysattr_value(parent, "name"); @@ -103,8 +104,9 @@ device_added(struct udev_device *udev_device) LOG_PROPERTY(ppath, "NAME", name); } - attrs.pnp_id = udev_device_get_sysattr_value(parent, "id"); - LOG_SYSATTR(ppath, "id", attrs.pnp_id); + if (pnp_id) + attrs.pnp_id = strdup(pnp_id); + LOG_SYSATTR(ppath, "id", pnp_id); /* construct USB ID in lowercase hex - "0000:ffff" */ if (product && sscanf(product, "%*x/%4x/%4x/%*x", &usb_vendor, &usb_model) == 2) { @@ -118,12 +120,13 @@ device_added(struct udev_device *udev_device) if (!name) name = "(unnamed)"; else - attrs.product = name; + attrs.product = strdup(name); add_option(&options, "name", name); add_option(&options, "path", path); add_option(&options, "device", path); - attrs.device = path; + if (path) + attrs.device = strdup(path); tags_prop = udev_device_get_property_value(udev_device, "ID_INPUT.tags"); LOG_PROPERTY(path, "ID_INPUT.tags", tags_prop); @@ -162,7 +165,7 @@ device_added(struct udev_device *udev_device) add_option(&options, "xkb_options", value); } else if (!strcmp(key, "ID_VENDOR")) { LOG_PROPERTY(path, key, value); - attrs.vendor = value; + attrs.vendor = strdup(value); } else if (!strcmp(key, "ID_INPUT_KEY")) { LOG_PROPERTY(path, key, value); attrs.flags |= ATTR_KEYBOARD; @@ -202,6 +205,10 @@ device_added(struct udev_device *udev_device) } free(attrs.usb_id); + free(attrs.pnp_id); + free(attrs.product); + free(attrs.device); + free(attrs.vendor); if (attrs.tags) { char **tag = attrs.tags; while (*tag) { @@ -307,7 +314,7 @@ config_udev_fini(void) udev = udev_monitor_get_udev(udev_monitor); RemoveGeneralSocket(udev_monitor_get_fd(udev_monitor)); - RemoveBlockAndWakeupHandlers(block_handler, wakeup_handler, udev_monitor); + RemoveBlockAndWakeupHandlers(block_handler, wakeup_handler, NULL); udev_monitor_unref(udev_monitor); udev_monitor = NULL; udev_unref(udev); -- cgit v1.2.3