X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fprogram.c;h=8b1d7773ed249cf4b9a802679647493a7664215e;hb=fdbe690beeec04066f18302401096eb5212c3f6a;hp=9d2e0a40d8bd93ccb651aadda83e7cd6b6327035;hpb=6db7b23f0be85c8fc263cb8380cb9a3d495be75a;p=oweals%2Fgnunet.git diff --git a/src/util/program.c b/src/util/program.c index 9d2e0a40d..8b1d7773e 100644 --- a/src/util/program.c +++ b/src/util/program.c @@ -25,15 +25,9 @@ */ #include "platform.h" -#include "gnunet_common.h" -#include "gnunet_configuration_lib.h" -#include "gnunet_crypto_lib.h" -#include "gnunet_directories.h" -#include "gnunet_getopt_lib.h" -#include "gnunet_os_lib.h" -#include "gnunet_program_lib.h" +#include "gnunet_util_lib.h" #include "gnunet_resolver_service.h" -#include "gnunet_scheduler_lib.h" +#include "gnunet_directories.h" #include #define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__) @@ -146,9 +140,13 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName, int run_without_scheduler) { struct CommandContext cc; +#if ENABLE_NLS char *path; +#endif char *loglev; char *logfile; + char *cfg_fn; + const char *xdg; int ret; unsigned int cnt; unsigned long long skew_offset; @@ -199,7 +197,6 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName, cc.task = task; cc.task_cls = task_cls; cc.cfg = cfg = GNUNET_CONFIGURATION_create (); - /* prepare */ #if ENABLE_NLS setlocale (LC_ALL, ""); @@ -227,7 +224,15 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName, qsort (allopts, cnt, sizeof (struct GNUNET_GETOPT_CommandLineOption), &cmd_sorter); loglev = NULL; - cc.cfgfile = GNUNET_strdup (GNUNET_DEFAULT_USER_CONFIG_FILE); + xdg = getenv ("XDG_CONFIG_HOME"); + if (NULL != xdg) + GNUNET_asprintf (&cfg_fn, + "%s%s%s", + xdg, + DIR_SEPARATOR_STR, + "gnunet.conf"); + else + cfg_fn = GNUNET_strdup (GNUNET_DEFAULT_USER_CONFIG_FILE); lpfx = GNUNET_strdup (binaryName); if (NULL != (spc = strstr (lpfx, " "))) *spc = '\0'; @@ -239,17 +244,20 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName, GNUNET_free_non_null (cc.cfgfile); GNUNET_free_non_null (loglev); GNUNET_free_non_null (logfile); + GNUNET_free (cfg_fn); GNUNET_free (allopts); GNUNET_free (lpfx); return (ret == GNUNET_SYSERR) ? GNUNET_SYSERR : GNUNET_OK; } + if (NULL == cc.cfgfile) + cc.cfgfile = GNUNET_strdup (cfg_fn); if (GNUNET_YES == GNUNET_DISK_file_test (cc.cfgfile)) (void) GNUNET_CONFIGURATION_load (cfg, cc.cfgfile); else { (void) GNUNET_CONFIGURATION_load (cfg, NULL); - if (0 != strcmp (cc.cfgfile, GNUNET_DEFAULT_USER_CONFIG_FILE)) + if (0 != strcmp (cc.cfgfile, cfg_fn)) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not access configuration file `%s'\n"), cc.cfgfile); @@ -280,7 +288,8 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName, /* clean up */ GNUNET_SPEEDUP_stop_ (); GNUNET_CONFIGURATION_destroy (cfg); - GNUNET_free_non_null (cc.cfgfile); + GNUNET_free (cc.cfgfile); + GNUNET_free (cfg_fn); GNUNET_free_non_null (loglev); GNUNET_free_non_null (logfile); return GNUNET_OK; @@ -296,8 +305,8 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName, * @param binaryHelp help text for the program * @param options command line options * @param task main function to run - * @param task_cls closure for task - * @return GNUNET_SYSERR on error, GNUNET_OK on success + * @param task_cls closure for @a task + * @return #GNUNET_SYSERR on error, #GNUNET_OK on success */ int GNUNET_PROGRAM_run (int argc, char *const *argv, const char *binaryName,