icy_server: pass pointer to _metadata_page()

Don't use va_list.
This commit is contained in:
Max Kellermann 2013-01-30 09:13:46 +01:00
parent f5c0b0d316
commit f8ff45b212
3 changed files with 10 additions and 21 deletions

View File

@ -85,9 +85,8 @@ icy_server_metadata_string(const char *stream_title, const char* stream_url)
}
struct page*
icy_server_metadata_page(const struct tag *tag, ...)
icy_server_metadata_page(const struct tag *tag, const enum tag_type *types)
{
va_list args;
const gchar *tag_items[TAG_NUM_OF_ITEM_TYPES];
gint last_item, item;
guint position;
@ -100,22 +99,11 @@ icy_server_metadata_page(const struct tag *tag, ...)
last_item = -1;
va_start(args, tag);
while (1) {
enum tag_type type;
const gchar *tag_item;
type = va_arg(args, enum tag_type);
if (type == TAG_NUM_OF_ITEM_TYPES)
break;
tag_item = tag_get_value(tag, type);
while (*types != TAG_NUM_OF_ITEM_TYPES) {
const gchar *tag_item = tag_get_value(tag, *types);
if (tag_item)
tag_items[++last_item] = tag_item;
}
va_end(args);
position = item = 0;
while (position < sizeof(stream_title) && item <= last_item) {

View File

@ -23,8 +23,6 @@
#include "page.h"
#include "tag.h"
#include <stdarg.h>
#ifdef __cplusplus
extern "C" {
#endif
@ -35,7 +33,7 @@ icy_server_metadata_header(const char *name,
const char *content_type, int metaint);
struct page*
icy_server_metadata_page(const struct tag *tag, ...);
icy_server_metadata_page(const struct tag *tag, const enum tag_type *types);
#ifdef __cplusplus
}

View File

@ -505,9 +505,12 @@ HttpdOutput::SendTag(const struct tag *tag)
if (metadata != NULL)
page_unref(metadata);
metadata = icy_server_metadata_page(tag, TAG_ALBUM,
TAG_ARTIST, TAG_TITLE,
TAG_NUM_OF_ITEM_TYPES);
static constexpr tag_type types[] = {
TAG_ALBUM, TAG_ARTIST, TAG_TITLE,
TAG_NUM_OF_ITEM_TYPES
};
metadata = icy_server_metadata_page(tag, &types[0]);
if (metadata != NULL) {
const ScopeLock protect(mutex);
for (auto &client : clients)