80 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \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.
 | |
| 
 | |
| You can access already processed options with the \texttt{config\_get} command
 | |
| Syntax:
 | |
| 
 | |
| \begin{Verbatim}
 | |
| config_get <section> <option>            # prints the value of the option
 | |
| config_get <variable> <section> <option> # stores the value inside the variable
 | |
| \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}
 | |
| 
 |