/*
- * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2012 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
-/** \file audiod_command.c commands for para_audiod */
+/** \file audiod_command.c Commands for para_audiod. */
#include <regex.h>
#include <sys/types.h>
-#include <stdbool.h>
#include "para.h"
#include "audiod.cmdline.h"
#include "fd.h"
#include "audiod_command_list.h"
+extern struct sched sched;
extern char *stat_item_values[NUM_STAT_ITEMS];
/** Iterate over the array of all audiod commands. */
struct para_buffer pb = {.flags = 0};
struct para_buffer pfpb = {.flags = PBF_SIZE_PREFIX};
const uint64_t one = 1;
+ char *msg = stat_item_values[item_num];
+ struct para_buffer *b;
list_for_each_entry_safe(sc, tmp, &client_list, node) {
int fd = sc->fd, ret;
if (!((one << item_num) & sc->item_mask))
continue;
- if (write_ok(fd) > 0) {
- struct para_buffer *b =
- (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",
- msg? msg : "");
- ret = write(fd, b->buf, b->offset);
- if (ret == b->offset)
- continue;
- }
- /* write error or fd not ready for writing */
+ b = (sc->flags & SCF_PARSER_FRIENDLY)? &pfpb : &pb;
+ if (!b->buf)
+ (void)WRITE_STATUS_ITEM(b, item_num, "%s\n",
+ msg? msg : "");
+ ret = write(fd, b->buf, b->offset);
+ if (ret == b->offset)
+ continue;
+ /* write error or short write */
close(fd);
num_clients--;
PARA_INFO_LOG("deleting client on fd %d\n", fd);
}
free(pb.buf);
free(pfpb.buf);
-// if (num_clients)
-// PARA_DEBUG_LOG("%d client(s)\n", num_clients);
}
/**
int com_tasks(int fd, __a_unused int argc, __a_unused char **argv)
{
- char *tl = get_task_list();
+ char *tl = get_task_list(&sched);
int ret = 1;
if (tl)
ret = client_write(fd, tl);
const uint64_t one = 1;
struct para_buffer b = {.flags = 0};
+ ret = mark_fd_nonblocking(fd);
+ if (ret < 0)
+ return ret;
for (i = 1; i < argc; i++) {
const char *arg = argv[i];
if (arg[0] != '-')
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)
int com_grab(int fd, int argc, char **argv)
{
- return grab_client_new(fd, argc, argv);
+ return grab_client_new(fd, argc, argv, &sched);
}
__noreturn int com_term(int fd, __a_unused int argc, __a_unused char **argv)
free(new);
}
- new = uptime_str();
+ new = get_server_uptime_str(now);
old = stat_item_values[SI_AUDIOD_UPTIME];
if (!old || strcmp(old, new)) {
free(old);