Index: src/arm/arm_api.c =================================================================== --- src/arm/arm_api.c (revision 30501) +++ src/arm/arm_api.c (working copy) @@ -756,9 +756,12 @@ unsigned char test_is_active; char *cbinary; char *binary; + char *quotedbinary; char *config; char *loprefix; char *lopostfix; + int binaryLen; + test_is_active = cm->h->service_test_is_active; if ((GNUNET_YES == test_is_active) && @@ -814,6 +817,16 @@ cm->h->cfg, "arm", "CONFIG", &config)) config = NULL; binary = GNUNET_OS_get_libexec_binary_path (cbinary); + //Surround in quotes + binaryLen = strlen(binary); + quotedbinary = GNUNET_malloc ((binaryLen + 3) * sizeof (char *)); + quotedbinary[0] = '"'; + strcpy("edbinary[1],binary); + quotedbinary[binaryLen + 1] = '"'; + quotedbinary[binaryLen + 2] = '\0'; + + + GNUNET_free (cbinary); if ((GNUNET_YES == GNUNET_CONFIGURATION_have_value ( cm->h->cfg, "TESTING", "WEAKRANDOM")) && @@ -826,12 +839,12 @@ /* we're clearly running a test, don't daemonize */ if (NULL == config) proc = do_start_process (GNUNET_NO, cm->std_inheritance, - NULL, loprefix, binary, + NULL, loprefix, quotedbinary, /* no daemonization! */ lopostfix, NULL); else proc = do_start_process (GNUNET_NO, cm->std_inheritance, - NULL, loprefix, binary, "-c", config, + NULL, loprefix, quotedbinary, "-c", config, /* no daemonization! */ lopostfix, NULL); } @@ -839,14 +852,15 @@ { if (NULL == config) proc = do_start_process (GNUNET_NO, cm->std_inheritance, - NULL, loprefix, binary, + NULL, loprefix, quotedbinary, "-d", lopostfix, NULL); else proc = do_start_process (GNUNET_NO, cm->std_inheritance, - NULL, loprefix, binary, "-c", config, + NULL, loprefix, quotedbinary, "-c", config, "-d", lopostfix, NULL); } GNUNET_free (binary); + GNUNET_free (quotedbinary); GNUNET_free_non_null (config); GNUNET_free (loprefix); GNUNET_free (lopostfix); Index: src/arm/do_start_process.c =================================================================== --- src/arm/do_start_process.c (revision 30501) +++ src/arm/do_start_process.c (working copy) @@ -50,6 +50,9 @@ const char *last; struct GNUNET_OS_Process *proc; char *binary_path; + int quote_on; + int i; + int len; argv_size = 1; va_start (ap, first_arg); @@ -62,8 +65,18 @@ rpos = arg; while ('\0' != *rpos) { - if (' ' == *rpos) + + if ('"' == *rpos) { + if(quote_on == 1) + quote_on =0; + else + quote_on =1; + + } + + if ((' ' == *rpos)&&(quote_on == 0)) + { if (last != NULL) argv_size++; last = NULL; @@ -83,6 +96,7 @@ /* *INDENT-ON* */ va_end (ap); + quote_on =0; argv = GNUNET_malloc (argv_size * sizeof (char *)); argv_size = 0; va_start (ap, first_arg); @@ -96,8 +110,18 @@ pos = cp; while ('\0' != *pos) { - if (' ' == *pos) + + if ('"' == *pos) { + if(quote_on == 1) + quote_on =0; + else + quote_on =1; + + } + + if ((' ' == *pos)&&(quote_on == 0)) + { *pos = '\0'; if (last != NULL) argv[argv_size++] = GNUNET_strdup (last); @@ -121,7 +145,19 @@ /* *INDENT-ON* */ va_end (ap); argv[argv_size] = NULL; - binary_path = argv[0]; + + + for(i = 0; i < argv_size; i++){ + len = strlen(argv[i]); + if((argv[i][0] == '"')&& (argv[i][len-1] == '"')) + { + argv[i][len-1] = '\0'; + argv[i]++; + + } + } + binary_path = argv[0]; + proc = GNUNET_OS_start_process_v (pipe_control, std_inheritance, lsocks, binary_path, argv); while (argv_size > 0) Index: src/arm/gnunet-service-arm.c =================================================================== --- src/arm/gnunet-service-arm.c (revision 30501) +++ src/arm/gnunet-service-arm.c (working copy) @@ -414,6 +414,8 @@ SOCKTYPE *lsocks; unsigned int ls; char *binary; + char *quotedbinary; + int binaryLen; /* calculate listen socket list */ lsocks = NULL; @@ -486,6 +488,16 @@ "Starting service `%s' using binary `%s' and configuration `%s'\n", sl->name, sl->binary, sl->config); binary = GNUNET_OS_get_libexec_binary_path (sl->binary); + + //Surround in quotes + binaryLen = strlen(binary); + quotedbinary = GNUNET_malloc ((binaryLen + 3) * sizeof (char *)); + quotedbinary[0] = '"'; + strcpy("edbinary[1],binary); + quotedbinary[binaryLen + 1] = '"'; + quotedbinary[binaryLen + 2] = '\0'; + + GNUNET_assert (NULL == sl->proc); if (GNUNET_YES == use_debug) { @@ -492,12 +504,12 @@ if (NULL == sl->config) sl->proc = do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, - lsocks, loprefix, binary, "-L", + lsocks, loprefix, quotedbinary, "-L", "DEBUG", options, NULL); else sl->proc = do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, - lsocks, loprefix, binary, "-c", sl->config, "-L", + lsocks, loprefix, quotedbinary, "-c", sl->config, "-L", "DEBUG", options, NULL); } else @@ -505,15 +517,16 @@ if (NULL == sl->config) sl->proc = do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, - lsocks, loprefix, binary, + lsocks, loprefix, quotedbinary, options, NULL); else sl->proc = do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, - lsocks, loprefix, binary, "-c", sl->config, + lsocks, loprefix, quotedbinary, "-c", sl->config, options, NULL); } GNUNET_free (binary); + GNUNET_free (quotedbinary); if (sl->proc == NULL) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to start service `%s'\n"),