X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fgnunet-config.c;h=f700428a246f4a1867505d16dc48270bed22eee8;hb=0778ffa854d2bb626ebedfe3c1e8ca6a1209e42e;hp=81e09fdbf83fc62b0cc667dd93d24f092049bf44;hpb=4e29ecde9b3ad3e34af359f18b6679c06b17ce78;p=oweals%2Fgnunet.git diff --git a/src/util/gnunet-config.c b/src/util/gnunet-config.c index 81e09fdbf..f700428a2 100644 --- a/src/util/gnunet-config.c +++ b/src/util/gnunet-config.c @@ -11,6 +11,11 @@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later */ /** @@ -68,16 +73,41 @@ static int rewrite; */ static void print_option (void *cls, - const char *section, - const char *option, - const char *value) + const char *section, + const char *option, + const char *value) { - (void) cls; + const struct GNUNET_CONFIGURATION_Handle *cfg = cls; + (void) section; - fprintf (stdout, - "%s = %s\n", - option, - value); + if (is_filename) + { + char *value_fn; + char *fn; + + GNUNET_assert (GNUNET_OK == + GNUNET_CONFIGURATION_get_value_filename (cfg, + section, + option, + &value_fn)); + fn = GNUNET_STRINGS_filename_expand (value_fn); + if (NULL == fn) + fn = value_fn; + else + GNUNET_free (value_fn); + fprintf (stdout, + "%s = %s\n", + option, + fn); + GNUNET_free (fn); + } + else + { + fprintf (stdout, + "%s = %s\n", + option, + value); + } } @@ -93,8 +123,8 @@ print_section_name (void *cls, { (void) cls; fprintf (stdout, - "%s\n", - section); + "%s\n", + section); } @@ -103,7 +133,8 @@ print_section_name (void *cls, * * @param cls closure * @param args remaining command-line arguments - * @param cfgfile name of the configuration file used (for saving, can be NULL!) + * @param cfgfile name of the configuration file used (for saving, + * can be NULL!) * @param cfg configuration */ static void @@ -114,6 +145,7 @@ run (void *cls, { struct GNUNET_CONFIGURATION_Handle *out = NULL; struct GNUNET_CONFIGURATION_Handle *diff = NULL; + char *cfg_fn; (void) cls; (void) args; @@ -139,14 +171,19 @@ run (void *cls, if (! list_sections) { fprintf (stderr, - _("--section argument is required\n")); + _("%s or %s argument is required\n"), + "--section", + "--list-sections"); + ret = 1; + } + else + { + fprintf (stderr, + _("The following sections are available:\n")); + GNUNET_CONFIGURATION_iterate_sections (cfg, + &print_section_name, + NULL); } - fprintf (stderr, - _("The following sections are available:\n")); - GNUNET_CONFIGURATION_iterate_sections (cfg, - &print_section_name, - NULL); - ret = 1; goto cleanup; } @@ -156,35 +193,36 @@ run (void *cls, { GNUNET_CONFIGURATION_iterate_section_values (cfg, section, - &print_option, - NULL); + &print_option, + (void *) cfg); } else { if (is_filename) { - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_filename (cfg, + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_filename (cfg, section, option, &value)) - { - GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, - section, option); - ret = 3; + { + GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, + section, option); + ret = 3; goto cleanup; - } + } } else { - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_string (cfg, section, option, &value)) - { - GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, - section, option); - ret = 3; + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_string (cfg, section, + option, &value)) + { + GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, + section, option); + ret = 3; goto cleanup; - } + } } fprintf (stdout, "%s\n", value); } @@ -203,16 +241,31 @@ run (void *cls, option, value); } + cfg_fn = NULL; + if (NULL == cfgfile) + { + const char *xdg = getenv ("XDG_CONFIG_HOME"); + if (NULL != xdg) + GNUNET_asprintf (&cfg_fn, + "%s%s%s", + xdg, + DIR_SEPARATOR_STR, + GNUNET_OS_project_data_get ()->config_file); + else + cfg_fn = GNUNET_strdup (GNUNET_OS_project_data_get ()->user_config_file); + cfgfile = cfg_fn; + } if ( (NULL != diff) || (NULL != out) ) { if (GNUNET_OK != - GNUNET_CONFIGURATION_write ((NULL == out) ? diff : out, + GNUNET_CONFIGURATION_write ((NULL == out) ? diff : out, cfgfile)) ret = 2; } + GNUNET_free_non_null (cfg_fn); if (NULL != out) GNUNET_CONFIGURATION_destroy (out); - cleanup: +cleanup: if (NULL != diff) GNUNET_CONFIGURATION_destroy (diff); } @@ -231,32 +284,32 @@ main (int argc, { struct GNUNET_GETOPT_CommandLineOption options[] = { GNUNET_GETOPT_option_flag ('f', - "filename", - gettext_noop ("obtain option of value as a filename (with $-expansion)"), - &is_filename), + "filename", + gettext_noop ("interpret option value as a filename (with $-expansion)"), + &is_filename), GNUNET_GETOPT_option_string ('s', - "section", - "SECTION", - gettext_noop ("name of the section to access"), - §ion), + "section", + "SECTION", + gettext_noop ("name of the section to access"), + §ion), GNUNET_GETOPT_option_string ('o', - "option", - "OPTION", - gettext_noop ("name of the option to access"), - &option), + "option", + "OPTION", + gettext_noop ("name of the option to access"), + &option), GNUNET_GETOPT_option_string ('V', - "value", - "VALUE", - gettext_noop ("value to set"), - &value), + "value", + "VALUE", + gettext_noop ("value to set"), + &value), GNUNET_GETOPT_option_flag ('S', - "list-sections", - gettext_noop ("print available configuration sections"), - &list_sections), + "list-sections", + gettext_noop ("print available configuration sections"), + &list_sections), GNUNET_GETOPT_option_flag ('w', - "rewrite", - gettext_noop ("write configuration file that only contains delta to defaults"), - &rewrite), + "rewrite", + gettext_noop ("write configuration file that only contains delta to defaults"), + &rewrite), GNUNET_GETOPT_OPTION_END }; if (GNUNET_OK != @@ -265,12 +318,12 @@ main (int argc, return 2; ret = (GNUNET_OK == - GNUNET_PROGRAM_run (argc, - argv, - "gnunet-config [OPTIONS]", - gettext_noop ("Manipulate GNUnet configuration files"), - options, - &run, NULL)) ? 0 : ret; + GNUNET_PROGRAM_run (argc, + argv, + "gnunet-config [OPTIONS]", + gettext_noop ("Manipulate GNUnet configuration files"), + options, + &run, NULL)) ? 0 : ret; GNUNET_free ((void*) argv); return ret; }