/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugin-runner.c

transformed a function to a part of main

Show diffs side-by-side

added added

removed removed

Lines of Context:
247
247
  return true;
248
248
}
249
249
 
250
 
char **add_to_argv(char **argv, int *argc, char *arg){
251
 
  if (argv == NULL){
252
 
    *argc = 1;
253
 
    argv = malloc(sizeof(char*) * 2);
254
 
    if(argv == NULL){
255
 
      return NULL;
256
 
    }
257
 
    argv[0] = NULL;     /* Will be set to argv[0] in main before parsing */
258
 
    argv[1] = NULL;
259
 
  }
260
 
  *argc += 1;
261
 
  argv = realloc(argv, sizeof(char *)
262
 
                  * ((unsigned int) *argc + 1));
263
 
  if(argv == NULL){
264
 
    return NULL;
265
 
  }
266
 
  argv[*argc-1] = arg;
267
 
  argv[*argc] = NULL;
268
 
  return argv;
269
 
}
270
 
 
271
250
static void free_plugin_list(plugin *plugin_list){
272
251
  for(plugin *next; plugin_list != NULL; plugin_list = next){
273
252
    next = plugin_list->next;
479
458
    const char whitespace_delims[] = " \r\t\f\v\n";
480
459
    const char comment_delim[] = "#";
481
460
 
 
461
    custom_argc = 1;
 
462
    custom_argv = malloc(sizeof(char*) * 2);
 
463
    if(custom_argv == NULL){
 
464
      perror("malloc");
 
465
      exitstatus = EXIT_FAILURE;
 
466
      goto fallback;
 
467
    }
 
468
    custom_argv[0] = argv[0];
 
469
    custom_argv[1] = NULL;
 
470
    
482
471
    while(true){
483
472
      sret = getline(&org_line, &size, conffp);
484
473
      if(sret == -1){
492
481
          continue;
493
482
        }
494
483
        new_arg = strdup(p);
495
 
        custom_argv = add_to_argv(custom_argv, &custom_argc, new_arg);
496
 
        if (custom_argv == NULL){
497
 
          perror("add_to_argv");
 
484
 
 
485
        custom_argc += 1;
 
486
        custom_argv = realloc(custom_argv, sizeof(char *)
 
487
                              * ((unsigned int) custom_argc + 1));
 
488
        if(custom_argv == NULL){
 
489
          perror("realloc");
498
490
          exitstatus = EXIT_FAILURE;
 
491
          free(org_line);
499
492
          goto fallback;
500
493
        }
 
494
        custom_argv[custom_argc-1] = new_arg;
 
495
        custom_argv[custom_argc] = NULL;        
501
496
      }
502
497
    }
503
498
    free(org_line);
512
507
  }
513
508
 
514
509
  if(custom_argv != NULL){
515
 
    custom_argv[0] = argv[0];
516
510
    ret = argp_parse (&argp, custom_argc, custom_argv, 0, 0, &plugin_list);
517
511
    if (ret == ARGP_ERR_UNKNOWN){
518
512
      fprintf(stderr, "Unknown error while parsing arguments\n");
945
939
  }
946
940
 
947
941
  if(custom_argv != NULL){
948
 
    for(char **arg = custom_argv; *arg != NULL; arg++){
 
942
    for(char **arg = custom_argv+1; *arg != NULL; arg++){
949
943
      free(*arg);
950
944
    }
951
945
    free(custom_argv);