gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r22578 - in gnunet/src: arm chat core fs hostlist include n


From: gnunet
Subject: [GNUnet-SVN] r22578 - in gnunet/src: arm chat core fs hostlist include nat statistics testbed testing testing_old transport util
Date: Mon, 9 Jul 2012 21:04:19 +0200

Author: grothoff
Date: 2012-07-09 21:04:19 +0200 (Mon, 09 Jul 2012)
New Revision: 22578

Modified:
   gnunet/src/arm/arm_api.c
   gnunet/src/arm/do_start_process.c
   gnunet/src/arm/gnunet-arm.c
   gnunet/src/arm/gnunet-service-arm.c
   gnunet/src/arm/test_arm_api.c
   gnunet/src/arm/test_exponential_backoff.c
   gnunet/src/arm/test_gnunet_service_manager.c
   gnunet/src/chat/test_chat.c
   gnunet/src/chat/test_chat_private.c
   gnunet/src/core/test_core_api.c
   gnunet/src/core/test_core_api_reliability.c
   gnunet/src/core/test_core_api_start_only.c
   gnunet/src/core/test_core_quota_compliance.c
   gnunet/src/fs/gnunet-auto-share.c
   gnunet/src/hostlist/test_gnunet_daemon_hostlist.c
   gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c
   gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
   gnunet/src/include/gnunet_arm_service.h
   gnunet/src/include/gnunet_os_lib.h
   gnunet/src/nat/nat.c
   gnunet/src/nat/nat_mini.c
   gnunet/src/nat/test_nat_test.c
   gnunet/src/statistics/test_statistics_api.c
   gnunet/src/statistics/test_statistics_api_loop.c
   gnunet/src/statistics/test_statistics_api_watch.c
   gnunet/src/statistics/test_statistics_api_watch_zero_value.c
   gnunet/src/testbed/testbed_api_hosts.c
   gnunet/src/testing/testing.c
   gnunet/src/testing_old/test_testing_large_topology.c
   gnunet/src/testing_old/test_testing_topology.c
   gnunet/src/testing_old/testing.c
   gnunet/src/testing_old/testing_group.c
   gnunet/src/transport/gnunet-transport-certificate-creation.c
   gnunet/src/transport/gnunet-transport.c
   gnunet/src/transport/plugin_transport_http_server.c
   gnunet/src/util/crypto_random.c
   gnunet/src/util/gnunet-uri.c
   gnunet/src/util/helper.c
   gnunet/src/util/os_priority.c
   gnunet/src/util/test_common_logging_runtime_loglevels.c
   gnunet/src/util/test_os_start_process.c
   gnunet/src/util/test_resolver_api.c
Log:
-LRN: Another take on std descriptor inheritance

Now descriptors are not inherited by default, you have to pass
a set of flags to make it so. When pipes are given, flags have
no effect.
gnunet-arm now has two options to block stdout and stderr from being
passed to gnunet-service-arm



Modified: gnunet/src/arm/arm_api.c
===================================================================
--- gnunet/src/arm/arm_api.c    2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/arm_api.c    2012-07-09 19:04:19 UTC (rev 22578)
@@ -295,6 +295,11 @@
    */
   uint16_t type;
 
+  /**
+   * Flags for passing std descriptors to ARM (when starting ARM).
+   */
+  enum GNUNET_OS_InheritStdioFlags std_inheritance;
+
 };
 
 #include "do_start_process.c"
@@ -381,14 +386,14 @@
   {
     /* Means we are ONLY running locally */
     /* we're clearly running a test, don't daemonize */
-    proc = do_start_process (GNUNET_NO,
+    proc = do_start_process (GNUNET_NO, pos->std_inheritance,
                             NULL, loprefix, binary, "-c", config,
                             /* no daemonization! */
                             lopostfix, NULL);
   }
   else
   {
-    proc = do_start_process (GNUNET_NO,
+    proc = do_start_process (GNUNET_NO, pos->std_inheritance,
                             NULL, loprefix, binary, "-c", config,
                             "-d", lopostfix, NULL);
   }
@@ -522,6 +527,7 @@
  *
  * @param h handle to ARM
  * @param service_name name of the service
+ * @param std_inheritance inheritance of std streams
  * @param timeout how long to wait before failing for good
  * @param cb callback to invoke when service is ready
  * @param cb_cls closure for callback
@@ -529,6 +535,7 @@
 void
 GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h,
                          const char *service_name,
+                          enum GNUNET_OS_InheritStdioFlags std_inheritance,
                          struct GNUNET_TIME_Relative timeout,
                          GNUNET_ARM_Callback cb, void *cb_cls)
 {
@@ -547,12 +554,13 @@
     sctx->callback = cb;
     sctx->cls = cb_cls;
     sctx->timeout = GNUNET_TIME_relative_to_absolute (timeout);
+    sctx->std_inheritance = std_inheritance;
     memcpy (&sctx[1], service_name, slen);
     GNUNET_CLIENT_service_test ("arm", h->cfg, timeout, &arm_service_report,
                                sctx);
     return;
   }
-  if (h->client == NULL)
+  if (NULL == h->client)
   {
     client = GNUNET_CLIENT_connect ("arm", h->cfg);
     if (client == NULL)

Modified: gnunet/src/arm/do_start_process.c
===================================================================
--- gnunet/src/arm/do_start_process.c   2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/do_start_process.c   2012-07-09 19:04:19 UTC (rev 22578)
@@ -8,13 +8,14 @@
  * with spaces to the new process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param lsocks array of listen sockets to dup starting at fd3 
(systemd-style), or NULL
  * @param first_arg first argument for argv (may be an empty string)
  * @param ... more arguments, NULL terminated
  * @return handle of the started process, NULL on error
  */
 static struct GNUNET_OS_Process *
-do_start_process (int pipe_control,
+do_start_process (int pipe_control, unsigned int std_inheritance,
                  const SOCKTYPE * lsocks, const char *first_arg, ...)
 {
   va_list ap;
@@ -97,7 +98,7 @@
 /* *INDENT-ON* */
   va_end (ap);
   argv[argv_size] = NULL;
-  proc = GNUNET_OS_start_process_v (pipe_control, lsocks, argv[0], argv);
+  proc = GNUNET_OS_start_process_v (pipe_control, std_inheritance, lsocks, 
argv[0], argv);
   while (argv_size > 0)
     GNUNET_free (argv[--argv_size]);
   GNUNET_free (argv);

Modified: gnunet/src/arm/gnunet-arm.c
===================================================================
--- gnunet/src/arm/gnunet-arm.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/gnunet-arm.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -127,6 +127,16 @@
 
 
 /**
+ * Do we want to give our stdout to gnunet-service-arm?
+ */
+static unsigned int no_stdout = 0;
+
+/**
+ * Do we want to give our stderr to gnunet-service-arm?
+ */
+static unsigned int no_stderr = 0;
+
+/**
  * Main continuation-passing-style loop.  Runs the various
  * jobs that we've been asked to do in order.
  *
@@ -323,6 +333,8 @@
          if (start)
            {
              GNUNET_ARM_start_service (h, "arm",
+                                        (no_stdout ? 0 : 
GNUNET_OS_INHERIT_STD_OUT) |
+                                        (no_stderr ? 0 : 
GNUNET_OS_INHERIT_STD_ERR),
                                        (0 ==
                                         timeout.rel_value) ? START_TIMEOUT :
                                        timeout, &confirm_cb, "arm");
@@ -333,6 +345,8 @@
          if (init != NULL)
            {
              GNUNET_ARM_start_service (h, init,
+                                        (no_stdout ? 0 : 
GNUNET_OS_INHERIT_STD_OUT) |
+                                        (no_stderr ? 0 : 
GNUNET_OS_INHERIT_STD_ERR),
                                        (0 ==
                                         timeout.rel_value) ? START_TIMEOUT :
                                        timeout, &confirm_cb, init);
@@ -422,6 +436,10 @@
      GNUNET_YES, &GNUNET_GETOPT_set_ulong, &temp_timeout_ms},
     {'I', "info", NULL, gettext_noop ("List currently running services"),
      GNUNET_NO, &GNUNET_GETOPT_set_one, &list},
+    {'O', "no-stdout", NULL, gettext_noop ("Don't let gnunet-service-arm 
inherit standard output"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &no_stdout},
+    {'E', "no-stderr", NULL, gettext_noop ("Don't let gnunet-service-arm 
inherit standard error"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &no_stderr},
     GNUNET_GETOPT_OPTION_END
   };
 

Modified: gnunet/src/arm/gnunet-service-arm.c
===================================================================
--- gnunet/src/arm/gnunet-service-arm.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/gnunet-service-arm.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -320,12 +320,12 @@
   GNUNET_assert (NULL == sl->proc);
   if (GNUNET_YES == use_debug)
     sl->proc =
-      do_start_process (sl->pipe_control,
+      do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
                        lsocks, loprefix, sl->binary, "-c", sl->config, "-L",
                        "DEBUG", options, NULL);
   else
     sl->proc =
-      do_start_process (sl->pipe_control,
+      do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
                        lsocks, loprefix, sl->binary, "-c", sl->config,
                        options, NULL);
   if (sl->proc == NULL)

Modified: gnunet/src/arm/test_arm_api.c
===================================================================
--- gnunet/src/arm/test_arm_api.c       2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/arm/test_arm_api.c       2012-07-09 19:04:19 UTC (rev 22578)
@@ -109,7 +109,7 @@
       GNUNET_ARM_stop_service (arm, "arm", TIMEOUT, &arm_stopped, NULL);
 #endif
     }
-  GNUNET_ARM_start_service (arm, "resolver", START_TIMEOUT, &resolver_notify,
+  GNUNET_ARM_start_service (arm, "resolver", 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, START_TIMEOUT, &resolver_notify,
                            NULL);
 }
 
@@ -121,7 +121,7 @@
   cfg = c;
   arm = GNUNET_ARM_connect (cfg, NULL);
 #if START_ARM
-  GNUNET_ARM_start_service (arm, "arm", START_TIMEOUT, &arm_notify, NULL);
+  GNUNET_ARM_start_service (arm, "arm", GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
START_TIMEOUT, &arm_notify, NULL);
 #else
   arm_notify (NULL, GNUNET_YES);
 #endif

Modified: gnunet/src/arm/test_exponential_backoff.c
===================================================================
--- gnunet/src/arm/test_exponential_backoff.c   2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/arm/test_exponential_backoff.c   2012-07-09 19:04:19 UTC (rev 
22578)
@@ -270,7 +270,7 @@
 arm_notify (void *cls, enum GNUNET_ARM_ProcessStatus status)
 {
   GNUNET_assert (status == GNUNET_ARM_PROCESS_STARTING);
-  GNUNET_ARM_start_service (arm, "do-nothing", TIMEOUT, &do_nothing_notify,
+  GNUNET_ARM_start_service (arm, "do-nothing", 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, TIMEOUT, &do_nothing_notify,
                            NULL);
 }
 
@@ -365,7 +365,7 @@
 
   arm = GNUNET_ARM_connect (cfg, NULL);
 #if START_ARM
-  GNUNET_ARM_start_service (arm, "arm", GNUNET_TIME_UNIT_ZERO, &arm_notify,
+  GNUNET_ARM_start_service (arm, "arm", GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
GNUNET_TIME_UNIT_ZERO, &arm_notify,
                            NULL);
 #else
   arm_do_nothing (NULL, GNUNET_YES);

Modified: gnunet/src/arm/test_gnunet_service_manager.c
===================================================================
--- gnunet/src/arm/test_gnunet_service_manager.c        2012-07-09 18:48:44 UTC 
(rev 22577)
+++ gnunet/src/arm/test_gnunet_service_manager.c        2012-07-09 19:04:19 UTC 
(rev 22578)
@@ -124,7 +124,7 @@
   cfg = c;
 #if START_ARM
   arm = GNUNET_ARM_connect (cfg, NULL);
-  GNUNET_ARM_start_service (arm, "arm", START_TIMEOUT, &arm_notify, NULL);
+  GNUNET_ARM_start_service (arm, "arm", GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
START_TIMEOUT, &arm_notify, NULL);
 #else
   arm_notify (NULL, GNUNET_YES);
 #endif

Modified: gnunet/src/chat/test_chat.c
===================================================================
--- gnunet/src/chat/test_chat.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/chat/test_chat.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -119,7 +119,7 @@
   p->cfg = GNUNET_CONFIGURATION_create ();
 #if START_ARM
   p->arm_proc =
-      GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+      GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
 #if VERBOSE
                                "-L", "DEBUG",

Modified: gnunet/src/chat/test_chat_private.c
===================================================================
--- gnunet/src/chat/test_chat_private.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/chat/test_chat_private.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -133,7 +133,7 @@
   p->cfg = GNUNET_CONFIGURATION_create ();
 #if START_ARM
   p->arm_proc =
-      GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+      GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
 #if VERBOSE
                                "-L", "DEBUG",

Modified: gnunet/src/core/test_core_api.c
===================================================================
--- gnunet/src/core/test_core_api.c     2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/core/test_core_api.c     2012-07-09 19:04:19 UTC (rev 22578)
@@ -319,7 +319,7 @@
   p->cfg = GNUNET_CONFIGURATION_create ();
 #if START_ARM
   p->arm_proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
 #if VERBOSE
                                "-L", "DEBUG",

Modified: gnunet/src/core/test_core_api_reliability.c
===================================================================
--- gnunet/src/core/test_core_api_reliability.c 2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/core/test_core_api_reliability.c 2012-07-09 19:04:19 UTC (rev 
22578)
@@ -429,7 +429,7 @@
   p->cfg = GNUNET_CONFIGURATION_create ();
 #if START_ARM
   p->arm_proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
                                "-c", cfgname, NULL);
 #endif

Modified: gnunet/src/core/test_core_api_start_only.c
===================================================================
--- gnunet/src/core/test_core_api_start_only.c  2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/core/test_core_api_start_only.c  2012-07-09 19:04:19 UTC (rev 
22578)
@@ -139,7 +139,7 @@
 {
   p->cfg = GNUNET_CONFIGURATION_create ();
   p->arm_proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
                                "-c", cfgname, NULL);
   GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));

Modified: gnunet/src/core/test_core_quota_compliance.c
===================================================================
--- gnunet/src/core/test_core_quota_compliance.c        2012-07-09 18:48:44 UTC 
(rev 22577)
+++ gnunet/src/core/test_core_quota_compliance.c        2012-07-09 19:04:19 UTC 
(rev 22578)
@@ -573,7 +573,7 @@
   p->cfg = GNUNET_CONFIGURATION_create ();
 #if START_ARM
   p->arm_proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
                                "-c", cfgname, NULL);
 #endif

Modified: gnunet/src/fs/gnunet-auto-share.c
===================================================================
--- gnunet/src/fs/gnunet-auto-share.c   2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/fs/gnunet-auto-share.c   2012-07-09 19:04:19 UTC (rev 22578)
@@ -488,7 +488,7 @@
              _("Publishing `%s'\n"),
              wi->filename);
   publish_proc = GNUNET_OS_start_process_vap (GNUNET_YES,
-                                             NULL, NULL,
+                                              0, NULL, NULL,
                                              "gnunet-publish",
                                              argv);
   if (NULL == publish_proc)

Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist.c   2012-07-09 18:48:44 UTC 
(rev 22577)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist.c   2012-07-09 19:04:19 UTC 
(rev 22578)
@@ -133,7 +133,7 @@
 {
   p->cfg = GNUNET_CONFIGURATION_create ();
   p->arm_proc =
-      GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+      GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
                                "-c", cfgname, NULL);
   GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));

Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c  2012-07-09 
18:48:44 UTC (rev 22577)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c  2012-07-09 
19:04:19 UTC (rev 22578)
@@ -385,7 +385,7 @@
 
   p->cfg = GNUNET_CONFIGURATION_create ();
   p->arm_proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
                                "-c", cfgname, NULL);
   GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
@@ -416,7 +416,7 @@
 {
   p->cfg = GNUNET_CONFIGURATION_create ();
   p->arm_proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
                                "-c", cfgname, NULL);
   GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));

Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c 2012-07-09 
18:48:44 UTC (rev 22577)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c 2012-07-09 
19:04:19 UTC (rev 22578)
@@ -144,7 +144,7 @@
   p->cfg = GNUNET_CONFIGURATION_create ();
 #if START_ARM
   p->arm_proc =
-      GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
+      GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm",
 #if VERBOSE
                                "-L", "DEBUG",

Modified: gnunet/src/include/gnunet_arm_service.h
===================================================================
--- gnunet/src/include/gnunet_arm_service.h     2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/include/gnunet_arm_service.h     2012-07-09 19:04:19 UTC (rev 
22578)
@@ -37,6 +37,7 @@
 
 #include "gnunet_configuration_lib.h"
 #include "gnunet_scheduler_lib.h"
+#include "gnunet_os_lib.h"
 #include "gnunet_time_lib.h"
 
 /**
@@ -169,12 +170,14 @@
  *
  * @param h handle to ARM
  * @param service_name name of the service
+ * @param std_inheritance flags controlling std descriptors inheritance
  * @param timeout how long to wait before failing for good
  * @param cb callback to invoke when service is ready
  * @param cb_cls closure for callback
  */
 void
 GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h, const char 
*service_name,
+                          enum GNUNET_OS_InheritStdioFlags std_inheritance,
                           struct GNUNET_TIME_Relative timeout,
                           GNUNET_ARM_Callback cb, void *cb_cls);
 

Modified: gnunet/src/include/gnunet_os_lib.h
===================================================================
--- gnunet/src/include/gnunet_os_lib.h  2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/include/gnunet_os_lib.h  2012-07-09 19:04:19 UTC (rev 22578)
@@ -54,7 +54,52 @@
 #include "gnunet_configuration_lib.h"
 #include "gnunet_scheduler_lib.h"
 
+
 /**
+ * Flags that determine which of the standard streams
+ * should be inherited by the child process.
+ */
+enum GNUNET_OS_InheritStdioFlags
+{
+
+  /**
+   * No standard streams should be inherited.
+   */
+  GNUNET_OS_INHERIT_STD_NONE = 0,
+
+  /**
+   * When this flag is set, the child process will
+   * inherit stdin of the parent.
+   */
+  GNUNET_OS_INHERIT_STD_IN = 1,
+  
+  /**
+   * When this flag is set, the child process will
+   * inherit stdout of the parent.
+   */
+  GNUNET_OS_INHERIT_STD_OUT = 2,
+
+  /**
+   * When this flag is set, the child process will
+   * inherit stderr of the parent.
+   */
+  GNUNET_OS_INHERIT_STD_ERR = 4,
+
+  /**
+   * When these flags are set, the child process will
+   * inherit stdout and stderr of the parent.
+   */
+  GNUNET_OS_INHERIT_STD_OUT_AND_ERR = 6,
+
+  /**
+   * Use this option to have all of the standard streams
+   * (stdin, stdout and stderror) be inherited.
+   */
+  GNUNET_OS_INHERIT_STD_ALL = 7
+};
+
+
+/**
  * Process information (OS-dependent)
  */
 struct GNUNET_OS_Process;
@@ -257,6 +302,7 @@
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -265,6 +311,7 @@
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_vap (int pipe_control,
+                             enum GNUNET_OS_InheritStdioFlags std_inheritance,
                             struct GNUNET_DISK_PipeHandle *pipe_stdin,
                             struct GNUNET_DISK_PipeHandle *pipe_stdout,
                             const char *filename, 
@@ -275,6 +322,7 @@
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -283,6 +331,7 @@
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process (int pipe_control,
+                         enum GNUNET_OS_InheritStdioFlags std_inheritance,
                         struct GNUNET_DISK_PipeHandle *pipe_stdin,
                          struct GNUNET_DISK_PipeHandle *pipe_stdout,
                          const char *filename, ...);
@@ -292,6 +341,7 @@
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -300,6 +350,7 @@
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_va (int pipe_control,
+                            enum GNUNET_OS_InheritStdioFlags std_inheritance,
                            struct GNUNET_DISK_PipeHandle *pipe_stdin,
                             struct GNUNET_DISK_PipeHandle *pipe_stdout,
                             const char *filename, va_list va);
@@ -308,6 +359,7 @@
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param lsocks array of listen sockets to dup systemd-style (or NULL);
  *         must be NULL on platforms where dup is not supported
  * @param filename name of the binary
@@ -317,6 +369,7 @@
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_v (int pipe_control,
+                           enum GNUNET_OS_InheritStdioFlags std_inheritance,
                           const SOCKTYPE *lsocks, 
                           const char *filename,
                            char *const argv[]);

Modified: gnunet/src/nat/nat.c
===================================================================
--- gnunet/src/nat/nat.c        2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/nat/nat.c        2012-07-09 19:04:19 UTC (rev 22578)
@@ -835,7 +835,7 @@
          "gnunet-helper-nat-server", h->internal_address);
     /* Start the server process */
     h->server_proc =
-        GNUNET_OS_start_process (GNUNET_NO, NULL, h->server_stdout,
+        GNUNET_OS_start_process (GNUNET_NO, 0, NULL, h->server_stdout,
                                  "gnunet-helper-nat-server",
                                  "gnunet-helper-nat-server",
                                  h->internal_address, NULL);
@@ -1332,8 +1332,8 @@
        _("Running gnunet-helper-nat-client %s %s %u\n"), h->internal_address,
        inet4, (unsigned int) h->adv_port);
   proc =
-      GNUNET_OS_start_process (GNUNET_NO,
-                              NULL, NULL, "gnunet-helper-nat-client",
+      GNUNET_OS_start_process (GNUNET_NO, 0, NULL, NULL,
+                               "gnunet-helper-nat-client",
                                "gnunet-helper-nat-client", h->internal_address,
                                inet4, port_as_string, NULL);
   if (NULL == proc)

Modified: gnunet/src/nat/nat_mini.c
===================================================================
--- gnunet/src/nat/nat_mini.c   2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/nat/nat_mini.c   2012-07-09 19:04:19 UTC (rev 22578)
@@ -176,7 +176,7 @@
     return NULL;
   }
   eh->eip =
-    GNUNET_OS_start_process (GNUNET_NO, NULL, eh->opipe, "external-ip", 
"external-ip",
+    GNUNET_OS_start_process (GNUNET_NO, 0, NULL, eh->opipe, "external-ip", 
"external-ip",
                                NULL);
   if (NULL == eh->eip)
   {

Modified: gnunet/src/nat/test_nat_test.c
===================================================================
--- gnunet/src/nat/test_nat_test.c      2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/nat/test_nat_test.c      2012-07-09 19:04:19 UTC (rev 22578)
@@ -102,7 +102,7 @@
   }
 
   gns =
-      GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-nat-server",
+      GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-nat-server",
                                "gnunet-nat-server",
                                "-c", "test_nat_test_data.conf", "12345", NULL);
   GNUNET_assert (NULL != gns);

Modified: gnunet/src/statistics/test_statistics_api.c
===================================================================
--- gnunet/src/statistics/test_statistics_api.c 2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/statistics/test_statistics_api.c 2012-07-09 19:04:19 UTC (rev 
22578)
@@ -139,7 +139,7 @@
   struct GNUNET_OS_Process *proc;
 
   proc =
-      GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-service-statistics",
+      GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-statistics",
                                "gnunet-service-statistics",
                                "-c", "test_statistics_api_data.conf", NULL);
 #endif
@@ -162,7 +162,7 @@
 #if START_SERVICE
   /* restart to check persistence! */
   proc =
-      GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-service-statistics",
+      GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-statistics",
                                "gnunet-service-statistics",
                                "-c", "test_statistics_api_data.conf", NULL);
 #endif

Modified: gnunet/src/statistics/test_statistics_api_loop.c
===================================================================
--- gnunet/src/statistics/test_statistics_api_loop.c    2012-07-09 18:48:44 UTC 
(rev 22577)
+++ gnunet/src/statistics/test_statistics_api_loop.c    2012-07-09 19:04:19 UTC 
(rev 22578)
@@ -97,7 +97,7 @@
   struct GNUNET_OS_Process *proc;
 
   proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-service-statistics",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-statistics",
                                "gnunet-service-statistics",
 #if DEBUG_STATISTICS
                                "-L", "DEBUG",

Modified: gnunet/src/statistics/test_statistics_api_watch.c
===================================================================
--- gnunet/src/statistics/test_statistics_api_watch.c   2012-07-09 18:48:44 UTC 
(rev 22577)
+++ gnunet/src/statistics/test_statistics_api_watch.c   2012-07-09 19:04:19 UTC 
(rev 22578)
@@ -127,7 +127,7 @@
   struct GNUNET_OS_Process *proc;
 
   proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-service-statistics",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-statistics",
                                "gnunet-service-statistics",
 #if VERBOSE
                                "-L", "DEBUG",

Modified: gnunet/src/statistics/test_statistics_api_watch_zero_value.c
===================================================================
--- gnunet/src/statistics/test_statistics_api_watch_zero_value.c        
2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/statistics/test_statistics_api_watch_zero_value.c        
2012-07-09 19:04:19 UTC (rev 22578)
@@ -160,7 +160,7 @@
   struct GNUNET_OS_Process *proc;
 
   proc =
-    GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-service-statistics",
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "gnunet-service-statistics",
                                "gnunet-service-statistics",
 #if VERBOSE
                                "-L", "DEBUG",

Modified: gnunet/src/testbed/testbed_api_hosts.c
===================================================================
--- gnunet/src/testbed/testbed_api_hosts.c      2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/testbed/testbed_api_hosts.c      2012-07-09 19:04:19 UTC (rev 
22578)
@@ -385,6 +385,8 @@
   if ((NULL == host) || (0 == host->id))
   {
     h->process = GNUNET_OS_start_process_vap (GNUNET_YES,
+                                              GNUNET_OS_INHERIT_STD_OUT |
+                                              GNUNET_OS_INHERIT_STD_ERR, 
                                              h->cpipe, NULL,
                                              "gnunet-service-testbed", 
                                              binary_argv);
@@ -414,6 +416,8 @@
     remote_args[argp++] = NULL;
     GNUNET_assert (argp == argc + 6 + 1);
     h->process = GNUNET_OS_start_process_vap (GNUNET_YES,
+                                              GNUNET_OS_INHERIT_STD_OUT |
+                                              GNUNET_OS_INHERIT_STD_ERR, 
                                              h->cpipe, NULL,
                                              "ssh", 
                                              remote_args);

Modified: gnunet/src/testing/testing.c
===================================================================
--- gnunet/src/testing/testing.c        2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/testing/testing.c        2012-07-09 19:04:19 UTC (rev 22578)
@@ -905,7 +905,7 @@
     return GNUNET_SYSERR;
   }
   GNUNET_assert (NULL != peer->cfgfile);
-  peer->main_process = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL,
+  peer->main_process = GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL,
                                                 peer->main_binary,
                                                 peer->main_binary,
                                                 "-c",

Modified: gnunet/src/testing_old/test_testing_large_topology.c
===================================================================
--- gnunet/src/testing_old/test_testing_large_topology.c        2012-07-09 
18:48:44 UTC (rev 22577)
+++ gnunet/src/testing_old/test_testing_large_topology.c        2012-07-09 
19:04:19 UTC (rev 22578)
@@ -189,7 +189,7 @@
   GNUNET_asprintf (&peer_number, "%llu", num_peers);
   GNUNET_asprintf (&connect_number, "%llu", expected_connections);
   mem_process =
-      GNUNET_OS_start_process (NULL, NULL, "./memsize.pl", "memsize.pl",
+      GNUNET_OS_start_process (NULL, NULL, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
"./memsize.pl", "memsize.pl",
                                "totals.txt", peer_number, connect_number, 
NULL);
   GNUNET_OS_process_wait (mem_process);
   GNUNET_OS_process_destroy (mem_process);

Modified: gnunet/src/testing_old/test_testing_topology.c
===================================================================
--- gnunet/src/testing_old/test_testing_topology.c      2012-07-09 18:48:44 UTC 
(rev 22577)
+++ gnunet/src/testing_old/test_testing_topology.c      2012-07-09 19:04:19 UTC 
(rev 22578)
@@ -194,7 +194,7 @@
   GNUNET_asprintf (&peer_number, "%llu", num_peers);
   GNUNET_asprintf (&connect_number, "%llu", expected_connections);
   mem_process =
-      GNUNET_OS_start_process (NULL, NULL, "./memsize.pl", "memsize.pl",
+      GNUNET_OS_start_process (NULL, NULL, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
"./memsize.pl", "memsize.pl",
                                "totals.txt", peer_number, connect_number, 
NULL);
   GNUNET_OS_process_wait (mem_process);
   GNUNET_OS_process_destroy (mem_process);

Modified: gnunet/src/testing_old/testing.c
===================================================================
--- gnunet/src/testing_old/testing.c    2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/testing_old/testing.c    2012-07-09 19:04:19 UTC (rev 22578)
@@ -245,7 +245,7 @@
                     "gnunet-peerinfo", "gnunet-peerinfo", "-c", d->cfgfile,
                     "-sq");
         d->proc_arm_peerinfo =
-           GNUNET_OS_start_process (GNUNET_YES, NULL, d->pipe_stdout, 
"gnunet-peerinfo",
+           GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, d->pipe_stdout, "gnunet-peerinfo",
                                      "gnunet-peerinfo", "-c", d->cfgfile, 
"-sq",
                                      NULL);
         GNUNET_DISK_pipe_close_end (d->pipe_stdout, 
GNUNET_DISK_PIPE_END_WRITE);
@@ -263,7 +263,7 @@
                     d->cfgfile, "-sq");
         if (d->ssh_port_str == NULL)
         {
-          d->proc_arm_peerinfo = GNUNET_OS_start_process (GNUNET_NO, NULL, 
d->pipe_stdout, "ssh", "ssh",
+          d->proc_arm_peerinfo = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, d->pipe_stdout, "ssh", "ssh",
                                              "-q",
                                              dst, "gnunet-peerinfo", "-c",
                                              d->cfgfile, "-sq", NULL);
@@ -271,7 +271,7 @@
         else
         {
           d->proc_arm_peerinfo =
-             GNUNET_OS_start_process (GNUNET_NO, NULL, d->pipe_stdout, "ssh", 
"ssh", "-p",
+             GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, d->pipe_stdout, "ssh", "ssh", "-p",
                                        d->ssh_port_str,
                                        "-q",
                                        dst, "gnunet-peerinfo", "-c", 
d->cfgfile,
@@ -414,7 +414,7 @@
                   "gnunet-arm", "gnunet-arm", "-c", d->cfgfile, 
                   "-s");
       d->proc_arm_start =
-         GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-arm", 
"gnunet-arm", "-c",
+         GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm", "-c",
                                    d->cfgfile,
                                    "-s", "-q", "-T",
                                    GNUNET_TIME_relative_to_string
@@ -434,7 +434,7 @@
                   "-s", "-q");
       if (d->ssh_port_str == NULL)
       {
-        d->proc_arm_start = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, 
"ssh", "ssh",
+        d->proc_arm_start = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
                                            "-q",
                                            dst, "gnunet-arm",
                                            "-c", d->cfgfile, "-s", "-q", "-T",
@@ -446,7 +446,7 @@
       {
 
         d->proc_arm_start =
-           GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", "ssh", "-p",
+           GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh", "-p",
                                      d->ssh_port_str,
                                      "-q",
                                      dst, "gnunet-arm",
@@ -892,7 +892,7 @@
     else
       arg = GNUNET_strdup (d->hostname);
 
-    d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, 
"ssh", "ssh",
+    d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
                                        "-q",
                                        arg, "gnunet-arm",
                                        "-c", d->cfgfile, "-i", service, "-q",
@@ -908,7 +908,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Starting gnunet-arm with config `%s' locally.\n", d->cfgfile);
-    d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-arm", "gnunet-arm",
+    d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
                                        "-c", d->cfgfile, "-i", service, "-q",
                                        "-T",
                                        GNUNET_TIME_relative_to_string 
(timeout),
@@ -960,7 +960,7 @@
     else
       arg = GNUNET_strdup (d->hostname);
 
-    d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, 
"ssh", "ssh",
+    d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
                                        "-q",
                                        arg, "gnunet-arm",
                                        "-c", d->cfgfile, "-i", service, "-q",
@@ -977,7 +977,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Starting gnunet-arm with config `%s' locally.\n", d->cfgfile);
-    d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-arm", "gnunet-arm",
+    d->proc_arm_srv_start = GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
                                        "-c", d->cfgfile, "-i", service, "-q",
                                        "-T",
                                        GNUNET_TIME_relative_to_string 
(timeout),
@@ -1184,7 +1184,7 @@
       GNUNET_free (baseservicehome);
       if (ret->ssh_port_str == NULL)
       {
-        ret->proc_arm_copying = GNUNET_OS_start_process (GNUNET_NO, NULL, 
NULL, "scp", "scp", "-r",
+        ret->proc_arm_copying = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "scp", "scp", "-r",
                                              "-q",
                                              servicehome, arg, NULL);
         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1194,7 +1194,7 @@
       else
       {
         ret->proc_arm_copying =
-           GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "scp", "scp", "-r", 
"-P",
+           GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "scp", "scp", "-r", "-P",
                                      ret->ssh_port_str,
                                      "-q",
                                      servicehome, arg, NULL);
@@ -1304,7 +1304,7 @@
     else
       arg = GNUNET_strdup (d->hostname);
 
-    d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", 
"ssh",
+    d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
                                        "-q",
                                        arg, "gnunet-arm",
                                        "-c", d->cfgfile, "-e", "-r", NULL);
@@ -1316,7 +1316,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Stopping gnunet-arm with config `%s' locally.\n", d->cfgfile);
-    d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-arm", "gnunet-arm",
+    d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
                                        "-c", d->cfgfile, "-e", "-r", NULL);
   }
 
@@ -1377,7 +1377,7 @@
     else
       arg = GNUNET_strdup (d->hostname);
     
-    d->proc_arm_srv_stop = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, 
"ssh", "ssh",
+    d->proc_arm_srv_stop = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
                                        "-q",
                                        arg, "gnunet-arm",
                                        "-c", d->cfgfile, "-k", service, "-q",
@@ -1393,7 +1393,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Stopping gnunet-arm with config `%s' locally.\n", d->cfgfile);
-    d->proc_arm_srv_stop = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-arm", "gnunet-arm",
+    d->proc_arm_srv_stop = GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
                                        "-c", d->cfgfile, "-k", service, "-q",
                                        "-T",
                                        GNUNET_TIME_relative_to_string 
(timeout),
@@ -1546,7 +1546,7 @@
     else
       arg = GNUNET_strdup (d->hostname);
 
-    d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", 
"ssh",
+    d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "ssh", "ssh",
                                        "-q",
                                        arg, "gnunet-arm",
                                        "-c", d->cfgfile, "-e", "-q", "-T",
@@ -1562,7 +1562,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Stopping gnunet-arm with config `%s' locally.\n", d->cfgfile);
-    d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, 
"gnunet-arm", "gnunet-arm",
+    d->proc_arm_stop = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-arm", "gnunet-arm",
                                        "-c", d->cfgfile, "-e", "-q", "-T",
                                        GNUNET_TIME_relative_to_string 
(timeout),
                                        del_arg, NULL);
@@ -1626,7 +1626,7 @@
     GNUNET_asprintf (&arg, "address@hidden:%s", d->username, d->hostname, 
d->cfgfile);
   else
     GNUNET_asprintf (&arg, "%s:%s", d->hostname, d->cfgfile);
-  d->proc_arm_copying = GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "scp", 
"scp",
+  d->proc_arm_copying = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "scp", "scp",
                                      "-q",
                                      d->cfgfile, arg, NULL);
   GNUNET_free (arg);

Modified: gnunet/src/testing_old/testing_group.c
===================================================================
--- gnunet/src/testing_old/testing_group.c      2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/testing_old/testing_group.c      2012-07-09 19:04:19 UTC (rev 
22578)
@@ -2904,7 +2904,7 @@
                          pg->peers[pg_iter].daemon->hostname,
                          temp_service_path);
       procarr[pg_iter] =
-       GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "scp", "scp", mytemp, 
arg, NULL);
+       GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "scp", "scp", mytemp, arg, NULL);
       GNUNET_assert (procarr[pg_iter] != NULL);
       ret = GNUNET_OS_process_wait (procarr[pg_iter]);  /* FIXME: schedule 
this, throttle! */
       GNUNET_OS_process_destroy (procarr[pg_iter]);
@@ -3090,7 +3090,7 @@
                          pg->peers[pg_iter].daemon->hostname,
                          temp_service_path);
       procarr[pg_iter] =
-       GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "scp", "scp", mytemp, 
arg, NULL);
+       GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "scp", "scp", mytemp, arg, NULL);
       GNUNET_assert (procarr[pg_iter] != NULL);
       GNUNET_OS_process_wait (procarr[pg_iter]);        /* FIXME: add 
scheduled blacklist file copy that parallelizes file copying! */
 
@@ -5693,7 +5693,7 @@
 
   /* FIXME: Doesn't support ssh_port option! */
   helper->proc =
-    GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", "ssh", arg,
+    GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "ssh", "ssh", arg,
                                "peerStartHelper.pl", tempdir, NULL);
   GNUNET_assert (helper->proc != NULL);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "starting peers with cmd ssh %s %s 
%s\n",
@@ -5916,13 +5916,13 @@
     {
       GNUNET_asprintf (&ssh_port_str, "%d", pg->hosts[i].sshport);
       proc =
-       GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", "ssh", "-P", 
ssh_port_str,
+       GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "ssh", "ssh", "-P", ssh_port_str,
                                    "-q",
                                    arg, "mkdir -p", tmpdir, NULL);
     }
     else
       proc =
-       GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "ssh", "ssh", arg, 
"mkdir -p",
+       GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "ssh", "ssh", arg, "mkdir -p",
                                    tmpdir, NULL);
     GNUNET_assert (proc != NULL);
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -6141,7 +6141,7 @@
 
       /* FIXME: Doesn't support ssh_port option! */
       proc =
-       GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "rsync", "rsync", "-r",
+       GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "rsync", "rsync", "-r",
                                    newservicehome, arg, NULL);
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                   "copying directory with command rsync -r %s %s\n",

Modified: gnunet/src/transport/gnunet-transport-certificate-creation.c
===================================================================
--- gnunet/src/transport/gnunet-transport-certificate-creation.c        
2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/transport/gnunet-transport-certificate-creation.c        
2012-07-09 19:04:19 UTC (rev 22578)
@@ -57,7 +57,7 @@
   /* Create RSA Private Key */
   /* openssl genrsa -out $1 1024 2> /dev/null */
   openssl =
-      GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "openssl", "openssl", 
"genrsa",
+      GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "openssl", "openssl", "genrsa",
                                "-out", argv[1], "1024", NULL);
   if (openssl == NULL)
     return 2;
@@ -67,7 +67,7 @@
   /* Create a self-signed certificate in batch mode using rsa key */
   /* openssl req -batch -days 365 -out $2 -new -x509 -key $1 2> /dev/null */
   openssl =
-      GNUNET_OS_start_process (GNUNET_NO, NULL, NULL, "openssl", "openssl", 
"req",
+      GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL, "openssl", "openssl", "req",
                                "-batch", "-days", "365", "-out", argv[2],
                                "-new", "-x509", "-key", argv[1], NULL);
   if (openssl == NULL)

Modified: gnunet/src/transport/gnunet-transport.c
===================================================================
--- gnunet/src/transport/gnunet-transport.c     2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/transport/gnunet-transport.c     2012-07-09 19:04:19 UTC (rev 
22578)
@@ -284,7 +284,7 @@
       adv_port = bnd_port;
     if (NULL == resolver)
       resolver =
-         GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-service-resolver",
+         GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "gnunet-service-resolver",
                                    "gnunet-service-resolver", NULL);
     resolver_users++;
     GNUNET_RESOLVER_connect (cfg);

Modified: gnunet/src/transport/plugin_transport_http_server.c
===================================================================
--- gnunet/src/transport/plugin_transport_http_server.c 2012-07-09 18:48:44 UTC 
(rev 22577)
+++ gnunet/src/transport/plugin_transport_http_server.c 2012-07-09 19:04:19 UTC 
(rev 22578)
@@ -167,7 +167,7 @@
                 "No usable TLS certificate found, creating certificate\n");
     errno = 0;
     cert_creation =
-        GNUNET_OS_start_process (GNUNET_NO, NULL, NULL,
+        GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, 
NULL, NULL,
                                  "gnunet-transport-certificate-creation",
                                  "gnunet-transport-certificate-creation",
                                  key_file, cert_file, NULL);

Modified: gnunet/src/util/crypto_random.c
===================================================================
--- gnunet/src/util/crypto_random.c     2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/crypto_random.c     2012-07-09 19:04:19 UTC (rev 22578)
@@ -284,7 +284,7 @@
   LOG (GNUNET_ERROR_TYPE_INFO, _("Starting `%s' process to generate 
entropy\n"),
        "find");
   genproc =
-     GNUNET_OS_start_process (GNUNET_NO,
+     GNUNET_OS_start_process (GNUNET_NO, 0, 
                              NULL, NULL, "sh", "sh", "-c",
                              "exec find / -mount -type f -exec cp {} /dev/null 
\\; 2>/dev/null",
                              NULL);

Modified: gnunet/src/util/gnunet-uri.c
===================================================================
--- gnunet/src/util/gnunet-uri.c        2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/gnunet-uri.c        2012-07-09 19:04:19 UTC (rev 22578)
@@ -118,7 +118,7 @@
                                       GNUNET_DISK_pipe_handle (sigpipe,
                                                                
GNUNET_DISK_PIPE_END_READ),
                                       &maint_child_death, NULL);   
-  p = GNUNET_OS_start_process (GNUNET_NO,
+  p = GNUNET_OS_start_process (GNUNET_NO, 0,
                               NULL, NULL,
                               program,
                               program,

Modified: gnunet/src/util/helper.c
===================================================================
--- gnunet/src/util/helper.c    2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/helper.c    2012-07-09 19:04:19 UTC (rev 22578)
@@ -314,7 +314,7 @@
   h->fh_to_helper =
       GNUNET_DISK_pipe_handle (h->helper_in, GNUNET_DISK_PIPE_END_WRITE);
   h->helper_proc =
-      GNUNET_OS_start_process_vap (GNUNET_NO,
+      GNUNET_OS_start_process_vap (GNUNET_NO, 0, 
                                   h->helper_in, h->helper_out,
                                   h->binary_name,
                                   h->binary_argv);

Modified: gnunet/src/util/os_priority.c
===================================================================
--- gnunet/src/util/os_priority.c       2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/os_priority.c       2012-07-09 19:04:19 UTC (rev 22578)
@@ -768,6 +768,10 @@
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags controlling 
which
+ *        std handles of the parent are inherited by the child.
+ *        pipe_stdin and pipe_stdout take priority over std_inheritance
+ *        (when they are non-NULL).
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param lsocks array of listen sockets to dup systemd-style (or NULL);
@@ -778,6 +782,7 @@
  */
 static struct GNUNET_OS_Process *
 start_process (int pipe_control,
+               enum GNUNET_OS_InheritStdioFlags std_inheritance,
               struct GNUNET_DISK_PipeHandle *pipe_stdin,
               struct GNUNET_DISK_PipeHandle *pipe_stdout,
               const SOCKTYPE *lsocks,
@@ -870,6 +875,10 @@
       LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "dup2");
     GNUNET_break (0 == close (fd_stdout_write));
   }
+  else if (!(std_inheritance & GNUNET_OS_INHERIT_STD_OUT))
+  {
+    close (1);
+  }
   if (pipe_stdin != NULL)
   {
 
@@ -878,6 +887,14 @@
       LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "dup2");
     GNUNET_break (0 == close (fd_stdin_read));
   }
+  else if (!(std_inheritance & GNUNET_OS_INHERIT_STD_IN))
+  {
+    close (0);
+  }
+  if (!(std_inheritance & GNUNET_OS_INHERIT_STD_ERR))
+  {
+    close (2);
+  }
   if (lscp != NULL)
   {
     /* read systemd documentation... */
@@ -961,6 +978,10 @@
   long lRet;
   HANDLE stdin_handle;
   HANDLE stdout_handle;
+  HANDLE stdih, stdoh, stdeh;
+  DWORD stdif, stdof, stdef;
+  BOOL bresult;
+  DWORD error_code;
 
   if (GNUNET_SYSERR == GNUNET_OS_check_helper_binary (filename))
     return NULL; /* not executable */
@@ -1083,9 +1104,11 @@
 
   memset (&start, 0, sizeof (start));
   start.cb = sizeof (start);
-  if ((pipe_stdin != NULL) || (pipe_stdout != NULL))
+  if ((pipe_stdin != NULL) || (pipe_stdout != NULL) || (std_inheritance != 0))
     start.dwFlags |= STARTF_USESTDHANDLES;
 
+  stdih = GetStdHandle (STD_INPUT_HANDLE);
+  GetHandleInformation (stdih, &stdif);
   if (pipe_stdin != NULL)
   {
     GNUNET_DISK_internal_file_handle_ (GNUNET_DISK_pipe_handle
@@ -1093,7 +1116,21 @@
                                        &stdin_handle, sizeof (HANDLE));
     start.hStdInput = stdin_handle;
   }
+  if (stdih)
+  {
+    if (std_inheritance & GNUNET_OS_INHERIT_STD_IN)
+    {
+      SetHandleInformation (stdih, HANDLE_FLAG_INHERIT, 1);
+      if (pipe_stdin == NULL)
+        start.hStdInput = stdih;
+    }
+    else
+      SetHandleInformation (stdih, HANDLE_FLAG_INHERIT, 0);
+  }
+    
 
+  stdoh = GetStdHandle (STD_OUTPUT_HANDLE);
+  GetHandleInformation (stdoh, &stdof);
   if (pipe_stdout != NULL)
   {
     GNUNET_DISK_internal_file_handle_ (GNUNET_DISK_pipe_handle
@@ -1102,7 +1139,31 @@
                                        &stdout_handle, sizeof (HANDLE));
     start.hStdOutput = stdout_handle;
   }
+  if (stdoh)
+  {
+    if (std_inheritance & GNUNET_OS_INHERIT_STD_OUT)
+    {
+      SetHandleInformation (stdoh, HANDLE_FLAG_INHERIT, 1);
+      if (pipe_stdout == NULL)
+        start.hStdOutput = stdoh;
+    }
+    else
+      SetHandleInformation (stdoh, HANDLE_FLAG_INHERIT, 0);
+  }
 
+  stdeh = GetStdHandle (STD_ERROR_HANDLE);
+  GetHandleInformation (stdeh, &stdef);
+  if (stdeh)
+  {
+    if (std_inheritance & GNUNET_OS_INHERIT_STD_ERR)
+    {
+      SetHandleInformation (stdeh, HANDLE_FLAG_INHERIT, 1);
+      start.hStdError = stdeh;
+    }
+    else
+      SetHandleInformation (stdeh, HANDLE_FLAG_INHERIT, 0);
+  }
+
   if (GNUNET_YES == pipe_control)
   {
     control_pipe =
@@ -1179,24 +1240,36 @@
     return NULL;
   }
 
-  if (!CreateProcessW (wpath, wcmd, NULL, NULL, TRUE,
-       DETACHED_PROCESS | CREATE_SUSPENDED, env_block, NULL, &start, &proc))
+  bresult = CreateProcessW (wpath, wcmd, NULL, NULL, TRUE,
+       DETACHED_PROCESS | CREATE_SUSPENDED, env_block, NULL, &start, &proc);
+  error_code = GetLastError ();
+
+  if ((NULL == pipe_stdin) && (stdih))
+    SetHandleInformation (stdih, HANDLE_FLAG_INHERIT, stdif);
+    
+
+  if ((NULL == pipe_stdout) && (stdoh))
+    SetHandleInformation (stdoh, HANDLE_FLAG_INHERIT, stdof);
+
+  if (stdeh)
+    SetHandleInformation (stdeh, HANDLE_FLAG_INHERIT, stdef);
+
+  GNUNET_free (env_block);
+  GNUNET_free (cmd);
+  free (wpath);
+  free (wcmd);
+
+  if (!bresult)
   {
-    SetErrnoFromWinError (GetLastError ());
+    SetErrnoFromWinError (error_code);
     LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "CreateProcess");
     if (NULL != control_pipe)
       GNUNET_DISK_file_close (control_pipe);
     if (NULL != lsocks)
       GNUNET_DISK_pipe_close (lsocks_pipe);
-    GNUNET_free (env_block);
-    GNUNET_free (cmd);
-    free (wpath);
-    free (wcmd);
     return NULL;
   }
 
-  GNUNET_free (env_block);
-
   gnunet_proc = GNUNET_malloc (sizeof (struct GNUNET_OS_Process));
   gnunet_proc->pid = proc.dwProcessId;
   gnunet_proc->handle = proc.hProcess;
@@ -1206,9 +1279,6 @@
 
   ResumeThread (proc.hThread);
   CloseHandle (proc.hThread);
-  GNUNET_free (cmd);
-  free (wpath);
-  free (wcmd);
 
   if (lsocks == NULL || lsocks[0] == INVALID_SOCKET)
     return gnunet_proc;
@@ -1300,6 +1370,7 @@
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -1308,12 +1379,14 @@
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_vap (int pipe_control,
+                             enum GNUNET_OS_InheritStdioFlags std_inheritance,
                             struct GNUNET_DISK_PipeHandle *pipe_stdin,
                             struct GNUNET_DISK_PipeHandle *pipe_stdout,
                             const char *filename, 
                             char *const argv[])
 {
   return start_process (pipe_control,
+                        std_inheritance,
                        pipe_stdin,
                        pipe_stdout,
                        NULL,
@@ -1326,6 +1399,7 @@
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -1334,6 +1408,7 @@
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_va (int pipe_control,
+                            enum GNUNET_OS_InheritStdioFlags std_inheritance,
                            struct GNUNET_DISK_PipeHandle *pipe_stdin,
                             struct GNUNET_DISK_PipeHandle *pipe_stdout,
                             const char *filename, va_list va)
@@ -1355,6 +1430,7 @@
     argc++;
   va_end (ap);
   ret = GNUNET_OS_start_process_vap (pipe_control,
+                                     std_inheritance,
                                     pipe_stdin,
                                     pipe_stdout,
                                     filename,
@@ -1369,6 +1445,7 @@
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -1379,6 +1456,7 @@
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process (int pipe_control,
+                         enum GNUNET_OS_InheritStdioFlags std_inheritance,
                         struct GNUNET_DISK_PipeHandle *pipe_stdin,
                          struct GNUNET_DISK_PipeHandle *pipe_stdout,
                          const char *filename, ...)
@@ -1387,7 +1465,8 @@
   va_list ap;
 
   va_start (ap, filename);
-  ret = GNUNET_OS_start_process_va (pipe_control, pipe_stdin, pipe_stdout, 
filename, ap);
+  ret = GNUNET_OS_start_process_va (pipe_control, std_inheritance, pipe_stdin,
+      pipe_stdout, filename, ap);
   va_end (ap);
   return ret;
 }
@@ -1405,11 +1484,13 @@
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_v (int pipe_control,
+                           enum GNUNET_OS_InheritStdioFlags std_inheritance,
                           const SOCKTYPE *lsocks,
                            const char *filename,
                            char *const argv[])
 {
   return start_process (pipe_control,
+                        std_inheritance,
                        NULL,
                        NULL,
                        lsocks,
@@ -1723,7 +1804,8 @@
   if (NULL == opipe)
     return NULL;
   va_start (ap, binary);
-  eip = GNUNET_OS_start_process_va (GNUNET_NO, NULL, opipe, binary, ap);
+  /* redirect stdout, don't inherit stderr/stdin */
+  eip = GNUNET_OS_start_process_va (GNUNET_NO, 0, NULL, opipe, binary, ap);
   va_end (ap);
   if (NULL == eip)
   {

Modified: gnunet/src/util/test_common_logging_runtime_loglevels.c
===================================================================
--- gnunet/src/util/test_common_logging_runtime_loglevels.c     2012-07-09 
18:48:44 UTC (rev 22577)
+++ gnunet/src/util/test_common_logging_runtime_loglevels.c     2012-07-09 
19:04:19 UTC (rev 22578)
@@ -317,7 +317,7 @@
     break;
   }
 
-  proc = GNUNET_OS_start_process (GNUNET_NO, NULL, pipe_stdout,
+  proc = GNUNET_OS_start_process (GNUNET_NO, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, pipe_stdout,
 #if MINGW
                                   "test_common_logging_dummy",
 #else

Modified: gnunet/src/util/test_os_start_process.c
===================================================================
--- gnunet/src/util/test_os_start_process.c     2012-07-09 18:48:44 UTC (rev 
22577)
+++ gnunet/src/util/test_os_start_process.c     2012-07-09 19:04:19 UTC (rev 
22578)
@@ -131,7 +131,7 @@
   }
 
   proc =
-      GNUNET_OS_start_process (GNUNET_NO, hello_pipe_stdin, hello_pipe_stdout, 
fn,
+      GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_ERR, 
hello_pipe_stdin, hello_pipe_stdout, fn,
                                "test_gnunet_echo_hello", "-", NULL);
   GNUNET_free (fn);
 
@@ -200,7 +200,7 @@
     return 1;
   }
   proc =
-    GNUNET_OS_start_process (GNUNET_YES, hello_pipe_stdin, hello_pipe_stdout, 
fn,
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_ERR, 
hello_pipe_stdin, hello_pipe_stdout, fn,
                             "gnunet-service-resolver", "-", NULL); 
   sleep (1); /* give process time to start, so we actually use the pipe-kill 
mechanism! */
   if (0 != GNUNET_OS_process_kill (proc, SIGTERM))
@@ -233,7 +233,7 @@
     return 1;
   }
   proc =
-    GNUNET_OS_start_process (GNUNET_YES, hello_pipe_stdin, hello_pipe_stdout, 
fn,
+    GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_ERR, 
hello_pipe_stdin, hello_pipe_stdout, fn,
                             "gnunet-service-resolver", "-", NULL); 
   if (0 != GNUNET_OS_process_kill (proc, SIGTERM))
   {

Modified: gnunet/src/util/test_resolver_api.c
===================================================================
--- gnunet/src/util/test_resolver_api.c 2012-07-09 18:48:44 UTC (rev 22577)
+++ gnunet/src/util/test_resolver_api.c 2012-07-09 19:04:19 UTC (rev 22578)
@@ -370,7 +370,7 @@
   pfx = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_BINDIR);
   GNUNET_asprintf (&fn, "%s%cgnunet-service-resolver", pfx, DIR_SEPARATOR);
   GNUNET_free (pfx);
-  proc = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, fn, 
"gnunet-service-resolver",
+  proc = GNUNET_OS_start_process (GNUNET_YES, 
GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, fn, "gnunet-service-resolver",
                                   "-c", "test_resolver_api_data.conf", NULL);
   GNUNET_assert (NULL != proc);
   GNUNET_free (fn);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]