Returns now GNUNET_SYSERR
[oweals/gnunet.git] / src / util / program.c
index bbedc05d0b2f178d7b19c239589b79247d1ef424..6f8467837d3a0e5ecaa7fb720b6aa31ca471bc75 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.
  */
@@ -86,7 +77,7 @@ program_main (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct CommandContext *cc = cls;
 
-  cc->task (cc->task_cls, tc->sched, cc->args, cc->cfgfile, cc->cfg);
+  cc->task (cc->task_cls, cc->args, cc->cfgfile, cc->cfg);
 }
 
 
@@ -156,19 +147,27 @@ GNUNET_PROGRAM_run (int argc,
   gargs = getenv ("GNUNET_ARGS");
   if (gargs != NULL)
     {
-      char *gargz;
-      size_t gargl;
       char **gargv;
+      unsigned int gargc;
       int i;
-
-      argz_create_sep (gargs, ' ', &gargz, &gargl);
+      char *tok;
+      char *cargs;
+      
+      gargv = NULL;
+      gargc = 0;
       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);
+       GNUNET_array_append (gargv, gargc, GNUNET_strdup (argv[i]));
+      cargs = GNUNET_strdup (gargs);
+      tok = strtok (cargs, " ");
+      while (NULL != tok)
+       {
+         GNUNET_array_append (gargv, gargc, GNUNET_strdup (tok));
+         tok = strtok (NULL, " ");
+       }      
+      GNUNET_free (cargs);
+      GNUNET_array_append (gargv, gargc, NULL);
       argv = (char *const *) gargv;
+      argc = gargc - 1;
     }
   memset (&cc, 0, sizeof (cc));
   loglev = NULL;
@@ -215,6 +214,7 @@ GNUNET_PROGRAM_run (int argc,
        (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, cc.cfgfile))))
 
     {
+      GNUNET_CONFIGURATION_destroy (cfg);
       GNUNET_free_non_null (cc.cfgfile);
       GNUNET_free (loglev);
       GNUNET_free (allopts);