diff options
Diffstat (limited to 'src/configuration.c')
-rw-r--r-- | src/configuration.c | 114 |
1 files changed, 110 insertions, 4 deletions
diff --git a/src/configuration.c b/src/configuration.c index 8823271..5d17072 100644 --- a/src/configuration.c +++ b/src/configuration.c @@ -27,6 +27,7 @@ #include <malloc.h> #include <stdlib.h> #include <string.h> +#include <unistd.h> #include "xdg.h" @@ -73,9 +74,16 @@ configuration *load_configuration(const char *name, config_param *params, unsign result = (configuration *)calloc(1, sizeof(configuration)); + printf("reset...\n"); + + for (i = 0; i < count; i++) + params[i].cur = params[i].def; + result->params = params; result->count = count; + printf("init done\n"); + suffix = strdup("openida/"); suffix = stradd(suffix, name); suffix = stradd(suffix, ".xml"); @@ -91,6 +99,15 @@ configuration *load_configuration(const char *name, config_param *params, unsign for (i = 0; i < count; i++) switch (params[i].type) { + case CVT_BOOLEAN: + strval = get_node_text_value(result->context, params[i].path); + if (strval != NULL) + { + set_boolean_config_value(result, i, strcmp(strval, "true") == 0); + free(strval); + } + break; + case CVT_STRING: strval = get_node_text_value(result->context, params[i].path); set_string_config_value(result, i, strval); @@ -101,7 +118,7 @@ configuration *load_configuration(const char *name, config_param *params, unsign break; } - + printf("loaded\n"); return result; } @@ -122,19 +139,52 @@ configuration *load_configuration(const char *name, config_param *params, unsign void unload_configuration(configuration *config) { unsigned int i; /* Boucle de parcours */ + config_param *params; /* Confort d'utilisation */ printf("Writing '%s'\n", config->filename); + close_xml_file(config->xdoc, config->context); + create_new_xml_file(&config->xdoc, &config->context); + + for (i = 0; i < config->count; i++) - switch (1) + { + params = &config->params[i]; + + switch (params->type) { - case 1: + case CVT_BOOLEAN: + if (params->cur.boolean == params->def.boolean) + continue; + + add_content_to_node(config->xdoc, config->context, + params->path, + params->cur.boolean ? "true" : "false"); + + break; + + case CVT_STRING: + + if (params->cur.string == NULL && params->def.string == NULL) + continue; + + if (params->def.string != NULL && params->def.string != NULL + && strcmp(params->cur.string, params->def.string) == 0) + continue; + add_content_to_node(config->xdoc, config->context, - config->params[i].path, config->params[i].cur.string); + params->path, + params->cur.string != NULL ? params->cur.string : ""); + + break; + + default: break; } + } + save_xml_file(config->xdoc, config->filename); free(config); @@ -148,6 +198,62 @@ void unload_configuration(configuration *config) * index = indice de l'élément à traiter. * * value = valeur à considérer comme valeur courante. * * * +* Description : Définit une valeur booléenne dans la configuration. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool set_boolean_config_value(configuration *config, unsigned int index, bool value) +{ + if (index >= config->count) return false; + if (config->params[index].type != CVT_BOOLEAN) return false; + + config->params[index].defined = true; + + config->params[index].cur.boolean = value; + + return true; + +} + + +/****************************************************************************** +* * +* Paramètres : config = configuration à venir consulter. * +* index = indice de l'élément à traiter. * +* * +* Description : Fournit une valeur booléenne issue de la configuration. * +* * +* Retour : Valeur courante ou par défaut de la configuration. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool get_boolean_config_value(configuration *config, unsigned int index) +{ + bool result; /* Valeur à retourner */ + + if (index >= config->count) return NULL; + if (config->params[index].type != CVT_BOOLEAN) return NULL; + + if (config->params[index].defined) result = config->params[index].cur.boolean; + else result = config->params[index].def.boolean; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : config = configuration à venir consulter. * +* index = indice de l'élément à traiter. * +* value = valeur à considérer comme valeur courante. * +* * * Description : Définit une chaîne de caractères dans la configuration. * * * * Retour : - * |