From: Andre Noll Date: Tue, 13 Mar 2018 22:47:11 +0000 (+0100) Subject: audiod: Implement help --long. X-Git-Tag: v0.6.2~2^2~10 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=e96982fb3158bb8293d2c63b8341cbc0712faca1 audiod: Implement help --long. 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. --- diff --git a/audioc.c b/audioc.c index 77a0539d..d9478ab9 100644 --- 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); } diff --git a/audiod_command.c b/audiod_command.c index cb4363b1..bb54dfab 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -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) diff --git a/configure.ac b/configure.ac index 060889f4..80671ad5 100644 --- a/configure.ac +++ b/configure.ac @@ -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" diff --git a/m4/lls/audiod_cmd.suite.m4 b/m4/lls/audiod_cmd.suite.m4 index 11de9872..80ae2e42 100644 --- a/m4/lls/audiod_cmd.suite.m4 +++ b/m4/lls/audiod_cmd.suite.m4 @@ -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