diff options
Diffstat (limited to 'docs/config.tex')
-rw-r--r-- | docs/config.tex | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/docs/config.tex b/docs/config.tex new file mode 100644 index 000000000..17417c99a --- /dev/null +++ b/docs/config.tex @@ -0,0 +1,101 @@ +\subsubsection{Structure of the configuration files} + +The config files are divided into sections and options/values. + +Every section has a type, but does not necessarily have a name. +Every option has a name and a value and is assigned to the section +it was written under. + +Syntax: + +\begin{Verbatim} +config <type> ["<name>"] # Section + option <name> "<value>" # Option +\end{Verbatim} + +Every parameter needs to be a single string and is formatted exactly +like a parameter for a shell function. The same rules for Quoting and +special characters also apply, as it is parsed by the shell. + +\subsubsection{Parsing configuration files in custom scripts} + +To be able to load configuration files, you need to include the common +functions with: + +\begin{Verbatim} +. /etc/functions.sh +\end{Verbatim} + +Then you can use \texttt{config\_load \textit{<name>}} to load config files. The function +first checks for \textit{<name>} as absolute filename and falls back to loading +it from \texttt{/etc/config} (which is the most common way of using it). + +If you want to use special callbacks for sections and/or options, you +need to define the following shell functions before running \texttt{config\_load} +(after including \texttt{/etc/functions.sh}): + +\begin{Verbatim} +config_cb() { + local type="$1" + local name="$2" + # commands to be run for every section +} + +option_cb() { + # commands to be run for every option +} +\end{Verbatim} + +You can also alter \texttt{option\_cb} from \texttt{config\_cb} based on the section type. +This allows you to process every single config section based on its type +individually. + +\texttt{config\_cb} is run every time a new section starts (before options are being +processed). You can access the last section through the \texttt{CONFIG\_SECTION} +variable. Also an extra call to \texttt{config\_cb} (without a new section) is generated +after \texttt{config\_load} is done. +That allows you to process sections both before and after all options were +processed. + +Another way of iterating on config sections is using the \texttt{config\_foreach} command. + +Syntax: +\begin{Verbatim} +config_foreach <function name> [<sectiontype>] [<arguments...>] +\end{Verbatim} + +This command will run the supplied function for every single config section in the currently +loaded config. The section name will be passed to the function as argument 1. +If the section type is added to the command line, the function will only be called for +sections of the given type. + + +You can access already processed options with the \texttt{config\_get} command +Syntax: + +\begin{Verbatim} +# print the value of the option +config_get <section> <option> + +# store the value inside the variable +config_get <variable> <section> <option> +\end{Verbatim} + +In busybox ash the three-option \texttt{config\_get} is faster, because it does not +result in an extra fork, so it is the preferred way. + +Additionally you can also modify or add options to sections by using the +\texttt{config\_set} command. + +Syntax: + +\begin{Verbatim} +config_set <section> <option> <value> +\end{Verbatim} + +If a config section is unnamed, an automatically generated name will +be assigned internally, e.g. \texttt{cfg1}, \texttt{cfg2}, ... + +While it is possible, using unnamed sections through these autogenerated names is +strongly discouraged. Use callbacks or \texttt{config\_foreach} instead. + |