From: Kay Sievers Date: Fri, 22 Oct 2010 11:50:55 +0000 (+0200) Subject: libudev: return kernel provided devnode when asked before we handled any rules X-Git-Tag: 174~316 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=cdb1d7608a2e2ba708a890eeab6e5e99409a1953 libudev: return kernel provided devnode when asked before we handled any rules --- diff --git a/Makefile.am b/Makefile.am index fd13005f3..4dbdfd97e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,7 +35,7 @@ DISTCHECK_HOOKS = # libudev # ------------------------------------------------------------------------------ LIBUDEV_CURRENT=9 -LIBUDEV_REVISION=2 +LIBUDEV_REVISION=3 LIBUDEV_AGE=9 SUBDIRS += libudev/docs diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c index e5f8cc3e4..9b5d79ff4 100644 --- a/libudev/libudev-device.c +++ b/libudev/libudev-device.c @@ -876,8 +876,19 @@ const char *udev_device_get_devnode(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; - if (!udev_device->info_loaded) + if (!udev_device->info_loaded) { + udev_device_read_uevent_file(udev_device); udev_device_read_db(udev_device); + } + + /* we might get called before we handled an event and have a db, use the kernel-provided name */ + if (udev_device->devnode == NULL && udev_device_get_knodename(udev_device) != NULL) { + if (asprintf(&udev_device->devnode, "%s/%s", + udev_get_dev_path(udev_device->udev), udev_device_get_knodename(udev_device)) < 0) + return NULL; + return udev_device->devnode; + } + return udev_device->devnode; }