summaryrefslogtreecommitdiff
path: root/alt-rootfs-installer/shell-config
diff options
context:
space:
mode:
Diffstat (limited to 'alt-rootfs-installer/shell-config')
-rw-r--r--alt-rootfs-installer/shell-config91
1 files changed, 91 insertions, 0 deletions
diff --git a/alt-rootfs-installer/shell-config b/alt-rootfs-installer/shell-config
new file mode 100644
index 0000000..23243b3
--- /dev/null
+++ b/alt-rootfs-installer/shell-config
@@ -0,0 +1,91 @@
+#!/bin/sh -efu
+### This file is covered by the GNU General Public License,
+### which should be included with libshell as the file LICENSE.
+### All copyright information are listed in the COPYING.
+
+if [ -z "${__included_shell_config-}" ]; then
+__included_shell_config=1
+
+. shell-error
+. shell-quote
+
+__shell_config_comment='#'
+
+shell_config_get()
+{
+ [ "$#" -ge 2 ] && [ "$#" -le 3 ] ||
+ fatal "Usage: shell_config_get file name [delim]"
+ local file="$1" name="$2" delim="${3-=}"
+
+ [ -s "$file" ] ||
+ return 0
+ quote_sed_regexp_variable name "$name"
+ sed -n -e "s/^[[:space:]]*$name$delim//p" -- "$file"
+}
+
+shell_config_set()
+{
+ [ "$#" -ge 3 ] && [ "$#" -le 5 ] ||
+ fatal "Usage: shell_config_set file name value [read-delim [write-delim]]"
+
+ local file="$1" name="$2" value="$3" r_delim="${4-=}" w_delim="${5-=}"
+ local n v nv='' created=''
+
+ if [ ! -f "$file" ]; then
+ if [ ! -w "${file%/*}" ]; then
+ message "${file%/*}: not writable."
+ return 1
+ fi
+ touch -- "$file" ||
+ return 1
+ created=1
+ fi
+
+ if [ -z "$created" ]; then
+ quote_sed_regexp_variable n "$name"
+
+ if v="$(grep -m1 "^[[:space:]]*$n$r_delim" -- "$file" 2>/dev/null)"; then
+ if [ "${v#*$name$r_delim}" != "$value" ]; then
+ quote_sed_regexp_variable nv "$w_delim$value"
+ sed -i -e "s/^[[:space:]]*$n$r_delim.*/$n$nv/" -- "$file"
+ fi
+ return
+ fi
+
+ if [ -n "${__shell_config_comment-}" ] &&
+ v="$(grep -m1 "^[[:space:]]*${__shell_config_comment:-#}[[:space:]]*$n$r_delim" -- "$file" 2>/dev/null)"; then
+ quote_sed_regexp_variable v "$v"
+ quote_sed_regexp_variable nv "$w_delim$value"
+ sed -i -e "s/^$v\$/$n$nv/" -- "$file"
+ return
+ fi
+ fi
+
+ printf '%s\n' "$name$w_delim$value" >> "$file"
+}
+
+shell_config_del()
+{
+ [ "$#" -ge 2 ] && [ "$#" -le 3 ] ||
+ fatal "Usage: shell_config_del file name [delim]"
+ local file="$1" name="$2" delim="${3-=}"
+
+ [ -s "$file" ] ||
+ return 0
+ quote_sed_regexp_variable name "$name"
+ sed -i -e "/^[[:space:]]*$name$delim/d" -- "$file"
+}
+
+shell_config_comment()
+{
+ [ "$#" -ge 2 ] && [ "$#" -le 3 ] ||
+ fatal "Usage: shell_config_comment file name [delim]"
+ local file="$1" name="$2" delim="${3-=}"
+
+ [ -s "$file" ] ||
+ return 0
+ quote_sed_regexp_variable name "$name"
+ sed -i -e "s/^[[:space:]]*$name$delim.*/${__shell_config_comment:-#}&/" -- "$file"
+}
+
+fi #__included_shell_config