#! /usr/bin/sh

# Settings from /etc/sysconfig/filename are available as environment vars
# with the name 'SYS__FILENAME__KEY' (filename converted to upper case).
#
# Not all files are parsed, current list is:
#   bootloader, language
#

# usage: del-option OPTION
#
# Delete default boot option.
#
# OPTION is either of the form 'key=value' or 'key="value"' or just 'key'.

if [ -e /etc/default/grub ] ; then
  . /etc/default/grub
  if [ -z "$GRUB_CMDLINE_LINUX_DEFAULT" ] ; then
    echo "Warning: GRUB_CMDLINE_LINUX_DEFAULT is empty"
  fi
else
  echo "/etc/default/grub missing"
  exit 1
fi

cmd="$GRUB_CMDLINE_LINUX_DEFAULT"

opt="$1"

echo "cmdline (old): $cmd"

ifs_orig="$IFS" IFS=

nl=$'\n'
q=0
n=
while read -r -n 1 foo ; do
  if [ "$q" = 0 ] ; then
    [ "$foo" = '"' ] && q=1
  else
    [ "$foo" = '"' ] && q=0
  fi
  [ "$foo" = " " -a "$q" = 0 ] && foo="$nl"
  n="$n$foo"
done <<XXX
$cmd
XXX

IFS="$nl"

changed=
newcmd=
for i in $n ; do
  match="${i#"$opt"}"
  if [ "$match" != "$i" -a \( -z "$match" -o "${match:0:1}" = "=" \) ] ; then
    changed=1
  else
    newcmd="$newcmd $i"
  fi
done

IFS="$ifs_orig"

newcmd=${newcmd# }

if [ -z "$changed" ] ; then
  echo "cmdline not updated"
  exit 0
fi

echo "cmdline (new): $newcmd"

newcmd=${newcmd//\\/\\\\\\\\}
newcmd=${newcmd//\"/\\\\\"}

sed -i -e "/^GRUB_CMDLINE_LINUX_DEFAULT=/c GRUB_CMDLINE_LINUX_DEFAULT=\"$newcmd\"" /etc/default/grub || {
  echo "/etc/default/grub: failed to update config file"
  exit 1
}

exit 0
