X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=audiod_command.c;h=a54bd82d82c7c8f7fc1dbcaeed3faf63a1a08e12;hp=a5f1bde6eb85be5865ce88db75a45e1b0ac97cf0;hb=1d54a5412ef39590022e6dd4448881f267e96d0b;hpb=9609fd30e0d3db45ede3ab5c6bc3a77c15b6aef8 diff --git a/audiod_command.c b/audiod_command.c index a5f1bde6..a54bd82d 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Andre Noll + * Copyright (C) 2005-2011 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -8,7 +8,6 @@ #include #include -#include #include #include "para.h" @@ -132,7 +131,7 @@ void stat_client_write_item(int item_num) (sc->flags & SCF_PARSER_FRIENDLY)? &pfpb : &pb; char *msg = stat_item_values[item_num]; if (!b->buf) - WRITE_STATUS_ITEM(b, item_num, "%s\n", + (void)WRITE_STATUS_ITEM(b, item_num, "%s\n", msg? msg : ""); ret = write(fd, b->buf, b->offset); if (ret == b->offset) @@ -301,21 +300,6 @@ int com_tasks(int fd, __a_unused int argc, __a_unused char **argv) return ret; } -int com_kill(int fd, int argc, char **argv) -{ - int i, ret = 1; - if (argc < 2) - return -E_AUDIOD_SYNTAX; - for (i = 1; i < argc; i++) { - ret = kill_task(argv[i]); - if (ret < 0) - break; - } - if (ret > 0) - close(fd); - return ret; -} - int com_stat(int fd, int argc, char **argv) { int i, ret, parser_friendly = 0; @@ -350,7 +334,7 @@ int com_stat(int fd, int argc, char **argv) char *item = stat_item_values[i]; if (!((one << i) & mask)) continue; - WRITE_STATUS_ITEM(&b, i, "%s\n", item? item : ""); + (void)WRITE_STATUS_ITEM(&b, i, "%s\n", item? item : ""); } ret = client_write(fd, b.buf); if (ret >= 0) @@ -421,31 +405,32 @@ static int check_perms(uid_t uid) } /** - * handle arriving connections on the local socket + * Handle arriving connections on the local socket. * - * \param accept_fd the fd to call accept() on + * \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 whenever para_audiod's main task detects an incoming - * connection by the readability of \a accept_fd. This function reads the - * command sent by the peer, checks the connecting user's permissions by using - * unix socket credentials (if supported by the OS) and calls the corresponding - * command handler if permissions are OK. + * 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, + * checks the connecting user's permissions by using unix socket credentials + * (if supported by the OS) and calls the corresponding command handler if + * permissions are OK. * - * \return positive on success, negative on errors + * \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) +int handle_connect(int accept_fd, fd_set *rfds) { - int i, argc, ret, clifd = -1; + int i, argc, ret, clifd; char buf[MAXLINE], **argv = NULL; struct sockaddr_un unix_addr; uid_t uid; - ret = para_accept(accept_fd, &unix_addr, sizeof(struct sockaddr_un)); - if (ret < 0) - goto out; - clifd = ret; + ret = para_accept(accept_fd, rfds, &unix_addr, sizeof(struct sockaddr_un), &clifd); + if (ret <= 0) + return ret; ret = recv_cred_buffer(clifd, buf, sizeof(buf) - 1); if (ret < 0) goto out;