diff -Naur busybox.m/libbb/parse_config.c busybox/libbb/parse_config.c
--- busybox.m/libbb/parse_config.c	2008-07-15 12:14:36 +0000
+++ busybox/libbb/parse_config.c	2008-07-15 12:15:45 +0000
@@ -129,7 +129,7 @@
 FILE* FAST_FUNC config_open(parser_t *parser, const char *filename)
 {
 	// empty file configures nothing!
-	parser->fp = xfopen(filename, "r");
+	parser->fp = fopen_or_warn(filename, "r");
 	if (!parser->fp)
 		return parser->fp;
 
diff -Naur busybox.m/util-linux/mdev.c busybox/util-linux/mdev.c
--- busybox.m/util-linux/mdev.c	2008-07-15 12:14:36 +0000
+++ busybox/util-linux/mdev.c	2008-07-15 12:00:46 +0000
@@ -101,9 +101,9 @@
 		if (!config_open(&parser, "/etc/mdev.conf"))
 			goto end_parse;
 
-		while (config_read(&parser, tokens, 5, 3, " \t", '#')) {
+		while (config_read(&parser, tokens, 4, 3, " \t", '#')) {
 			regmatch_t off[1+9*ENABLE_FEATURE_MDEV_RENAME_REGEXP];
-			char **val = tokens;
+			char *val;
 
 			/* Fields: regex uid:gid mode [alias] [cmd] */
 
@@ -113,7 +113,7 @@
 				int result;
 
 				/* Is this it? */
-				xregcomp(&match, *val++, REG_EXTENDED);
+				xregcomp(&match, tokens[0], REG_EXTENDED);
 				result = regexec(&match, device_name, ARRAY_SIZE(off), off, 0);
 				regfree(&match);
 
@@ -141,7 +141,7 @@
 			{
 				struct passwd *pass;
 				struct group *grp;
-				char *str_uid = *val++;
+				char *str_uid = tokens[1];
 				char *str_gid = strchrnul(str_uid, ':');
 
 				if (*str_gid)
@@ -161,27 +161,30 @@
 			}
 
 			/* 3rd field: mode - device permissions */
-			mode = strtoul(*val, NULL, 8);
+			mode = strtoul(tokens[2], NULL, 8);
 
+			val = tokens[3];
 			/* 4th field (opt): >alias */
 #if ENABLE_FEATURE_MDEV_RENAME
-			if (!*++val)
+			if (!val)
 				break;
-			aliaslink = *val[0];
+			aliaslink = *val;
 			if (aliaslink == '>' || aliaslink == '=') {
-#if ENABLE_FEATURE_MDEV_RENAME_REGEXP
 				char *s, *p;
 				unsigned i, n;
-
+				char *a = val;
+				s = strchr(val, ' ');
+				val = (s && s[1]) ? s+1 : NULL;
+#if ENABLE_FEATURE_MDEV_RENAME_REGEXP
 				/* substitute %1..9 with off[1..9], if any */
 				n = 0;
-				s = *val;
+				s = a;
 				while (*s)
 					if (*s++ == '%')
 						n++;
 
-				p = alias = xzalloc(strlen(*val) + n * strlen(device_name));
-				s = *val + 1;
+				p = alias = xzalloc(strlen(a) + n * strlen(device_name));
+				s = a + 1;
 				while (*s) {
 					*p = *s;
 					if ('%' == *s) {
@@ -197,17 +200,17 @@
 					s++;
 				}
 #else
-				alias = xstrdup(*val + 1);
+				alias = xstrdup(a + 1);
 #endif
 			}
 #endif /* ENABLE_FEATURE_MDEV_RENAME */
 
 			/* The rest (opt): command to run */
-			if (!*++val)
+			if (!val)
 				break;
 			if (ENABLE_FEATURE_MDEV_EXEC) {
 				const char *s = "@$*";
-				const char *s2 = strchr(s, *val[0]);
+				const char *s2 = strchr(s, *val);
 
 				if (!s2)
 					bb_error_msg_and_die("bad line %u", parser.lineno);
@@ -219,7 +222,7 @@
 				 * *cmd: run on both
 				 */
 				if ((s2 - s + 1) /*1/2/3*/ & /*1/2*/ (1 + delete)) {
-					command = xstrdup(*val + 1);
+					command = xstrdup(val + 1);
 				}
 			}
 			/* end of field parsing */
