Merge branch 'master' of ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / util / configuration_loader.c
index da82a75a772b5d76fb5cdb98e34dc676afdc26d6..ceaf2a6ea2f44c71c1419972e29230895b7193b8 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (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
@@ -27,9 +27,9 @@
 #include "platform.h"
 #include "gnunet_util_lib.h"
 
-#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
+#define LOG(kind,...) GNUNET_log_from (kind, "util-configuration", __VA_ARGS__)
+
 
-#define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file (kind, "util", syscall, filename)
 /**
  * Load configuration (starts with defaults, then loads
  * system-specific configuration).
@@ -43,14 +43,24 @@ GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg,
                            const char *filename)
 {
   char *baseconfig;
-  char *ipath;
+  const char *base_config_varname;
 
-  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);
+  base_config_varname = GNUNET_OS_project_data_get ()->base_config_varname;
+
+  if (NULL != (baseconfig = getenv (base_config_varname)))
+  {
+    baseconfig = GNUNET_strdup (baseconfig);
+  }
+  else
+  {
+    char *ipath;
+
+    ipath = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR);
+    if (NULL == ipath)
+      return GNUNET_SYSERR;
+    GNUNET_asprintf (&baseconfig, "%s%s", ipath, "config.d");
+    GNUNET_free (ipath);
+  }
 
   if (GNUNET_SYSERR ==
       GNUNET_CONFIGURATION_load_from (cfg,