Max Kellermann
c4f7740b80
fs/Path: replace method Null() with nullptr_t constructor
2018-01-17 12:16:21 +01:00
Max Kellermann
6c239f7a00
test/run_input: add option to load a configuration file
2018-01-17 12:09:08 +01:00
Max Kellermann
7d5b859756
test/run_input: add command-line option parser
2018-01-17 12:04:01 +01:00
Max Kellermann
3e2e0d062b
util/OptionParser: support option values
2018-01-17 11:14:57 +01:00
Max Kellermann
c45fe3517c
util/OptionParser: add struct Result
...
Prepare for option values.
2018-01-17 11:08:05 +01:00
Max Kellermann
d588da69e5
CommandLine: convert pointer to reference
2018-01-17 11:08:03 +01:00
Max Kellermann
ec54a5c72c
CommandLine: use C++11 initializers
2018-01-17 11:08:02 +01:00
Max Kellermann
735a371249
util/OptionParser: pass array of OptionDefs to constructor
2018-01-17 10:24:06 +01:00
Max Kellermann
5ab086e337
util/OptionParser: loop in ParseNext() until a new option is found
2018-01-16 11:25:18 +01:00
Max Kellermann
68f660dbcc
util/OptionParser: collect remaining arguments
...
Allow the caller to use a simple "for" loop without checking
arguments.
2018-01-16 11:08:23 +01:00
Max Kellermann
0066f7a818
util/{Const,Writable}Buffer: add constructor with two pointers
2018-01-16 11:06:33 +01:00
Max Kellermann
65059f2add
util/{Const,Writable}Buffer: eliminate static method Null(), use nullptr cast instead
2018-01-16 11:04:51 +01:00
Max Kellermann
23dff4f209
util/OptionParser: use ConstBuffer<const char*> to store argv/argc
2018-01-16 10:22:06 +01:00
Max Kellermann
4a304bf34e
util/OptionParser: make string pointers "const"
2018-01-16 10:20:53 +01:00
Max Kellermann
36a6405e8b
util/OptionParser: add "constexpr"
2018-01-16 10:20:52 +01:00
Max Kellermann
42c1fe963b
util/OptionParser: add "noexcept"
2018-01-16 10:13:39 +01:00
Max Kellermann
465b154fc0
util/OptionParser: use C++11 initializers
2018-01-16 10:12:48 +01:00
Max Kellermann
a0c4102b5a
util/OptionDef: add "constexpr"
2018-01-16 10:11:35 +01:00
Max Kellermann
9420066895
input/qobuz: new input plugin to receive Qobuz streams
2018-01-15 21:50:20 +01:00
Max Kellermann
74eac1d449
lib/curl/Request: add constructor without "url" parameter
...
Allows constructing the request first and set the URL later. This is
needed because curl_easy_escape() is needed to construct the URL,
which however needs the CURL "easy" handle created by the Request class.
2018-01-15 10:36:48 +01:00
Max Kellermann
96676f8f3b
Merge branch 'v0.20.x'
2018-01-15 09:06:31 +01:00
Max Kellermann
93b51d56aa
input/tidal: new input plugin to receive Tidal streams
2018-01-12 14:33:22 +01:00
Max Kellermann
86c50574d2
lib/yajl/Callbacks: add wrappers for start_array and end_array
2018-01-12 14:33:22 +01:00
Max Kellermann
efb528f979
player/Thread: wake up the decoder when the pipe has run empty
...
This is another instance of the kludge we already have a few lines
above that. It works around a deadlock/race condition revealed by
commit 98a7c62d7a
2018-01-12 14:33:22 +01:00
Max Kellermann
edcd0b9913
lib/curl/Request: add methods StartIndirect(), StopIndirect()
2018-01-11 20:51:23 +01:00
Max Kellermann
55d1473918
lib/yajl/Callbacks: OO wrapper for yajl_callbacks
2018-01-11 20:25:17 +01:00
Max Kellermann
0211c7f7f3
lib/yajl/ParseInputStream: use InputStream::LockRead() to reduce lock duration
2018-01-11 20:11:04 +01:00
Max Kellermann
5913994169
lib/yajl/ParseInputStream: eliminate variable "done"
2018-01-11 20:09:52 +01:00
Max Kellermann
26b1573cbe
playlist/SoundCloud: move code to Yajl::Parse(InputStream&)
2018-01-11 20:08:02 +01:00
Max Kellermann
7fe07324d7
playlist/SoundCloud: soundcloud_parse_json() throws exception
2018-01-11 20:08:01 +01:00
Max Kellermann
8e29430f21
lib/yajl/Handle: libyajl C++ bindings
2018-01-11 19:25:46 +01:00
Max Kellermann
326488aeeb
configure.ac: decouple libyajl detection from SoundCloud
...
Allow using libyajl in other parts of MPD.
2018-01-11 19:13:19 +01:00
Max Kellermann
cb86023bd7
lib/curl/Form: new library
2018-01-11 17:27:25 +01:00
Max Kellermann
bd2cb40424
lib/curl/Easy: add curl_easy_escape() wrapper
2018-01-11 17:27:25 +01:00
Max Kellermann
e9a3ff0e70
input/failing: new class
2018-01-11 16:18:15 +01:00
Max Kellermann
5148e229e0
input/proxy: allow input==nullptr
...
Allow implementations to install the "real" input later.
2018-01-11 15:57:57 +01:00
Max Kellermann
1ad21c27c9
input/curl: add public function to construct an instance
2018-01-11 15:53:46 +01:00
Max Kellermann
f392e13077
input/curl: pass additional request headers to constructor
...
Prepare to allow callers to pass custom request headers.
2018-01-11 15:43:59 +01:00
Max Kellermann
3fe5b42b2b
input/curl: pass IcyMetaDataParser to constructor
...
Allows the caller to decide whether to enable the feature.
2018-01-11 15:32:19 +01:00
Max Kellermann
70c4b621cf
input/curl: remove impossible "icy" checks
...
The IcyMetaDataParser cannot be initialized already in OnHeaders(),
because it will be initialized late in that method; and there will not
be another OnHeaders() call, because streams with Icy metadata are not
seekable, thus there will not be another HTTP request.
2018-01-11 14:55:29 +01:00
Max Kellermann
a8df5e109b
input/curl: use StringView::StartsWith()
2018-01-11 14:52:35 +01:00
Max Kellermann
ba4f1da466
input/curl: create the request_headers list only once
2018-01-11 12:49:01 +01:00
Max Kellermann
0bfbe6771e
input/curl: un-inline constructor
2018-01-11 12:46:52 +01:00
Max Kellermann
d1df0fec19
input/curl: add "noexcept"
2018-01-11 12:36:31 +01:00
Max Kellermann
031ccce8b7
input/curl: convert struct to class
2018-01-11 12:31:29 +01:00
Max Kellermann
1f50bdb230
event/Loop: use std::atomic_bool for the "quit" variable
...
Fixes thread sanitizer warnings.
2018-01-08 10:06:23 +01:00
Max Kellermann
2eef4e6716
thread/Thread: add debug attribute "inside_handle"
...
This attribute shall be used only for IsInside() to make this safe
against a race condition described in #188 :
> There is no requirement on the implementation that the ID of the
> created thread be available before the newly created thread starts
> executing.
http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_create.html ):
This means that on some pthread implementations (e.g. Haiku), the
assert(thread.IsInside()) could fail.
Closes #188
2018-01-08 09:58:18 +01:00
Max Kellermann
d989dbfec4
thread/Thread: make IsInside() debug-only
...
This method is only used inside assert().
2018-01-08 09:56:39 +01:00
Max Kellermann
ca9fcec364
thread/Thread: fix indent
2018-01-08 09:49:08 +01:00
Max Kellermann
34eef0ed84
Merge branch 'v0.20.x'
2018-01-07 17:24:05 +01:00