63 #include <amxp/amxp_dir.h>
87 const amxc_llist_t* dirs = amxc_var_constcast(amxc_llist_t, var_dirs);
89 amxc_llist_for_each(it, dirs) {
90 amxc_var_t* var_dir = amxc_var_from_llist_it(it);
91 const char* stored_dir = amxc_var_constcast(cstring_t, var_dir);
92 if((stored_dir != NULL) && (strcmp(dir, stored_dir) == 0)) {
99 amxc_var_add(cstring_t, var_dirs, dir);
123 amxc_var_t* backends = (amxc_var_t*) priv;
124 amxc_var_add(cstring_t, backends, name);
132 UNUSED
const char* file) {
134 amxd_dm_t* dm = &
rt->
dm;
135 amxp_sigmngr_enable(&dm->sigmngr, GET_BOOL(&parser->config,
AMXRT_COPT_EVENT));
142 amxd_dm_t* dm = &
rt->
dm;
143 if(section_id == 0) {
144 amxp_sigmngr_enable(&dm->sigmngr, GET_BOOL(&parser->config,
AMXRT_COPT_EVENT));
149 UNUSED
const char* option,
150 UNUSED amxc_var_t* value) {
153 const char* path = amxc_var_key(cmd);
154 amxc_var_set_path(&parser->config, path, cmd, AMXC_VAR_FLAG_UPDATE | AMXC_VAR_FLAG_COPY);
159 .it = { .next = NULL, .prev = NULL, .llist = NULL },
163 .start_include = NULL,
166 .start_section = NULL,
168 .create_object = NULL,
169 .add_instance = NULL,
170 .select_object = NULL,
176 .add_func_arg = NULL,
184 amxc_var_t*
config = &parser->config;
219 char* base_name = NULL;
226 base_name = strdup(basename(argv[0]));
227 when_null_status(base_name, exit, retval = -1);
228 for(
int i = strlen(base_name) - 1; i > 0; i--) {
229 if(base_name[i] ==
'.') {
233 amxc_var_add_key(cstring_t, &parser->config,
AMXRT_COPT_NAME, base_name);
252 if(amxc_var_type_of(dirs) == AMXC_VAR_ID_LIST) {
253 amxc_var_for_each(dir, dirs) {
254 const char* path = GET_CHAR(dir, NULL);
265 const char* config_name,
267 const char* env = getenv(var_name);
269 amxc_var_t* coption = GET_ARG(
config, config_name);
272 amxc_var_init(&var_env);
278 amxc_var_set(cstring_t, &var_env, env);
280 if(coption == NULL) {
281 coption = amxc_var_add_new_key(
config, config_name);
282 amxc_var_set_type(coption, var_type);
286 case AMXC_VAR_ID_LIST: {
287 amxc_string_t* str_env = amxc_var_take(amxc_string_t, &var_env);
289 amxc_llist_init(&parts);
290 amxc_string_split_to_llist(str_env, &parts,
';');
291 amxc_llist_for_each(it, (&parts)) {
292 amxc_string_t* part = amxc_string_from_llist_it(it);
293 amxc_var_add(cstring_t, coption, amxc_string_get(part, 0));
294 amxc_string_delete(&part);
296 amxc_llist_clean(&parts, amxc_string_list_it_free);
297 amxc_string_delete(&str_env);
301 amxc_var_convert(coption, &var_env, var_type);
307 amxc_var_clean(&var_env);
#define AMXRT_COPT_BACKENDS
#define AMXRT_COPT_LISTEN
#define AMXRT_COPT_RW_DATA_PATH
#define AMXRT_COPT_PLUGIN_DIR
#define AMXRT_COPT_PID_FILE
#define AMXRT_COPT_EXT_DIR
#define AMXRT_COPT_LIBDIRS
int(* amxrt_arg_fn_t)(amxc_var_t *config, int arg_id, const char *value)
#define AMXRT_COPT_CFG_DIR
#define AMXRT_COPT_MIBDIRS
#define AMXRT_COPT_DATA_URIS
#define AMXRT_COPT_DUMP_CONFIG
#define AMXRT_COPT_PRIORITY
#define AMXRT_COPT_PREFIX_PATH
#define AMXRT_COPT_STORAGE_DIR
#define AMXRT_COPT_STORAGE_TYPE
#define AMXRT_COPT_DUMP_CAPS
#define AMXRT_COPT_REQUIRES
#define AMXRT_COPT_AUTO_DETECT
#define AMXRT_COPT_AUTO_CONNECT
#define AMXRT_COPT_BACKENDS_DIR
#define AMXRT_COPT_DAEMON
#define AMXRT_COPT_INCDIRS
static void amxrt_config_read_env_vars(void)
static void amxrt_config_option_changed(amxo_parser_t *parser, UNUSED const char *option, UNUSED amxc_var_t *value)
void amxrt_config_add_options(amxo_parser_t *parser)
static void amxrt_config_set_default_dirs(amxo_parser_t *parser)
static int amxrt_config_add_backend(const char *name, void *priv)
static void amxrt_config_include_end(amxo_parser_t *parser, UNUSED const char *file)
static void amxrt_config_add_dir(amxc_var_t *var_dirs, const char *dir)
static amxo_hooks_t amxrt_config_hooks
static void amxrt_config_section_end(amxo_parser_t *parser, int section_id)
#define AMXRT_CVAL_CFG_DIR
#define AMXRT_CVAL_BACKEND_DIR
PRIVATE amxrt_t * amxrt_get(void)
#define AMXRT_CVAL_STORAGE_TYPE
#define AMXRT_CVAL_PLUGIN_DIR
int amxrt_cmd_line_parse(int argc, char *argv[], amxrt_arg_fn_t fn)
Starts parsing the command line options.
void amxrt_config_scan_backend_dirs(void)
Scan backend directories for available backends.
amxc_var_t * amxrt_get_config(void)
Gets the htable variant containing the configuration options.
void amxrt_config_read_env_var(const char *var_name, const char *config_name, int32_t var_type)
Helper function to read an environment variable and add it's value to the runtime configuration.
amxo_parser_t * amxrt_get_parser(void)
Gets runtime odl parser.
int amxrt_config_init(int argc, char *argv[], int *index, amxrt_arg_fn_t fn)
Initializes the default runtime configuration.
amxc_var_t forced_options