audiod: Implement help --long.
authorAndre Noll <maan@tuebingen.mpg.de>
Tue, 13 Mar 2018 22:47:11 +0000 (23:47 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 22 Apr 2018 18:30:37 +0000 (20:30 +0200)
This converts the help command of para_audiod to the generic
lsu_com_help(), adding --long and removing quite a few lines of
duplicated code.  This patch also touches audioc.c since para_audioc
needs to learn to complete the new --long option. Moreover the help
text of the help command is made a bit more useful.

audioc.c
audiod_command.c
configure.ac
m4/lls/audiod_cmd.suite.m4

index 77a0539..d9478ab 100644 (file)
--- a/audioc.c
+++ b/audioc.c
@@ -97,6 +97,12 @@ I9E_DUMMY_COMPLETER(term);
 static void help_completer(struct i9e_completion_info *ci,
                struct i9e_completion_result *result)
 {
+       char *opts[] = {LSG_AUDIOD_CMD_HELP_OPTS, NULL};
+
+       if (ci->word[0] == '-') {
+               i9e_complete_option(opts, ci, result);
+               return;
+       }
        result->matches = i9e_complete_commands(ci->word, audiod_completers);
 }
 
index cb4363b..bb54dfa 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "audiod.lsg.h"
 #include "para.h"
+#include "lsu.h"
 #include "audiod_cmd.lsg.h"
 #include "list.h"
 #include "sched.h"
@@ -224,59 +225,17 @@ __malloc static char *audiod_status_string(void)
        return para_strdup(status);
 }
 
-static int dump_commands(int fd)
-{
-       char *buf = para_strdup(""), *tmp = NULL;
-       int i;
-       ssize_t ret;
-       const struct lls_command *cmd;
-
-       for (i = 1; (cmd = lls_cmd(i, audiod_cmd_suite)); i++) {
-               tmp = make_message("%s%s\t%s\n", buf, lls_command_name(cmd),
-                       lls_purpose(cmd));
-               free(buf);
-               buf = tmp;
-       }
-       ret = client_write(fd, buf);
-       free(buf);
-       return ret;
-}
-
 static int com_help(int fd, struct lls_parse_result *lpr)
 {
+       char *buf;
        int ret;
-       char *buf, *errctx;
-       const struct lls_command *cmd;
+       const struct lls_opt_result *r =
+               lls_opt_result(LSG_AUDIOD_CMD_HELP_OPT_LONG, lpr);
+       bool long_help = lls_opt_given(r);
 
-       ret = lls(lls_check_arg_count(lpr, 0, 1, &errctx));
-       if (ret < 0) {
-               if (errctx) {
-                       buf = make_message("%s\n", errctx);
-                       client_write(fd, buf);
-                       free(buf);
-                       free(errctx);
-               }
-               return ret;
-       }
-       if (lls_num_inputs(lpr) == 0)
-               return dump_commands(fd);
-       ret = lls(lls_lookup_subcmd(lls_input(0, lpr), audiod_cmd_suite,
-               &errctx));
-       if (ret < 0) {
-               buf = make_message("%s: %s\nAvailable commands:\n", errctx?
-                       errctx : lls_input(0, lpr), para_strerror(-ret));
-               if (client_write(fd, buf) >= 0)
-                       dump_commands(fd);
-               free(errctx);
-               free(buf);
-               goto out;
-       }
-       cmd = lls_cmd(ret, audiod_cmd_suite);
-       buf = lls_long_help(cmd);
-       assert(buf);
+       lsu_com_help(long_help, lpr, audiod_cmd_suite, NULL, &buf, NULL);
        ret = client_write(fd, buf);
        free(buf);
-out:
        return ret < 0? ret : 0;
 }
 EXPORT_AUDIOD_CMD_HANDLER(help)
index 060889f..80671ad 100644 (file)
@@ -487,6 +487,7 @@ if test -n "$CRYPTOLIB"; then
                wmadec_filter
                buffer_tree
                sync_filter
+               lsu
        "
        if test "$CRYPTOLIB" = openssl; then
                audiod_errlist_objs="$audiod_errlist_objs crypt"
index 11de987..80ae2e4 100644 (file)
@@ -7,14 +7,14 @@ caption = list of audiod commands
        [/description]
 
 [subcommand help]
-       purpose = display command list or help for given command
+       purpose = list available commands or print command-specific help
        non-opts-name = [subcommand]
        [description]
-               When I was younger, so much younger than today, I never needed
-               anybody's help in any way. But now these days are gone, I'm not so self
-               assured. Now I find I've changed my mind and opened up the doors. --
-               Beatles: Help
+               When executed without any arguments, the available audiod commands
+               are listed. Otherwise, if the first argument is the name of an audiod
+               command, the description of this command is shown.
        [/description]
+       m4_include(`long-help.m4')
 
 [subcommand grab]
        purpose = grab the audio stream