From cae11b51aac9f52d35f2446a26acafbe7be8e9bd Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sat, 29 Mar 2008 15:11:07 +0000 Subject: mdev: fix "foo 0:0 444 >bar/baz" rule handling. make_device() +23 bytes --- util-linux/mdev.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'util-linux') diff --git a/util-linux/mdev.c b/util-linux/mdev.c index a286605..c4c4350 100644 --- a/util-linux/mdev.c +++ b/util-linux/mdev.c @@ -203,21 +203,26 @@ static void make_device(char *path, int delete) if (ENABLE_FEATURE_MDEV_RENAME && alias) { char *dest; + /* ">bar/": rename to bar/device_name */ + /* ">bar[/]baz": rename to bar[/]baz */ dest = strrchr(alias, '/'); - if (dest) { - if (dest[1] != '\0') - /* given a file name, so rename it */ - *dest = '\0'; + if (dest) { /* ">bar/[baz]" ? */ + *dest = '\0'; /* mkdir bar */ bb_make_directory(alias, 0755, FILEUTILS_RECUR); - dest = concat_path_file(alias, device_name); - free(alias); - } else - dest = alias; + *dest = '/'; + if (dest[1] == '\0') { /* ">bar/" => ">bar/device_name" */ + dest = alias; + alias = concat_path_file(alias, device_name); + free(dest); + } + } - rename(device_name, dest); - symlink(dest, device_name); + /* recreate device_name as a symlink to moved device node */ + if (rename(device_name, alias) == 0) { + symlink(alias, device_name); + } - free(dest); + free(alias); } } } -- cgit v1.1