don't rely on temporary variables in config() as they may get overwritten by config_cb()
[openwrt/staging/florian.git] / openwrt / 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 }