init: Parse kernel command line without external tools 87/155487/4
authorKarol Lewandowski <k.lewandowsk@samsung.com>
Fri, 13 Oct 2017 08:22:24 +0000 (10:22 +0200)
committerKarol Lewandowski <k.lewandowsk@samsung.com>
Fri, 13 Oct 2017 09:29:31 +0000 (11:29 +0200)
/proc/cmdline can be easily parsed using shell built-ins,
allowing to remove potentially unnecessary tools from image
(tr, cut, grep).

Change-Id: I2c971d3503700b2ca105773552e452ded4e65098
Signed-off-by: Karol Lewandowski <k.lewandowsk@samsung.com>
src/initrd-recovery/init

index 7a231ae..387e265 100755 (executable)
@@ -7,15 +7,11 @@ STATUS_DIR=${FAKE_ROOT}/opt/data/recovery
 STATUS_FILE=${STATUS_DIR}/RW.STATUS
 DELTA_PATH_FILE=${STATUS_DIR}/DELTA.PATH
 
-CAT="/bin/cat"
 SYNC="/bin/sync"
 MKDIR="/bin/mkdir"
 MOUNT="/bin/mount"
 UMOUNT="/bin/umount"
-GREP="/bin/grep"
 REBOOT="/sbin/reboot"
-CUT="/usr/bin/cut"
-TR="/usr/bin/tr"
 
 #------------------------------------------------
 #       mount_partitions
@@ -52,11 +48,20 @@ echo "You entered into /sbin/init on initrd"
 
 mount_partitions
 
-"$CAT" /proc/cmdline
-
 cd /
 
-BOOT_MODE=$("$CAT" /proc/cmdline | "$TR" ' ' \\n | "$GREP" bootmode | "$CUT" -d= -f2)
+# Manually parse /proc/cmdline to avoid additional tools on image
+read cmdline </proc/cmdline
+echo "Kernel command line: $cmdline"
+set -- $cmdline
+while [ $# -gt 0 ]; do
+    key="${1%%=*}"
+    if [ "$key" = "bootmode" ]; then
+        BOOT_MODE="${1#*=}"
+        break;
+    fi
+    shift
+done
 
 if [ "z$BOOT_MODE" = "z" ]; then
     echo "BOOT_MODE was NOT defined!!"
@@ -64,4 +69,4 @@ if [ "z$BOOT_MODE" = "z" ]; then
     do_reboot
 fi
 echo "BOOTMODE is ${BOOT_MODE}"
-exec /sbin/${BOOT_MODE}-init
+exec "/sbin/${BOOT_MODE}-init"