1 /* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @file util_cfgtree.h
19 * @brief Config Tree Package
21 * @defgroup APACHE_CORE_CONFIG_TREE Config Tree Package
22 * @ingroup APACHE_CORE_CONFIG
29 #include "ap_config.h"
31 typedef struct ap_directive_t ap_directive_t;
34 * @brief Structure used to build the config tree.
36 * The config tree only stores
37 * the directives that will be active in the running server. Directives
38 * that contain other directions, such as <Directory ...> cause a sub-level
39 * to be created, where the included directives are stored. The closing
40 * directive (</Directory>) is not stored in the tree.
42 struct ap_directive_t {
43 /** The current directive */
44 const char *directive;
45 /** The arguments for the current directive, stored as a space
48 /** The next directive node in the tree
49 * @defvar ap_directive_t *next */
50 struct ap_directive_t *next;
51 /** The first child node of this directive
52 * @defvar ap_directive_t *first_child */
53 struct ap_directive_t *first_child;
54 /** The parent node of this directive
55 * @defvar ap_directive_t *parent */
56 struct ap_directive_t *parent;
58 /** directive's module can store add'l data here */
61 /* ### these may go away in the future, but are needed for now */
62 /** The name of the file this directive was found in */
64 /** The line number the directive was on */
69 * The root of the configuration tree
70 * @defvar ap_directive_t *conftree
72 AP_DECLARE_DATA extern ap_directive_t *ap_conftree;
75 * Add a node to the configuration tree.
76 * @param parent The current parent node. If the added node is a first_child,
77 then this is changed to the current node
78 * @param current The current node
79 * @param toadd The node to add to the tree
80 * @param child Is the node to add a child node
81 * @return the added node
83 ap_directive_t *ap_add_node(ap_directive_t **parent, ap_directive_t *current,
84 ap_directive_t *toadd, int child);