don't rely on temporary variables in config() as they may get overwritten by config_cb()
[openwrt.git] / package / base-files / default / etc / functions.sh
1 #!/bin/sh
2 alias debug=${DEBUG:-:}
3
4 # newline
5 N="
6 "
7
8 _C=0
9
10 # valid interface?
11 if_valid () (
12   ifconfig "$1" >&- 2>&- ||
13   [ "${1%%[0-9]}" = "br" ] ||
14   { debug "# missing interface '$1' ignored"; false; }
15 )
16
17 hotplug_dev() {
18         env -i ACTION=$1 INTERFACE=$2 /sbin/hotplug net
19 }
20
21 append() {
22         local var="$1"
23         local value="$2"
24         local sep="${3:- }"
25         eval "export ${var}=\"\${${var}:+\${${var}}${value:+$sep}}$value\""
26 }
27
28 reset_cb() {
29         config_cb() {
30                 return 0
31         }
32         option_cb() {
33                 return 0
34         }
35 }
36 reset_cb
37
38 config () {
39         _C=$(($_C + 1))
40         name="${name:-cfg${_C}}"
41         config_cb "$1" "$2"
42         export CONFIG_SECTION="$2"
43         export CONFIG_${CONFIG_SECTION}_TYPE="$1"
44 }
45
46 option () {
47         local varname="$1" ; shift
48         export CONFIG_${CONFIG_SECTION}_${varname}="$*"
49         option_cb "$varname" "$*"
50 }
51
52 config_clear() {
53         [ -z "$CONFIG_SECTION" ] && return
54         for oldsetting in `set | grep ^CONFIG_${CONFIG_SECTION}_ | \
55                 sed -e 's/\(.*\)=.*$/\1/'` ; do 
56                 unset $oldsetting 
57         done
58         unset CONFIG_SECTION
59 }
60
61 config_load() {
62         local DIR="./"
63         _C=0
64         [ \! -e "$1" -a -e "/etc/config/$1" ] && {
65                 DIR="/etc/config/"
66         }
67         [ -e "$DIR$1" ] && {
68                 CONFIG_FILENAME="$DIR$1"
69                 . ${CONFIG_FILENAME}
70         } || return 1
71         ${CD:+cd -} >/dev/null
72         ${CONFIG_SECTION:+config_cb}
73 }
74
75 config_get() {
76         case "$3" in
77                 "") eval "echo \${CONFIG_${1}_${2}}";;
78                 *) eval "$1=\"\${CONFIG_${2}_${3}}\"";;
79         esac
80 }
81
82 config_set() {
83         export CONFIG_${1}_${2}="${3}"
84 }
85
86 load_modules() {
87         sed 's/^[^#]/insmod &/' $* | ash 2>&- || :
88 }