mdev: fix a bug where we were eating argv[0] of helper
authorDenis Vlasenko <vda.linux@googlemail.com>
Fri, 2 May 2008 13:21:24 +0000 (13:21 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Fri, 2 May 2008 13:21:24 +0000 (13:21 -0000)
testsuite/mdev.tests
util-linux/mdev.c

index 81c440d1f050576dbfe1198cd5475d98e1c78756..572609e11d45ce87c0bfbaf29573164579c10d2b 100755 (executable)
@@ -18,6 +18,8 @@ mkdir mdev.testdir
 # We need mdev executable to be in chroot jail!
 # (will still fail with dynamically linked one, though...)
 cp ../busybox mdev.testdir/mdev
+mkdir mdev.testdir/bin
+cp ../busybox mdev.testdir/bin/sh 2>/dev/null # for testing cmd feature
 mkdir mdev.testdir/etc
 mkdir mdev.testdir/dev
 mkdir -p mdev.testdir/sys/block/sda
@@ -93,6 +95,20 @@ brw-r--r-- 1 0 0 a_sda
 " \
        "" ""
 
+# continuing to use directory structure from prev test
+rm -rf mdev.testdir/dev/*
+# here we complicate things by having non-matching group 1 and using %0
+echo "sda 0:0 644 @echo @echo TEST" >mdev.testdir/etc/mdev.conf
+testing "mdev command" \
+       "env - ACTION=add DEVPATH=/block/sda chroot mdev.testdir /mdev 2>&1;
+       ls -lnR mdev.testdir/dev | $FILTER_LS" \
+"\
+@echo TEST
+mdev.testdir/dev:
+brw-r--r-- 1 0 0 8,0 sda
+" \
+       "" ""
+
 # clean up
 rm -rf mdev.testdir
 
index 9d37b6c9008732b048be71f383acbe6a398b91cd..5e1cd36bb72bbfae11d8cc1c06b9415cd0f55776 100644 (file)
@@ -156,43 +156,45 @@ static void make_device(char *path, int delete)
                        mode = strtoul(val, NULL, 8);
 
                        /* 4th field (opt): >alias */
-                       if (ENABLE_FEATURE_MDEV_RENAME) {
-                               if (!next)
-                                       break;
+#if ENABLE_FEATURE_MDEV_RENAME
+                       if (!next)
+                               break;
+                       if (*next == '>') {
+#if ENABLE_FEATURE_MDEV_RENAME_REGEXP
+                               char *s, *p;
+                               unsigned i, n;
+
                                val = next;
                                next = next_field(val);
-                               if (*val == '>') {
-#if ENABLE_FEATURE_MDEV_RENAME_REGEXP
-                                       /* substitute %1..9 with off[1..9], if any */
-                                       char *s, *p;
-                                       unsigned i, n;
-
-                                       n = 0;
-                                       s = val;
-                                       while (*s && *s++ == '%')
-                                               n++;
-
-                                       p = alias = xzalloc(strlen(val) + n * strlen(device_name));
-                                       s = val + 1;
-                                       while (*s) {
-                                               *p = *s;
-                                               if ('%' == *s) {
-                                                       i = (s[1] - '0');
-                                                       if (i <= 9 && off[i].rm_so >= 0) {
-                                                               n = off[i].rm_eo - off[i].rm_so;
-                                                               strncpy(p, device_name + off[i].rm_so, n);
-                                                               p += n - 1;
-                                                               s++;
-                                                       }
+                               /* substitute %1..9 with off[1..9], if any */
+                               n = 0;
+                               s = val;
+                               while (*s && *s++ == '%')
+                                       n++;
+
+                               p = alias = xzalloc(strlen(val) + n * strlen(device_name));
+                               s = val + 1;
+                               while (*s) {
+                                       *p = *s;
+                                       if ('%' == *s) {
+                                               i = (s[1] - '0');
+                                               if (i <= 9 && off[i].rm_so >= 0) {
+                                                       n = off[i].rm_eo - off[i].rm_so;
+                                                       strncpy(p, device_name + off[i].rm_so, n);
+                                                       p += n - 1;
+                                                       s++;
                                                }
-                                               p++;
-                                               s++;
                                        }
+                                       p++;
+                                       s++;
+                               }
 #else
-                                       alias = xstrdup(val + 1);
+                               val = next;
+                               next = next_field(val);
+                               alias = xstrdup(val + 1);
 #endif
-                               }
                        }
+#endif /* ENABLE_FEATURE_MDEV_RENAME */
 
                        /* The rest (opt): command to run */
                        if (!next)