Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83e8b90e authored by Clement Chauplannaz's avatar Clement Chauplannaz Committed by Yann E. MORIN
Browse files

scripts/config: use sed's POSIX interface



Script `config' relies on extensions of `GNU sed', and is thus not
working on all Unixes:
  - in-place edition of files (-i), which can be replaced with
    a temporary file;
  - extended-regexps (-r), which can be split into basic regexps;
  - single-line calls to `a' command, while some implementations
    require a leading newline before the parameter.

Rewrite calls to `sed' to comply with POSIX interface, and move them
to helper functions.

Signed-off-by: default avatarClement Chauplannaz <chauplac@gmail.com>
Tested-by: default avatar"Yann E. MORIN" <yann.morin.1998@free.fr>
Reviewed-by: default avatar"Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: default avatarYann E. MORIN <yann.morin.1998@free.fr>
parent 129784ab
Loading
Loading
Loading
Loading
+41 −3
Original line number Original line Diff line number Diff line
@@ -62,15 +62,52 @@ checkarg() {
	fi
	fi
}
}


txt_append() {
	local anchor="$1"
	local insert="$2"
	local infile="$3"
	local tmpfile="$infile.swp"

	# sed append cmd: 'a\' + newline + text + newline
	cmd="$(printf "a\\%b$insert" "\n")"

	sed -e "/$anchor/$cmd" "$infile" >"$tmpfile"
	# replace original file with the edited one
	mv "$tmpfile" "$infile"
}

txt_subst() {
	local before="$1"
	local after="$2"
	local infile="$3"
	local tmpfile="$infile.swp"

	sed -e "s/$before/$after/" "$infile" >"$tmpfile"
	# replace original file with the edited one
	mv "$tmpfile" "$infile"
}

txt_delete() {
	local text="$1"
	local infile="$2"
	local tmpfile="$infile.swp"

	sed -e "/$text/d" "$infile" >"$tmpfile"
	# replace original file with the edited one
	mv "$tmpfile" "$infile"
}

set_var() {
set_var() {
	local name=$1 new=$2 before=$3
	local name=$1 new=$2 before=$3


	name_re="^($name=|# $name is not set)"
	name_re="^($name=|# $name is not set)"
	before_re="^($before=|# $before is not set)"
	before_re="^($before=|# $before is not set)"
	if test -n "$before" && grep -Eq "$before_re" "$FN"; then
	if test -n "$before" && grep -Eq "$before_re" "$FN"; then
		sed -ri "/$before_re/a $new" "$FN"
		txt_append "^$before=" "$new" "$FN"
		txt_append "^# $before is not set" "$new" "$FN"
	elif grep -Eq "$name_re" "$FN"; then
	elif grep -Eq "$name_re" "$FN"; then
		sed -ri "s:$name_re.*:$new:" "$FN"
		txt_subst "^$name=.*" "$new" "$FN"
		txt_subst "^# $name is not set" "$new" "$FN"
	else
	else
		echo "$new" >>"$FN"
		echo "$new" >>"$FN"
	fi
	fi
@@ -79,7 +116,8 @@ set_var() {
undef_var() {
undef_var() {
	local name=$1
	local name=$1


	sed -ri "/^($name=|# $name is not set)/d" "$FN"
	txt_delete "^$name=" "$FN"
	txt_delete "^# $name is not set" "$FN"
}
}


if [ "$1" = "--file" ]; then
if [ "$1" = "--file" ]; then