rename default/ to files/
[openwrt.org/openwrt.git] / package / base-files / files / bin / uci
blob:a/package/base-files/files/bin/uci -> blob:b/package/base-files/files/bin/uci
--- a/package/base-files/files/bin/uci
+++ b/package/base-files/files/bin/uci
@@ -1,1 +1,179 @@
+#!/bin/sh
+# Shell script for interacting with config files
+#
+# 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
 
+. /etc/functions.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 ] && {
+		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 
+		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 0
+

comments