From 074c45e88bca5e9d12d7905efb918843b5372e04 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 6 Jul 2008 19:34:08 +0200 Subject: [PATCH] audiod: Make stat_task static. The only reason it wasn't static was that audiod_command.c could use it. However, audiod_command.c only needs stat_item_values[] and several other fields that were only used in get_time_string(). So move stat_item_values[] out of struct status task so that audiod_command.c can use it, and move get_time_string() from audio_command.c to audiod.c. --- audiod.c | 66 +++++++++++++++++++++++++++++++++++++----- audiod.h | 4 +-- audiod_command.c | 74 +++++++++--------------------------------------- 3 files changed, 74 insertions(+), 70 deletions(-) diff --git a/audiod.c b/audiod.c index 7afff93e..76f07e8c 100644 --- a/audiod.c +++ b/audiod.c @@ -66,6 +66,9 @@ struct audio_format_info { struct slot_info slot[MAX_STREAM_SLOTS]; +/** The array of status items sent by para_server. */ +char *stat_item_values[NUM_STAT_ITEMS]; + /** * the current mode of operation of which can be changed by the on/off/cycle * commands. It is either, AUDIOD_OFF, AUDIOD_ON or AUDIOD_STANDBY. @@ -91,7 +94,7 @@ static struct status_task status_task_struct; * * \sa struct status_task */ -struct status_task *stat_task = &status_task_struct; +static struct status_task *stat_task = &status_task_struct; static struct timeval initial_delay_barrier; /** @@ -128,6 +131,55 @@ int get_audio_format_num(char *name) return -E_UNSUPPORTED_AUDIO_FORMAT; } +char *get_time_string(struct timeval *newest_stime) +{ + struct timeval diff, adj_stream_start, tmp; + int total = 0, use_server_time = 1, + length_seconds = stat_task->length_seconds; + + if (!stat_task->playing) { + if (length_seconds) + return NULL; + return make_message("%s:\n", status_item_list[SI_PLAY_TIME]); + } + if (audiod_status == AUDIOD_OFF) + goto out; + if (stat_task->sa_time_diff_sign > 0) + tv_diff(&stat_task->server_stream_start, &stat_task->sa_time_diff, + &adj_stream_start); + else + tv_add(&stat_task->server_stream_start, &stat_task->sa_time_diff, + &adj_stream_start); + tmp = adj_stream_start; + if (newest_stime && audiod_status == AUDIOD_ON) { + tv_diff(newest_stime, &adj_stream_start, &diff); + if (tv2ms(&diff) < 5000) { + tmp = *newest_stime; + use_server_time = 0; + } + } + tv_diff(now, &tmp, &diff); + total = diff.tv_sec + stat_task->offset_seconds; + if (total > length_seconds) + total = length_seconds; + if (total < 0) + total = 0; +out: + return make_message( + "%s: %s%d:%02d [%d:%02d] (%d%%/%d:%02d)\n", + status_item_list[SI_PLAY_TIME], + use_server_time? "~" : "", + total / 60, + total % 60, + (length_seconds - total) / 60, + (length_seconds - total) % 60, + length_seconds? (total * 100 + length_seconds / 2) / + length_seconds : 0, + length_seconds / 60, + length_seconds % 60 + ); +} + /** * the log function of para_audiod * @@ -467,8 +519,8 @@ static int check_stat_line(char *line, __a_unused void *data) tmp = make_message("%s\n", line); stat_client_write(tmp, itemnum); free(tmp); - free(stat_task->stat_item_values[itemnum]); - stat_task->stat_item_values[itemnum] = para_strdup(line); + free(stat_item_values[itemnum]); + stat_item_values[itemnum] = para_strdup(line); ilen = strlen(status_item_list[itemnum]); switch (itemnum) { case SI_STATUS: @@ -814,18 +866,18 @@ static void close_stat_pipe(void) client_close(stat_task->ct); stat_task->ct = NULL; FOR_EACH_STATUS_ITEM(i) { - free(stat_task->stat_item_values[i]); - stat_task->stat_item_values[i] = NULL; + free(stat_item_values[i]); + stat_item_values[i] = NULL; } dump_empty_status(); stat_task->length_seconds = 0; stat_task->offset_seconds = 0; audiod_status_dump(); stat_task->playing = 0; - stat_task->stat_item_values[SI_BASENAME] = make_message( + stat_item_values[SI_BASENAME] = make_message( "%s: no connection to para_server\n", status_item_list[SI_BASENAME]); - stat_client_write(stat_task->stat_item_values[SI_BASENAME], + stat_client_write(stat_item_values[SI_BASENAME], SI_BASENAME); } diff --git a/audiod.h b/audiod.h index f518a498..60de4caf 100644 --- a/audiod.h +++ b/audiod.h @@ -77,8 +77,6 @@ struct status_task { struct task task; /** client data associated with the stat task */ struct client_task *ct; - /** the array of status items sent by para_server */ - char *stat_item_values[NUM_STAT_ITEMS]; /** do not restart client command until this time */ struct timeval restart_barrier; /** last time we received status data from para_server */ @@ -103,7 +101,6 @@ struct status_task { int current_audio_format_num; }; -extern struct status_task *stat_task; extern struct slot_info slot[MAX_STREAM_SLOTS]; extern struct audiod_args_info conf; extern int audiod_status; @@ -112,6 +109,7 @@ void __noreturn clean_exit(int status, const char *msg); int handle_connect(int accept_fd); void audiod_status_dump(void); void dump_empty_status(void); +char *get_time_string(struct timeval *newest_stime); /** iterate over all slots */ #define FOR_EACH_SLOT(_slot) for (_slot = 0; _slot < MAX_STREAM_SLOTS; _slot++) diff --git a/audiod_command.c b/audiod_command.c index b4c50dc8..fe8143ba 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -26,6 +26,9 @@ #include "fd.h" #include "audiod_command_list.h" +extern char *stat_item_values[NUM_STAT_ITEMS]; + + /** iterate over the array of all audiod commands */ #define FOR_EACH_COMMAND(c) for (c = 0; audiod_cmds[c].name; c++) @@ -35,55 +38,6 @@ static int client_write(int fd, const char *buf) return write(fd, buf, len) != len? -E_CLIENT_WRITE: 1; } -static char *get_time_string(struct timeval *newest_stime) -{ - struct timeval diff, adj_stream_start, tmp; - int total = 0, use_server_time = 1, - length_seconds = stat_task->length_seconds; - - if (!stat_task->playing) { - if (length_seconds) - return NULL; - return make_message("%s:\n", status_item_list[SI_PLAY_TIME]); - } - if (audiod_status == AUDIOD_OFF) - goto out; - if (stat_task->sa_time_diff_sign > 0) - tv_diff(&stat_task->server_stream_start, &stat_task->sa_time_diff, - &adj_stream_start); - else - tv_add(&stat_task->server_stream_start, &stat_task->sa_time_diff, - &adj_stream_start); - tmp = adj_stream_start; - if (newest_stime && audiod_status == AUDIOD_ON) { - tv_diff(newest_stime, &adj_stream_start, &diff); - if (tv2ms(&diff) < 5000) { - tmp = *newest_stime; - use_server_time = 0; - } - } - tv_diff(now, &tmp, &diff); - total = diff.tv_sec + stat_task->offset_seconds; - if (total > length_seconds) - total = length_seconds; - if (total < 0) - total = 0; -out: - return make_message( - "%s: %s%d:%02d [%d:%02d] (%d%%/%d:%02d)\n", - status_item_list[SI_PLAY_TIME], - use_server_time? "~" : "", - total / 60, - total % 60, - (length_seconds - total) / 60, - (length_seconds - total) % 60, - length_seconds? (total * 100 + length_seconds / 2) / - length_seconds : 0, - length_seconds / 60, - length_seconds % 60 - ); -} - __malloc static char *audiod_status_string(void) { const char *status = (audiod_status == AUDIOD_ON)? @@ -263,7 +217,7 @@ int com_stat(int fd, __a_unused int argc, __a_unused char **argv) char *tmp, *v; if (!((1 << i) & mask)) continue; - v = stat_task->stat_item_values[i]; + v = stat_item_values[i]; tmp = make_message("%s%s%s", buf? buf: "", v? v : "", v? "\n" : ""); free(buf); @@ -471,44 +425,44 @@ void audiod_status_dump(void) struct timeval *t = wstime(); char *old, *new, *tmp; - old = stat_task->stat_item_values[SI_PLAY_TIME]; + old = stat_item_values[SI_PLAY_TIME]; new = get_time_string(t); if (new) { if (!old || strcmp(old, new)) { free(old); stat_client_write(new, SI_PLAY_TIME); - stat_task->stat_item_values[SI_PLAY_TIME] = new; + stat_item_values[SI_PLAY_TIME] = new; } else free(new); } new = uptime_str(); - old = stat_task->stat_item_values[SI_AUDIOD_UPTIME]; + old = stat_item_values[SI_AUDIOD_UPTIME]; if (!old || strcmp(old, new)) { free(old); tmp = make_message("%s: %s\n", status_item_list[SI_AUDIOD_UPTIME], new); stat_client_write(tmp, SI_AUDIOD_UPTIME); free(tmp); - stat_task->stat_item_values[SI_AUDIOD_UPTIME] = new; + stat_item_values[SI_AUDIOD_UPTIME] = new; } else free(new); - old = stat_task->stat_item_values[SI_AUDIOD_STATUS]; + old = stat_item_values[SI_AUDIOD_STATUS]; new = audiod_status_string(); if (!old || strcmp(old, new)) { free(old); stat_client_write(new, SI_AUDIOD_STATUS); - stat_task->stat_item_values[SI_AUDIOD_STATUS] = new; + stat_item_values[SI_AUDIOD_STATUS] = new; } else free(new); - old = stat_task->stat_item_values[SI_DECODER_FLAGS]; + old = stat_item_values[SI_DECODER_FLAGS]; new = decoder_flags(); if (!old || strcmp(old, new)) { free(old); stat_client_write(new, SI_DECODER_FLAGS); - stat_task->stat_item_values[SI_DECODER_FLAGS] = new; + stat_item_values[SI_DECODER_FLAGS] = new; } else free(new); } @@ -527,7 +481,7 @@ void dump_empty_status(void) char *tmp = make_message("%s:\n", status_item_list[i]); stat_client_write(tmp, i); free(tmp); - free(stat_task->stat_item_values[i]); - stat_task->stat_item_values[i] = NULL; + free(stat_item_values[i]); + stat_item_values[i] = NULL; } } -- 2.39.5