rendered paste bodydiff -urN package.old/base-files-uci/Config.in package.new/base-files-uci/Config.in--- package.old/base-files-uci/Config.in 1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/Config.in 2007-10-31 19:37:26.000000000 +0100@@ -0,0 +1,5 @@+config BR2_PACKAGE_BASE_FILES_UCI+ tristate "uci - UCI support files"+ default m if CONFIG_DEVEL+ help+ UCI support file for packages backported from Kamikaze.diff -urN package.old/base-files-uci/files/bin/uci package.new/base-files-uci/files/bin/uci--- package.old/base-files-uci/files/bin/uci 1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/bin/uci 2007-06-26 17:45:57.000000000 +0200@@ -0,0 +1,182 @@+#!/bin/sh+# Shell script for interacting with config files+#+# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>+# Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org>+#+# This program is free software; you can redistribute it and/or modify+# it under the terms of the GNU General Public License as published by+# the Free Software Foundation; either version 2 of the License, or+# (at your option) any later version.+#+# This program is distributed in the hope that it will be useful,+# but WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU+# General Public License for more details.+#+# You should have received a copy of the GNU General Public License+# along with this program; if not, write to the Free Software+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA++. /etc/functions.sh+[ -f "/etc/functions_ex.sh" ] && {+. /etc/functions_ex.sh+}+include /lib/config++SEP="[^0-9A-Za-z_]"++do_get() {+ local PACKAGE+ local CONFIG+ local OPTION+ local DUMMY++ strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY++ [ $? -ne 3 ] && {+ uci_usage get+ exit 1+ }++ uci_load "$PACKAGE"+ config_get "$CONFIG" "$OPTION"+}++do_set() {+ local PACKAGE+ local CONFIG+ local OPTION+ local VALUE++ strtok "$1" PACKAGE . CONFIG = VALUE+ [ $? -ne 3 -a $? -ne 2 ] && {+ uci_usage set+ exit 1+ }+ + strtok "$CONFIG" CONFIG . OPTION+ + if [ $? -eq 1 ]; then+ uci_add "$PACKAGE" "$VALUE" "$CONFIG"+ else+ uci_set "$PACKAGE" "$CONFIG" "$OPTION" "$VALUE"+ fi+}++do_rename() {+ [ $# -ne 3 ] && {+ uci_usage rename+ exit 1+ }+ uci_rename "$@"+}++do_remove() {+ local PACKAGE+ local CONFIG+ local OPTION+ local DUMMY++ strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY+ [ $? -ne 3 -a $? -ne 2 ] && {+ uci_usage rename+ exit 1+ }+ uci_remove "$PACKAGE" "$CONFIG" ${OPTION:+"$OPTION"}+}++do_commit() {+ local PACKAGE="$1"+ for package in ${PACKAGE:-$(cd /tmp/.uci; ls)}; do + [ lock = "${package##*.}" ] && continue # ignore .lock files+ uci_commit "$package"+ done+}++do_show() {+ local PACKAGE+ local CONFIG+ local DUMMY++ strtok "$*" PACKAGE . CONFIG $SEP DUMMY+ [ $? -gt 2 ] && {+ uci_usage show+ exit 1+ }+ + for package in ${PACKAGE:-$(cd /etc/config; ls)}; do+ SECTION=""+ + config_cb() {+ if [ -z "$CONFIG" -o "$CONFIG" = "$2" ]; then+ append SECTION "$2"+ option_cb() {+ append "${CONFIG_SECTION}_VARS" "$1"+ }+ else+ option_cb() {+ return 0+ }+ fi+ }+ + uci_load "$package"+ + for section in $SECTION; do+ config_get type "$section" TYPE+ [ -z "$type" ] && continue+ echo "$package.$section=$type"+ eval "VARS=\"\${${section}_VARS}\""+ for var in $VARS; do+ config_get val "$section" "$var"+ [ -n "$val" ] && {+ echo "$package.$section.$var=$val"+ config_set "$section" "$var" ""+ }+ done+ config_set "$section" TYPE ""+ done+ done+}++uci_usage() {+ case "$1" in+ show) echo "$0 show [<package>[.<config>]]";;+ get) echo "$0 get <package>.<config>.<option>";;+ set) echo "$0 set <package>.<config>[.<option>]=<value>";;+ del) echo "$0 del <package>.<config>[.<option>]";;+ rename) echo "$0 rename <package> <config> <name>";;+ commit) echo "$0 commit [<package> ... ]";;+ *) + echo "Syntax: $0 <command> <arguments...>"+ echo+ uci_usage show+ uci_usage get+ uci_usage set+ uci_usage del+ uci_usage rename+ uci_usage commit+ echo+ exit 1+ ;;+ esac+}++if [ $# -eq 0 ] ; then+ uci_usage+ exit 0+fi++local CMD="$1"+shift+case "$CMD" in+ set) do_set "$@";;+ del) do_remove "$@";;+ rename) do_rename "$@";;+ get) do_get "$@";;+ show) do_show "$@";;+ commit) do_commit "$@";;+ *) uci_usage;;+esac+exit 0diff -urN package.old/base-files-uci/files/lib/config/uci.awk package.new/base-files-uci/files/lib/config/uci.awk--- package.old/base-files-uci/files/lib/config/uci.awk 1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/lib/config/uci.awk 2007-06-26 17:45:56.000000000 +0200@@ -0,0 +1,186 @@+# Configuration update functions - AWK API+#+# Copyright (C) 2006 by Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>+# Copyright (C) 2006 by Felix Fietkau <nbd@openwrt.org>+#+# This program is free software; you can redistribute it and/or modify+# it under the terms of the GNU General Public License as published by+# the Free Software Foundation; either version 2 of the License, or+# (at your option) any later version.+#+# This program is distributed in the hope that it will be useful,+# but WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU+# General Public License for more details.+#+# You should have received a copy of the GNU General Public License+# along with this program; if not, write to the Free Software+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA++# parameters: 1+function config_load(package, var) {+ while (("/bin/ash -c '. /etc/functions.sh; unset NO_EXPORT; config_load \""package"\"; env | grep \"^CONFIG_\"'" | getline) == 1) {+ sub("^CONFIG_", "")+ if (match($0, "=") == 0) {+ if (var != "") CONFIG[var] = CONFIG[var] "\n" $0+ next+ }+ var=substr($0, 1, RSTART-1)+ CONFIG[var] = substr($0, RSTART+1, length($0) - RSTART)+ }+}++# parameters: 2+function config_get(package, option) {+ return CONFIG[package "_" option]+}++# parameters: 3+function config_get_bool(package, option, default, var) {+ var = config_get(package, option);+ if ((var == "enabled") || (var == "1") || (var == "on")) return 1+ if ((var == "disabled") || (var == "0") || (var == "off")) return 1+ return (var && var != "0" ? 1 : 0)+}+++function read_file(filename, result) {+ while ((getline <filename) == 1) {+ result = result $0 "\n"+ }+ gsub(/\n*$/, "", result)+ return result+}++function uci_cmd2option(str, tmp) {+ if (match(str,"=")!=0) {+ res = "\toption " substr(str,1,RSTART-1) "\t'" substr(str,RSTART+1) "'"+ } else {+ res= ""+ }+ return res+}++function uci_cmd2config(atype, aname) {+ return "config \"" atype "\" \"" aname "\""+}++function uci_update_config(cfg, update, \+ lines, line, l, n, i, i2, section, scnt, remove, tmp, aidx, rest) {+ scnt = 1+ linecnt=split(cfg "\n", lines, "\n")++ cfg = ""+ for (n = 1; n < linecnt; n++) {+ # stupid parser for quoted arguments (e.g. for the type string).+ # not to be used to gather variable values (backslash escaping doesn't work)+ line = lines[n]+ gsub(/^[ \t]*/, "", line)+ gsub(/#.*$/, "", line)+ i2 = 1+ delete l+ rest = line+ while (length(rest)) {+ if (match(rest, /[ \t\"]+/)) {+ if (RSTART>1) {+ l[i2] = substr(rest,1,RSTART-1)+ i2+++ }+ aidx=index(rest,"\"")+ if (aidx>=RSTART && aidx<=RSTART+RLENGTH) {+ rest=substr(rest,aidx+1)+ # find the end of the string+ match(rest,/\"/)+ l[i2]=substr(rest,1,RSTART-1)+ i2+++ }+ rest=substr(rest,RSTART+RLENGTH)+ } else {+ l[i2] = rest+ i2+++ rest = ""+ }+ }+ line = lines[n]+ + # when a command wants to set a config value for the current+ # section and a blank line is encountered before an option with+ # the same name, insert it here to maintain some coherency between+ # manually and automatically created option lines+ # if an option with the same name appears after this point, simply+ # ignore it, because it is already set.+ if ((section != "") && (l[1] != "option")) {+ if (line ~ /^[ \t]*$/) {+ if (update ~ "^" section "\\.") {+ gsub("^" section ".", "", update)+ cfg = cfg uci_cmd2option(update) "\n"+ gsub(/=.*$/, "", update)+ update = "-" section "." update+ }+ }+ }++ if (l[1] == "config") {+ # look for all unset values+ if (section != "") {+ flag=0+ if (update ~ "^" section "\\.") {+ flag=1+ gsub("^" section ".", "", update)+ cfg = cfg uci_cmd2option(update) "\n"+ + update = "-" section "." update+ } + if (flag!=0) cfg = cfg "\n"+ }+ + remove = ""+ section = l[3]+ if (!length(section)) {+ section = "cfg" scnt+ } + scnt+++ if (update == "-" section) {+ remove = "section"+ update = ""+ } else if (update ~ "^@" section "=") {+ update = ""+ } else if (update ~ "^&" section "=") {+ gsub("^&" section "=", "", update)+ line = uci_cmd2config(l[2],update) + update = ""+ }+ }+ if (remove == "option") remove = ""+ if (l[1] == "option") {+ if (update ~ "^-" section "\\." l[2] "$") remove = "option"+ # if a supplied config value already exists, replace the whole line+ if (match(update, "^" section "." l[2] "=")) {+ gsub("^" section ".", "", update)+ line = uci_cmd2option(update)+ update = ""+ }+ }+ if (remove == "") cfg = cfg line "\n"+ }+ + # any new options for the last section??+ if (section != "") {+ if (update ~ "^" section "\\.") {+ gsub("^" section ".", "", update)+ cfg = cfg uci_cmd2option(update) "\n"++ update = "-" section "." update+ } + }++ if (update ~ "^@") {+ # new section+ section = stype = substr(update,2)+ gsub(/=.*$/,"",section)+ gsub(/^.*=/,"",stype)+ cfg = cfg "\nconfig \"" stype "\" \"" section "\"\n"+ }++ return cfg+}\ Chybí znak konce řádku na konci souborudiff -urN package.old/base-files-uci/files/lib/config/uci-depends.new package.new/base-files-uci/files/lib/config/uci-depends.new--- package.old/base-files-uci/files/lib/config/uci-depends.new 1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/lib/config/uci-depends.new 2007-09-19 17:26:47.000000000 +0200@@ -0,0 +1,197 @@+#!/bin/sh+# Copyright (C) 2006 OpenWrt.org+# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>+#+# newline (used by /lib/config/uci.sh)+N="+"+_C=0++# perform export -n only if available+_EXPORT_N_OPTION="-n"+ntest=$(export -n 2>&1)+if echo "$ntest" | grep -iq "Illegal option -n"; then + _EXPORT_N_OPTION=""+fi++append() {+ local var="$1"+ local value="$2"+ local sep="${3:- }"+ + eval "export $_EXPORT_N_OPTION -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""+}++reset_cb() {+ config_cb() { return 0; }+ option_cb() { return 0; }+}+reset_cb++config () {+ local cfgtype="$1"+ local name="$2"+ + CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))+ name="${name:-cfg$CONFIG_NUM_SECTIONS}"+ append CONFIG_SECTIONS "$name"+ config_cb "$cfgtype" "$name"+ CONFIG_SECTION="$name"+ export $_EXPORT_N_OPTION "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"+}++option () {+ local varname="$1"; shift+ local value="$*"+ + export $_EXPORT_N_OPTION "CONFIG_${CONFIG_SECTION}_${varname}=$value"+ option_cb "$varname" "$*"+}++config_rename() {+ local OLD="$1"+ local NEW="$2"+ local oldvar+ local newvar+ + [ "$OLD" -a "$NEW" ] || return+ for oldvar in `set | grep ^CONFIG_${OLD}_ | \+ sed -e 's/\(.*\)=.*$/\1/'` ; do+ newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}"+ eval "export $_EXPORT_N_OPTION \"$newvar=\${$oldvar}\""+ unset "$oldvar"+ done+ CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")"+ + [ "$CONFIG_SECTION" = "$OLD" ] && CONFIG_SECTION="$NEW"+}++config_unset() {+ config_set "$1" "$2" ""+}++config_clear() {+ local SECTION="$1"+ local oldvar+ + CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , ,")"+ CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}"++ for oldvar in `set | grep ^CONFIG_${SECTION:+${SECTION}_} | \+ sed -e 's/\(.*\)=.*$/\1/'` ; do + unset $oldvar + done+}++config_load() {+ local file="/etc/config/$1"+ _C=0+ CONFIG_SECTIONS=+ CONFIG_NUM_SECTIONS=0+ CONFIG_SECTION=+ + [ -e "$file" ] && {+ . $file+ } || return 1+ + ${CONFIG_SECTION:+config_cb}+}++config_get() {+ case "$3" in+ "") eval "echo \"\${CONFIG_${1}_${2}}\"";;+ *) eval "export $_EXPORT_N_OPTION -- \"$1=\${CONFIG_${2}_${3}}\"";;+ esac+}++# config_get_bool <variable> <section> <option> [<default>]+config_get_bool() {+ local _tmp+ config_get "_tmp" "$2" "$3"+ case "$_tmp" in+ 1|on|true|enabled) export ${NO_EXPORT:+-n} "$1=1";;+ 0|off|false|disabled) export ${NO_EXPORT:+-n} "$1=0";;+ *) eval "$1=${4:-0}";;+ esac+}++config_set() {+ local section="$1"+ local option="$2"+ local value="$3"+ local old_section="$CONFIG_SECTION"++ CONFIG_SECTION="$section"+ option "$option" "$value"+ CONFIG_SECTION="$old_section"+}++config_foreach() {+ local function="$1"+ local type="$2"+ local section cfgtype+ + [ -z "$CONFIG_SECTIONS" ] && return 0+ for section in ${CONFIG_SECTIONS}; do+ config_get cfgtype "$section" TYPE+ [ -n "$type" -a "$cfgtype" != "$type" ] && continue+ eval "$function \"\$section\""+ done+}++load_modules() {+ cd /etc/modules.d+ sed 's/^[^#]/insmod &/' $* | ash 2>&- || :+}++include() {+ local file+ + for file in $(ls $1/*.sh 2>/dev/null); do+ . $file+ done+}++find_mtd_part() {+ local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"+ local PREFIX=/dev/mtdblock+ + PART="${PART##mtd}"+ [ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/+ echo "${PART:+$PREFIX$PART}"+}++strtok() { # <string> { <variable> [<separator>] ... }+ local tmp+ local val="$1"+ local count=0++ shift++ while [ $# -gt 1 ]; do+ tmp="${val%%$2*}"++ [ "$tmp" = "$val" ] && break++ val="${val#$tmp$2}"++ export $_EXPORT_N_OPTION "$1=$tmp"; count=$((count+1))+ shift 2+ done++ if [ $# -gt 0 -a "$val" ]; then+ export $_EXPORT_N_OPTION "$1=$val"; count=$((count+1))+ fi++ return $count+}+++jffs2_mark_erase() {+ local part="$(find_mtd_part "$1")"+ [ -z "$part" ] && {+ echo Partition not found.+ return 1+ }+ echo -e "\xde\xad\xc0\xde" | mtd -qq write - "$1"+}diff -urN package.old/base-files-uci/files/lib/config/uci.sh package.new/base-files-uci/files/lib/config/uci.sh--- package.old/base-files-uci/files/lib/config/uci.sh 1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/lib/config/uci.sh 2007-06-26 17:45:56.000000000 +0200@@ -0,0 +1,160 @@+#!/bin/sh+# Shell script defining macros for manipulating config files+#+# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>+# Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org>+#+# This program is free software; you can redistribute it and/or modify+# it under the terms of the GNU General Public License as published by+# the Free Software Foundation; either version 2 of the License, or+# (at your option) any later version.+#+# This program is distributed in the hope that it will be useful,+# but WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU+# General Public License for more details.+#+# You should have received a copy of the GNU General Public License+# along with this program; if not, write to the Free Software+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA++uci_load() {+ local PACKAGE="$1"+ config_load "$PACKAGE"+ local PACKAGE_BASE="$(basename "$PACKAGE")"+ [ -f "/tmp/.uci/${PACKAGE_BASE}" ] && {+ . "/tmp/.uci/${PACKAGE_BASE}" 2>/dev/null >/dev/null+ config_cb+ }+}++uci_apply_defaults() {(+ cd /etc/uci-defaults || return 0+ files="$(ls)"+ [ -z "$files" ] && return 0+ mkdir -p /tmp/.uci+ for file in $files; do+ ( . "./$(basename $file)" ) && rm -f "$file"+ done+ uci commit+)}++uci_call_awk() {+ local CMD="$*"+ awk -f $UCI_ROOT/lib/config/uci.awk -f - <<EOF+BEGIN {+ $CMD+}+EOF+}++uci_do_update() {+ local FILENAME="$1"+ local UPDATE="$2"+ uci_call_awk "+ config = read_file(\"$FILENAME\")+ $UPDATE+ print config+"+}++uci_add_update() {+ local PACKAGE="$1"+ local UPDATE="$2"+ local PACKAGE_BASE="$(basename "$PACKAGE")"+ + # FIXME: add locking?+ mkdir -p "/tmp/.uci"+ echo "$UPDATE" >> "/tmp/.uci/${PACKAGE_BASE}"+}++uci_set() {+ local PACKAGE="$1"+ local CONFIG="$2"+ local OPTION="$3"+ local VALUE="$4"++ ( # spawn a subshell so you don't mess up the current environment+ uci_load "$PACKAGE"+ config_get OLDVAL "$CONFIG" "$OPTION"+ if [ "$OLDVAL" != "$VALUE" ]; then+ config_get type "$CONFIG" TYPE+ [ -z "$type" ]+ fi+ ) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"+}++uci_add() {+ local PACKAGE="$1"+ local TYPE="$2"+ local CONFIG="$3"++ uci_add_update "$PACKAGE" "config '$TYPE' '$CONFIG'"+}++uci_rename() {+ local PACKAGE="$1"+ local CONFIG="$2"+ local VALUE="$3"++ uci_add_update "$PACKAGE" "config_rename '$CONFIG' '$VALUE'"+}++uci_remove() {+ local PACKAGE="$1"+ local CONFIG="$2"+ local OPTION="$3"++ if [ -z "$OPTION" ]; then+ uci_add_update "$PACKAGE" "config_clear '$CONFIG'"+ else+ uci_add_update "$PACKAGE" "config_unset '$CONFIG' '$OPTION'"+ fi+}++uci_commit() {+ local PACKAGE="$1"+ local PACKAGE_BASE="$(basename "$PACKAGE")"++ mkdir -p /tmp/.uci+ LOCK=`which lock` || LOCK=:+ $LOCK "/tmp/.uci/$PACKAGE_BASE.lock"+ [ -f "/tmp/.uci/$PACKAGE_BASE" ] && (+ updatestr=""+ + # replace handlers+ config() {+ append updatestr "config = uci_update_config(config, \"@$2=$1\")" "$N"+ }+ option() {+ append updatestr "config = uci_update_config(config, \"$CONFIG_SECTION.$1=$2\")" "$N"+ }+ config_rename() {+ append updatestr "config = uci_update_config(config, \"&$1=$2\")" "$N"+ }+ config_unset() {+ append updatestr "config = uci_update_config(config, \"-$1.$2\")" "$N"+ }+ config_clear() {+ append updatestr "config = uci_update_config(config, \"-$1\")" "$N"+ }+ + . "/tmp/.uci/$PACKAGE_BASE"++ # completely disable handlers so that they don't get in the way+ config() {+ return 0+ }+ option() {+ return 0+ }+ + config_load "$PACKAGE"+ CONFIG_FILENAME="${CONFIG_FILENAME:-$UCI_ROOT/etc/config/$PACKAGE_BASE}"+ uci_do_update "$CONFIG_FILENAME" "$updatestr" > "/tmp/.uci/$PACKAGE_BASE.new" && {+ mv -f "/tmp/.uci/$PACKAGE_BASE.new" "$CONFIG_FILENAME" && \+ rm -f "/tmp/.uci/$PACKAGE_BASE"+ } + )+ $LOCK -u "/tmp/.uci/$PACKAGE_BASE.lock"+}\ Chybí znak konce řádku na konci souborudiff -urN package.old/base-files-uci/ipkg/base-files-uci.control package.new/base-files-uci/ipkg/base-files-uci.control--- package.old/base-files-uci/ipkg/base-files-uci.control 1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/ipkg/base-files-uci.control 2007-10-31 19:38:29.000000000 +0100@@ -0,0 +1,4 @@+Package: base-files-uci+Priority: optional+Section: system+Description: UCI support scriptsdiff -urN package.old/base-files-uci/Makefile package.new/base-files-uci/Makefile--- package.old/base-files-uci/Makefile 1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/Makefile 2007-10-31 20:21:33.000000000 +0100@@ -0,0 +1,34 @@+#+# Copyright (C) 2007 X-Wrt.org+#+# This is free software, licensed under the GNU General Public License v2.+# See /LICENSE for more information.+#++include $(TOPDIR)/rules.mk++PKG_NAME:=base-files-uci+PKG_VERSION:=0+PKG_RELEASE:=3++PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)++include $(TOPDIR)/package/rules.mk++$(eval $(call PKG_template,BASE_FILES_UCI,$(PKG_NAME),$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))++$(PKG_BUILD_DIR)/.prepared:+ mkdir -p $(PKG_BUILD_DIR)+ touch $@+ +$(PKG_BUILD_DIR)/.configured:+ touch $@++$(PKG_BUILD_DIR)/.built:+ touch $@++$(IPKG_BASE_FILES_UCI): + $(CP) -a ./files/* $(IDIR_BASE_FILES_UCI)/+ find $(IDIR_BASE_FILES_UCI) -name .svn | xargs rm -rf+ find $(IDIR_BASE_FILES_UCI) -name *~ | xargs rm -rf+ $(IPKG_BUILD) $(IDIR_BASE_FILES_UCI) $(PACKAGE_DIR)diff -urN package.old/webif/Config.in package.new/webif/Config.in--- package.old/webif/Config.in 2007-10-29 15:30:09.000000000 +0100+++ package.new/webif/Config.in 2007-10-31 19:47:03.000000000 +0100@@ -1,9 +1,10 @@ menu "webif - OpenWrt Administrative Console" config BR2_PACKAGE_WEBIF- select BR2_PACKAGE_IPKG_UPGRADE_FIX+ select BR2_PACKAGE_BASE_FILES_UCI+ select BR2_PACKAGE_IPKG_UPGRADE_FIX depends BR2_PACKAGE_WEBIF_THEME_XWRT depends BR2_PACKAGE_HASERL select BR2_PACKAGE_IPKG tristate "webif^2 - HTTP Administrative Console" default ydiff -urN package.old/webif/files/bin/uci package.new/webif/files/bin/uci--- package.old/webif/files/bin/uci 2007-06-26 17:45:57.000000000 +0200+++ package.new/webif/files/bin/uci 1970-01-01 01:00:00.000000000 +0100@@ -1,182 +0,0 @@-#!/bin/sh-# Shell script for interacting with config files-#-# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>-# Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org>-#-# This program is free software; you can redistribute it and/or modify-# it under the terms of the GNU General Public License as published by-# the Free Software Foundation; either version 2 of the License, or-# (at your option) any later version.-#-# This program is distributed in the hope that it will be useful,-# but WITHOUT ANY WARRANTY; without even the implied warranty of-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU-# General Public License for more details.-#-# You should have received a copy of the GNU General Public License-# along with this program; if not, write to the Free Software-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA--. /etc/functions.sh-[ -f "/etc/functions_ex.sh" ] && {-. /etc/functions_ex.sh-}-include /lib/config--SEP="[^0-9A-Za-z_]"--do_get() {- local PACKAGE- local CONFIG- local OPTION- local DUMMY-- strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY-- [ $? -ne 3 ] && {- uci_usage get- exit 1- }-- uci_load "$PACKAGE"- config_get "$CONFIG" "$OPTION"-}--do_set() {- local PACKAGE- local CONFIG- local OPTION- local VALUE-- strtok "$1" PACKAGE . CONFIG = VALUE- [ $? -ne 3 -a $? -ne 2 ] && {- uci_usage set- exit 1- }- - strtok "$CONFIG" CONFIG . OPTION- - if [ $? -eq 1 ]; then- uci_add "$PACKAGE" "$VALUE" "$CONFIG"- else- uci_set "$PACKAGE" "$CONFIG" "$OPTION" "$VALUE"- fi-}--do_rename() {- [ $# -ne 3 ] && {- uci_usage rename- exit 1- }- uci_rename "$@"-}--do_remove() {- local PACKAGE- local CONFIG- local OPTION- local DUMMY-- strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY- [ $? -ne 3 -a $? -ne 2 ] && {- uci_usage rename- exit 1- }- uci_remove "$PACKAGE" "$CONFIG" ${OPTION:+"$OPTION"}-}--do_commit() {- local PACKAGE="$1"- for package in ${PACKAGE:-$(cd /tmp/.uci; ls)}; do - [ lock = "${package##*.}" ] && continue # ignore .lock files- uci_commit "$package"- done-}--do_show() {- local PACKAGE- local CONFIG- local DUMMY-- strtok "$*" PACKAGE . CONFIG $SEP DUMMY- [ $? -gt 2 ] && {- uci_usage show- exit 1- }- - for package in ${PACKAGE:-$(cd /etc/config; ls)}; do- SECTION=""- - config_cb() {- if [ -z "$CONFIG" -o "$CONFIG" = "$2" ]; then- append SECTION "$2"- option_cb() {- append "${CONFIG_SECTION}_VARS" "$1"- }- else- option_cb() {- return 0- }- fi- }- - uci_load "$package"- - for section in $SECTION; do- config_get type "$section" TYPE- [ -z "$type" ] && continue- echo "$package.$section=$type"- eval "VARS=\"\${${section}_VARS}\""- for var in $VARS; do- config_get val "$section" "$var"- [ -n "$val" ] && {- echo "$package.$section.$var=$val"- config_set "$section" "$var" ""- }- done- config_set "$section" TYPE ""- done- done-}--uci_usage() {- case "$1" in- show) echo "$0 show [<package>[.<config>]]";;- get) echo "$0 get <package>.<config>.<option>";;- set) echo "$0 set <package>.<config>[.<option>]=<value>";;- del) echo "$0 del <package>.<config>[.<option>]";;- rename) echo "$0 rename <package> <config> <name>";;- commit) echo "$0 commit [<package> ... ]";;- *) - echo "Syntax: $0 <command> <arguments...>"- echo- uci_usage show- uci_usage get- uci_usage set- uci_usage del- uci_usage rename- uci_usage commit- echo- exit 1- ;;- esac-}--if [ $# -eq 0 ] ; then- uci_usage- exit 0-fi--local CMD="$1"-shift-case "$CMD" in- set) do_set "$@";;- del) do_remove "$@";;- rename) do_rename "$@";;- get) do_get "$@";;- show) do_show "$@";;- commit) do_commit "$@";;- *) uci_usage;;-esac-exit 0diff -urN package.old/webif/files/lib/config/uci.awk package.new/webif/files/lib/config/uci.awk--- package.old/webif/files/lib/config/uci.awk 2007-06-26 17:45:56.000000000 +0200+++ package.new/webif/files/lib/config/uci.awk 1970-01-01 01:00:00.000000000 +0100@@ -1,186 +0,0 @@-# Configuration update functions - AWK API-#-# Copyright (C) 2006 by Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>-# Copyright (C) 2006 by Felix Fietkau <nbd@openwrt.org>-#-# This program is free software; you can redistribute it and/or modify-# it under the terms of the GNU General Public License as published by-# the Free Software Foundation; either version 2 of the License, or-# (at your option) any later version.-#-# This program is distributed in the hope that it will be useful,-# but WITHOUT ANY WARRANTY; without even the implied warranty of-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU-# General Public License for more details.-#-# You should have received a copy of the GNU General Public License-# along with this program; if not, write to the Free Software-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA--# parameters: 1-function config_load(package, var) {- while (("/bin/ash -c '. /etc/functions.sh; unset NO_EXPORT; config_load \""package"\"; env | grep \"^CONFIG_\"'" | getline) == 1) {- sub("^CONFIG_", "")- if (match($0, "=") == 0) {- if (var != "") CONFIG[var] = CONFIG[var] "\n" $0- next- }- var=substr($0, 1, RSTART-1)- CONFIG[var] = substr($0, RSTART+1, length($0) - RSTART)- }-}--# parameters: 2-function config_get(package, option) {- return CONFIG[package "_" option]-}--# parameters: 3-function config_get_bool(package, option, default, var) {- var = config_get(package, option);- if ((var == "enabled") || (var == "1") || (var == "on")) return 1- if ((var == "disabled") || (var == "0") || (var == "off")) return 1- return (var && var != "0" ? 1 : 0)-}---function read_file(filename, result) {- while ((getline <filename) == 1) {- result = result $0 "\n"- }- gsub(/\n*$/, "", result)- return result-}--function uci_cmd2option(str, tmp) {- if (match(str,"=")!=0) {- res = "\toption " substr(str,1,RSTART-1) "\t'" substr(str,RSTART+1) "'"- } else {- res= ""- }- return res-}--function uci_cmd2config(atype, aname) {- return "config \"" atype "\" \"" aname "\""-}--function uci_update_config(cfg, update, \- lines, line, l, n, i, i2, section, scnt, remove, tmp, aidx, rest) {- scnt = 1- linecnt=split(cfg "\n", lines, "\n")-- cfg = ""- for (n = 1; n < linecnt; n++) {- # stupid parser for quoted arguments (e.g. for the type string).- # not to be used to gather variable values (backslash escaping doesn't work)- line = lines[n]- gsub(/^[ \t]*/, "", line)- gsub(/#.*$/, "", line)- i2 = 1- delete l- rest = line- while (length(rest)) {- if (match(rest, /[ \t\"]+/)) {- if (RSTART>1) {- l[i2] = substr(rest,1,RSTART-1)- i2++- }- aidx=index(rest,"\"")- if (aidx>=RSTART && aidx<=RSTART+RLENGTH) {- rest=substr(rest,aidx+1)- # find the end of the string- match(rest,/\"/)- l[i2]=substr(rest,1,RSTART-1)- i2++- }- rest=substr(rest,RSTART+RLENGTH)- } else {- l[i2] = rest- i2++- rest = ""- }- }- line = lines[n]- - # when a command wants to set a config value for the current- # section and a blank line is encountered before an option with- # the same name, insert it here to maintain some coherency between- # manually and automatically created option lines- # if an option with the same name appears after this point, simply- # ignore it, because it is already set.- if ((section != "") && (l[1] != "option")) {- if (line ~ /^[ \t]*$/) {- if (update ~ "^" section "\\.") {- gsub("^" section ".", "", update)- cfg = cfg uci_cmd2option(update) "\n"- gsub(/=.*$/, "", update)- update = "-" section "." update- }- }- }-- if (l[1] == "config") {- # look for all unset values- if (section != "") {- flag=0- if (update ~ "^" section "\\.") {- flag=1- gsub("^" section ".", "", update)- cfg = cfg uci_cmd2option(update) "\n"- - update = "-" section "." update- } - if (flag!=0) cfg = cfg "\n"- }- - remove = ""- section = l[3]- if (!length(section)) {- section = "cfg" scnt- } - scnt++- if (update == "-" section) {- remove = "section"- update = ""- } else if (update ~ "^@" section "=") {- update = ""- } else if (update ~ "^&" section "=") {- gsub("^&" section "=", "", update)- line = uci_cmd2config(l[2],update) - update = ""- }- }- if (remove == "option") remove = ""- if (l[1] == "option") {- if (update ~ "^-" section "\\." l[2] "$") remove = "option"- # if a supplied config value already exists, replace the whole line- if (match(update, "^" section "." l[2] "=")) {- gsub("^" section ".", "", update)- line = uci_cmd2option(update)- update = ""- }- }- if (remove == "") cfg = cfg line "\n"- }- - # any new options for the last section??- if (section != "") {- if (update ~ "^" section "\\.") {- gsub("^" section ".", "", update)- cfg = cfg uci_cmd2option(update) "\n"-- update = "-" section "." update- } - }-- if (update ~ "^@") {- # new section- section = stype = substr(update,2)- gsub(/=.*$/,"",section)- gsub(/^.*=/,"",stype)- cfg = cfg "\nconfig \"" stype "\" \"" section "\"\n"- }-- return cfg-}\ Chybí znak konce řádku na konci souborudiff -urN package.old/webif/files/lib/config/uci-depends.new package.new/webif/files/lib/config/uci-depends.new--- package.old/webif/files/lib/config/uci-depends.new 2007-09-19 17:26:47.000000000 +0200+++ package.new/webif/files/lib/config/uci-depends.new 1970-01-01 01:00:00.000000000 +0100@@ -1,197 +0,0 @@-#!/bin/sh-# Copyright (C) 2006 OpenWrt.org-# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>-#-# newline (used by /lib/config/uci.sh)-N="-"-_C=0--# perform export -n only if available-_EXPORT_N_OPTION="-n"-ntest=$(export -n 2>&1)-if echo "$ntest" | grep -iq "Illegal option -n"; then - _EXPORT_N_OPTION=""-fi--append() {- local var="$1"- local value="$2"- local sep="${3:- }"- - eval "export $_EXPORT_N_OPTION -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""-}--reset_cb() {- config_cb() { return 0; }- option_cb() { return 0; }-}-reset_cb--config () {- local cfgtype="$1"- local name="$2"- - CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))- name="${name:-cfg$CONFIG_NUM_SECTIONS}"- append CONFIG_SECTIONS "$name"- config_cb "$cfgtype" "$name"- CONFIG_SECTION="$name"- export $_EXPORT_N_OPTION "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"-}--option () {- local varname="$1"; shift- local value="$*"- - export $_EXPORT_N_OPTION "CONFIG_${CONFIG_SECTION}_${varname}=$value"- option_cb "$varname" "$*"-}--config_rename() {- local OLD="$1"- local NEW="$2"- local oldvar- local newvar- - [ "$OLD" -a "$NEW" ] || return- for oldvar in `set | grep ^CONFIG_${OLD}_ | \- sed -e 's/\(.*\)=.*$/\1/'` ; do- newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}"- eval "export $_EXPORT_N_OPTION \"$newvar=\${$oldvar}\""- unset "$oldvar"- done- CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")"- - [ "$CONFIG_SECTION" = "$OLD" ] && CONFIG_SECTION="$NEW"-}--config_unset() {- config_set "$1" "$2" ""-}--config_clear() {- local SECTION="$1"- local oldvar- - CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , ,")"- CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}"-- for oldvar in `set | grep ^CONFIG_${SECTION:+${SECTION}_} | \- sed -e 's/\(.*\)=.*$/\1/'` ; do - unset $oldvar - done-}--config_load() {- local file="/etc/config/$1"- _C=0- CONFIG_SECTIONS=- CONFIG_NUM_SECTIONS=0- CONFIG_SECTION=- - [ -e "$file" ] && {- . $file- } || return 1- - ${CONFIG_SECTION:+config_cb}-}--config_get() {- case "$3" in- "") eval "echo \"\${CONFIG_${1}_${2}}\"";;- *) eval "export $_EXPORT_N_OPTION -- \"$1=\${CONFIG_${2}_${3}}\"";;- esac-}--# config_get_bool <variable> <section> <option> [<default>]-config_get_bool() {- local _tmp- config_get "_tmp" "$2" "$3"- case "$_tmp" in- 1|on|true|enabled) export ${NO_EXPORT:+-n} "$1=1";;- 0|off|false|disabled) export ${NO_EXPORT:+-n} "$1=0";;- *) eval "$1=${4:-0}";;- esac-}--config_set() {- local section="$1"- local option="$2"- local value="$3"- local old_section="$CONFIG_SECTION"-- CONFIG_SECTION="$section"- option "$option" "$value"- CONFIG_SECTION="$old_section"-}--config_foreach() {- local function="$1"- local type="$2"- local section cfgtype- - [ -z "$CONFIG_SECTIONS" ] && return 0- for section in ${CONFIG_SECTIONS}; do- config_get cfgtype "$section" TYPE- [ -n "$type" -a "$cfgtype" != "$type" ] && continue- eval "$function \"\$section\""- done-}--load_modules() {- cd /etc/modules.d- sed 's/^[^#]/insmod &/' $* | ash 2>&- || :-}--include() {- local file- - for file in $(ls $1/*.sh 2>/dev/null); do- . $file- done-}--find_mtd_part() {- local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"- local PREFIX=/dev/mtdblock- - PART="${PART##mtd}"- [ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/- echo "${PART:+$PREFIX$PART}"-}--strtok() { # <string> { <variable> [<separator>] ... }- local tmp- local val="$1"- local count=0-- shift-- while [ $# -gt 1 ]; do- tmp="${val%%$2*}"-- [ "$tmp" = "$val" ] && break-- val="${val#$tmp$2}"-- export $_EXPORT_N_OPTION "$1=$tmp"; count=$((count+1))- shift 2- done-- if [ $# -gt 0 -a "$val" ]; then- export $_EXPORT_N_OPTION "$1=$val"; count=$((count+1))- fi-- return $count-}---jffs2_mark_erase() {- local part="$(find_mtd_part "$1")"- [ -z "$part" ] && {- echo Partition not found.- return 1- }- echo -e "\xde\xad\xc0\xde" | mtd -qq write - "$1"-}diff -urN package.old/webif/files/lib/config/uci.sh package.new/webif/files/lib/config/uci.sh--- package.old/webif/files/lib/config/uci.sh 2007-06-26 17:45:56.000000000 +0200+++ package.new/webif/files/lib/config/uci.sh 1970-01-01 01:00:00.000000000 +0100@@ -1,160 +0,0 @@-#!/bin/sh-# Shell script defining macros for manipulating config files-#-# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>-# Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org>-#-# This program is free software; you can redistribute it and/or modify-# it under the terms of the GNU General Public License as published by-# the Free Software Foundation; either version 2 of the License, or-# (at your option) any later version.-#-# This program is distributed in the hope that it will be useful,-# but WITHOUT ANY WARRANTY; without even the implied warranty of-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU-# General Public License for more details.-#-# You should have received a copy of the GNU General Public License-# along with this program; if not, write to the Free Software-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA--uci_load() {- local PACKAGE="$1"- config_load "$PACKAGE"- local PACKAGE_BASE="$(basename "$PACKAGE")"- [ -f "/tmp/.uci/${PACKAGE_BASE}" ] && {- . "/tmp/.uci/${PACKAGE_BASE}" 2>/dev/null >/dev/null- config_cb- }-}--uci_apply_defaults() {(- cd /etc/uci-defaults || return 0- files="$(ls)"- [ -z "$files" ] && return 0- mkdir -p /tmp/.uci- for file in $files; do- ( . "./$(basename $file)" ) && rm -f "$file"- done- uci commit-)}--uci_call_awk() {- local CMD="$*"- awk -f $UCI_ROOT/lib/config/uci.awk -f - <<EOF-BEGIN {- $CMD-}-EOF-}--uci_do_update() {- local FILENAME="$1"- local UPDATE="$2"- uci_call_awk "- config = read_file(\"$FILENAME\")- $UPDATE- print config-"-}--uci_add_update() {- local PACKAGE="$1"- local UPDATE="$2"- local PACKAGE_BASE="$(basename "$PACKAGE")"- - # FIXME: add locking?- mkdir -p "/tmp/.uci"- echo "$UPDATE" >> "/tmp/.uci/${PACKAGE_BASE}"-}--uci_set() {- local PACKAGE="$1"- local CONFIG="$2"- local OPTION="$3"- local VALUE="$4"-- ( # spawn a subshell so you don't mess up the current environment- uci_load "$PACKAGE"- config_get OLDVAL "$CONFIG" "$OPTION"- if [ "$OLDVAL" != "$VALUE" ]; then- config_get type "$CONFIG" TYPE- [ -z "$type" ]- fi- ) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"-}--uci_add() {- local PACKAGE="$1"- local TYPE="$2"- local CONFIG="$3"-- uci_add_update "$PACKAGE" "config '$TYPE' '$CONFIG'"-}--uci_rename() {- local PACKAGE="$1"- local CONFIG="$2"- local VALUE="$3"-- uci_add_update "$PACKAGE" "config_rename '$CONFIG' '$VALUE'"-}--uci_remove() {- local PACKAGE="$1"- local CONFIG="$2"- local OPTION="$3"-- if [ -z "$OPTION" ]; then- uci_add_update "$PACKAGE" "config_clear '$CONFIG'"- else- uci_add_update "$PACKAGE" "config_unset '$CONFIG' '$OPTION'"- fi-}--uci_commit() {- local PACKAGE="$1"- local PACKAGE_BASE="$(basename "$PACKAGE")"-- mkdir -p /tmp/.uci- LOCK=`which lock` || LOCK=:- $LOCK "/tmp/.uci/$PACKAGE_BASE.lock"- [ -f "/tmp/.uci/$PACKAGE_BASE" ] && (- updatestr=""- - # replace handlers- config() {- append updatestr "config = uci_update_config(config, \"@$2=$1\")" "$N"- }- option() {- append updatestr "config = uci_update_config(config, \"$CONFIG_SECTION.$1=$2\")" "$N"- }- config_rename() {- append updatestr "config = uci_update_config(config, \"&$1=$2\")" "$N"- }- config_unset() {- append updatestr "config = uci_update_config(config, \"-$1.$2\")" "$N"- }- config_clear() {- append updatestr "config = uci_update_config(config, \"-$1\")" "$N"- }- - . "/tmp/.uci/$PACKAGE_BASE"-- # completely disable handlers so that they don't get in the way- config() {- return 0- }- option() {- return 0- }- - config_load "$PACKAGE"- CONFIG_FILENAME="${CONFIG_FILENAME:-$UCI_ROOT/etc/config/$PACKAGE_BASE}"- uci_do_update "$CONFIG_FILENAME" "$updatestr" > "/tmp/.uci/$PACKAGE_BASE.new" && {- mv -f "/tmp/.uci/$PACKAGE_BASE.new" "$CONFIG_FILENAME" && \- rm -f "/tmp/.uci/$PACKAGE_BASE"- } - )- $LOCK -u "/tmp/.uci/$PACKAGE_BASE.lock"-}\ Chybí znak konce řádku na konci souborudiff -urN package.old/webif/ipkg/webif.control package.new/webif/ipkg/webif.control--- package.old/webif/ipkg/webif.control 2007-06-26 17:46:02.000000000 +0200+++ package.new/webif/ipkg/webif.control 2007-10-31 19:47:37.000000000 +0100@@ -1,6 +1,6 @@ Package: webif Maintainer: X-Wrt Project Section: net-Depends: haserl ipkg ipkg-upgrade-fix+Depends: haserl ipkg ipkg-upgrade-fix base-files-uci Priority: normal Description: An HTTP administrative console for OpenWrt.diff -urN package.old/webif/ipkg/webif.postinst package.new/webif/ipkg/webif.postinst--- package.old/webif/ipkg/webif.postinst 2007-07-27 13:04:12.000000000 +0200+++ package.new/webif/ipkg/webif.postinst 2007-10-31 19:49:09.000000000 +0100@@ -122,11 +122,6 @@ mv -f "${IPKG_INSTROOT}/etc/init.d/x60cron.webif" "${IPKG_INSTROOT}/etc/init.d/S60cron" mv -f "${IPKG_INSTROOT}/etc/httpd.webif" "${IPKG_INSTROOT}/etc/httpd.conf" -# again, we rename /lib/config/uci-depends.sh so that it doesn't get removed if webif^2 is-# uninstalled since we've radically changed /etc/functions.sh.-FixReadOnlyLink "${IPKG_INSTROOT}/lib/config/uci-depends.sh"-mv -f "${IPKG_INSTROOT}/lib/config/uci-depends.new" "${IPKG_INSTROOT}/lib/config/uci-depends.sh"- # fix up /etc/functions.sh. It must work under RC5, RC6, and 0.9 and must # include the UCI callback funcs in /lib/config/uci-depends.sh. FixReadOnlyLink "${IPKG_INSTROOT}/etc/functions.sh"