X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=audiod_command.c;h=677abe340bfdc801422caee920c611ff6a70d33a;hb=181beb316afad036ac01a778544c5dec0a8d51c7;hp=0920162067f346f97003e766f3c6d77702298142;hpb=13ba5f96e64bd0f3157a6fe73ed7b950ec9c5ea7;p=paraslash.git diff --git a/audiod_command.c b/audiod_command.c index 09201620..677abe34 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2005 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2005 Andre Noll , see file COPYING. */ /** \file audiod_command.c Commands for para_audiod. */ @@ -17,6 +13,7 @@ #include "audiod.lsg.h" #include "para.h" +#include "lsu.h" #include "audiod_cmd.lsg.h" #include "list.h" #include "sched.h" @@ -228,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) @@ -405,7 +360,6 @@ EXPORT_AUDIOD_CMD_HANDLER(version) * Handle arriving connections on the local socket. * * \param accept_fd The fd to accept connections on. - * \param rfds If \a accept_fd is not set in \a rfds, do nothing. * * This is called in each iteration of the select loop. If there is an incoming * connection on \a accept_fd, this function reads the command sent by the peer, @@ -416,9 +370,9 @@ EXPORT_AUDIOD_CMD_HANDLER(version) * \return Positive on success, negative on errors, zero if there was no * connection to accept. * - * \sa para_accept(), recv_cred_buffer() - * */ -int handle_connect(int accept_fd, fd_set *rfds) + * \sa \ref para_accept(), \ref recv_cred_buffer(). + */ +int dispatch_local_connection(int accept_fd) { int argc, ret, clifd; char buf[MAXLINE], **argv = NULL; @@ -429,7 +383,7 @@ int handle_connect(int accept_fd, fd_set *rfds) char *errctx = NULL; const struct audiod_command_info *aci; - ret = para_accept(accept_fd, rfds, &unix_addr, sizeof(struct sockaddr_un), &clifd); + ret = para_accept(accept_fd, &unix_addr, sizeof(struct sockaddr_un), &clifd); if (ret <= 0) return ret; ret = recv_cred_buffer(clifd, buf, sizeof(buf) - 1);