aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-08-16 14:26:15 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-08-16 14:26:15 +0200
commitf2860bf6d332cbbfd2d4d9afadb0148cf061fad2 (patch)
treeb62a8cac9da67d1cb2aa628665526f33c044f35b
parent867ffb961672a226ba269b32c5d88a2c56b685fe (diff)
downloadbusybox-w32-f2860bf6d332cbbfd2d4d9afadb0148cf061fad2.tar.gz
busybox-w32-f2860bf6d332cbbfd2d4d9afadb0148cf061fad2.tar.bz2
busybox-w32-f2860bf6d332cbbfd2d4d9afadb0148cf061fad2.zip
mdev: fix non-working device deletion, add a test for that
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rwxr-xr-xtestsuite/mdev.tests10
-rw-r--r--util-linux/mdev.c5
2 files changed, 13 insertions, 2 deletions
diff --git a/testsuite/mdev.tests b/testsuite/mdev.tests
index c375fc774..a46929b3a 100755
--- a/testsuite/mdev.tests
+++ b/testsuite/mdev.tests
@@ -38,6 +38,16 @@ brw-rw---- 1 0 0 8,0 sda
38SKIP= 38SKIP=
39 39
40# continuing to use directory structure from prev test 40# continuing to use directory structure from prev test
41optional STATIC FEATURE_MDEV_CONF FEATURE_LS_TIMESTAMPS FEATURE_LS_USERNAME
42testing "mdev deletes /block/sda" \
43 "env - PATH=$PATH ACTION=remove DEVPATH=/block/sda chroot mdev.testdir /mdev 2>&1;
44 ls -ln mdev.testdir/dev | $FILTER_LS" \
45"\
46" \
47 "" ""
48SKIP=
49
50# continuing to use directory structure from prev test
41rm -rf mdev.testdir/dev/* 51rm -rf mdev.testdir/dev/*
42echo ".* 1:1 666" >mdev.testdir/etc/mdev.conf 52echo ".* 1:1 666" >mdev.testdir/etc/mdev.conf
43echo "sda 2:2 444" >>mdev.testdir/etc/mdev.conf 53echo "sda 2:2 444" >>mdev.testdir/etc/mdev.conf
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index b4042c07e..cd6c1a89d 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -132,6 +132,7 @@ static void make_device(char *path, int delete)
132 major = -1; 132 major = -1;
133 } 133 }
134 } 134 }
135 /* else: for delete, -1 still deletes the node, but < -1 suppresses that */
135 136
136 /* Determine device name, type, major and minor */ 137 /* Determine device name, type, major and minor */
137 device_name = (char*) bb_basename(path); 138 device_name = (char*) bb_basename(path);
@@ -279,7 +280,7 @@ static void make_device(char *path, int delete)
279 if (aliaslink == '!' && s == a+1) { 280 if (aliaslink == '!' && s == a+1) {
280 val = st; 281 val = st;
281 /* "!": suppress node creation/deletion */ 282 /* "!": suppress node creation/deletion */
282 major = -1; 283 major = -2;
283 } 284 }
284 else if (aliaslink == '>' || aliaslink == '=') { 285 else if (aliaslink == '>' || aliaslink == '=') {
285 val = st; 286 val = st;
@@ -379,7 +380,7 @@ static void make_device(char *path, int delete)
379 free(command); 380 free(command);
380 } 381 }
381 382
382 if (delete && major >= 0) { 383 if (delete && major >= -1) {
383 if (ENABLE_FEATURE_MDEV_RENAME && alias) { 384 if (ENABLE_FEATURE_MDEV_RENAME && alias) {
384 if (aliaslink == '>') 385 if (aliaslink == '>')
385 unlink(device_name); 386 unlink(device_name);