Merge branch 't/remove_sb_compat'
[paraslash.git] / recv_common.c
index 9544420bab23bda4d8a742320ec58f56d00a9eca..2ea8a5992034419cf0375bae43851172c136b765 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2013 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
 #include "list.h"
 #include "sched.h"
 #include "ggo.h"
+#include "buffer_tree.h"
 #include "recv.h"
 #include "string.h"
-#include "buffer_tree.h"
-
-DEFINE_RECEIVER_ARRAY;
 
 /**
  * Call the init function of each paraslash receiver.
@@ -33,20 +31,13 @@ static void *parse_receiver_args(int receiver_num, char *options)
 {
        struct receiver *r = &receivers[receiver_num];
        char **argv;
-       int argc, i;
+       int argc;
        void *conf;
 
-
-       PARA_DEBUG_LOG("%s, options: %s\n", r->name,
-               options? options : "(none)");
        if (options) {
-               PARA_DEBUG_LOG("options: %s\n", options);
-               argc = create_argv(options, " \t", &argv);
+               argc = create_shifted_argv(options, " \t", &argv);
                if (argc < 0)
                        return NULL;
-               for (i = argc - 1; i >= 0; i--)
-                       argv[i + 1] = argv[i];
-               argc++;
        } else {
                argc = 1;
                argv = para_malloc(2 * sizeof(char*));
@@ -54,9 +45,7 @@ static void *parse_receiver_args(int receiver_num, char *options)
        }
        argv[0] = make_message("%s_recv", r->name);
        conf = r->parse_config(argc, argv);
-       for (i = 0; i < argc; i++)
-               free(argv[i]);
-       free(argv);
+       free_argv(argv);
        return conf;
 }
 
@@ -103,22 +92,23 @@ void *check_receiver_arg(char *ra, int *receiver_num)
 /**
  * Print out the help texts to all receivers.
  *
- * \param detailed Whether the detailed help should be printed.
+ * \param flags Passed to \ref ggo_print_help().
  */
-void print_receiver_helps(int detailed)
+void print_receiver_helps(unsigned flags)
 {
        int i;
 
-       printf_or_die("\nAvailable receivers: \n\t");
+       printf_or_die("\nAvailable receivers: ");
        FOR_EACH_RECEIVER(i)
                printf_or_die("%s%s", i? " " : "", receivers[i].name);
-       printf_or_die("\n\n");
+       printf_or_die("\n");
        FOR_EACH_RECEIVER(i) {
                struct receiver *r = receivers + i;
                if (!r->help.short_help)
                        continue;
-               printf_or_die("Options for %s:\n", r->name);
-               ggo_print_help(&r->help, detailed);
+               printf_or_die("\n%s: %s", r->name,
+                       r->help.purpose);
+               ggo_print_help(&r->help, flags);
        }
 }