From cdb1d7608a2e2ba708a890eeab6e5e99409a1953 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers@vrfy.org>
Date: Fri, 22 Oct 2010 13:50:55 +0200
Subject: libudev: return kernel provided devnode when asked before we handled
 any rules

---
 libudev/libudev-device.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

(limited to 'libudev')

diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c
index e5f8cc3e46..9b5d79ff4b 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;
 }
 
-- 
cgit v1.2.3-54-g00ecf