MinGW
[oweals/gnunet.git] / src / util / program.c
index 695a6f9bc704826cb2507e4c8adf2de337ec0599..145d97a57dfecc4a204422f9f28ec34bba4a0e2a 100644 (file)
 #include "gnunet_scheduler_lib.h"
 #include <gcrypt.h>
 
+#if HAVE_ARGZ_H
+#include <argz.h>
+#else
+#include "program_lib_strnlen.c"
+#include "program_lib_strndup.c"
+#include "program_lib_mempcpy.c"
+#include "program_lib_argz.c"
+#endif
+
 /**
  * Context for the command.
  */
@@ -129,6 +138,7 @@ GNUNET_PROGRAM_run (int argc,
   struct CommandContext cc;
   char *path;
   char *loglev;
+  char *logfile;
   int ret;
   unsigned int cnt;
   struct GNUNET_CONFIGURATION_Handle *cfg;
@@ -136,10 +146,30 @@ GNUNET_PROGRAM_run (int argc,
     GNUNET_GETOPT_OPTION_CFG_FILE (&cc.cfgfile),
     GNUNET_GETOPT_OPTION_HELP (binaryHelp),
     GNUNET_GETOPT_OPTION_LOGLEVEL (&loglev),
+    GNUNET_GETOPT_OPTION_LOGFILE (&logfile),
     GNUNET_GETOPT_OPTION_VERSION (PACKAGE_VERSION)
   };
   struct GNUNET_GETOPT_CommandLineOption *allopts;
+  const char *gargs;
 
+  logfile = NULL;
+  gargs = getenv ("GNUNET_ARGS");
+  if (gargs != NULL)
+    {
+      char *gargz;
+      size_t gargl;
+      char **gargv;
+      int i;
+
+      argz_create_sep (gargs, ' ', &gargz, &gargl);
+      for (i=0;i<argc;i++)
+       argz_insert (&gargz, &gargl, gargz, argv[i]);
+      gargv = GNUNET_malloc (sizeof (char*) * (gargl+1));
+      argz_extract (gargz, gargl, gargv);
+      argc = argz_count (gargz, gargl);
+      free (gargz);
+      argv = (char *const *) gargv;
+    }
   memset (&cc, 0, sizeof (cc));
   loglev = NULL;
   cc.task = task;
@@ -174,13 +204,14 @@ GNUNET_PROGRAM_run (int argc,
   qsort (allopts, cnt, sizeof (struct GNUNET_GETOPT_CommandLineOption),
          &cmd_sorter);
   loglev = GNUNET_strdup ("WARNING");
+  cc.cfgfile = GNUNET_strdup (GNUNET_DEFAULT_USER_CONFIG_FILE);
   if ((-1 == (ret = GNUNET_GETOPT_run (binaryName,
                                        allopts,
                                        (unsigned int) argc, argv))) ||
       ((GNUNET_OK !=
         GNUNET_log_setup (binaryName,
                           loglev,
-                          NULL)) ||
+                          logfile)) ||
        (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, cc.cfgfile))))
 
     {