X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fconfiguration.c;h=af5d43fd0ec2795e1ba112fd7d1735657a248fce;hb=265d10682af1afce58988be998d62e1849a3e545;hp=9b68513af3e33aa88f88341618f60f176054ff62;hpb=18deec1f15888454a5ec35351126512612754f57;p=oweals%2Fgnunet.git diff --git a/src/util/configuration.c b/src/util/configuration.c index 9b68513af..af5d43fd0 100644 --- a/src/util/configuration.c +++ b/src/util/configuration.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2006, 2007, 2008, 2009, 2013 Christian Grothoff (and other contributing authors) + Copyright (C) 2006, 2007, 2008, 2009, 2013 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -25,7 +25,10 @@ */ #include "platform.h" -#include "gnunet_util_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_strings_lib.h" +#include "gnunet_configuration_lib.h" +#include "gnunet_disk_lib.h" #define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__) @@ -346,7 +349,8 @@ GNUNET_CONFIGURATION_parse (struct GNUNET_CONFIGURATION_Handle *cfg, if (fs != GNUNET_DISK_fn_read (fn, mem, fs)) { LOG (GNUNET_ERROR_TYPE_WARNING, - "Error while reading file %s\n", fn); + "Error while reading file %s\n", + fn); GNUNET_free (fn); GNUNET_free (mem); return GNUNET_SYSERR; @@ -571,10 +575,9 @@ GNUNET_CONFIGURATION_iterate_section_values (const struct * @param iter_cls closure for @a iter */ void -GNUNET_CONFIGURATION_iterate_sections (const struct GNUNET_CONFIGURATION_Handle - *cfg, - GNUNET_CONFIGURATION_Section_Iterator - iter, void *iter_cls) +GNUNET_CONFIGURATION_iterate_sections (const struct GNUNET_CONFIGURATION_Handle *cfg, + GNUNET_CONFIGURATION_Section_Iterator iter, + void *iter_cls) { struct ConfigSection *spos; struct ConfigSection *next; @@ -919,8 +922,8 @@ GNUNET_CONFIGURATION_get_value_float (const struct GNUNET_CONFIGURATION_Handle * @return #GNUNET_OK on success, #GNUNET_SYSERR on error */ int -GNUNET_CONFIGURATION_get_value_time (const struct GNUNET_CONFIGURATION_Handle - *cfg, const char *section, +GNUNET_CONFIGURATION_get_value_time (const struct GNUNET_CONFIGURATION_Handle *cfg, + const char *section, const char *option, struct GNUNET_TIME_Relative *time) { @@ -1034,6 +1037,54 @@ GNUNET_CONFIGURATION_get_value_choice (const struct GNUNET_CONFIGURATION_Handle } +/** + * Get crockford32-encoded fixed-size binary data from a configuration. + * + * @param cfg configuration to access + * @param section section to access + * @param option option to access + * @param buf where to store the decoded binary result + * @param buf_size exact number of bytes to store in @a buf + * @return #GNUNET_OK on success + * #GNUNET_NO is the value does not exist + * #GNUNET_SYSERR on decoding error + */ +int +GNUNET_CONFIGURATION_get_data (const struct GNUNET_CONFIGURATION_Handle *cfg, + const char *section, + const char *option, + void *buf, + size_t buf_size) +{ + char *enc; + int res; + size_t data_size; + + if (GNUNET_OK != + (res = GNUNET_CONFIGURATION_get_value_string (cfg, + section, + option, + &enc))) + return res; + data_size = (strlen (enc) * 5) / 8; + if (data_size != buf_size) + { + GNUNET_free (enc); + return GNUNET_SYSERR; + } + if (GNUNET_OK != + GNUNET_STRINGS_string_to_data (enc, + strlen (enc), + buf, buf_size)) + { + GNUNET_free (enc); + return GNUNET_SYSERR; + } + GNUNET_free (enc); + return GNUNET_OK; +} + + /** * Test if we have a value for a particular option * @@ -1044,7 +1095,8 @@ GNUNET_CONFIGURATION_get_value_choice (const struct GNUNET_CONFIGURATION_Handle */ int GNUNET_CONFIGURATION_have_value (const struct GNUNET_CONFIGURATION_Handle *cfg, - const char *section, const char *option) + const char *section, + const char *option) { struct ConfigEntry *e; @@ -1645,47 +1697,4 @@ GNUNET_CONFIGURATION_load_from (struct GNUNET_CONFIGURATION_Handle *cfg, } -/** - * Load configuration (starts with defaults, then loads - * system-specific configuration). - * - * @param cfg configuration to update - * @param filename name of the configuration file, NULL to load defaults - * @return #GNUNET_OK on success, #GNUNET_SYSERR on error - */ -int -GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg, - const char *filename) -{ - char *baseconfig; - char *ipath; - - ipath = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR); - if (NULL == ipath) - return GNUNET_SYSERR; - baseconfig = NULL; - GNUNET_asprintf (&baseconfig, "%s%s", ipath, "config.d"); - GNUNET_free (ipath); - if (GNUNET_SYSERR == - GNUNET_DISK_directory_scan (baseconfig, &parse_configuration_file, cfg)) - { - GNUNET_free (baseconfig); - return GNUNET_SYSERR; /* no configuration at all found */ - } - GNUNET_free (baseconfig); - if ((NULL != filename) && - (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, filename))) - { - /* specified configuration not found */ - return GNUNET_SYSERR; - } - if (((GNUNET_YES != - GNUNET_CONFIGURATION_have_value (cfg, "PATHS", "DEFAULTCONFIG"))) && - (filename != NULL)) - GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "DEFAULTCONFIG", - filename); - return GNUNET_OK; -} - - /* end of configuration.c */