summaryrefslogtreecommitdiff
path: root/util-linux
diff options
context:
space:
mode:
authorDenys Vlasenko2009-07-02 13:07:11 +0200
committerDenys Vlasenko2009-07-02 13:07:11 +0200
commit90db359972643801300d4139025a25e0ba47c278 (patch)
tree064f7f299265c1037c0e5d8aff6fe429be77ba4f /util-linux
parentcf4e503875814ce6e4ff8666fb4a0350ca72c6e4 (diff)
downloadbusybox-90db359972643801300d4139025a25e0ba47c278.zip
busybox-90db359972643801300d4139025a25e0ba47c278.tar.gz
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 <vda.linux@googlemail.com>
Diffstat (limited to 'util-linux')
-rw-r--r--util-linux/mdev.c76
1 files changed, 39 insertions, 37 deletions
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index c68c0a5..f9ecf3c 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);
}