diff options
Diffstat (limited to 'test')
49 files changed, 481 insertions, 306 deletions
diff --git a/test/DivideStringTest.hxx b/test/DivideStringTest.hxx new file mode 100644 index 000000000..f6c01bdde --- /dev/null +++ b/test/DivideStringTest.hxx @@ -0,0 +1,54 @@ +/* + * Unit tests for src/util/ + */ + +#include "check.h" +#include "util/DivideString.hxx" + +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <string.h> + +class DivideStringTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(DivideStringTest); + CPPUNIT_TEST(TestBasic); + CPPUNIT_TEST(TestEmpty); + CPPUNIT_TEST(TestFail); + CPPUNIT_TEST(TestStrip); + CPPUNIT_TEST_SUITE_END(); + +public: + void TestBasic() { + constexpr char input[] = "foo.bar"; + const DivideString ds(input, '.'); + CPPUNIT_ASSERT(ds.IsDefined()); + CPPUNIT_ASSERT(!ds.IsEmpty()); + CPPUNIT_ASSERT_EQUAL(0, strcmp(ds.GetFirst(), "foo")); + CPPUNIT_ASSERT_EQUAL(input + 4, ds.GetSecond()); + } + + void TestEmpty() { + constexpr char input[] = ".bar"; + const DivideString ds(input, '.'); + CPPUNIT_ASSERT(ds.IsDefined()); + CPPUNIT_ASSERT(ds.IsEmpty()); + CPPUNIT_ASSERT_EQUAL(0, strcmp(ds.GetFirst(), "")); + CPPUNIT_ASSERT_EQUAL(input + 1, ds.GetSecond()); + } + + void TestFail() { + constexpr char input[] = "foo!bar"; + const DivideString ds(input, '.'); + CPPUNIT_ASSERT(!ds.IsDefined()); + } + + void TestStrip() { + constexpr char input[] = " foo\t.\nbar\r"; + const DivideString ds(input, '.', true); + CPPUNIT_ASSERT(ds.IsDefined()); + CPPUNIT_ASSERT(!ds.IsEmpty()); + CPPUNIT_ASSERT_EQUAL(0, strcmp(ds.GetFirst(), "foo")); + CPPUNIT_ASSERT_EQUAL(input + 7, ds.GetSecond()); + } +}; diff --git a/test/DumpDatabase.cxx b/test/DumpDatabase.cxx index 07f342319..4f00006c7 100644 --- a/test/DumpDatabase.cxx +++ b/test/DumpDatabase.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -27,16 +27,13 @@ #include "db/LightSong.hxx" #include "db/PlaylistVector.hxx" #include "config/ConfigGlobal.hxx" -#include "config/ConfigData.hxx" +#include "config/Param.hxx" +#include "config/Block.hxx" #include "tag/TagConfig.hxx" #include "fs/Path.hxx" #include "event/Loop.hxx" #include "util/Error.hxx" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <iostream> using std::cout; using std::cerr; @@ -44,7 +41,7 @@ using std::endl; #include <stdlib.h> -#ifdef HAVE_LIBUPNP +#ifdef ENABLE_UPNP #include "input/InputStream.hxx" size_t InputStream::LockRead(void *, size_t, Error &) @@ -107,14 +104,6 @@ main(int argc, char **argv) return EXIT_FAILURE; } - /* initialize GLib */ - -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(nullptr); -#endif -#endif - /* initialize MPD */ config_global_init(); @@ -132,13 +121,13 @@ main(int argc, char **argv) /* do it */ - const struct config_param *path = config_get_param(CONF_DB_FILE); - config_param param("database", path != nullptr ? path->line : -1); + const auto *path = config_get_param(ConfigOption::DB_FILE); + ConfigBlock block(path != nullptr ? path->line : -1); if (path != nullptr) - param.AddBlockParam("path", path->value.c_str(), path->line); + block.AddBlockParam("path", path->value.c_str(), path->line); Database *db = plugin->create(event_loop, database_listener, - param, error); + block, error); if (db == nullptr) { cerr << error.GetMessage() << endl; diff --git a/test/FakeDecoderAPI.cxx b/test/FakeDecoderAPI.cxx index 3c7453a4f..49f7a7a5e 100644 --- a/test/FakeDecoderAPI.cxx +++ b/test/FakeDecoderAPI.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -145,8 +145,13 @@ decoder_data(gcc_unused Decoder &decoder, DecoderCommand decoder_tag(gcc_unused Decoder &decoder, gcc_unused InputStream *is, - gcc_unused Tag &&tag) + Tag &&tag) { + fprintf(stderr, "TAG: duration=%f\n", tag.duration.ToDoubleS()); + + for (const auto &i : tag) + fprintf(stderr, " %s=%s\n", tag_item_names[i.type], i.value); + return DecoderCommand::NONE; } diff --git a/test/FakeDecoderAPI.hxx b/test/FakeDecoderAPI.hxx index 6f1933977..20bdee799 100644 --- a/test/FakeDecoderAPI.hxx +++ b/test/FakeDecoderAPI.hxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/FakeReplayGainConfig.cxx b/test/FakeReplayGainConfig.cxx index 0cb282050..a95f3e888 100644 --- a/test/FakeReplayGainConfig.cxx +++ b/test/FakeReplayGainConfig.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/ScopeIOThread.hxx b/test/ScopeIOThread.hxx index 06d27a4b8..1eb16912f 100644 --- a/test/ScopeIOThread.hxx +++ b/test/ScopeIOThread.hxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/ShutdownHandler.cxx b/test/ShutdownHandler.cxx index c04834444..b55b9ff6a 100644 --- a/test/ShutdownHandler.cxx +++ b/test/ShutdownHandler.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/ShutdownHandler.hxx b/test/ShutdownHandler.hxx index 9db88a1b4..e808bbeb1 100644 --- a/test/ShutdownHandler.hxx +++ b/test/ShutdownHandler.hxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/SplitStringTest.hxx b/test/SplitStringTest.hxx new file mode 100644 index 000000000..87ed385ea --- /dev/null +++ b/test/SplitStringTest.hxx @@ -0,0 +1,65 @@ +/* + * Unit tests for src/util/ + */ + +#include "check.h" +#include "util/SplitString.hxx" +#include "util/Macros.hxx" + +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <string.h> + +class SplitStringTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(SplitStringTest); + CPPUNIT_TEST(TestBasic); + CPPUNIT_TEST(TestStrip); + CPPUNIT_TEST(TestNoStrip); + CPPUNIT_TEST(TestEmpty); + CPPUNIT_TEST_SUITE_END(); + +public: + void TestBasic() { + constexpr char input[] = "foo.bar"; + const char *const output[] = { "foo", "bar" }; + size_t i = 0; + for (auto p : SplitString(input, '.')) { + CPPUNIT_ASSERT(i < ARRAY_SIZE(output)); + CPPUNIT_ASSERT(p == output[i]); + ++i; + } + + CPPUNIT_ASSERT_EQUAL(ARRAY_SIZE(output), i); + } + + void TestStrip() { + constexpr char input[] = " foo\t.\r\nbar\r\n2"; + const char *const output[] = { "foo", "bar\r\n2" }; + size_t i = 0; + for (auto p : SplitString(input, '.')) { + CPPUNIT_ASSERT(i < ARRAY_SIZE(output)); + CPPUNIT_ASSERT(p == output[i]); + ++i; + } + + CPPUNIT_ASSERT_EQUAL(ARRAY_SIZE(output), i); + } + + void TestNoStrip() { + constexpr char input[] = " foo\t.\r\nbar\r\n2"; + const char *const output[] = { " foo\t", "\r\nbar\r\n2" }; + size_t i = 0; + for (auto p : SplitString(input, '.', false)) { + CPPUNIT_ASSERT(i < ARRAY_SIZE(output)); + CPPUNIT_ASSERT(p == output[i]); + ++i; + } + + CPPUNIT_ASSERT_EQUAL(ARRAY_SIZE(output), i); + } + + void TestEmpty() { + CPPUNIT_ASSERT(SplitString("", '.').empty()); + } +}; diff --git a/test/TestCircularBuffer.hxx b/test/TestCircularBuffer.hxx index c808d85dc..4283be45b 100644 --- a/test/TestCircularBuffer.hxx +++ b/test/TestCircularBuffer.hxx @@ -2,17 +2,12 @@ * Unit tests for class CircularBuffer. */ -#include "config.h" +#include "check.h" #include "util/CircularBuffer.hxx" #include <cppunit/TestFixture.h> -#include <cppunit/extensions/TestFactoryRegistry.h> -#include <cppunit/ui/text/TestRunner.h> #include <cppunit/extensions/HelperMacros.h> -#include <string.h> -#include <stdlib.h> - class TestCircularBuffer : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(TestCircularBuffer); CPPUNIT_TEST(TestIt); diff --git a/test/TestIcu.cxx b/test/TestIcu.cxx new file mode 100644 index 000000000..9d525d698 --- /dev/null +++ b/test/TestIcu.cxx @@ -0,0 +1,82 @@ +/* + * Unit tests for src/util/ + */ + +#include "config.h" +#include "lib/icu/Converter.hxx" +#include "util/Error.hxx" + +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/TestFactoryRegistry.h> +#include <cppunit/ui/text/TestRunner.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <string.h> +#include <stdlib.h> + +#ifdef HAVE_ICU_CONVERTER + +static const char *const invalid_utf8[] = { + "\xfc", +}; + +struct StringPair { + const char *utf8, *other; +}; + +static constexpr StringPair latin1_tests[] = { + { "foo", "foo" }, + { "\xc3\xbc", "\xfc" }, +}; + +class TestIcuConverter : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(TestIcuConverter); + CPPUNIT_TEST(TestInvalidCharset); + CPPUNIT_TEST(TestLatin1); + CPPUNIT_TEST_SUITE_END(); + +public: + void TestInvalidCharset() { + CPPUNIT_ASSERT_EQUAL((IcuConverter *)nullptr, + IcuConverter::Create("doesntexist", + IgnoreError())); + } + + void TestLatin1() { + IcuConverter *const converter = + IcuConverter::Create("iso-8859-1", IgnoreError()); + CPPUNIT_ASSERT(converter != nullptr); + + for (const auto i : invalid_utf8) { + auto f = converter->FromUTF8(i); + CPPUNIT_ASSERT_EQUAL(true, f.empty()); + } + + for (const auto i : latin1_tests) { + auto f = converter->FromUTF8(i.utf8); + CPPUNIT_ASSERT_EQUAL(true, f == i.other); + + auto t = converter->ToUTF8(i.other); + CPPUNIT_ASSERT_EQUAL(true, t == i.utf8); + } + + delete converter; + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(TestIcuConverter); + +#endif + +int +main(gcc_unused int argc, gcc_unused char **argv) +{ +#ifdef HAVE_ICU_CONVERTER + CppUnit::TextUi::TestRunner runner; + auto ®istry = CppUnit::TestFactoryRegistry::getRegistry(); + runner.addTest(registry.makeTest()); + return runner.run() ? EXIT_SUCCESS : EXIT_FAILURE; +#else + return EXIT_SUCCESS; +#endif +} diff --git a/test/UriUtilTest.hxx b/test/UriUtilTest.hxx new file mode 100644 index 000000000..07f52a475 --- /dev/null +++ b/test/UriUtilTest.hxx @@ -0,0 +1,66 @@ +/* + * Unit tests for src/util/ + */ + +#include "check.h" +#include "util/UriUtil.hxx" + +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <string.h> + +class UriUtilTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(UriUtilTest); + CPPUNIT_TEST(TestSuffix); + CPPUNIT_TEST(TestRemoveAuth); + CPPUNIT_TEST_SUITE_END(); + +public: + void TestSuffix() { + CPPUNIT_ASSERT_EQUAL((const char *)nullptr, + uri_get_suffix("/foo/bar")); + CPPUNIT_ASSERT_EQUAL((const char *)nullptr, + uri_get_suffix("/foo.jpg/bar")); + CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo/bar.jpg"), + "jpg")); + CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo.png/bar.jpg"), + "jpg")); + CPPUNIT_ASSERT_EQUAL((const char *)nullptr, + uri_get_suffix(".jpg")); + CPPUNIT_ASSERT_EQUAL((const char *)nullptr, + uri_get_suffix("/foo/.jpg")); + + /* the first overload does not eliminate the query + string */ + CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo/bar.jpg?query_string"), + "jpg?query_string")); + + /* ... but the second one does */ + UriSuffixBuffer buffer; + CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo/bar.jpg?query_string", + buffer), + "jpg")); + + /* repeat some of the above tests with the second overload */ + CPPUNIT_ASSERT_EQUAL((const char *)nullptr, + uri_get_suffix("/foo/bar", buffer)); + CPPUNIT_ASSERT_EQUAL((const char *)nullptr, + uri_get_suffix("/foo.jpg/bar", buffer)); + CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo/bar.jpg", buffer), + "jpg")); + } + + void TestRemoveAuth() { + CPPUNIT_ASSERT_EQUAL(std::string(), + uri_remove_auth("http://www.example.com/")); + CPPUNIT_ASSERT_EQUAL(std::string("http://www.example.com/"), + uri_remove_auth("http://foo:bar@www.example.com/")); + CPPUNIT_ASSERT_EQUAL(std::string("http://www.example.com/"), + uri_remove_auth("http://foo@www.example.com/")); + CPPUNIT_ASSERT_EQUAL(std::string(), + uri_remove_auth("http://www.example.com/f:oo@bar")); + CPPUNIT_ASSERT_EQUAL(std::string("ftp://ftp.example.com/"), + uri_remove_auth("ftp://foo:bar@ftp.example.com/")); + } +}; diff --git a/test/WriteFile.cxx b/test/WriteFile.cxx new file mode 100644 index 000000000..706ca65eb --- /dev/null +++ b/test/WriteFile.cxx @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2003-2015 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 "fs/io/FileOutputStream.hxx" +#include "util/Error.hxx" + +#include <unistd.h> +#include <errno.h> +#include <string.h> + +static bool +Copy(OutputStream &dest, int src) +{ + Error error; + + while (true) { + uint8_t buffer[8192]; + ssize_t nbytes = read(src, buffer, sizeof(buffer)); + if (nbytes < 0) { + fprintf(stderr, "Failed to read from stdin: %s\n", + strerror(errno)); + return false; + } + + if (nbytes == 0) + return true; + + if (!dest.Write(buffer, nbytes, error)) { + fprintf(stderr, "%s\n", error.GetMessage()); + return false; + } + } +} + +int +main(int argc, char **argv) +{ + if (argc != 2) { + fprintf(stderr, "Usage: WriteFile PATH\n"); + return EXIT_FAILURE; + } + + const Path path = Path::FromFS(argv[1]); + + Error error; + FileOutputStream fos(path, error); + if (!fos.IsDefined()) { + fprintf(stderr, "%s\n", error.GetMessage()); + return EXIT_FAILURE; + } + + if (!Copy(fos, STDIN_FILENO)) + return EXIT_FAILURE; + + if (!fos.Commit(error)) { + fprintf(stderr, "%s\n", error.GetMessage()); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/test/dump_playlist.cxx b/test/dump_playlist.cxx index 0047ef427..4a21e2df5 100644 --- a/test/dump_playlist.cxx +++ b/test/dump_playlist.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -35,10 +35,6 @@ #include "thread/Cond.hxx" #include "Log.hxx" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <unistd.h> #include <stdlib.h> @@ -64,14 +60,6 @@ int main(int argc, char **argv) const Path config_path = Path::FromFS(argv[1]); uri = argv[2]; - /* initialize GLib */ - -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - /* initialize MPD */ config_global_init(); diff --git a/test/dump_rva2.cxx b/test/dump_rva2.cxx index fd46ee36c..fff0aa044 100644 --- a/test/dump_rva2.cxx +++ b/test/dump_rva2.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/dump_text_file.cxx b/test/dump_text_file.cxx index 5bfd316a5..686adb744 100644 --- a/test/dump_text_file.cxx +++ b/test/dump_text_file.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -32,10 +32,6 @@ #include "archive/ArchiveList.hxx" #endif -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <unistd.h> #include <stdio.h> #include <stdlib.h> @@ -79,14 +75,6 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - /* initialize GLib */ - -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - /* initialize MPD */ config_global_init(); diff --git a/test/read_conf.cxx b/test/read_conf.cxx index 42afdfb4b..cb3cb207e 100644 --- a/test/read_conf.cxx +++ b/test/read_conf.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -46,7 +46,7 @@ int main(int argc, char **argv) } ConfigOption option = ParseConfigOptionName(name); - const char *value = option != CONF_MAX + const char *value = option != ConfigOption::MAX ? config_get_string(option, nullptr) : nullptr; int ret; diff --git a/test/read_mixer.cxx b/test/read_mixer.cxx index 83a1d26b4..2d68aab09 100644 --- a/test/read_mixer.cxx +++ b/test/read_mixer.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -24,14 +24,10 @@ #include "pcm/Volume.hxx" #include "Main.hxx" #include "event/Loop.hxx" -#include "config/ConfigData.hxx" +#include "config/Block.hxx" #include "util/Error.hxx" #include "Log.hxx" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <assert.h> #include <string.h> #include <unistd.h> @@ -53,19 +49,13 @@ int main(int argc, gcc_unused char **argv) return EXIT_FAILURE; } -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - EventLoop event_loop; Error error; Mixer *mixer = mixer_new(event_loop, alsa_mixer_plugin, *(AudioOutput *)nullptr, *(MixerListener *)nullptr, - config_param(), error); + ConfigBlock(), error); if (mixer == NULL) { LogError(error, "mixer_new() failed"); return EXIT_FAILURE; diff --git a/test/read_tags.cxx b/test/read_tags.cxx index 91ac9c674..a00e87529 100644 --- a/test/read_tags.cxx +++ b/test/read_tags.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -32,10 +32,6 @@ #include "thread/Cond.hxx" #include "Log.hxx" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <assert.h> #include <unistd.h> #include <stdlib.h> @@ -90,12 +86,6 @@ int main(int argc, char **argv) decoder_name = argv[1]; const Path path = Path::FromFS(argv[2]); -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - const ScopeIOThread io_thread; Error error; diff --git a/test/run_avahi.cxx b/test/run_avahi.cxx index b3b20365c..5c1c77d27 100644 --- a/test/run_avahi.cxx +++ b/test/run_avahi.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/run_convert.cxx b/test/run_convert.cxx index 8b9b15cf0..1929d6c02 100644 --- a/test/run_convert.cxx +++ b/test/run_convert.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -27,7 +27,6 @@ #include "AudioParser.hxx" #include "AudioFormat.hxx" #include "pcm/PcmConvert.hxx" -#include "config/ConfigGlobal.hxx" #include "util/ConstBuffer.hxx" #include "util/StaticFifoBuffer.hxx" #include "util/Error.hxx" @@ -39,13 +38,6 @@ #include <stdlib.h> #include <unistd.h> -const char * -config_get_string(gcc_unused enum ConfigOption option, - const char *default_value) -{ - return default_value; -} - int main(int argc, char **argv) { AudioFormat in_audio_format, out_audio_format; diff --git a/test/run_decoder.cxx b/test/run_decoder.cxx index 0e9af6a1a..ebebc1188 100644 --- a/test/run_decoder.cxx +++ b/test/run_decoder.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -30,10 +30,6 @@ #include "Log.hxx" #include "stdbin.h" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <assert.h> #include <unistd.h> #include <stdlib.h> @@ -50,12 +46,6 @@ int main(int argc, char **argv) const char *const decoder_name = argv[1]; const char *const uri = argv[2]; -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - const ScopeIOThread io_thread; Error error; diff --git a/test/run_encoder.cxx b/test/run_encoder.cxx index f16d8cb0a..307d1b73d 100644 --- a/test/run_encoder.cxx +++ b/test/run_encoder.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -20,29 +20,20 @@ #include "config.h" #include "encoder/EncoderList.hxx" #include "encoder/EncoderPlugin.hxx" +#include "encoder/EncoderInterface.hxx" +#include "encoder/ToOutputStream.hxx" #include "AudioFormat.hxx" #include "AudioParser.hxx" -#include "config/ConfigData.hxx" +#include "config/Block.hxx" +#include "fs/io/StdioOutputStream.hxx" #include "util/Error.hxx" #include "Log.hxx" -#include "stdbin.h" #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <unistd.h> -static void -encoder_to_stdout(Encoder &encoder) -{ - size_t length; - static char buffer[32768]; - - while ((length = encoder_read(&encoder, buffer, sizeof(buffer))) > 0) { - gcc_unused ssize_t ignored = write(1, buffer, length); - } -} - int main(int argc, char **argv) { const char *encoder_name; @@ -69,11 +60,11 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - config_param param; - param.AddBlockParam("quality", "5.0", -1); + ConfigBlock block; + block.AddBlockParam("quality", "5.0", -1); Error error; - const auto encoder = encoder_init(*plugin, param, error); + const auto encoder = encoder_init(*plugin, block, error); if (encoder == NULL) { LogError(error, "Failed to initialize encoder"); return EXIT_FAILURE; @@ -89,12 +80,17 @@ int main(int argc, char **argv) } } - if (!encoder_open(encoder, audio_format, error)) { + if (!encoder->Open(audio_format, error)) { LogError(error, "Failed to open encoder"); return EXIT_FAILURE; } - encoder_to_stdout(*encoder); + StdioOutputStream os(stdout); + + if (!EncoderToOutputStream(os, *encoder, error)) { + LogError(error); + return EXIT_FAILURE; + } /* do it */ @@ -105,7 +101,10 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - encoder_to_stdout(*encoder); + if (!EncoderToOutputStream(os, *encoder, error)) { + LogError(error); + return EXIT_FAILURE; + } } if (!encoder_end(encoder, error)) { @@ -113,8 +112,11 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - encoder_to_stdout(*encoder); + if (!EncoderToOutputStream(os, *encoder, error)) { + LogError(error); + return EXIT_FAILURE; + } - encoder_close(encoder); - encoder_finish(encoder); + encoder->Close(); + encoder->Dispose(); } diff --git a/test/run_filter.cxx b/test/run_filter.cxx index ab99c9a1e..d743937d5 100644 --- a/test/run_filter.cxx +++ b/test/run_filter.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -18,7 +18,7 @@ */ #include "config.h" -#include "config/ConfigData.hxx" +#include "config/Param.hxx" #include "config/ConfigGlobal.hxx" #include "fs/Path.hxx" #include "AudioParser.hxx" @@ -33,10 +33,6 @@ #include "system/FatalError.hxx" #include "Log.hxx" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <assert.h> #include <string.h> #include <stdlib.h> @@ -54,8 +50,8 @@ mixer_set_volume(gcc_unused Mixer *mixer, static Filter * load_filter(const char *name) { - const config_param *param = - config_find_block(CONF_AUDIO_FILTER, "name", name); + const auto *param = config_find_block(ConfigBlockOption::AUDIO_FILTER, + "name", name); if (param == NULL) { fprintf(stderr, "No such configured filter: %s\n", name); return nullptr; @@ -86,14 +82,6 @@ int main(int argc, char **argv) AudioFormat audio_format(44100, SampleFormat::S16, 2); - /* initialize GLib */ - -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - /* read configuration file (mpd.conf) */ config_global_init(); diff --git a/test/run_gunzip.cxx b/test/run_gunzip.cxx index 51bdb532e..7ea70678a 100644 --- a/test/run_gunzip.cxx +++ b/test/run_gunzip.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/run_gzip.cxx b/test/run_gzip.cxx index c52b32ac7..15b769f0a 100644 --- a/test/run_gzip.cxx +++ b/test/run_gzip.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/run_inotify.cxx b/test/run_inotify.cxx index df4046356..ae4f196f8 100644 --- a/test/run_inotify.cxx +++ b/test/run_inotify.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/run_input.cxx b/test/run_input.cxx index 6864a5d64..9cce593ef 100644 --- a/test/run_input.cxx +++ b/test/run_input.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -35,10 +35,6 @@ #include "archive/ArchiveList.hxx" #endif -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <unistd.h> #include <stdlib.h> @@ -105,14 +101,6 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - /* initialize GLib */ - -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - /* initialize MPD */ config_global_init(); diff --git a/test/run_neighbor_explorer.cxx b/test/run_neighbor_explorer.cxx index c79948d6e..29582fc55 100644 --- a/test/run_neighbor_explorer.cxx +++ b/test/run_neighbor_explorer.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/run_normalize.cxx b/test/run_normalize.cxx index 9a361b790..881ff4696 100644 --- a/test/run_normalize.cxx +++ b/test/run_normalize.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/run_output.cxx b/test/run_output.cxx index 345127556..88d9491dd 100644 --- a/test/run_output.cxx +++ b/test/run_output.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -20,7 +20,7 @@ #include "config.h" #include "output/Internal.hxx" #include "output/OutputPlugin.hxx" -#include "config/ConfigData.hxx" +#include "config/Param.hxx" #include "config/ConfigGlobal.hxx" #include "config/ConfigOption.hxx" #include "Idle.hxx" @@ -36,10 +36,6 @@ #include "util/Error.hxx" #include "Log.hxx" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <assert.h> #include <string.h> #include <unistd.h> @@ -65,8 +61,8 @@ PlayerControl::~PlayerControl() {} static AudioOutput * load_audio_output(EventLoop &event_loop, const char *name) { - const config_param *param = - config_find_block(CONF_AUDIO_OUTPUT, "name", name); + const auto *param = config_find_block(ConfigBlockOption::AUDIO_OUTPUT, + "name", name); if (param == NULL) { fprintf(stderr, "No such configured audio output: %s\n", name); return nullptr; @@ -163,12 +159,6 @@ int main(int argc, char **argv) AudioFormat audio_format(44100, SampleFormat::S16, 2); -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - /* read configuration file (mpd.conf) */ config_global_init(); diff --git a/test/run_resolver.cxx b/test/run_resolver.cxx index 71cadbeec..389d733b1 100644 --- a/test/run_resolver.cxx +++ b/test/run_resolver.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -18,7 +18,8 @@ */ #include "config.h" -#include "system/Resolver.hxx" +#include "net/Resolver.hxx" +#include "net/SocketAddress.hxx" #include "util/Error.hxx" #include "Log.hxx" @@ -50,7 +51,7 @@ int main(int argc, char **argv) } for (const struct addrinfo *i = ai; i != NULL; i = i->ai_next) { - const auto s = sockaddr_to_string(i->ai_addr, i->ai_addrlen); + const auto s = sockaddr_to_string({i->ai_addr, i->ai_addrlen}); printf("%s\n", s.c_str()); } diff --git a/test/run_storage.cxx b/test/run_storage.cxx index 9fc6e6e76..0d99676d5 100644 --- a/test/run_storage.cxx +++ b/test/run_storage.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -24,10 +24,6 @@ #include "storage/FileInfo.hxx" #include "util/Error.hxx" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <memory> #include <unistd.h> @@ -60,7 +56,7 @@ Ls(Storage &storage, const char *path) const char *name; while ((name = dir->Read()) != nullptr) { - FileInfo info; + StorageFileInfo info; if (!dir->GetInfo(false, info, error)) { printf("Error on %s: %s\n", name, error.GetMessage()); error.Clear(); @@ -69,15 +65,15 @@ Ls(Storage &storage, const char *path) const char *type = "unk"; switch (info.type) { - case FileInfo::Type::OTHER: + case StorageFileInfo::Type::OTHER: type = "oth"; break; - case FileInfo::Type::REGULAR: + case StorageFileInfo::Type::REGULAR: type = "reg"; break; - case FileInfo::Type::DIRECTORY: + case StorageFileInfo::Type::DIRECTORY: type = "dir"; break; } @@ -102,14 +98,6 @@ main(int argc, char **argv) return EXIT_FAILURE; } - /* initialize GLib */ - -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - const char *const command = argv[1]; const char *const storage_uri = argv[2]; diff --git a/test/software_volume.cxx b/test/software_volume.cxx index 1e41f95fd..7aa89ec0c 100644 --- a/test/software_volume.cxx +++ b/test/software_volume.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/stdbin.h b/test/stdbin.h index 8b5502e6f..d69bbb4ee 100644 --- a/test/stdbin.h +++ b/test/stdbin.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_byte_reverse.cxx b/test/test_byte_reverse.cxx index 0ab97e4d1..a57753e38 100644 --- a/test/test_byte_reverse.cxx +++ b/test/test_byte_reverse.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_all.hxx b/test/test_pcm_all.hxx index 7cdd8b63f..b97b20b69 100644 --- a/test/test_pcm_all.hxx +++ b/test/test_pcm_all.hxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_channels.cxx b/test/test_pcm_channels.cxx index 748a76351..fa6aa32da 100644 --- a/test/test_pcm_channels.cxx +++ b/test/test_pcm_channels.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_dither.cxx b/test/test_pcm_dither.cxx index 09a2b5cf9..f1a375f6c 100644 --- a/test/test_pcm_dither.cxx +++ b/test/test_pcm_dither.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_export.cxx b/test/test_pcm_export.cxx index 410e64e4d..347e2394a 100644 --- a/test/test_pcm_export.cxx +++ b/test/test_pcm_export.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_format.cxx b/test/test_pcm_format.cxx index 825a8bd84..ac9e47240 100644 --- a/test/test_pcm_format.cxx +++ b/test/test_pcm_format.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_main.cxx b/test/test_pcm_main.cxx index 0e397a15c..d8861a370 100644 --- a/test/test_pcm_main.cxx +++ b/test/test_pcm_main.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_mix.cxx b/test/test_pcm_mix.cxx index 973b58f4d..9abe476fa 100644 --- a/test/test_pcm_mix.cxx +++ b/test/test_pcm_mix.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_pack.cxx b/test/test_pcm_pack.cxx index fff3e10f0..20732f0b6 100644 --- a/test/test_pcm_pack.cxx +++ b/test/test_pcm_pack.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_util.hxx b/test/test_pcm_util.hxx index f1efbc666..7fc1db5e5 100644 --- a/test/test_pcm_util.hxx +++ b/test/test_pcm_util.hxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_pcm_volume.cxx b/test/test_pcm_volume.cxx index 2d908f6c1..55b54244c 100644 --- a/test/test_pcm_volume.cxx +++ b/test/test_pcm_volume.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify diff --git a/test/test_util.cxx b/test/test_util.cxx index 3e79aeca0..c2d73d7d9 100644 --- a/test/test_util.cxx +++ b/test/test_util.cxx @@ -3,7 +3,9 @@ */ #include "config.h" -#include "util/UriUtil.hxx" +#include "DivideStringTest.hxx" +#include "SplitStringTest.hxx" +#include "UriUtilTest.hxx" #include "TestCircularBuffer.hxx" #include <cppunit/TestFixture.h> @@ -11,64 +13,10 @@ #include <cppunit/ui/text/TestRunner.h> #include <cppunit/extensions/HelperMacros.h> -#include <string.h> #include <stdlib.h> -class UriUtilTest : public CppUnit::TestFixture { - CPPUNIT_TEST_SUITE(UriUtilTest); - CPPUNIT_TEST(TestSuffix); - CPPUNIT_TEST(TestRemoveAuth); - CPPUNIT_TEST_SUITE_END(); - -public: - void TestSuffix() { - CPPUNIT_ASSERT_EQUAL((const char *)nullptr, - uri_get_suffix("/foo/bar")); - CPPUNIT_ASSERT_EQUAL((const char *)nullptr, - uri_get_suffix("/foo.jpg/bar")); - CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo/bar.jpg"), - "jpg")); - CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo.png/bar.jpg"), - "jpg")); - CPPUNIT_ASSERT_EQUAL((const char *)nullptr, - uri_get_suffix(".jpg")); - CPPUNIT_ASSERT_EQUAL((const char *)nullptr, - uri_get_suffix("/foo/.jpg")); - - /* the first overload does not eliminate the query - string */ - CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo/bar.jpg?query_string"), - "jpg?query_string")); - - /* ... but the second one does */ - UriSuffixBuffer buffer; - CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo/bar.jpg?query_string", - buffer), - "jpg")); - - /* repeat some of the above tests with the second overload */ - CPPUNIT_ASSERT_EQUAL((const char *)nullptr, - uri_get_suffix("/foo/bar", buffer)); - CPPUNIT_ASSERT_EQUAL((const char *)nullptr, - uri_get_suffix("/foo.jpg/bar", buffer)); - CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo/bar.jpg", buffer), - "jpg")); - } - - void TestRemoveAuth() { - CPPUNIT_ASSERT_EQUAL(std::string(), - uri_remove_auth("http://www.example.com/")); - CPPUNIT_ASSERT_EQUAL(std::string("http://www.example.com/"), - uri_remove_auth("http://foo:bar@www.example.com/")); - CPPUNIT_ASSERT_EQUAL(std::string("http://www.example.com/"), - uri_remove_auth("http://foo@www.example.com/")); - CPPUNIT_ASSERT_EQUAL(std::string(), - uri_remove_auth("http://www.example.com/f:oo@bar")); - CPPUNIT_ASSERT_EQUAL(std::string("ftp://ftp.example.com/"), - uri_remove_auth("ftp://foo:bar@ftp.example.com/")); - } -}; - +CPPUNIT_TEST_SUITE_REGISTRATION(DivideStringTest); +CPPUNIT_TEST_SUITE_REGISTRATION(SplitStringTest); CPPUNIT_TEST_SUITE_REGISTRATION(UriUtilTest); CPPUNIT_TEST_SUITE_REGISTRATION(TestCircularBuffer); diff --git a/test/test_vorbis_encoder.cxx b/test/test_vorbis_encoder.cxx index 59b901da2..81b7b1cbe 100644 --- a/test/test_vorbis_encoder.cxx +++ b/test/test_vorbis_encoder.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -20,29 +20,21 @@ #include "config.h" #include "encoder/EncoderList.hxx" #include "encoder/EncoderPlugin.hxx" +#include "encoder/EncoderInterface.hxx" +#include "encoder/ToOutputStream.hxx" #include "AudioFormat.hxx" -#include "config/ConfigData.hxx" -#include "stdbin.h" +#include "config/Block.hxx" +#include "fs/io/StdioOutputStream.hxx" #include "tag/Tag.hxx" #include "tag/TagBuilder.hxx" #include "util/Error.hxx" +#include "Log.hxx" #include <stddef.h> #include <unistd.h> static uint8_t zero[256]; -static void -encoder_to_stdout(Encoder &encoder) -{ - size_t length; - static char buffer[32768]; - - while ((length = encoder_read(&encoder, buffer, sizeof(buffer))) > 0) { - gcc_unused ssize_t ignored = write(1, buffer, length); - } -} - int main(gcc_unused int argc, gcc_unused char **argv) { @@ -53,33 +45,45 @@ main(gcc_unused int argc, gcc_unused char **argv) const auto plugin = encoder_plugin_get("vorbis"); assert(plugin != NULL); - config_param param; - param.AddBlockParam("quality", "5.0", -1); + ConfigBlock block; + block.AddBlockParam("quality", "5.0", -1); - const auto encoder = encoder_init(*plugin, param, IgnoreError()); + const auto encoder = encoder_init(*plugin, block, IgnoreError()); assert(encoder != NULL); /* open the encoder */ AudioFormat audio_format(44100, SampleFormat::S16, 2); - success = encoder_open(encoder, audio_format, IgnoreError()); + success = encoder->Open(audio_format, IgnoreError()); assert(success); - encoder_to_stdout(*encoder); + StdioOutputStream os(stdout); + + Error error; + if (!EncoderToOutputStream(os, *encoder, error)) { + LogError(error); + return EXIT_FAILURE; + } /* write a block of data */ success = encoder_write(encoder, zero, sizeof(zero), IgnoreError()); assert(success); - encoder_to_stdout(*encoder); + if (!EncoderToOutputStream(os, *encoder, error)) { + LogError(error); + return EXIT_FAILURE; + } /* write a tag */ success = encoder_pre_tag(encoder, IgnoreError()); assert(success); - encoder_to_stdout(*encoder); + if (!EncoderToOutputStream(os, *encoder, error)) { + LogError(error); + return EXIT_FAILURE; + } Tag tag; @@ -90,10 +94,13 @@ main(gcc_unused int argc, gcc_unused char **argv) tag_builder.Commit(tag); } - success = encoder_tag(encoder, &tag, IgnoreError()); + success = encoder_tag(encoder, tag, IgnoreError()); assert(success); - encoder_to_stdout(*encoder); + if (!EncoderToOutputStream(os, *encoder, error)) { + LogError(error); + return EXIT_FAILURE; + } /* write another block of data */ @@ -105,8 +112,11 @@ main(gcc_unused int argc, gcc_unused char **argv) success = encoder_end(encoder, IgnoreError()); assert(success); - encoder_to_stdout(*encoder); + if (!EncoderToOutputStream(os, *encoder, error)) { + LogError(error); + return EXIT_FAILURE; + } - encoder_close(encoder); - encoder_finish(encoder); + encoder->Close(); + encoder->Dispose(); } diff --git a/test/visit_archive.cxx b/test/visit_archive.cxx index 1ff3ba484..5e8634def 100644 --- a/test/visit_archive.cxx +++ b/test/visit_archive.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 The Music Player Daemon Project + * Copyright (C) 2003-2015 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -30,10 +30,6 @@ #include "fs/Path.hxx" #include "util/Error.hxx" -#ifdef HAVE_GLIB -#include <glib.h> -#endif - #include <unistd.h> #include <stdlib.h> @@ -57,14 +53,6 @@ main(int argc, char **argv) const char *plugin_name = argv[1]; const Path path = Path::FromFS(argv[2]); - /* initialize GLib */ - -#ifdef HAVE_GLIB -#if !GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif -#endif - /* initialize MPD */ config_global_init(); |