diff options
| author | Clement Chauplannaz <chauplac@gmail.com> | 2013-07-13 16:36:56 +0200 | 
|---|---|---|
| committer | Yann E. MORIN <yann.morin.1998@free.fr> | 2013-08-15 22:48:07 +0200 | 
| commit | 83e8b90e1d2cc5ff5d2443f2486c2d786a4997ce (patch) | |
| tree | 9d57d3bee9b3de3a623ab52bd2e4a14a9289b5ba /scripts/config | |
| parent | 129784abc982ccac43322c2f175f3ca735c2ca73 (diff) | |
| download | linux-83e8b90e1d2cc5ff5d2443f2486c2d786a4997ce.tar.bz2 | |
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: Clement Chauplannaz <chauplac@gmail.com>
Tested-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Diffstat (limited to 'scripts/config')
| -rwxr-xr-x | scripts/config | 44 | 
1 files changed, 41 insertions, 3 deletions
| diff --git a/scripts/config b/scripts/config index 567120a87c39..2283be2bb62c 100755 --- a/scripts/config +++ b/scripts/config @@ -62,15 +62,52 @@ checkarg() {  	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() {  	local name=$1 new=$2 before=$3  	name_re="^($name=|# $name is not set)"  	before_re="^($before=|# $before is not set)"  	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 -		sed -ri "s:$name_re.*:$new:" "$FN" +		txt_subst "^$name=.*" "$new" "$FN" +		txt_subst "^# $name is not set" "$new" "$FN"  	else  		echo "$new" >>"$FN"  	fi @@ -79,7 +116,8 @@ set_var() {  undef_var() {  	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 |