libamxrt  0.4.2
Ambiorix Run Time Library
amxrt_config.c File Reference
#include <stdlib.h>
#include <string.h>
#include <amxrt/amxrt.h>
#include <amxp/amxp_dir.h>
#include "amxrt_priv.h"

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 

Functions

static void amxrt_config_read_env_vars (void)
 
static void amxrt_config_add_dir (amxc_var_t *var_dirs, const char *dir)
 
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_section_end (amxo_parser_t *parser, int section_id)
 
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)
 
int amxrt_config_init (int argc, char *argv[], int *index, amxrt_arg_fn_t fn)
 Initializes the default runtime configuration. More...
 
void amxrt_config_scan_backend_dirs (void)
 Scan backend directories for available backends. More...
 
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. More...
 

Variables

static amxo_hooks_t amxrt_config_hooks
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 56 of file amxrt_config.c.

Function Documentation

◆ amxrt_config_add_backend()

static int amxrt_config_add_backend ( const char *  name,
void *  priv 
)
static

Definition at line 122 of file amxrt_config.c.

122  {
123  amxc_var_t* backends = (amxc_var_t*) priv;
124  amxc_var_add(cstring_t, backends, name);
125 
126  return 0;
127 }

◆ amxrt_config_add_dir()

static void amxrt_config_add_dir ( amxc_var_t *  var_dirs,
const char *  dir 
)
static

Definition at line 85 of file amxrt_config.c.

85  {
86  bool found = false;
87  const amxc_llist_t* dirs = amxc_var_constcast(amxc_llist_t, var_dirs);
88 
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)) {
93  found = true;
94  break;
95  }
96  }
97 
98  if(!found) {
99  amxc_var_add(cstring_t, var_dirs, dir);
100  }
101 }

◆ amxrt_config_add_options()

void amxrt_config_add_options ( amxo_parser_t *  parser)

Definition at line 183 of file amxrt_config.c.

183  {
184  amxc_var_t* config = &parser->config;
185 
186  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_BACKENDS, NULL);
187  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_URIS, NULL);
188  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_DATA_URIS, NULL);
189  amxc_var_add_key(bool, config, AMXRT_COPT_AUTO_DETECT, true);
190  amxc_var_add_key(bool, config, AMXRT_COPT_AUTO_CONNECT, true);
191  amxc_var_add_key(bool, config, AMXRT_COPT_DAEMON, false);
192  amxc_var_add_key(uint32_t, config, AMXRT_COPT_PRIORITY, 0);
193  amxc_var_add_key(bool, config, AMXRT_COPT_PID_FILE, true);
194  amxc_var_add_key(cstring_t, config, AMXRT_COPT_PREFIX_PATH, "");
195  amxc_var_add_key(cstring_t, config, AMXRT_COPT_PLUGIN_DIR, AMXRT_CVAL_PLUGIN_DIR);
196  amxc_var_add_key(cstring_t, config, AMXRT_COPT_CFG_DIR, AMXRT_CVAL_CFG_DIR);
197  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_LIBDIRS, NULL);
198  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_INCDIRS, NULL);
199  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_MIBDIRS, NULL);
200  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_LISTEN, NULL);
201  amxc_var_add_key(bool, config, AMXRT_COPT_EVENT, false);
202  amxc_var_add_key(bool, config, AMXRT_COPT_DUMP_CONFIG, false);
203  amxc_var_add_key(bool, config, AMXRT_COPT_DUMP_CAPS, false);
204  amxc_var_add_key(cstring_t, config, AMXRT_COPT_BACKENDS_DIR, AMXRT_CVAL_BACKEND_DIR);
205  amxc_var_add_key(cstring_t, config, AMXRT_COPT_STORAGE_TYPE, AMXRT_CVAL_STORAGE_TYPE);
206  amxc_var_add_key(bool, config, AMXRT_COPT_LOG, false);
207  amxc_var_add_key(cstring_t, config, AMXRT_COPT_RW_DATA_PATH, "${prefix}" RWDATAPATH);
208  amxc_var_add_key(cstring_t, config, AMXRT_COPT_STORAGE_DIR, "${rw_data_path}/${name}/");
209  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_REQUIRES, NULL);
210  amxc_var_add_key(cstring_t, config, AMXRT_COPT_EXT_DIR, "extensions/");
211 
212  // set hooks to monitor config option changes
213  amxo_parser_set_hooks(parser, &amxrt_config_hooks);
214 }
#define AMXRT_COPT_BACKENDS
Definition: amxrt.h:75
#define AMXRT_COPT_LISTEN
Definition: amxrt.h:89
#define AMXRT_COPT_RW_DATA_PATH
Definition: amxrt.h:94
#define AMXRT_COPT_PLUGIN_DIR
Definition: amxrt.h:87
#define AMXRT_COPT_URIS
Definition: amxrt.h:73
#define AMXRT_COPT_PID_FILE
Definition: amxrt.h:84
#define AMXRT_COPT_EXT_DIR
Definition: amxrt.h:102
#define AMXRT_COPT_LIBDIRS
Definition: amxrt.h:79
#define AMXRT_COPT_CFG_DIR
Definition: amxrt.h:88
#define AMXRT_COPT_MIBDIRS
Definition: amxrt.h:80
#define AMXRT_COPT_DATA_URIS
Definition: amxrt.h:74
#define AMXRT_COPT_DUMP_CONFIG
Definition: amxrt.h:91
#define AMXRT_COPT_PRIORITY
Definition: amxrt.h:83
#define AMXRT_COPT_PREFIX_PATH
Definition: amxrt.h:86
#define AMXRT_COPT_STORAGE_DIR
Definition: amxrt.h:95
#define AMXRT_COPT_STORAGE_TYPE
Definition: amxrt.h:96
#define AMXRT_COPT_DUMP_CAPS
Definition: amxrt.h:92
#define AMXRT_COPT_REQUIRES
Definition: amxrt.h:99
#define AMXRT_COPT_EVENT
Definition: amxrt.h:90
#define AMXRT_COPT_AUTO_DETECT
Definition: amxrt.h:76
#define AMXRT_COPT_LOG
Definition: amxrt.h:98
#define AMXRT_COPT_AUTO_CONNECT
Definition: amxrt.h:77
#define AMXRT_COPT_BACKENDS_DIR
Definition: amxrt.h:93
#define AMXRT_COPT_DAEMON
Definition: amxrt.h:82
#define AMXRT_COPT_INCDIRS
Definition: amxrt.h:78
static amxo_hooks_t amxrt_config_hooks
Definition: amxrt_config.c:158
#define AMXRT_CVAL_CFG_DIR
Definition: amxrt_priv.h:65
#define AMXRT_CVAL_BACKEND_DIR
Definition: amxrt_priv.h:66
#define AMXRT_CVAL_STORAGE_TYPE
Definition: amxrt_priv.h:67
#define AMXRT_CVAL_PLUGIN_DIR
Definition: amxrt_priv.h:64
config
Definition: test.odl:54

◆ amxrt_config_include_end()

static void amxrt_config_include_end ( amxo_parser_t *  parser,
UNUSED const char *  file 
)
static

Definition at line 131 of file amxrt_config.c.

132  {
133  amxrt_t* rt = amxrt_get();
134  amxd_dm_t* dm = &rt->dm;
135  amxp_sigmngr_enable(&dm->sigmngr, GET_BOOL(&parser->config, AMXRT_COPT_EVENT));
136 }
static amxrt_t rt
Definition: amxrt.c:74
PRIVATE amxrt_t * amxrt_get(void)
Definition: amxrt.c:297
amxd_dm_t dm
Definition: amxrt_priv.h:100

◆ amxrt_config_option_changed()

static void amxrt_config_option_changed ( amxo_parser_t *  parser,
UNUSED const char *  option,
UNUSED amxc_var_t *  value 
)
static

Definition at line 148 of file amxrt_config.c.

150  {
151  amxrt_t* rt = amxrt_get();
152  amxc_var_for_each(cmd, &rt->forced_options) {
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);
155  }
156 }
amxc_var_t forced_options
Definition: amxrt_priv.h:103

◆ amxrt_config_read_env_vars()

static void amxrt_config_read_env_vars ( void  )
static

Definition at line 67 of file amxrt_config.c.

67  {
68  amxrt_config_read_env_var("AMXB_BACKENDS",
70  AMXC_VAR_ID_LIST);
71 
72  amxrt_config_read_env_var("AMXRT_PREFIX_PATH",
74  AMXC_VAR_ID_CSTRING);
75 
76  amxrt_config_read_env_var("AMXRT_PLUGIN_DIR",
78  AMXC_VAR_ID_CSTRING);
79 
80  amxrt_config_read_env_var("AMXRT_CFG_DIR",
82  AMXC_VAR_ID_CSTRING);
83 }
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.
Definition: amxrt_config.c:264

◆ amxrt_config_section_end()

static void amxrt_config_section_end ( amxo_parser_t *  parser,
int  section_id 
)
static

Definition at line 139 of file amxrt_config.c.

140  {
141  amxrt_t* rt = amxrt_get();
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));
145  }
146 }

◆ amxrt_config_set_default_dirs()

static void amxrt_config_set_default_dirs ( amxo_parser_t *  parser)
static

Definition at line 103 of file amxrt_config.c.

103  {
104  amxc_var_t* inc_dirs = amxo_parser_claim_config(parser, AMXRT_COPT_INCDIRS);
105  amxc_var_t* lib_dirs = amxo_parser_claim_config(parser, AMXRT_COPT_LIBDIRS);
106  amxc_var_t* mib_dirs = amxo_parser_claim_config(parser, AMXRT_COPT_MIBDIRS);
107 
108  amxrt_config_add_dir(inc_dirs, ".");
109  amxrt_config_add_dir(inc_dirs, "${prefix}${cfg-dir}/${name}");
110  amxrt_config_add_dir(inc_dirs, "${prefix}${cfg-dir}/modules");
111 
112  amxrt_config_add_dir(lib_dirs, "${prefix}${plugin-dir}/${name}");
113  amxrt_config_add_dir(lib_dirs, "${prefix}${plugin-dir}/modules");
114  amxrt_config_add_dir(lib_dirs, "${prefix}/usr/local/lib/amx/${name}");
115  amxrt_config_add_dir(lib_dirs, "${prefix}/usr/local/lib/amx/modules");
116 
117  amxrt_config_add_dir(mib_dirs, "${prefix}${cfg-dir}/${name}/mibs");
118 
119 
120 }
static void amxrt_config_add_dir(amxc_var_t *var_dirs, const char *dir)
Definition: amxrt_config.c:85

Variable Documentation

◆ amxrt_config_hooks

amxo_hooks_t amxrt_config_hooks
static
Initial value:
= {
.it = { .next = NULL, .prev = NULL, .llist = NULL },
.comment = NULL,
.start = NULL,
.end = NULL,
.start_include = NULL,
.end_include = amxrt_config_include_end,
.start_section = NULL,
.end_section = amxrt_config_section_end,
.create_object = NULL,
.add_instance = NULL,
.select_object = NULL,
.end_object = NULL,
.add_param = NULL,
.set_param = NULL,
.end_param = NULL,
.add_func = NULL,
.add_func_arg = NULL,
.end_func = NULL,
.add_mib = NULL,
.set_counter = NULL,
}
static void amxrt_config_option_changed(amxo_parser_t *parser, UNUSED const char *option, UNUSED amxc_var_t *value)
Definition: amxrt_config.c:148
static void amxrt_config_include_end(amxo_parser_t *parser, UNUSED const char *file)
Definition: amxrt_config.c:131
static void amxrt_config_section_end(amxo_parser_t *parser, int section_id)
Definition: amxrt_config.c:139

Definition at line 158 of file amxrt_config.c.