From 90db359972643801300d4139025a25e0ba47c278 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 2 Jul 2009 13:07:11 +0200 Subject: mdev: set $MDEV correctly for renamed nodes function old new delta make_device 1467 1502 +35 build_alias 78 - -78 Signed-off-by: Denys Vlasenko --- testsuite/mdev.tests | 4 +-- util-linux/mdev.c | 76 +++++++++++++++++++++++++++------------------------- 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/testsuite/mdev.tests b/testsuite/mdev.tests index 912785ece..d52f3b10b 100755 --- a/testsuite/mdev.tests +++ b/testsuite/mdev.tests @@ -136,12 +136,12 @@ brw-r--r-- 1 0 0 8,0 sda # continuing to use directory structure from prev test rm -rf mdev.testdir/dev/* -echo "sda 0:0 644 =block/ @echo @echo TEST" >mdev.testdir/etc/mdev.conf +echo "sda 0:0 644 =block/ @echo @echo TEST:\$MDEV" >mdev.testdir/etc/mdev.conf testing "mdev move and command" \ "env - PATH=$PATH ACTION=add DEVPATH=/block/sda chroot mdev.testdir /mdev 2>&1; ls -lnR mdev.testdir/dev | $FILTER_LS2" \ "\ -@echo TEST +@echo TEST:block/sda mdev.testdir/dev: drwxr-xr-x 2 0 0 block diff --git a/util-linux/mdev.c b/util-linux/mdev.c index c68c0a5e7..f9ecf3cd6 100644 --- a/util-linux/mdev.c +++ b/util-linux/mdev.c @@ -317,49 +317,51 @@ static void make_device(char *path, int delete) /* End of field parsing */ /* "Execute" the line we found */ + { + const char *node_name; - if (!delete && major >= 0) { - char *node_name = (char *)device_name; + node_name = device_name; if (ENABLE_FEATURE_MDEV_RENAME && alias) - alias = node_name = build_alias(alias, device_name); - if (mknod(node_name, mode | type, makedev(major, minor)) && errno != EEXIST) - bb_perror_msg_and_die("mknod %s", node_name); - if (major == root_major && minor == root_minor) - symlink(node_name, "root"); - if (ENABLE_FEATURE_MDEV_CONF) { - chmod(node_name, mode); - chown(node_name, ugid.uid, ugid.gid); - } - if (ENABLE_FEATURE_MDEV_RENAME && alias) { - if (aliaslink == '>') - symlink(node_name, device_name); - free(alias); + node_name = alias = build_alias(alias, device_name); + + if (!delete && major >= 0) { + if (mknod(node_name, mode | type, makedev(major, minor)) && errno != EEXIST) + bb_perror_msg_and_die("mknod %s", node_name); + if (major == root_major && minor == root_minor) + symlink(node_name, "root"); + if (ENABLE_FEATURE_MDEV_CONF) { + chmod(node_name, mode); + chown(node_name, ugid.uid, ugid.gid); + } + if (ENABLE_FEATURE_MDEV_RENAME && alias) { + if (aliaslink == '>') + symlink(node_name, device_name); + } } - } - if (ENABLE_FEATURE_MDEV_EXEC && command) { - /* setenv will leak memory, use putenv/unsetenv/free */ - char *s = xasprintf("%s=%s", "MDEV", device_name); - char *s1 = xasprintf("%s=%s", "SUBSYSTEM", subsystem); - putenv(s); - putenv(s1); - if (system(command) == -1) - bb_perror_msg_and_die("can't run '%s'", command); - unsetenv("SUBSYSTEM"); - free(s1); - unsetenv("MDEV"); - free(s); - free(command); - } + if (ENABLE_FEATURE_MDEV_EXEC && command) { + /* setenv will leak memory, use putenv/unsetenv/free */ + char *s = xasprintf("%s=%s", "MDEV", node_name); + char *s1 = xasprintf("%s=%s", "SUBSYSTEM", subsystem); + putenv(s); + putenv(s1); + if (system(command) == -1) + bb_perror_msg_and_die("can't run '%s'", command); + unsetenv("SUBSYSTEM"); + free(s1); + unsetenv("MDEV"); + free(s); + free(command); + } - if (delete) { - char *node_name = (char *)device_name; - if (ENABLE_FEATURE_MDEV_RENAME && alias) { - alias = node_name = build_alias(alias, device_name); - if (aliaslink == '>') - unlink(device_name); + if (delete) { + if (ENABLE_FEATURE_MDEV_RENAME && alias) { + if (aliaslink == '>') + unlink(device_name); + } + unlink(node_name); } - unlink(node_name); + if (ENABLE_FEATURE_MDEV_RENAME) free(alias); } -- cgit v1.2.3