summaryrefslogtreecommitdiff
path: root/src/configuration.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/configuration.c')
-rw-r--r--src/configuration.c427
1 files changed, 0 insertions, 427 deletions
diff --git a/src/configuration.c b/src/configuration.c
deleted file mode 100644
index 12feeb6..0000000
--- a/src/configuration.c
+++ /dev/null
@@ -1,427 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * configuration.c - éléments de configuration du programme
- *
- * Copyright (C) 2009-2014 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * OpenIDA is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * OpenIDA is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "configuration.h"
-
-
-#include <libgen.h>
-#include <malloc.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-
-#include "common/extstr.h"
-#include "common/xdg.h"
-#include "common/xml.h"
-
-
-
-/* Paramètres de configuration */
-struct _configuration
-{
- config_param *params; /* Paramètres à consulter */
- unsigned int count; /* Quantité de ces paramètres */
-
- char *filename; /* Fichier externe */
-
- xmlDocPtr xdoc; /* Document XML de configurat° */
- xmlXPathContextPtr context; /* Contexte de recherche XPath */
-
-};
-
-
-/* S'assure qu'un chemin donné existe dans le système. */
-static int ensure_path_exists(const char *);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : name = désignation de la configuration. *
-* params = tableau de paramètres à consulter / mettre à jour. *
-* count = taille du tableau en question. *
-* *
-* Description : Charge la configuration principale. *
-* *
-* Retour : Configuration prête à emploi. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-configuration *load_configuration(const char *name, config_param *params, unsigned int count)
-{
- configuration *result; /* Structure à retourner */
- char *suffix; /* Fin du nom de fichier */
- unsigned int i; /* Boucle de parcours */
- char *strval; /* Valeur en chaîne de carac. */
-
- result = (configuration *)calloc(1, sizeof(configuration));
-
- for (i = 0; i < count; i++)
- params[i].cur = params[i].def;
-
- result->params = params;
- result->count = count;
-
- suffix = strdup("openida/");
- suffix = stradd(suffix, name);
- suffix = stradd(suffix, ".xml");
-
- result->filename = get_xdg_config_dir(suffix);
-
- free(suffix);
-
- if (!open_xml_file(result->filename, &result->xdoc, &result->context))
- create_new_xml_file(&result->xdoc, &result->context);
-
- else
- 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_INTEGER:
- strval = get_node_text_value(result->context, params[i].path);
- if (strval != NULL)
- {
- set_integer_config_value(result, i, atoi(strval));
- free(strval);
- }
- break;
-
- case CVT_STRING:
- strval = get_node_text_value(result->context, params[i].path);
- set_string_config_value(result, i, strval);
- if (strval != NULL) free(strval);
- break;
-
- default:
- break;
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : path = chemin d'accès à valider. *
-* *
-* Description : S'assure qu'un chemin donné existe dans le système. *
-* *
-* Retour : 0 si le chemin est actuellement présent, -1 sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static int ensure_path_exists(const char *path)
-{
- int result; /* Bilan de l'assurance */
- char *tmp; /* Chemin altérable */
-
- tmp = strdup(path);
- tmp = dirname(tmp);
-
- result = access(tmp, W_OK | X_OK);
-
- if (result != 0)
- {
- result = ensure_path_exists(tmp);
-
- if (result == 0)
- result = mkdir(tmp, 0700);
-
- }
-
- free(tmp);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : config = configuration à libérer de la mémoire. *
-* *
-* Description : Décharge la configuration principale. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void unload_configuration(configuration *config)
-{
- int ret; /* Bilan de l'assurance */
- unsigned int i; /* Boucle de parcours */
- config_param *params; /* Confort d'utilisation */
- char tmp[12 /* -INT_MIN */]; /* Reconstruction en chaîne */
-
- close_xml_file(config->xdoc, config->context);
-
- ret = ensure_path_exists(config->filename);
- if (ret != 0) goto uc_exit;
-
- create_new_xml_file(&config->xdoc, &config->context);
-
- for (i = 0; i < config->count; i++)
- {
- params = &config->params[i];
-
- switch (params->type)
- {
- 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_INTEGER:
- if (params->cur.integer == params->def.integer)
- continue;
-
- snprintf(tmp, 12, "%d", params->cur.integer);
- add_content_to_node(config->xdoc, config->context,
- params->path, tmp);
-
- 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,
- params->path,
- params->cur.string != NULL ? params->cur.string : "");
-
- break;
-
- default:
- break;
-
- }
-
- }
-
- save_xml_file(config->xdoc, config->filename);
-
- uc_exit:
-
- free(config);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : config = configuration à venir consulter. *
-* 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 false;
- if (config->params[index].type != CVT_BOOLEAN) return false;
-
- 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 valeur entière dans la configuration. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool set_integer_config_value(configuration *config, unsigned int index, int value)
-{
- if (index >= config->count) return false;
- if (config->params[index].type != CVT_INTEGER) return false;
-
- config->params[index].defined = true;
-
- config->params[index].cur.integer = value;
-
- return true;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : config = configuration à venir consulter. *
-* index = indice de l'élément à traiter. *
-* *
-* Description : Fournit une valeur entière issue de la configuration. *
-* *
-* Retour : Valeur courante ou par défaut de la configuration. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-int get_integer_config_value(configuration *config, unsigned int index)
-{
- int result; /* Valeur à retourner */
-
- if (index >= config->count) return 0;
- if (config->params[index].type != CVT_INTEGER) return 0;
-
- if (config->params[index].defined) result = config->params[index].cur.integer;
- else result = config->params[index].def.integer;
-
- 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 : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool set_string_config_value(configuration *config, unsigned int index, const char *value)
-{
- if (index >= config->count) return false;
- if (config->params[index].type != CVT_STRING) return false;
-
- config->params[index].defined = true;
-
- if (config->params[index].cur.string != NULL)
- free(config->params[index].cur.string);
-
- config->params[index].cur.string = (value != NULL ? strdup(value) : NULL);
-
- return true;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : config = configuration à venir consulter. *
-* index = indice de l'élément à traiter. *
-* *
-* Description : Fournit une chaîne de caractères issue de la configuration. *
-* *
-* Retour : Valeur courante ou par défaut de la configuration. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-const char *get_string_config_value(configuration *config, unsigned int index)
-{
- const char *result; /* Valeur à retourner */
-
- if (index >= config->count) return NULL;
- if (config->params[index].type != CVT_STRING) return NULL;
-
- if (config->params[index].defined) result = config->params[index].cur.string;
- else result = config->params[index].def.string;
-
- return result;
-
-}