/* Chrysalide - Outil d'analyse de fichiers binaires
* params.c - éléments de la configuration principale
*
* Copyright (C) 2009-2012 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 .
*/
#include "params.h"
#include
#include
#include
#include
#include
/******************************************************************************
* *
* Paramètres : - *
* *
* Description : Détermine une fois pour toute la désignation de l'usager. *
* *
* Retour : Nom déterminé à libérer de la mémoire. *
* *
* Remarques : - *
* *
******************************************************************************/
static char *get_author_name(void)
{
char *result; /* Désignation à retourner */
char *chrysalide_user; /* Eventuel nom spécifique */
char *logname; /* Nom depuis l'environnement */
char hostname[HOST_NAME_MAX]; /* Nom de la machine courante */
int ret; /* Bilan d'un appel */
size_t length; /* Taille de la désignation */
chrysalide_user = getenv("CHRYSALIDE_USER");
if (chrysalide_user != NULL)
result = strdup(chrysalide_user);
else
{
logname = getenv("LOGNAME");
ret = gethostname(hostname, HOST_NAME_MAX);
if (ret != 0)
hostname[0] = '\0';
if (logname != NULL && hostname[0] != '\0')
{
length = strlen(logname) + 1 + strlen(hostname) + 1;
result = (char *)calloc(length, sizeof(char));
snprintf(result, length, "%s@%s", logname, hostname);
}
else if (logname != NULL && hostname[0] == '\0')
{
length = strlen(logname) + 1;
result = (char *)calloc(length, sizeof(char));
snprintf(result, length, "%s", logname);
}
else if (logname == NULL && hostname[0] != '\0')
{
length = 1 + strlen(hostname) + 1;
result = (char *)calloc(length, sizeof(char));
snprintf(result, length, "@%s", hostname);
}
else
result = strdup("anonymous");
}
return result;
}
/******************************************************************************
* *
* Paramètres : - *
* *
* Description : Procède au chargement de la configuration principale. *
* *
* Retour : Bilan de l'opération. *
* *
* Remarques : - *
* *
******************************************************************************/
bool load_main_config_parameters(void)
{
GGenConfig *config; /* Configuration à charger */
GCfgParam *param; /* Paramètre chargé */
char *string; /* Valeur sous forme de texte */
config = g_generic_config_new("main");
set_main_configuration(config);
string = get_author_name();
param = g_generic_config_create_param(config, MPK_AUTHOR_NAME, CPT_STRING, string);
free(string);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_REMOTE_HOST, CPT_STRING, "localhost");
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_REMOTE_PORT, CPT_INTEGER, 9999);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_LOCAL_HOST, CPT_STRING, "localhost");
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_LOCAL_PORT, CPT_INTEGER, 1337);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_SERVER_BACKLOG, CPT_INTEGER, 20);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_FORMAT_NO_NAME, CPT_BOOLEAN, false);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_TITLE_BAR, CPT_BOOLEAN, true);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_LAST_PROJECT, CPT_STRING, NULL);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_MAXIMIZED, CPT_BOOLEAN, true);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_ELLIPSIS_HEADER, CPT_INTEGER, 54);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_ELLIPSIS_TAB, CPT_INTEGER, 35);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_DISPLAY_ON_SEL, CPT_BOOLEAN, false);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_SELECTION_LINE, CPT_BOOLEAN, true);
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_KEYBINDINGS_EDIT, CPT_STRING, "F2");
if (param == NULL) return false;
param = g_generic_config_create_param(config, MPK_AUTO_SAVE, CPT_BOOLEAN, true);
if (param == NULL) return false;
return true;
}
/******************************************************************************
* *
* Paramètres : - *
* *
* Description : Procède au déchargement de la configuration principale. *
* *
* Retour : - *
* *
* Remarques : - *
* *
******************************************************************************/
void unload_main_config_parameters(void)
{
GGenConfig *config; /* Configuration à décharger */
config = get_main_configuration();
g_object_unref(G_OBJECT(config));
}
/******************************************************************************
* *
* Paramètres : config = éventuelle configuration à définir comme principale.*
* *
* Description : Fournit un lien vers la configuration principale. *
* *
* Retour : Configuration prête à emploi ou NULL si aucune définie. *
* *
* Remarques : - *
* *
******************************************************************************/
GGenConfig *_get_main_configuration(GGenConfig *config)
{
static GGenConfig *result = NULL; /* Structure à retourner */
if (config != NULL)
result = config;
return result;
}