@@ -104,13 +104,20 @@ for p in `cat /proc/cmdline`; do
continue
fi
- opt=`echo $p | cut -d'=' -f1`
- opt=`echo $opt | sed -e 'y/.-/__/'`
- if [ "`echo $p | cut -d'=' -f1`" = "$p" ]; then
+ key=${p%%=*}
+ opt=$key
+ while :; do
+ case "$opt" in
+ *.*) opt=${opt%%.*}_${opt#*.} ;;
+ *-*) opt=${opt%%-*}_${opt#*-} ;;
+ *) break ;;
+ esac
+ done
+ if [ "$key" = "$p" ]; then
# opt parameter
eval "bootparam_${opt}=true"
else
- value="`echo $p | cut -d'=' -f2-`" # Option value
+ value=${p#*=} # Option value
value_lstripped=${value#\"}
value_rstripped=${value%\"}
Use POSIX shell parameter expansion instead of external cut and sed while parsing kernel command-line parameters. This keeps the parser compatible with /bin/sh implementations that do not support Bash-style pattern substitution while avoiding per-parameter processes. On QEMU, cmdline parsing decreased from 1.381871 s to 0.056985 s, a 95.9% reduction. Tested with dash and BusyBox sh syntax checks and QEMU. AI-Generated: OpenAI Codex Signed-off-by: Wenwen Fu <wenwfu@qti.qualcomm.com> --- Changes since v1: - Replace Bash-style substitution with POSIX-compatible logic, removing the dependency on Bash-specific shell features. - Split the module-loop cleanup into a separate second patch. - Add QEMU performance measurements. .../initrdscripts/initramfs-framework/init | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)