summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko2008-05-08 21:49:28 +0000
committerDenis Vlasenko2008-05-08 21:49:28 +0000
commit4579e9c1c89d844615e800b6c23f7558c366154f (patch)
treea511df2e6f62ddb3e46d0f592a94d55da2a42408
parent4b04f543a1fc897a0eefd8a4606992ec22a48636 (diff)
downloadbusybox-4579e9c1c89d844615e800b6c23f7558c366154f.zip
busybox-4579e9c1c89d844615e800b6c23f7558c366154f.tar.gz
mdev: /sys/class/block/ are also block devices
function old new delta make_device 1200 1221 +21
-rw-r--r--util-linux/mdev.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index 5e1cd36..4fff20d 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -70,8 +70,14 @@ static void make_device(char *path, int delete)
/* Determine device name, type, major and minor */
device_name = bb_basename(path);
/* http://kernel.org/doc/pending/hotplug.txt says that only
- * "/sys/block/..." is for block devices. "sys/bus" etc is not! */
- type = (strncmp(&path[5], "block/", 6) == 0 ? S_IFBLK : S_IFCHR);
+ * "/sys/block/..." is for block devices. "/sys/bus" etc is not!
+ * Since kernel 2.6.25 block devices are also in /sys/class/block. */
+ /* TODO: would it be acceptable to just use strstr(path, "/block/")? */
+ if (strncmp(&path[5], "class/block/"+6, 6) != 0
+ && strncmp(&path[5], "class/block/", 12) != 0)
+ type = S_IFCHR;
+ else
+ type = S_IFBLK;
if (ENABLE_FEATURE_MDEV_CONF) {
FILE *fp;