From 81aa58efa8912f8c042650d82e9c3be155f343bc Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 15 Dec 2009 19:36:22 +0100 Subject: [PATCH] test/run_input: deinitialize everything after open() error This enables valgrind debugging after an error occurred. --- test/run_input.c | 98 ++++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/test/run_input.c b/test/run_input.c index b91d367ba..5d74473e3 100644 --- a/test/run_input.c +++ b/test/run_input.c @@ -41,14 +41,58 @@ my_log_func(const gchar *log_domain, G_GNUC_UNUSED GLogLevelFlags log_level, g_printerr("%s\n", message); } -int main(int argc, char **argv) +static int +dump_input_stream(struct input_stream *is) { - struct input_stream is; - bool success; char buffer[4096]; size_t num_read; ssize_t num_written; + /* wait until the stream becomes ready */ + + while (!is->ready) { + int ret = input_stream_buffer(is); + if (ret < 0) + /* error */ + return 2; + + if (ret == 0) + /* nothing was buffered - wait */ + g_usleep(10000); + } + + /* print meta data */ + + if (is->mime != NULL) + g_printerr("MIME type: %s\n", is->mime); + + /* read data and tags from the stream */ + + while (!input_stream_eof(is)) { + struct tag *tag = input_stream_tag(is); + if (tag != NULL) { + g_printerr("Received a tag:\n"); + tag_save(stderr, tag); + tag_free(tag); + } + + num_read = input_stream_read(is, buffer, sizeof(buffer)); + if (num_read == 0) + break; + + num_written = write(1, buffer, num_read); + if (num_written <= 0) + break; + } + + return 0; +} + +int main(int argc, char **argv) +{ + struct input_stream is; + int ret; + if (argc != 2) { g_printerr("Usage: run_input URI\n"); return 1; @@ -70,52 +114,18 @@ int main(int argc, char **argv) input_stream_global_init(); - /* open the stream and wait until it becomes ready */ + /* open the stream and dump it */ - success = input_stream_open(&is, argv[1]); - if (!success) { + if (input_stream_open(&is, argv[1])) { + ret = dump_input_stream(&is); + input_stream_close(&is); + } else { g_printerr("input_stream_open() failed\n"); - return 2; - } - - while (!is.ready) { - int ret = input_stream_buffer(&is); - if (ret < 0) - /* error */ - return 2; - - if (ret == 0) - /* nothing was buffered - wait */ - g_usleep(10000); - } - - /* print meta data */ - - if (is.mime != NULL) - g_printerr("MIME type: %s\n", is.mime); - - /* read data and tags from the stream */ - - while (!input_stream_eof(&is)) { - struct tag *tag = input_stream_tag(&is); - if (tag != NULL) { - g_printerr("Received a tag:\n"); - tag_save(stderr, tag); - tag_free(tag); - } - - num_read = input_stream_read(&is, buffer, sizeof(buffer)); - if (num_read == 0) - break; - - num_written = write(1, buffer, num_read); - if (num_written <= 0) - break; + ret = 2; } /* deinitialize everything */ - input_stream_close(&is); input_stream_global_finish(); #ifdef ENABLE_ARCHIVE @@ -125,5 +135,5 @@ int main(int argc, char **argv) config_global_finish(); tag_pool_deinit(); - return 0; + return ret; }