]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/subversion/subversion/libsvn_subr/config_impl.h
MFC r275385 (by bapt):
[FreeBSD/stable/10.git] / contrib / subversion / subversion / libsvn_subr / config_impl.h
1 /*
2  * config_impl.h :  private header for the config file implementation.
3  *
4  * ====================================================================
5  *    Licensed to the Apache Software Foundation (ASF) under one
6  *    or more contributor license agreements.  See the NOTICE file
7  *    distributed with this work for additional information
8  *    regarding copyright ownership.  The ASF licenses this file
9  *    to you under the Apache License, Version 2.0 (the
10  *    "License"); you may not use this file except in compliance
11  *    with the License.  You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  *    Unless required by applicable law or agreed to in writing,
16  *    software distributed under the License is distributed on an
17  *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18  *    KIND, either express or implied.  See the License for the
19  *    specific language governing permissions and limitations
20  *    under the License.
21  * ====================================================================
22  */
23
24
25 \f
26 #ifndef SVN_LIBSVN_SUBR_CONFIG_IMPL_H
27 #define SVN_LIBSVN_SUBR_CONFIG_IMPL_H
28
29 #define APR_WANT_STDIO
30 #include <apr_want.h>
31
32 #include <apr_hash.h>
33 #include "svn_types.h"
34 #include "svn_string.h"
35 #include "svn_io.h"
36 #include "svn_config.h"
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif /* __cplusplus */
41
42 \f
43 /* The configuration data. This is a superhash of sections and options. */
44 struct svn_config_t
45 {
46   /* Table of cfg_section_t's. */
47   apr_hash_t *sections;
48
49   /* Pool for hash tables, table entries and unexpanded values.
50      Also, parent pool for temporary pools. */
51   apr_pool_t *pool;
52
53   /* Pool for expanded values -- this is separate, so that we can
54      clear it when modifying the config data. */
55   apr_pool_t *x_pool;
56
57   /* Indicates that some values in the configuration have been expanded. */
58   svn_boolean_t x_values;
59
60   /* Temporary string used for lookups.  (Using a stringbuf so that
61      frequent resetting is efficient.) */
62   svn_stringbuf_t *tmp_key;
63
64   /* Temporary value used for expanded default values in svn_config_get.
65      (Using a stringbuf so that frequent resetting is efficient.) */
66   svn_stringbuf_t *tmp_value;
67
68   /* Specifies whether section names are populated case sensitively. */
69   svn_boolean_t section_names_case_sensitive;
70
71   /* Specifies whether option names are populated case sensitively. */
72   svn_boolean_t option_names_case_sensitive;
73
74   /* When set, all modification attempts will be ignored.
75    * In debug mode, we will trigger an assertion. */
76   svn_boolean_t read_only;
77 };
78
79 /* Read sections and options from a file. */
80 svn_error_t *svn_config__parse_file(svn_config_t *cfg,
81                                     const char *file,
82                                     svn_boolean_t must_exist,
83                                     apr_pool_t *pool);
84
85 /* Read sections and options from a stream. */
86 svn_error_t *svn_config__parse_stream(svn_config_t *cfg,
87                                       svn_stream_t *stream,
88                                       apr_pool_t *result_pool,
89                                       apr_pool_t *scratch_pool);
90
91 /* The name of the magic [DEFAULT] section. */
92 #define SVN_CONFIG__DEFAULT_SECTION "DEFAULT"
93
94
95 #ifdef WIN32
96 /* Get the common or user-specific AppData folder */
97 svn_error_t *svn_config__win_config_path(const char **folder,
98                                          svn_boolean_t system_path,
99                                          apr_pool_t *result_pool,
100                                          apr_pool_t *scratch_pool);
101
102 /* Read sections and options from the Windows Registry. */
103 svn_error_t *svn_config__parse_registry(svn_config_t *cfg,
104                                         const char *file,
105                                         svn_boolean_t must_exist,
106                                         apr_pool_t *pool);
107
108 /* ### It's unclear to me whether this registry stuff should get the
109    double underscore or not, and if so, where the extra underscore
110    would go.  Thoughts?  -kff */
111 #  define SVN_REGISTRY_PREFIX "REGISTRY:"
112 #  define SVN_REGISTRY_PREFIX_LEN ((sizeof(SVN_REGISTRY_PREFIX)) - 1)
113 #  define SVN_REGISTRY_HKLM "HKLM\\"
114 #  define SVN_REGISTRY_HKLM_LEN ((sizeof(SVN_REGISTRY_HKLM)) - 1)
115 #  define SVN_REGISTRY_HKCU "HKCU\\"
116 #  define SVN_REGISTRY_HKCU_LEN ((sizeof(SVN_REGISTRY_HKCU)) - 1)
117 #  define SVN_REGISTRY_PATH "Software\\Tigris.org\\Subversion\\"
118 #  define SVN_REGISTRY_PATH_LEN ((sizeof(SVN_REGISTRY_PATH)) - 1)
119 #  define SVN_REGISTRY_SYS_CONFIG_PATH \
120                                SVN_REGISTRY_PREFIX     \
121                                SVN_REGISTRY_HKLM       \
122                                SVN_REGISTRY_PATH
123 #  define SVN_REGISTRY_USR_CONFIG_PATH \
124                                SVN_REGISTRY_PREFIX     \
125                                SVN_REGISTRY_HKCU       \
126                                SVN_REGISTRY_PATH
127 #endif /* WIN32 */
128
129 /* System-wide and configuration subdirectory names.
130    NOTE: Don't use these directly; call svn_config__sys_config_path()
131    or svn_config_get_user_config_path() instead. */
132 #ifdef WIN32
133 #  define SVN_CONFIG__SUBDIRECTORY    "Subversion"
134 #elif defined __HAIKU__ /* HAIKU */
135 #  define SVN_CONFIG__SYS_DIRECTORY   "subversion"
136 #  define SVN_CONFIG__USR_DIRECTORY   "subversion"
137 #else  /* ! WIN32 && ! __HAIKU__ */
138 #  define SVN_CONFIG__SYS_DIRECTORY   "/etc/subversion"
139 #  define SVN_CONFIG__USR_DIRECTORY   ".subversion"
140 #endif /* WIN32 */
141
142 /* The description/instructions file in the config directory. */
143 #define SVN_CONFIG__USR_README_FILE    "README.txt"
144
145 /* The name of the main authentication subdir in the config directory */
146 #define SVN_CONFIG__AUTH_SUBDIR        "auth"
147
148 /* Set *PATH_P to the path to config file FNAME in the system
149    configuration area, allocated in POOL.  If FNAME is NULL, set
150    *PATH_P to the directory name of the system config area, either
151    allocated in POOL or a static constant string.
152
153    If the system configuration area cannot be located (possible under
154    Win32), set *PATH_P to NULL regardless of FNAME.  */
155 svn_error_t *
156 svn_config__sys_config_path(const char **path_p,
157                             const char *fname,
158                             apr_pool_t *pool);
159
160
161 #ifdef __cplusplus
162 }
163 #endif /* __cplusplus */
164
165 #endif /* SVN_LIBSVN_SUBR_CONFIG_IMPL_H */