Manual pages: mcmcdiffmceditmcview

root/lib/mcconfig/get.c

/* [previous][next][first][last][top][bottom][index][help]  */

DEFINITIONS

This source file includes following definitions.
  1. mc_config_get_groups
  2. mc_config_get_keys
  3. mc_config_get_string
  4. mc_config_get_string_strict
  5. mc_config_get_string_raw
  6. mc_config_get_bool
  7. mc_config_get_int
  8. mc_config_get_string_list
  9. mc_config_get_bool_list
  10. mc_config_get_int_list

   1 /*
   2    Configure module for the Midnight Commander
   3 
   4    Copyright (C) 1994-2025
   5    Free Software Foundation, Inc.
   6 
   7    This file is part of the Midnight Commander.
   8 
   9    The Midnight Commander is free software: you can redistribute it
  10    and/or modify it under the terms of the GNU General Public License as
  11    published by the Free Software Foundation, either version 3 of the License,
  12    or (at your option) any later version.
  13 
  14    The Midnight Commander is distributed in the hope that it will be useful,
  15    but WITHOUT ANY WARRANTY; without even the implied warranty of
  16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17    GNU General Public License for more details.
  18 
  19    You should have received a copy of the GNU General Public License
  20    along with this program.  If not, see <https://www.gnu.org/licenses/>.
  21  */
  22 
  23 #include <config.h>
  24 
  25 #include "lib/global.h"
  26 #include "lib/strutil.h"
  27 
  28 #include "lib/mcconfig.h"
  29 
  30 /*** global variables ****************************************************************************/
  31 
  32 /*** file scope macro definitions ****************************************************************/
  33 
  34 /*** file scope type declarations ****************************************************************/
  35 
  36 /*** file scope variables ************************************************************************/
  37 
  38 /*** file scope functions ************************************************************************/
  39 
  40 /* --------------------------------------------------------------------------------------------- */
  41 /*** file scope functions ************************************************************************/
  42 /* --------------------------------------------------------------------------------------------- */
  43 
  44 /* --------------------------------------------------------------------------------------------- */
  45 /*** public functions ****************************************************************************/
  46 /* --------------------------------------------------------------------------------------------- */
  47 
  48 gchar **
  49 mc_config_get_groups (const mc_config_t *mc_config, gsize *len)
     /* [previous][next][first][last][top][bottom][index][help]  */
  50 {
  51     gchar **ret = NULL;
  52 
  53     if (mc_config != NULL)
  54         ret = g_key_file_get_groups (mc_config->handle, len);
  55 
  56     if (ret == NULL)
  57     {
  58         ret = g_try_malloc0 (sizeof (gchar **));
  59         if (len != NULL)
  60             *len = 0;
  61     }
  62 
  63     return ret;
  64 }
  65 
  66 /* --------------------------------------------------------------------------------------------- */
  67 
  68 gchar **
  69 mc_config_get_keys (const mc_config_t *mc_config, const gchar *group, gsize *len)
     /* [previous][next][first][last][top][bottom][index][help]  */
  70 {
  71     gchar **ret = NULL;
  72 
  73     if (mc_config != NULL && group != NULL)
  74         ret = g_key_file_get_keys (mc_config->handle, group, len, NULL);
  75 
  76     if (ret == NULL)
  77     {
  78         ret = g_try_malloc0 (sizeof (gchar **));
  79         if (len != NULL)
  80             *len = 0;
  81     }
  82 
  83     return ret;
  84 }
  85 
  86 /* --------------------------------------------------------------------------------------------- */
  87 
  88 gchar *
  89 mc_config_get_string (mc_config_t *mc_config, const gchar *group, const gchar *param,
     /* [previous][next][first][last][top][bottom][index][help]  */
  90                       const gchar *def)
  91 {
  92     GIConv conv;
  93     GString *buffer;
  94     gchar *ret;
  95     estr_t conv_res;
  96 
  97     ret = mc_config_get_string_raw (mc_config, group, param, def);
  98 
  99     if (mc_global.utf8_display)
 100         return ret;
 101 
 102     conv = str_crt_conv_from ("UTF-8");
 103     if (conv == INVALID_CONV)
 104         return ret;
 105 
 106     buffer = g_string_new ("");
 107     conv_res = str_convert (conv, ret, buffer);
 108     str_close_conv (conv);
 109 
 110     if (conv_res == ESTR_FAILURE)
 111     {
 112         g_string_free (buffer, TRUE);
 113         return ret;
 114     }
 115 
 116     g_free (ret);
 117 
 118     return g_string_free (buffer, FALSE);
 119 }
 120 
 121 /* --------------------------------------------------------------------------------------------- */
 122 
 123 // like mc_config_get_string, but fail (use default) if can't be fully converted to the target
 124 // charset
 125 gchar *
 126 mc_config_get_string_strict (mc_config_t *mc_config, const gchar *group, const gchar *param,
     /* [previous][next][first][last][top][bottom][index][help]  */
 127                              const gchar *def)
 128 {
 129     GIConv conv;
 130     GString *buffer;
 131     gchar *ret;
 132     estr_t conv_res;
 133 
 134     ret = mc_config_get_string_raw (mc_config, group, param, def);
 135 
 136     if (!g_utf8_validate (ret, -1, NULL))
 137     {
 138         g_free (ret);
 139         return g_strdup (def);
 140     }
 141 
 142     if (mc_global.utf8_display)
 143         return ret;
 144 
 145     conv = str_crt_conv_from ("UTF-8");
 146     if (conv == INVALID_CONV)
 147         return ret;
 148 
 149     buffer = g_string_new ("");
 150     conv_res = str_convert (conv, ret, buffer);
 151     g_free (ret);
 152     str_close_conv (conv);
 153 
 154     if (conv_res != ESTR_SUCCESS)
 155     {
 156         g_string_free (buffer, TRUE);
 157         return g_strdup (def);
 158     }
 159 
 160     return g_string_free (buffer, FALSE);
 161 }
 162 
 163 /* --------------------------------------------------------------------------------------------- */
 164 
 165 gchar *
 166 mc_config_get_string_raw (mc_config_t *mc_config, const gchar *group, const gchar *param,
     /* [previous][next][first][last][top][bottom][index][help]  */
 167                           const gchar *def)
 168 {
 169     gchar *ret;
 170 
 171     if (mc_config == NULL || group == NULL || param == NULL)
 172         return g_strdup (def);
 173 
 174     if (!mc_config_has_param (mc_config, group, param))
 175     {
 176         if (def != NULL)
 177             mc_config_set_string (mc_config, group, param, def);
 178         return g_strdup (def);
 179     }
 180 
 181     ret = g_key_file_get_string (mc_config->handle, group, param, NULL);
 182 
 183     return ret != NULL ? ret : g_strdup (def);
 184 }
 185 
 186 /* --------------------------------------------------------------------------------------------- */
 187 
 188 gboolean
 189 mc_config_get_bool (mc_config_t *mc_config, const gchar *group, const gchar *param, gboolean def)
     /* [previous][next][first][last][top][bottom][index][help]  */
 190 {
 191     if (mc_config == NULL || group == NULL || param == NULL)
 192         return def;
 193 
 194     if (!mc_config_has_param (mc_config, group, param))
 195     {
 196         mc_config_set_bool (mc_config, group, param, def);
 197         return def;
 198     }
 199 
 200     return g_key_file_get_boolean (mc_config->handle, group, param, NULL);
 201 }
 202 
 203 /* --------------------------------------------------------------------------------------------- */
 204 
 205 int
 206 mc_config_get_int (mc_config_t *mc_config, const gchar *group, const gchar *param, int def)
     /* [previous][next][first][last][top][bottom][index][help]  */
 207 {
 208     if (mc_config == NULL || group == NULL || param == NULL)
 209         return def;
 210 
 211     if (!mc_config_has_param (mc_config, group, param))
 212     {
 213         mc_config_set_int (mc_config, group, param, def);
 214         return def;
 215     }
 216 
 217     return g_key_file_get_integer (mc_config->handle, group, param, NULL);
 218 }
 219 
 220 /* --------------------------------------------------------------------------------------------- */
 221 
 222 gchar **
 223 mc_config_get_string_list (mc_config_t *mc_config, const gchar *group, const gchar *param,
     /* [previous][next][first][last][top][bottom][index][help]  */
 224                            gsize *length)
 225 {
 226     if (mc_config == NULL || group == NULL || param == NULL)
 227         return NULL;
 228 
 229     return g_key_file_get_string_list (mc_config->handle, group, param, length, NULL);
 230 }
 231 
 232 /* --------------------------------------------------------------------------------------------- */
 233 
 234 gboolean *
 235 mc_config_get_bool_list (mc_config_t *mc_config, const gchar *group, const gchar *param,
     /* [previous][next][first][last][top][bottom][index][help]  */
 236                          gsize *length)
 237 {
 238     if (mc_config == NULL || group == NULL || param == NULL)
 239         return NULL;
 240 
 241     return g_key_file_get_boolean_list (mc_config->handle, group, param, length, NULL);
 242 }
 243 
 244 /* --------------------------------------------------------------------------------------------- */
 245 
 246 int *
 247 mc_config_get_int_list (mc_config_t *mc_config, const gchar *group, const gchar *param,
     /* [previous][next][first][last][top][bottom][index][help]  */
 248                         gsize *length)
 249 {
 250     if (mc_config == NULL || group == NULL || param == NULL)
 251         return NULL;
 252 
 253     return g_key_file_get_integer_list (mc_config->handle, group, param, length, NULL);
 254 }
 255 
 256 /* --------------------------------------------------------------------------------------------- */

/* [previous][next][first][last][top][bottom][index][help]  */