Make the function to print out the help text for an argparse object a
public function, which takes as a new parameter the file stream on which
to print. This can be used in future to allow application to extend
their own help information.

Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>
---
 lib/argparse/rte_argparse.c | 43 +++++++++++++++++++------------------
 lib/argparse/rte_argparse.h | 14 ++++++++++++
 2 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/lib/argparse/rte_argparse.c b/lib/argparse/rte_argparse.c
index 331f05f01d..d3b32c6357 100644
--- a/lib/argparse/rte_argparse.c
+++ b/lib/argparse/rte_argparse.c
@@ -716,23 +716,23 @@ calc_help_align(const struct rte_argparse *obj)
 }
 
 static void
-show_oneline_help(const struct rte_argparse_arg *arg, uint32_t width)
+show_oneline_help(FILE *stream, const struct rte_argparse_arg *arg, uint32_t 
width)
 {
        uint32_t len = 0;
        uint32_t i;
 
        if (arg->name_short != NULL)
-               len = printf(" %s,", arg->name_short);
-       len += printf(" %s", arg->name_long);
+               len = fprintf(stream, " %s,", arg->name_short);
+       len += fprintf(stream, " %s", arg->name_long);
 
        for (i = len; i < width; i++)
-               printf(" ");
+               fprintf(stream, " ");
 
-       printf("%s\n", arg->help);
+       fprintf(stream, "%s\n", arg->help);
 }
 
 static void
-show_args_pos_help(const struct rte_argparse *obj, uint32_t align)
+show_args_pos_help(FILE *stream, const struct rte_argparse *obj, uint32_t 
align)
 {
        uint32_t position_count = calc_position_count(obj);
        const struct rte_argparse_arg *arg;
@@ -741,19 +741,19 @@ show_args_pos_help(const struct rte_argparse *obj, 
uint32_t align)
        if (position_count == 0)
                return;
 
-       printf("\npositional arguments:\n");
+       fprintf(stream, "\npositional arguments:\n");
        for (i = 0; /* NULL */; i++) {
                arg = &obj->args[i];
                if (arg->name_long == NULL)
                        break;
                if (!is_arg_positional(arg))
                        continue;
-               show_oneline_help(arg, align);
+               show_oneline_help(stream, arg, align);
        }
 }
 
 static void
-show_args_opt_help(const struct rte_argparse *obj, uint32_t align)
+show_args_opt_help(FILE *stream, const struct rte_argparse *obj, uint32_t 
align)
 {
        static const struct rte_argparse_arg help = {
                .name_long = "--help",
@@ -763,34 +763,35 @@ show_args_opt_help(const struct rte_argparse *obj, 
uint32_t align)
        const struct rte_argparse_arg *arg;
        uint32_t i;
 
-       printf("\noptions:\n");
-       show_oneline_help(&help, align);
+       fprintf(stream, "\noptions:\n");
+       show_oneline_help(stream, &help, align);
        for (i = 0; /* NULL */; i++) {
                arg = &obj->args[i];
                if (arg->name_long == NULL)
                        break;
                if (!is_arg_optional(arg))
                        continue;
-               show_oneline_help(arg, align);
+               show_oneline_help(stream, arg, align);
        }
 }
 
-static void
-show_args_help(const struct rte_argparse *obj)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_argparse_print_help, 25.07)
+void
+rte_argparse_print_help(FILE *stream, const struct rte_argparse *obj)
 {
        uint32_t align = calc_help_align(obj);
 
-       printf("usage: %s %s\n", obj->prog_name, obj->usage);
+       fprintf(stream, "usage: %s %s\n", obj->prog_name, obj->usage);
        if (obj->descriptor != NULL)
-               printf("\ndescriptor: %s\n", obj->descriptor);
+               fprintf(stream, "\ndescriptor: %s\n", obj->descriptor);
 
-       show_args_pos_help(obj, align);
-       show_args_opt_help(obj, align);
+       show_args_pos_help(stream, obj, align);
+       show_args_opt_help(stream, obj, align);
 
        if (obj->epilog != NULL)
-               printf("\n%s\n", obj->epilog);
+               fprintf(stream, "\n%s\n", obj->epilog);
        else
-               printf("\n");
+               fprintf(stream, "\n");
 }
 
 RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_argparse_parse, 24.03)
@@ -820,7 +821,7 @@ rte_argparse_parse(const struct rte_argparse *obj, int 
argc, char **argv)
                goto error;
 
        if (show_help) {
-               show_args_help(obj);
+               rte_argparse_print_help(stdout, obj);
                exit(0);
        }
 
diff --git a/lib/argparse/rte_argparse.h b/lib/argparse/rte_argparse.h
index 52bef34363..baf278f6b9 100644
--- a/lib/argparse/rte_argparse.h
+++ b/lib/argparse/rte_argparse.h
@@ -189,6 +189,20 @@ struct rte_argparse {
 __rte_experimental
 int rte_argparse_parse(const struct rte_argparse *obj, int argc, char **argv);
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Output the help text information for the given argparse object.
+ *
+ * @param stream
+ *   Output file handle, e.g. stdout, stderr, on which to print the help text.
+ * @param obj
+ *   Parser object.
+ */
+__rte_experimental
+void rte_argparse_print_help(FILE *stream, const struct rte_argparse *obj);
+
 /**
  * @warning
  * @b EXPERIMENTAL: this API may change without prior notice.
-- 
2.48.1

Reply via email to