aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2012-03-19 19:59:30 +0100
committerMax Kellermann <max@duempel.org>2012-03-19 20:37:25 +0100
commit8dcefaf2e3366510a78117ad651f1f1116f6ab83 (patch)
tree1fc742b9e611532828d16996afa73244fdf82925
parent48e3432a639e5d50b68014e03f2c995ce63d40e0 (diff)
downloadmpd-8dcefaf2e3366510a78117ad651f1f1116f6ab83.tar.gz
mpd-8dcefaf2e3366510a78117ad651f1f1116f6ab83.tar.xz
mpd-8dcefaf2e3366510a78117ad651f1f1116f6ab83.zip
test/dump_text_file: debug program for text_input_stream.c
-rw-r--r--Makefile.am15
-rw-r--r--test/dump_text_file.c170
2 files changed, 185 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index 93e4dd499..fdb925a8d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -977,6 +977,7 @@ noinst_PROGRAMS = \
test/run_resolver \
test/run_tcp_connect \
test/run_input \
+ test/dump_text_file \
test/dump_playlist \
test/run_decoder \
test/read_tags \
@@ -1021,6 +1022,18 @@ test_run_input_SOURCES = test/run_input.c \
src/tag.c src/tag_pool.c src/tag_save.c \
src/fd_util.c
+test_dump_text_file_LDADD = \
+ $(INPUT_LIBS) \
+ $(ARCHIVE_LIBS) \
+ $(GLIB_LIBS)
+test_dump_text_file_SOURCES = test/dump_text_file.c \
+ test/stdbin.h \
+ src/io_thread.c src/io_thread.h \
+ src/conf.c src/tokenizer.c src/utils.c src/string_util.c\
+ src/tag.c src/tag_pool.c \
+ src/text_input_stream.c src/fifo_buffer.c \
+ src/fd_util.c
+
test_dump_playlist_LDADD = \
$(PLAYLIST_LIBS) \
$(FLAC_LIBS) \
@@ -1117,6 +1130,8 @@ test_read_tags_SOURCES += \
src/despotify_utils.c
test_run_input_SOURCES += \
src/despotify_utils.c
+test_dump_text_file_SOURCES += \
+ src/despotify_utils.c
test_dump_playlist_SOURCES += \
src/despotify_utils.c
test_run_decoder_SOURCES += \
diff --git a/test/dump_text_file.c b/test/dump_text_file.c
new file mode 100644
index 000000000..f14371441
--- /dev/null
+++ b/test/dump_text_file.c
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+#include "io_thread.h"
+#include "input_init.h"
+#include "input_stream.h"
+#include "text_input_stream.h"
+#include "tag_pool.h"
+#include "conf.h"
+#include "stdbin.h"
+
+#ifdef ENABLE_ARCHIVE
+#include "archive_list.h"
+#endif
+
+#include <glib.h>
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static void
+my_log_func(const gchar *log_domain, G_GNUC_UNUSED GLogLevelFlags log_level,
+ const gchar *message, G_GNUC_UNUSED gpointer user_data)
+{
+ if (log_domain != NULL)
+ g_printerr("%s: %s\n", log_domain, message);
+ else
+ g_printerr("%s\n", message);
+}
+
+static void
+dump_text_file(struct text_input_stream *is)
+{
+ const char *line;
+ while ((line = text_input_stream_read(is)) != NULL)
+ printf("'%s'\n", line);
+}
+
+static int
+dump_input_stream(struct input_stream *is)
+{
+ GError *error = NULL;
+
+ input_stream_lock(is);
+
+ /* wait until the stream becomes ready */
+
+ input_stream_wait_ready(is);
+
+ if (!input_stream_check(is, &error)) {
+ g_warning("%s", error->message);
+ g_error_free(error);
+ input_stream_unlock(is);
+ return EXIT_FAILURE;
+ }
+
+ /* read data and tags from the stream */
+
+ input_stream_unlock(is);
+
+ struct text_input_stream *tis = text_input_stream_new(is);
+ dump_text_file(tis);
+ text_input_stream_free(tis);
+
+ input_stream_lock(is);
+
+ if (!input_stream_check(is, &error)) {
+ g_warning("%s", error->message);
+ g_error_free(error);
+ input_stream_unlock(is);
+ return EXIT_FAILURE;
+ }
+
+ input_stream_unlock(is);
+
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ GError *error = NULL;
+ struct input_stream *is;
+ int ret;
+
+ if (argc != 2) {
+ g_printerr("Usage: run_input URI\n");
+ return 1;
+ }
+
+ /* initialize GLib */
+
+ g_thread_init(NULL);
+ g_log_set_default_handler(my_log_func, NULL);
+
+ /* initialize MPD */
+
+ tag_pool_init();
+ config_global_init();
+
+ io_thread_init();
+ if (!io_thread_start(&error)) {
+ g_warning("%s", error->message);
+ g_error_free(error);
+ return EXIT_FAILURE;
+ }
+
+#ifdef ENABLE_ARCHIVE
+ archive_plugin_init_all();
+#endif
+
+ if (!input_stream_global_init(&error)) {
+ g_warning("%s", error->message);
+ g_error_free(error);
+ return 2;
+ }
+
+ /* open the stream and dump it */
+
+ GMutex *mutex = g_mutex_new();
+ GCond *cond = g_cond_new();
+
+ is = input_stream_open(argv[1], mutex, cond, &error);
+ if (is != NULL) {
+ ret = dump_input_stream(is);
+ input_stream_close(is);
+ } else {
+ if (error != NULL) {
+ g_warning("%s", error->message);
+ g_error_free(error);
+ } else
+ g_printerr("input_stream_open() failed\n");
+ ret = 2;
+ }
+
+ g_cond_free(cond);
+ g_mutex_free(mutex);
+
+ /* deinitialize everything */
+
+ input_stream_global_finish();
+
+#ifdef ENABLE_ARCHIVE
+ archive_plugin_deinit_all();
+#endif
+
+ io_thread_deinit();
+
+ config_global_finish();
+ tag_pool_deinit();
+
+ return ret;
+}