-dead
[oweals/gnunet.git] / src / util / program.c
index b6d0c78c6aee81c6e5e896624391afda49dd620a..6045f59cfe4efa739457bab63745dc02759d7a3b 100644 (file)
@@ -72,6 +72,11 @@ struct CommandContext
 
 };
 
+int
+GNUNET_SPEEDUP_start_ (const struct GNUNET_CONFIGURATION_Handle *cfg);
+
+int
+GNUNET_SPEEDUP_stop_ (void);
 
 /**
  * Initial task called by the scheduler for each
@@ -81,6 +86,7 @@ static void
 program_main (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct CommandContext *cc = cls;
+  GNUNET_SPEEDUP_start_(cc->cfg);
 
   GNUNET_RESOLVER_connect (cc->cfg);
   cc->task (cc->task_cls, cc->args, cc->cfgfile, cc->cfg);
@@ -222,9 +228,8 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
   lpfx = GNUNET_strdup (binaryName);
   if (NULL != (spc = strstr (lpfx, " ")))
     *spc = '\0';
-  if ((-1 ==
-       (ret =
-        GNUNET_GETOPT_run (binaryName, allopts, (unsigned int) argc, argv))) ||
+  ret = GNUNET_GETOPT_run (binaryName, allopts, (unsigned int) argc, argv);
+  if ((GNUNET_OK > ret) ||
       (GNUNET_OK != GNUNET_log_setup (lpfx, loglev, logfile)))
   {
     GNUNET_CONFIGURATION_destroy (cfg);
@@ -233,7 +238,7 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
     GNUNET_free_non_null (logfile);
     GNUNET_free (allopts);
     GNUNET_free (lpfx);
-    return GNUNET_SYSERR;
+    return (ret == GNUNET_SYSERR) ? GNUNET_SYSERR : GNUNET_OK;
   }
   (void) GNUNET_CONFIGURATION_load (cfg, cc.cfgfile);
   GNUNET_free (allopts);
@@ -260,6 +265,7 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
           cc.task (cc.task_cls, cc.args, cc.cfgfile, cc.cfg);
   }
   /* clean up */
+  GNUNET_SPEEDUP_stop_ ();
   GNUNET_CONFIGURATION_destroy (cfg);
   GNUNET_free_non_null (cc.cfgfile);
   GNUNET_free_non_null (loglev);