SVN: geninitrd/trunk: geninitrd tests/initramfs_switchroot.sh

glen glen at pld-linux.org
Mon Apr 16 14:45:02 CEST 2012


Author: glen
Date: Mon Apr 16 14:45:01 2012
New Revision: 12546

Modified:
   geninitrd/trunk/geninitrd
   geninitrd/trunk/tests/initramfs_switchroot.sh
Log:
initramfs switchroot: fix parsing `root=fe00`


Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd	(original)
+++ geninitrd/trunk/geninitrd	Mon Apr 16 14:45:01 2012
@@ -786,7 +786,7 @@
 	# We support passing root as hda3 /dev/hda3 0303 0x0303 and 303
 	add_linuxrc <<-'EOF'
 		device=
-		eval "$(busybox awk -v c="$ROOT" '
+		eval "$(busybox awk -v root="$ROOT" '
 			BEGIN {
 				num_pattern_short = "[0-9a-f][0-9a-f][0-9a-f]";
 				num_pattern = "[0-9a-f]" num_pattern_short;
@@ -794,14 +794,24 @@
 				partition = "";
 				min = -1; maj = -1;
 
-				sub("^0x", "", c);
-				if (c ~ "^" num_pattern_short "$") sub("^", "0", c);
-				if (c ~ "^" num_pattern  "$") {
-					maj = sprintf("%d",substr(c,1,2));
-					min = sprintf("%d",substr(c,3));
+				# see if we have /dev/hdX or hdX, we can just take partition name
+				if (root ~ "^\/dev\/" dev_pattern "$" || root ~ "^" dev_pattern "$") {
+					partition = root
+					sub("^/dev/", "", partition);
+
+				} else {
+					# unify values first
+					if (root ~ "^" num_pattern_short "$")  {
+						# change "303" => "0x0303"
+						root = "0x0" root
+					} else if (root ~ "^" num_pattern "$")  {
+						# change "0303" => "0x0303"
+						root = "0x" root
+					}
+
+					maj = sprintf("%d", "0x" substr(root, 3, 2));
+					min = sprintf("%d", "0x" substr(root, 5, 2));
 				}
-				if (c ~ "^\/dev\/" dev_pattern "$") sub("^/dev/","", c);
-				if (c ~ "^" dev_pattern "$") partition = c;
 			}
 
 			partition && $4 == partition { maj = $1; min = $2; }

Modified: geninitrd/trunk/tests/initramfs_switchroot.sh
==============================================================================
--- geninitrd/trunk/tests/initramfs_switchroot.sh	(original)
+++ geninitrd/trunk/tests/initramfs_switchroot.sh	Mon Apr 16 14:45:01 2012
@@ -22,7 +22,7 @@
 
 		device=
 		eval "$(
-		busybox awk -v c="$ROOT" '
+		busybox awk -v root="$ROOT" '
 			BEGIN {
 				num_pattern_short = "[0-9a-f][0-9a-f][0-9a-f]";
 				num_pattern = "[0-9a-f]" num_pattern_short;
@@ -30,15 +30,26 @@
 				partition = "";
 				min = -1; maj = -1;
 
-				sub("^0x", "", c);
-				if (c ~ "^" num_pattern_short "$") sub("^", "0", c);
-				if (c ~ "^" num_pattern  "$") {
-					maj = sprintf("%d",substr(c,1,2));
-					min = sprintf("%d",substr(c,3));
+				# see if we have /dev/hdX or hdX, we can just take partition name
+				if (root ~ "^\/dev\/" dev_pattern "$" || root ~ "^" dev_pattern "$") {
+					partition = root
+					sub("^/dev/", "", partition);
+					printf("# partition regexp=%s;\n", partition);
+
+				} else {
+					# unify values first
+					if (root ~ "^" num_pattern_short "$")  {
+						# change "303" => "0x0303"
+						root = "0x0" root
+					} else if (root ~ "^" num_pattern "$")  {
+						# change "0303" => "0x0303"
+						root = "0x" root
+					}
+
+					maj = sprintf("%d", "0x" substr(root, 3, 2));
+					min = sprintf("%d", "0x" substr(root, 5, 2));
+					printf("# BEGIN: maj=%s, min=%s\n", maj, min);
 				}
-				if (c ~ "^\/dev\/" dev_pattern "$") sub("^/dev/","", c);
-				if (c ~ "^" dev_pattern "$") partition = c;
-				printf("# BEGIN: partition=%s; maj=%s, min=%s\n", partition, maj, min);
 			}
 			{ printf("# maj:[%s], min:[%s], part:[%s]\n", $1, $2, $4) }
 


More information about the pld-cvs-commit mailing list