aboutsummaryrefslogtreecommitdiff
path: root/src/arm/gnunet-service-arm.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2009-06-09 22:57:12 +0000
committerChristian Grothoff <christian@grothoff.org>2009-06-09 22:57:12 +0000
commitca243fd8b923ae7b073327be4e080ab55dd466e9 (patch)
tree5879ddadbd97fdb209752ad9a778e74a9f721f8d /src/arm/gnunet-service-arm.c
parentb5bba0fd1a50338ea57d0a19e2fa64f2951382a1 (diff)
downloadgnunet-ca243fd8b923ae7b073327be4e080ab55dd466e9.tar.gz
gnunet-ca243fd8b923ae7b073327be4e080ab55dd466e9.zip
add possibility of passing extra options via configuration
Diffstat (limited to 'src/arm/gnunet-service-arm.c')
-rw-r--r--src/arm/gnunet-service-arm.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/arm/gnunet-service-arm.c b/src/arm/gnunet-service-arm.c
index c9736982f..8f3406b38 100644
--- a/src/arm/gnunet-service-arm.c
+++ b/src/arm/gnunet-service-arm.c
@@ -257,9 +257,11 @@ static void
257start_process (struct ServiceList *sl) 257start_process (struct ServiceList *sl)
258{ 258{
259 char *loprefix; 259 char *loprefix;
260 char *options;
260 char **argv; 261 char **argv;
261 unsigned int argv_size; 262 unsigned int argv_size;
262 char *lopos; 263 char *lopos;
264 char *optpos;
263 const char *firstarg; 265 const char *firstarg;
264 int use_debug; 266 int use_debug;
265 267
@@ -268,6 +270,10 @@ start_process (struct ServiceList *sl)
268 GNUNET_CONFIGURATION_get_value_string (cfg, 270 GNUNET_CONFIGURATION_get_value_string (cfg,
269 sl->name, "PREFIX", &loprefix)) 271 sl->name, "PREFIX", &loprefix))
270 loprefix = GNUNET_strdup (prefix_command); 272 loprefix = GNUNET_strdup (prefix_command);
273 if (GNUNET_OK !=
274 GNUNET_CONFIGURATION_get_value_string (cfg,
275 sl->name, "OPTIONS", &options))
276 options = GNUNET_strdup ("");
271 use_debug = GNUNET_CONFIGURATION_get_value_yesno (cfg, sl->name, "DEBUG"); 277 use_debug = GNUNET_CONFIGURATION_get_value_yesno (cfg, sl->name, "DEBUG");
272 278
273 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Starting service `%s'\n"), sl->name); 279 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Starting service `%s'\n"), sl->name);
@@ -286,6 +292,13 @@ start_process (struct ServiceList *sl)
286 argv_size++; 292 argv_size++;
287 lopos++; 293 lopos++;
288 } 294 }
295 optpos = options;
296 while ('\0' != *optpos)
297 {
298 if (*optpos == ' ')
299 argv_size++;
300 optpos++;
301 }
289 firstarg = NULL; 302 firstarg = NULL;
290 argv = GNUNET_malloc (argv_size * sizeof (char *)); 303 argv = GNUNET_malloc (argv_size * sizeof (char *));
291 argv_size = 0; 304 argv_size = 0;
@@ -316,6 +329,21 @@ start_process (struct ServiceList *sl)
316 argv[argv_size++] = "-L"; 329 argv[argv_size++] = "-L";
317 argv[argv_size++] = "DEBUG"; 330 argv[argv_size++] = "DEBUG";
318 } 331 }
332 optpos = options;
333 while ('\0' != *optpos)
334 {
335 while (*optpos == ' ')
336 optpos++;
337 if (*optpos == '\0')
338 continue;
339 argv[argv_size++] = optpos;
340 while (('\0' != *optpos) && (' ' != *optpos))
341 optpos++;
342 if ('\0' == *optpos)
343 continue;
344 *optpos = '\0';
345 optpos++;
346 }
319 argv[argv_size++] = NULL; 347 argv[argv_size++] = NULL;
320 sl->pid = GNUNET_OS_start_process_v (firstarg, argv); 348 sl->pid = GNUNET_OS_start_process_v (firstarg, argv);
321 GNUNET_free (argv); 349 GNUNET_free (argv);