diff options
Diffstat (limited to '')
-rw-r--r-- | lib/mcconfig/get.c | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/lib/mcconfig/get.c b/lib/mcconfig/get.c new file mode 100644 index 0000000..f8ecfb1 --- /dev/null +++ b/lib/mcconfig/get.c @@ -0,0 +1,214 @@ +/* + Configure module for the Midnight Commander + + Copyright (C) 1994-2023 + Free Software Foundation, Inc. + + This file is part of the Midnight Commander. + + The Midnight Commander 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. + + The Midnight Commander 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 this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include "lib/global.h" +#include "lib/strutil.h" + +#include "lib/mcconfig.h" + +/*** global variables ****************************************************************************/ + +/*** file scope macro definitions ****************************************************************/ + +/*** file scope type declarations ****************************************************************/ + +/*** file scope variables ************************************************************************/ + +/*** file scope functions ************************************************************************/ + +/* --------------------------------------------------------------------------------------------- */ +/*** file scope functions ************************************************************************/ +/* --------------------------------------------------------------------------------------------- */ + +/* --------------------------------------------------------------------------------------------- */ +/*** public functions ****************************************************************************/ +/* --------------------------------------------------------------------------------------------- */ + +gchar ** +mc_config_get_groups (const mc_config_t * mc_config, gsize * len) +{ + gchar **ret = NULL; + + if (mc_config != NULL) + ret = g_key_file_get_groups (mc_config->handle, len); + + if (ret == NULL) + { + ret = g_try_malloc0 (sizeof (gchar **)); + if (len != NULL) + *len = 0; + } + + return ret; +} + +/* --------------------------------------------------------------------------------------------- */ + +gchar ** +mc_config_get_keys (const mc_config_t * mc_config, const gchar * group, gsize * len) +{ + gchar **ret = NULL; + + if (mc_config != NULL && group != NULL) + ret = g_key_file_get_keys (mc_config->handle, group, len, NULL); + + if (ret == NULL) + { + ret = g_try_malloc0 (sizeof (gchar **)); + if (len != NULL) + *len = 0; + } + + return ret; +} + +/* --------------------------------------------------------------------------------------------- */ + +gchar * +mc_config_get_string (mc_config_t * mc_config, const gchar * group, + const gchar * param, const gchar * def) +{ + GIConv conv; + GString *buffer; + gchar *ret; + estr_t conv_res; + + ret = mc_config_get_string_raw (mc_config, group, param, def); + + if (mc_global.utf8_display) + return ret; + + conv = str_crt_conv_from ("UTF-8"); + if (conv == INVALID_CONV) + return ret; + + buffer = g_string_new (""); + conv_res = str_convert (conv, ret, buffer); + str_close_conv (conv); + + if (conv_res == ESTR_FAILURE) + { + g_string_free (buffer, TRUE); + return ret; + } + + g_free (ret); + + return g_string_free (buffer, FALSE); +} + +/* --------------------------------------------------------------------------------------------- */ + +gchar * +mc_config_get_string_raw (mc_config_t * mc_config, const gchar * group, + const gchar * param, const gchar * def) +{ + gchar *ret; + + if (mc_config == NULL || group == NULL || param == NULL) + return g_strdup (def); + + if (!mc_config_has_param (mc_config, group, param)) + { + if (def != NULL) + mc_config_set_string (mc_config, group, param, def); + return g_strdup (def); + } + + ret = g_key_file_get_string (mc_config->handle, group, param, NULL); + + return ret != NULL ? ret : g_strdup (def); +} + +/* --------------------------------------------------------------------------------------------- */ + +gboolean +mc_config_get_bool (mc_config_t * mc_config, const gchar * group, const gchar * param, gboolean def) +{ + if (mc_config == NULL || group == NULL || param == NULL) + return def; + + if (!mc_config_has_param (mc_config, group, param)) + { + mc_config_set_bool (mc_config, group, param, def); + return def; + } + + return g_key_file_get_boolean (mc_config->handle, group, param, NULL); +} + +/* --------------------------------------------------------------------------------------------- */ + +int +mc_config_get_int (mc_config_t * mc_config, const gchar * group, const gchar * param, int def) +{ + if (mc_config == NULL || group == NULL || param == NULL) + return def; + + if (!mc_config_has_param (mc_config, group, param)) + { + mc_config_set_int (mc_config, group, param, def); + return def; + } + + return g_key_file_get_integer (mc_config->handle, group, param, NULL); +} + +/* --------------------------------------------------------------------------------------------- */ + +gchar ** +mc_config_get_string_list (mc_config_t * mc_config, const gchar * group, + const gchar * param, gsize * length) +{ + if (mc_config == NULL || group == NULL || param == NULL) + return NULL; + + return g_key_file_get_string_list (mc_config->handle, group, param, length, NULL); +} + +/* --------------------------------------------------------------------------------------------- */ + +gboolean * +mc_config_get_bool_list (mc_config_t * mc_config, const gchar * group, + const gchar * param, gsize * length) +{ + if (mc_config == NULL || group == NULL || param == NULL) + return NULL; + + return g_key_file_get_boolean_list (mc_config->handle, group, param, length, NULL); +} + +/* --------------------------------------------------------------------------------------------- */ + +int * +mc_config_get_int_list (mc_config_t * mc_config, const gchar * group, + const gchar * param, gsize * length) +{ + if (mc_config == NULL || group == NULL || param == NULL) + return NULL; + + return g_key_file_get_integer_list (mc_config->handle, group, param, length, NULL); +} + +/* --------------------------------------------------------------------------------------------- */ |