diff options
Diffstat (limited to 'common.c')
-rw-r--r-- | common.c | 39 |
1 files changed, 32 insertions, 7 deletions
@@ -1280,6 +1280,8 @@ end: // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// TODO: this doesn't necessarily have to be well designed at all + typedef void (*config_module_load_fn) (struct config_item_ *subtree, void *user_data); @@ -1290,6 +1292,20 @@ struct config_module void *user_data; ///< User data }; +static struct config_module * +config_module_new () +{ + struct config_module *self = xcalloc (1, sizeof *self); + return self; +} + +static void +config_module_destroy (struct config_module *self) +{ + free (self->name); + free (self); +} + struct config { struct str_map modules; ///< Toplevel modules @@ -1299,24 +1315,33 @@ struct config static void config_init (struct config *self) { - // TODO + memset (self, 0, sizeof *self); + str_map_init (&self->modules); + self->modules.free = (void (*) (void *)) config_module_destroy; } static void config_free (struct config *self) { - // TODO + str_map_free (&self->modules); + if (self->root) + config_item_destroy (self->root); } -static bool -config_register_module (const char *name, - config_module_load_fn loader, void *user_data) +static void +config_register_module (struct config *self, + const char *name, config_module_load_fn loader, void *user_data) { - // TODO + struct config_module *module = config_module_new (); + module->name = xstrdup (name); + module->loader = loader; + module->user_data = user_data; + + str_map_set (&self->modules, name, module); } static bool -config_load (struct config_item_ *root, struct error **e) +config_load (struct config *self, struct config_item_ *root, struct error **e) { // TODO } |