Commit Graph

693 Commits

Author SHA1 Message Date
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
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
8649ea3d6f thread/Thread: use BoundMethod 2018-01-07 17:20:26 +01:00
Max Kellermann
2e0949d8e6 archive/Plugin: return std::unique_ptr<ArchiveFile> 2017-12-27 09:07:21 +01:00
Max Kellermann
7bce6329e3 archive/File, input/Plugin: return InputStreamPtr 2017-12-26 20:05:22 +01:00
Max Kellermann
49619fbd77 input/Proxy: use InputStreamPtr 2017-12-26 20:03:37 +01:00
Max Kellermann
fb9a2c5431 input/Icy: manage the parser in a std::shared_ptr
This resolves the circular dependency between IcyInputStream and
CurlInputStream.
2017-12-26 20:03:35 +01:00
Max Kellermann
cd38aa3b2a Merge branch 'v0.20.x' 2017-12-26 20:03:18 +01:00
Max Kellermann
eee10ad2ed input/curl: add missing mutex locks to OnEnd(), OnError() 2017-12-26 20:01:13 +01:00
Max Kellermann
daeb7ae949 input/InputStream: add "noexcept" 2017-12-26 11:39:34 +01:00
Max Kellermann
82a79565de input/InputStream: use C++11 initializers 2017-12-26 11:32:36 +01:00
Max Kellermann
9aec2f019a archive/File: eliminate Close(), make destructor virtual instead 2017-12-22 16:30:17 +01:00
Max Kellermann
73e69edac3 input/InputStream: ReadTag() returns std::unique_ptr<Tag> 2017-12-20 15:22:18 +01:00
Max Kellermann
4c4fa68268 input/Icy: use std::unique_ptr<Tag> 2017-12-20 15:13:22 +01:00
Max Kellermann
99f4bce112 IcyMetaDataParser: return std::unique_ptr<Tag> 2017-12-20 15:06:33 +01:00
Max Kellermann
c6a95395b5 tag/Tag: Merge() returns std::unique_ptr<Tag> 2017-12-20 14:59:51 +01:00
Max Kellermann
cb3042ffb2 tag/Builder: CommitNew() returns std::unique_ptr<Tag> 2017-12-20 14:55:25 +01:00
Max Kellermann
914df18bf9 Main, ...: catch any exception, not just std::runtime_error 2017-12-19 10:56:23 +01:00
Max Kellermann
6246d36fe6 Merge branch 'v0.20.x' 2017-12-16 20:56:06 +01:00
Max Kellermann
dfaf08743c *: check defined(_WIN32) instead of defined(WIN32)
Only _WIN32 is defined by the compiler, and WIN32 is not standardized
and may be missing.

Closes #169
2017-12-12 10:22:20 +01:00
Max Kellermann
e2c81aa9ea Merge branch 'v0.20.x' 2017-11-14 12:31:13 +01:00
Max Kellermann
31ab78ae8e input/{cdio,ffmpeg,file,smbclient}: unlock the mutex during blocking I/O
InputStream::Read() and InputStream::Seek() are called with the mutex
locked.  That means the implementation must not block, or unlock the
mutex before calling into blocking code.

Previously, a slow CD drive could stall the whole MPD process,
including the main thread, due to this problem.

Closes #149
2017-11-13 17:13:10 +01:00
Max Kellermann
f82e1453e4 input/smbclient: use std::lock_guard 2017-11-13 17:13:10 +01:00
Max Kellermann
a92e0e8540 lib/nfs: add "noexcept" 2017-11-12 18:09:07 +01:00
Max Kellermann
9d47b220a4 lib/curl: add "noexcept" 2017-11-12 17:49:58 +01:00
Max Kellermann
c582a9faae event/MultiSocketMonitor: add "noexcept" 2017-11-12 17:42:50 +01:00
Max Kellermann
02642a64fd input/Plugin: remove "#undef ERROR"
Maybe this was once a required kludge for Windows, but it's not
anymore.
2017-11-10 19:59:03 +01:00
Max Kellermann
49784513b1 util/{Const,Writable}Buffer, ...: rename IsEmpty() to empty(), imitating STL 2017-11-10 19:24:33 +01:00
Max Kellermann
523051132d Merge branch 'v0.20.x' 2017-11-05 17:48:41 +01:00
Max Kellermann
1de19b921a input/curl: call StartRequest() after setting CURLOPT_RANGE
It's not possible to set CURL options after curl_easy_perform(), and
thus the CURLOPT_RANGE had no effect.
2017-10-24 21:43:39 +02:00
Max Kellermann
ff162b5a03 input/curl: move code to StartRequest() 2017-10-24 21:41:17 +02:00
Max Kellermann
d8e4705dd4 input/curl: move the range buffer to the stack
From the CURLOPT_RANGE documentation: "The application does not have
to keep the string around after setting this option."
2017-10-24 21:38:35 +02:00
Max Kellermann
6e7f866288 input/alsa: migrate from DeferredMonitor to DeferEvent 2017-09-21 22:58:00 +02:00
Max Kellermann
9df4853e23 event/DeferredCall: rename to DeferEvent 2017-09-21 22:40:25 +02:00
Max Kellermann
18c4ef09d5 input/thread: use class HugeArray instead of the low-level function HugeAllocate() 2017-09-21 21:56:24 +02:00
Max Kellermann
bc93c7a1fc input/thread: un-inline the constructor 2017-09-21 21:55:24 +02:00
Max Kellermann
9f827c99cb input/async: use class HugeArray instead of HugeAllocation 2017-09-21 21:50:45 +02:00
Max Kellermann
b46835e15e util/HugeAllocator: HugeAllocator() returns WritableBuffer<void> 2017-09-21 21:47:49 +02:00
Max Kellermann
8753e558f2 util/HugeAllocator: move MADV_DONTFORK setting to HugeForkCow()
Enforcing MADV_DONTFORK is a surprising limitation for this library
which aims to be generic.
2017-09-21 19:36:33 +02:00
Max Kellermann
cfc152d979 input/async: remove outdated API documentation 2017-09-19 19:56:37 +02:00
Max Kellermann
513212c5e8 input/async: use std::exchange() 2017-09-19 19:55:16 +02:00
Max Kellermann
99a447dff5 input/async: use C++11 initializers 2017-09-19 19:54:07 +02:00
Max Kellermann
b7d0890bc0 lib/curl/Init: share a CurlGlobal instance between input and storage 2017-08-18 13:34:55 +02:00
Max Kellermann
dad7d7e798 util/TruncateString: rename CopyString() to CopyTruncateString() 2017-07-05 17:15:58 +02:00
Max Kellermann
4b94ae8040 util/StringUtil: move CopyString() to TruncateString.cxx 2017-07-05 17:11:34 +02:00
Max Kellermann
979f1b6c39 release v0.20.9
-----BEGIN PGP SIGNATURE-----
 
 iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlkz5jkQHG1heEBtdXNp
 Y3BkLm9yZwAKCRAjbopYxttFEubuD/kBXMcV4XawqGNNtSHdrY8CxSL8wJMCMJQl
 aMgRkKLPRml8Hj9FNNG9pjXBuT+qUgPX7t9gBEiT7c+sV3fHH40gUf1js5GIsEPm
 BAVfvww5EhmQWWVhPTLk1iZ4jp6E96mDmIG1znwo7etSZHXU8RJfR7woBi3SPJ9f
 OPcrimskNuWpAWeaEIKi/1Iwzy8d9VK9Ttb73gA3M5zSm7ioXzt3YClpwLRM8JU6
 QeUJchy6VwXnygswjUNmbhPc3GsD2FyUZ4OtJ0hodnqqajfldBxhcHUnQk4zZULr
 1nLSyOuA9bwLuFohH1T6HiY9z8PFzgqdIHvsjOJgZ4gQa69PVNjal2tUEUav9zFv
 aK4LvTVPnIk+hqRbtLpV7/rPKuClrC9BO4oYdBGBDNY4hqVpvRA9obP1s00aOi+K
 UhYqLqg7yeIEeTlUxFOhXJCKAEL69BuXT5ihJtDlB/dCUzv37sEch/4WDgs7uc+O
 9kJYlElvozw57mbczsee/PCSnSWrLCq/qG/bNEUUQOTueWNuifh3PL62UXGgfbEH
 01hJDyLr6ETSmWn7rjTfLJiHThX/EQQvOhs+35fbCyry65z4tFwrilGDmFVUWGPq
 /6QEpY1D6q4fkoma/iWOZoTkfKewatAPGMGWoJaGhCnfQFz4VTFtS2bDtuUctQ16
 jnXnPFxqBw==
 =0SSp
 -----END PGP SIGNATURE-----

Merge tag 'v0.20.9'

release v0.20.9
2017-06-04 12:57:05 +02:00
Max Kellermann
a057b4f6d8 *: add lost of "noexcept" specifications 2017-06-04 12:46:48 +02:00
Max Kellermann
4faef28cc5 release v0.20.7
-----BEGIN PGP SIGNATURE-----
 
 iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlkaFL0QHG1heEBtdXNp
 Y3BkLm9yZwAKCRAjbopYxttFEr4ID/9iAQC+7fFv06uLOm48Ufu+PgoD8uJkAwF5
 QuLQkc85g9urn+bu9N7Qs7Vypp7aLyGcJKY0jyA8wxkOj24pUC3GYk80daUt561V
 5s20FnoS/Uoman3CSJL94IfCUBxejizE6vgIIHTc5bb6U0qIsPub/8JTTE2Ih7uP
 nvFZ5uBQ+YTc7at+iIH9123eUMKkitkh8osNblovqQT9v42++Tm4ztAytRHBjwUA
 Itew5HhlvahbLKqFs/7vmICh/YX1FcOV7cV+erEWYfkH0KCI2bhSle4u2d0CBOvD
 VJlDnBCo9bM7WKcPYqJiFFFXA0CRk06wbkkkAtwF4zjp8xos7aQcq4FyQnYL8KXo
 5lijIhRwBURBd+nt8oA9kuEhBt/T75otcemJkzVaYappHTJCLjhxSGcPt8mw+nE9
 9WQzsp/MIVzg9l5g3D9S/43xM7uhvn98Tn1Qf2s8YRd2o8CZeOhW+X3RvbCvVPv2
 mOlx4sFAv8DOJ3KxMdqiJT+PmylPyJluQdqH+tMc8BdPg/kpSpYIPTuSjjRqK1yh
 ld5do0HtAAwiHtvXfk5YVFjJSpO0c8yVn6xci2Cl4k/5ZHj2UE1ln+N5vCea2BRF
 2J3HAjROwtcwY3lU1jFnEAogf24KWiFJqhhC0EqBGUdlrM8Dn37P5cEWWjROIMNK
 lPEdovokNw==
 =CdDy
 -----END PGP SIGNATURE-----

Merge tag 'v0.20.7'

release v0.20.7
2017-05-15 23:01:49 +02:00
Max Kellermann
71f0ed8b74 *: add "noexcept" to many, many function prototypes
This eliminates some overhead, because the compiler doesn't need to
consider these functions throwing.
2017-05-08 14:44:49 +02:00
Max Kellermann
ff32b0dc9b input/curl: use %lu instead of %llu
Fixes a GCC warning because %llu appears to be unsupported by the
Windows standard library.
2017-03-01 16:44:11 +01:00
Max Kellermann
c1869a11af input/curl: format Range offset as unsigned 2017-03-01 16:44:08 +01:00
Max Kellermann
ca559b1db6 input/curl: use %lu instead of %llu
Fixes a GCC warning because %llu appears to be unsupported by the
Windows standard library.
2017-02-21 12:06:56 +01:00
Max Kellermann
a8e76fb345 input/curl: format Range offset as unsigned 2017-02-21 12:06:03 +01:00
Max Kellermann
7e46277016 Merge branch 'v0.20.x' 2017-02-19 19:46:18 +01:00
Max Kellermann
781487c4dd thread/Thread: use BoundMethod 2017-02-10 22:46:09 +01:00
Max Kellermann
87c9856b20 input/alsa: use the EventLoop& passed to init() instead of io_thread_get() 2017-02-10 22:24:44 +01:00
Max Kellermann
20ae84bff9 {input,mixer}/alsa: cancel the DeferredMonitor in the destructor
Yet another potential crash bug fix.
2017-02-10 15:05:49 +01:00
Max Kellermann
9e503b21c1 {input,mixer}/alsa: move code to lib/alsa/NonBlock.cxx 2017-02-09 21:24:24 +01:00
Max Kellermann
67a958a326 Merge branch 'v0.20.x' 2017-02-09 21:24:20 +01:00
Max Kellermann
eda06993f8 event/MultiSocketMonitor: add method Reset() 2017-02-09 21:12:23 +01:00
Max Kellermann
76a1cae5d8 {input,mixer}/alsa: fix off-by-one bug in count check
Doesn't make a practical difference - but it's more correct this way.
2017-02-09 12:46:49 +01:00
Max Kellermann
03a97d87ea tag/Tag*: rename several source files 2017-02-08 08:49:42 +01:00
Max Kellermann
3854211694 input/Plugin: pass EventLoop& to init()
Eliminate dependency on io_thread_get().
2017-01-26 09:26:25 +01:00
Max Kellermann
58ac72f79d input/nfs: use NfsFileReader::GetEventLoop() 2017-01-26 09:25:56 +01:00
Max Kellermann
6d5904801e lib/nfs/FileReader: use nfs_get_event_loop()
Make sure we're using the same EventLoop as the NfsManager.
2017-01-26 09:23:49 +01:00
Max Kellermann
7af8e3937f lib/nfs/FileReader: use C++11 initializers 2017-01-26 09:21:57 +01:00
Max Kellermann
f8eeded528 input/async: pass EventLoop& to constructor 2017-01-25 23:18:33 +01:00
Max Kellermann
c3fa7e13cf input/Plugin: include cleanup 2017-01-25 23:18:17 +01:00
Max Kellermann
5c18b0a94d input/curl: use CurlGlobal::GetEventLoop() 2017-01-25 23:16:56 +01:00
Max Kellermann
ecbad638f1 input/async: add method GetEventLoop() 2017-01-25 23:15:52 +01:00
Max Kellermann
611ce6e756 lib/nfs/{FileReader,Glue}: pass EventLoop&
Eliminate dependency on io_thread_get().
2017-01-25 23:02:02 +01:00
Max Kellermann
68bb738af2 input/alsa: use snd_pcm_?w_params_alloca() 2017-01-25 08:47:20 +01:00
Max Kellermann
7e8b448985 input/alsa: set period_size=buffer_size/4
This way, we have four periods instead of the default of two.  With
only two periods, we don't get woken up often enough, and we
frequently encounter buffer overruns.  With four periods, we have more
time to breathe, and the buffer overruns magically disappear.
2017-01-14 21:50:28 +01:00
Max Kellermann
d1f3a87c08 input/alsa: remove the start_threshold setting
This setting is mostly useless for capture devices.  There's no point
in configuring it.
2017-01-14 21:47:37 +01:00
Max Kellermann
9f8145e590 input/alsa: dump buffer/period sizes 2017-01-14 21:09:57 +01:00
Steven O'Brien
791efc171a input/alsa: enable non-blocking mode 2017-01-14 20:59:57 +01:00
Steven O'Brien
144312a525 input/alsa: handle EAGAIN 2017-01-14 20:59:23 +01:00
Max Kellermann
92684112ed input/alsa: call snd_pcm_start() after snd_pcm_prepare()
This is necessary because we'll never get woken up again by
epoll_wait() after a buffer overrun recovery, unless we start the PCM
explicitly before returning to the I/O loop.
2017-01-14 20:58:30 +01:00
Max Kellermann
ef114ee6cb input/alsa: improve logging in Recover()
Copy yet more code from the ALSA output plugin.
2017-01-14 20:52:41 +01:00
Max Kellermann
667f209742 input/alsa: check snd_pcm_state() in Recover()
Copy some good code from the ALSA output plugin.
2017-01-14 20:51:51 +01:00
Max Kellermann
c5cf66402c input/alsa: make two attributes "const" 2017-01-13 20:26:36 +01:00
Max Kellermann
05417049eb input/alsa: clear sockets from within IOThread
Fixes assertion failure in implicit destructor.
2017-01-13 20:17:16 +01:00
Max Kellermann
c3fc84de12 input/curl: wake up client thread after seek to end of file
Call SeekDone() to avoid the freeze bug.
2017-01-09 18:08:33 +01:00
Max Kellermann
5163b1a624 lib/curl/Request: require the caller to explicitly register the request
This allows constructing an instance in any thread, and register it
inside the IOThread later.
2017-01-07 16:01:58 +01:00
Max Kellermann
6cff3214f3 lib/curl/Slist: new wrapper for curl_slist 2017-01-06 19:37:31 +01:00
Max Kellermann
5900253b85 update copyright year 2017-01-03 20:48:59 +01:00
Max Kellermann
31d77ec580 input/curl, ...: use strncmp() instead of memcmp() to avoid crash 2017-01-03 13:17:02 +01:00
Max Kellermann
06116382ee input/curl: move code to class CurlRequest
The CurlRequest gives us a more low-level API to CURL without the
InputStream interface, integrated into our IOThread.
2017-01-03 12:24:05 +01:00
Max Kellermann
4397fe3a13 input/curl: fold input_curl_easy_add_indirect() into the only caller 2017-01-03 10:53:20 +01:00
Max Kellermann
534e1fa6eb input/curl: move code to SeekInternal(), simplify DoSeek()
Simplifies the code and reduces the number of IOThread roundtrips.
2017-01-03 10:50:02 +01:00
Max Kellermann
3e8cc2c670 input/curl: move class CurlGlobal to separate source file 2017-01-03 10:50:02 +01:00
Max Kellermann
2e182e84c3 thread/Mutex: remove ScopeLock, use std::lock_guard directly 2017-01-03 07:11:57 +01:00
Max Kellermann
b042095ac2 event/Loop: use std::chrono 2016-12-28 01:15:08 +01:00
Max Kellermann
fc83d38e67 input/curl: wrap CURLM* in new class CurlMulti 2016-12-19 16:41:12 +01:00
Max Kellermann
7063c423eb input/curl: rename class CurlMulti to CurlGlobal 2016-12-19 16:37:01 +01:00
Max Kellermann
36b93993cf input/curl: wrap CURL* in new class CurlEasy 2016-12-19 14:42:04 +01:00
Max Kellermann
ceffc5aa72 input/curl: remove duplicate InitEasy() call 2016-12-19 14:38:50 +01:00
Max Kellermann
35a2a48c47 Merge branch 'v0.19.x' 2016-11-17 22:20:24 +01:00
Max Kellermann
5c3e55b5b1 {input,output}/alsa: fix gcc 7.0 -Wimplicit-fallthrough 2016-11-16 19:50:38 +01:00
Max Kellermann
22dcca9832 util/Error: remove obsolete class 2016-11-10 12:58:26 +01:00
Max Kellermann
a55bb28069 decoder: include cleanup 2016-10-29 11:04:49 +02:00
hawken
1c155a0d03 Fix for TextInputStream consuming file without producing lines 2016-10-12 12:19:04 +02:00
Max Kellermann
8c744efd56 input/InputStream: migrate from class Error to C++ exceptions 2016-09-16 17:43:36 +02:00
Max Kellermann
597e59f10d input/thread: use C++ exceptions instead of class Error 2016-09-16 17:43:32 +02:00
Max Kellermann
3cd07d0b54 input/thread: use class ScopeLock and ScopeUnlock 2016-09-16 17:43:32 +02:00
Max Kellermann
13259225c2 input/async: eliminate attribute "postponed_error"
Switch the remaining users to "postponed_exception".
2016-09-16 17:43:32 +02:00
Max Kellermann
7acd91331c input/curl: use C++ exceptions instead of class Error 2016-09-16 17:43:32 +02:00
Max Kellermann
0fdaca17a2 input/alsa: use C++ exceptions instead of class Error 2016-09-16 17:43:32 +02:00
Max Kellermann
539c0ed171 {input,storage}/nfs: use C++ exceptions instead of class Error 2016-09-16 17:43:32 +02:00
Max Kellermann
687ea53616 input/nfs: use class ScopeUnlock 2016-09-16 16:51:36 +02:00
Max Kellermann
220d9528a3 archive/Plugin: migrate open() from class Error to C++ exceptions 2016-09-09 18:36:36 +02:00
Max Kellermann
fc7d3f64c0 input/Plugin: migrate open() from class Error to C++ exceptions 2016-09-09 18:15:01 +02:00
Max Kellermann
33b70567c8 input/alsa: use AtScopeExit() 2016-09-09 17:12:52 +02:00
Max Kellermann
720bf51ba6 input/alsa: simplify OpenDevice(), merge redundant recovery code 2016-09-09 17:12:52 +02:00
Max Kellermann
26bdb72428 input/Init: set input_plugins_enabled
Got lost in commit 6ed77f2a27
2016-09-09 17:12:52 +02:00
Max Kellermann
90c8a1b1cf input/archive: use AtScopeExit() for exception-safety 2016-09-09 16:32:11 +02:00
Max Kellermann
3143dbf3dc input/Open: use ScopeLock 2016-09-09 16:11:51 +02:00
Max Kellermann
8092e18158 input/async: add attribute "postponed_exception"
Will replace "postponed_error".
2016-09-09 15:41:09 +02:00
Max Kellermann
6ed77f2a27 input/Plugin: migrate init() from class Error to C++ exceptions 2016-09-09 15:16:47 +02:00
Max Kellermann
a73688a2be input/Plugin: remove InitResult::UNAVAILABLE, throw PluginUnavailable instead 2016-09-09 15:11:52 +02:00
Max Kellermann
135662d6b0 lib/smbclient/Init: throw std::runtime_error on error 2016-09-05 11:32:20 +02:00
Max Kellermann
50e5244e25 input/Init: support C++ exceptions 2016-09-05 11:28:05 +02:00
Max Kellermann
d3c7fac606 thread/Thread: throw std::system_error on error 2016-06-17 19:11:20 +02:00
Max Kellermann
aee5966e1c input/thread: use C++11 initialisers 2016-06-17 19:10:39 +02:00
Max Kellermann
95e53ac0a0 input/alsa: rebase on AsyncInputStream
Use the snd_pcm_t only in the IOThread, and reuse code that is
well-known to work.
2016-06-17 18:36:54 +02:00
Max Kellermann
5d11759f7d input/async: use class DeferredCall 2016-06-17 18:31:58 +02:00
Max Kellermann
bdd0c3686d input/async: use class HugeAllocation 2016-06-17 18:06:02 +02:00
Max Kellermann
ef053035d0 util/HugeAllocator: throw std::bad_alloc on error 2016-06-17 17:57:40 +02:00
Max Kellermann
a7ced00520 input/Reader: new Reader implementation wrapping InputStream 2016-05-03 00:05:31 +02:00
Max Kellermann
1aee89f5ea *: include cleanup (using iwyu) 2016-03-01 22:08:13 +01:00
Max Kellermann
1d67aa7bf2 update copyright year to 2016 2016-02-26 17:54:05 +01:00
Max Kellermann
d9e8ce22cb util/Error: use std::exception_ptr instead of std::exception
Necessary to preserve type information.  The try/catch sequence didn't
work previously.

Same fix as in commit 1c904000
2016-02-26 16:32:24 +01:00
Max Kellermann
09a188bfd9 input/InputStream: add method Skip() 2016-02-22 13:14:19 +01:00
Max Kellermann
0705f42cf8 playlist/Plugin: pass InputStreamPtr&& to open_stream()
Obsolete class CloseSongEnumerator, which was a kludge.
2016-02-21 12:53:47 +01:00
Max Kellermann
cadc67ea40 input: wrap InputStream in std::unique_ptr 2016-02-21 08:03:32 +01:00
Max Kellermann
e6e7d6dbd6 fs/io/Reader: use C++ exceptions instead of class Error 2015-12-18 01:08:16 +01:00
Max Kellermann
3dc989bccb input/alsa: use StringAfterPrefix() 2015-11-06 09:49:22 +01:00
Max Kellermann
c880099deb util/StringCompare: add StringIsEmpty() 2015-11-06 09:37:07 +01:00
Max Kellermann
733989a284 util/StringUtil: move comparison functions to StringCompare.cxx 2015-11-06 09:20:18 +01:00
Max Kellermann
42bd888946 input/InputStream: remove obsolete method OverrideMimeType() 2015-10-20 11:18:35 +02:00
Max Kellermann
58996b841a config/Global: allow calling config_get_string() with one argument
default_value defaults to nullptr.
2015-06-26 08:06:40 +02:00
Thomas Guillem
6e2d7445c5 InputStream: add ReadFull method
Convenient method that behave differently than Read, and that will be used by
tag scanners.

This method will return in case of error, if the whole data is read or is EOF
is reached.
2015-06-22 08:51:14 +02:00
Max Kellermann
90e7ace980 release v0.19.10
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJVhsF2AAoJECNuiljG20US2OUQAIyDcaUCFgUa2CYa7MftCPGc
 dYJFwf+6Y2fJdSXcogYZmXNKNjFbPAZ4qqGdoNfI5a0rLxMarmL4DyjziAWi3ETB
 MOkZK65Y5ySyyw69e+i/XsOwOn8rm6jDuwHKpT7wVJNjvZ8nA8esvu5b1Ief5LBd
 UwEmn5DtKjA7dErHEYd2YvMK0xm+YmoKXuhmJKAn3sQdCEldgH4T5BCdOqmfrHWX
 BYmNxmP3PU9Tqi7XHTSFZJn6vWiXhOoWr4Cb7K54j49sRV2B4QMWX1CLyK4+Jwmk
 NZwD1IoGtoks5twfMTA9F9dBV/CPAWT69E0LIvaFJwCyoPCEnEi6k41bRAWK7P65
 QwKxdtY/GZnVFpiqXba+wkD6VBa5wmkjS10+cIBhz3CVCEE+N5YacubUw5JieYg3
 kOG2htSF1YP/Mo+IAObO9doQWHnDUavVhhpQ8UyqQ1bDMsmaEpfE16TRmlY/l5wx
 Aor2p6D3c0E0IGpEwjOl6T9pDql4dyTdrRLLXJ6oD9iYv2rDdahctBRdyFZ1mRwX
 oNUz8bfGDrshHVvwjQTr2b4O+w+yc+RSuJcyCGGcn5LakBuiM6vYNYuZzq3Yj/RK
 Wk7RErVsbtY4ZRH06Lf5MSM5TflnrfQmzkUB0rZ0XoDyweoHOHPyzKhvBaKhadNh
 UnEx4kCOvWdjFXUVWH3Q
 =MrVf
 -----END PGP SIGNATURE-----

Merge tag 'v0.19.10'
2015-06-21 16:06:02 +02:00
Max Kellermann
947e902288 input/curl: trigger the condition variable in RequestDone()
Fixes deadlock on small responses.
2015-06-19 16:45:38 +02:00
jai
aed0af1e00 input/smbclient: fix DFF playback 2015-05-29 22:37:49 +02:00
Max Kellermann
b31d171ae8 *: doxygen fixups 2015-03-17 11:21:43 +01:00
Max Kellermann
ddec10d494 input/Open: convert UTF-8 to filesystem charset for OpenLocalInputStream() 2015-03-05 08:51:01 +01:00
Max Kellermann
758e969cb6 input/Open: use PathTraitsUTF8 to check UTF-8 path 2015-03-05 08:40:34 +01:00
Max Kellermann
57ad3aca8e input/file: use class FileReader 2015-03-03 21:48:45 +01:00
Max Kellermann
f402c5fe3c input/file: pass UTF-8 URI to InputStream ctor 2015-03-03 21:17:56 +01:00
Max Kellermann
9352e25392 input/file: add missing fcntl.h include for posix_fadvise() 2015-03-03 21:17:47 +01:00
Max Kellermann
1c90b0c19d *: change C-style prototypes, drop "(void)" 2015-03-03 20:05:08 +01:00
Max Kellermann
40a587bbaf system/FileDescriptor: new wrapper class for a file descriptor 2015-03-03 17:14:30 +01:00
Max Kellermann
eb1733609a decoder/sndfile, ...: update API documentation 2015-01-31 22:17:15 +01:00
Max Kellermann
ae7e1a22cb Merge branch 'v0.19.x' 2015-01-26 20:57:29 +01:00
Max Kellermann
a289dcb9ee Merge branch 'v0.18.x' into v0.19.x 2015-01-26 20:48:19 +01:00
Max Kellermann
ad1b6ef0ac {playlist,input}/despotify: remove defunct plugin 2015-01-26 09:55:31 +01:00
Max Kellermann
4fa5538e2b config/Param: split block-specific attributes to new struct ConfigBlock
The old struct config_param remains only for top-level string options.
2015-01-21 23:56:33 +01:00
Max Kellermann
1c3f5517fa config/Option: convert to strictly-typed enum 2015-01-21 23:30:00 +01:00
Max Kellermann
10972da060 input/curl: work around format warning on WIN32 2015-01-21 23:30:00 +01:00
Max Kellermann
fe85fa3bea ConfigData: move struct config_param to Param.hxx 2015-01-21 21:23:02 +01:00
Max Kellermann
674d14879f Merge branch 'v0.19.x' 2015-01-06 12:54:46 +01:00
Max Kellermann
37e9010887 input/async: reset the "open" flag after seeking successfully
Fixes a problem with the "curl" input plugin: IsEOF() always returns
true because the "open" flag was cleared by
CurlInputStream::RequestDone() when end-of-stream was reached.  This
flag stays false even when seeking to another position has succeeded.

This patch resets the "open" flag to true after seeking successfully.
2015-01-06 12:46:28 +01:00
Max Kellermann
712ed555e6 Copyright year 2015 2015-01-01 19:48:13 +01:00
Max Kellermann
412bedb697 Merge branch 'v0.19.x' 2014-12-26 14:40:32 +01:00
Max Kellermann
9f7fd1fbfb db/lazy, input/mms: add "override" keywords
Fixes -Winconsistent-missing-override (clang 3.6).
2014-12-26 14:29:29 +01:00
Max Kellermann
940cab8620 Merge branch 'v0.18.x' into v0.19.x 2014-12-26 14:28:52 +01:00
Max Kellermann
ea96919b80 Merge branch 'v0.19.x' 2014-12-23 20:43:15 +01:00
Max Kellermann
43da4c0eca input/mms: limit the mmsx_read() size 2014-12-23 20:34:45 +01:00
Max Kellermann
fefe2df3ee input/ffmpeg: use FfmpegInit() instead of av_register_all()
Make sure that the log callback is installed.
2014-12-21 20:56:42 +01:00
Max Kellermann
3f32a6b607 input/nfs: include cleanup 2014-12-14 14:21:11 +01:00
Max Kellermann
21aa1631a4 input/async: add API documentation 2014-12-14 14:21:11 +01:00
Max Kellermann
1affc641c4 input/Init: eliminate double colon from log message 2014-12-12 13:20:37 +01:00
Max Kellermann
4741d7bfe2 Merge branch 'v0.19.x' 2014-12-12 13:14:29 +01:00
Max Kellermann
fbf76c6d21 input/cdio_paranoia: use CopyString() instead of g_strlcpy() 2014-12-01 22:22:29 +01:00
Max Kellermann
737a56a030 release v0.19.5
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABAgAGBQJUdiYnAAoJECNuiljG20USDB4P/3RGHBV5XgdInmYKjGg89hex
 YRiy3BVvrBri53wkj+3YwOi05Cx0fp0pCuwQ9Nm7bmPCwfdC3ASF+UBlBBhnLdfc
 dlISXDHciuKDJwiTtTlBvaKCENoZhjAJQ1SOa5zceH7j/V/XbY0FauHCeE8Ek7ht
 KjimIt1ft0mdgsGNfyisdfbnh/3r4T9V9tBs/wnr7oDTYS/eUX8vCDr5qYIZipjx
 W6pug2m4nfDtHYtN5gv53WYCIm7MiXo9vh7hCjJHd3T3xqKwdWVuz5RRcZcgd9yT
 WWlzOKAI1cgmU7rZaV6Gu+tAq9g7MpNLOGoeN6mhH9E8V16rKqvCiLaXMK5wEGs9
 JWGsTBcbTnSCdG1iivJtP2kOGVHXvNthbSunzwmbowMATi6xIBm8AoqidSzCaW1F
 C7mss8VlhkHdCtHTvyK3XCE2wGEbx4OfsfsL3PWBonrs0DpNOR2AqWQYLsZUhbff
 RV7aeyphMVvgLP67cT9YnGswKGEPOqP2EO9Mh51AQ7wiUESZ+O5J9YHWCc0E3SML
 qs9A+lpA8fstj0QJewx/HNofiHXw5A2THjs/BVqs3vYkcHnTI94Nmdxps82r/rEA
 oy9d6nQqglkPJZF3JwHqJMj1VtBIhihaHBpnLeyegjtiajZV6mVNVg9ezt9EpEA6
 OjJFh2xzQJ7w5qL0gy2R
 =1kbY
 -----END PGP SIGNATURE-----

Merge tag 'v0.19.5'
2014-11-26 20:19:17 +01:00
Max Kellermann
a8ebfd7a92 event/DeferredMonitor: include cleanup 2014-11-25 10:44:06 +01:00
Max Kellermann
b3f5b4932c configure.ac: add macro MPD_ENABLE_AUTO_PKG
Simplify the definition of many build options.
2014-11-21 22:19:57 +01:00
Max Kellermann
ff6f1655f0 input/curl: ignore ResponseBoundary() while seeking
While seeking, metadata must not be updated.  ResponseBoundary() was
added in MPD 0.19.1, but I forgot to add the IsSeeking() check there.
This caused the "seekable" flag to reset.
2014-11-10 08:45:19 +01:00
Max Kellermann
1bd8a322f5 input/AsyncInputStream: set Error when seeking unseekable
Fixes crash in the "audiofile" decoder while logging the seek error.
2014-11-07 13:57:57 +01:00
Max Kellermann
362e73bea8 input/Open: expose input_domain 2014-11-07 13:57:57 +01:00
Max Kellermann
56f763a4a8 input/curl: forget Content-Length (and more) after redirect
Fixes playback of redirected streams.
2014-11-02 13:00:28 +01:00
Max Kellermann
a2eb14f3b3 AsyncInputStream: add method ClearTag() 2014-11-02 13:00:28 +01:00
Max Kellermann
05c63af7c4 InputStream: add method ClearMimeType() 2014-11-02 12:59:16 +01:00
Max Kellermann
1f59701c46 Merge branch 'v0.18.x' into v0.19.x 2014-11-02 12:27:46 +01:00
Max Kellermann
ec3191f502 input/curl: fix curl_easy_setopt() parameter types 2014-11-02 11:55:48 +01:00
Max Kellermann
a8770aa606 input/curl: fix curl_easy_setopt() parameter types 2014-11-01 14:09:30 +01:00
Max Kellermann
217d88f21f TextInputStream: don't ignore unterminated last line 2014-10-28 22:10:47 +01:00
Max Kellermann
493cd866f1 TextInputStream: manually shift the buffer before reading
Fixes truncated lines in m3u and cue files (regression by commit
67958f7).
2014-10-19 00:50:52 +02:00
Max Kellermann
85301853d6 ThreadInputStream: call ThreadRead() inside the thread instead of Read()
Fixes deadlock bug in the "mms" plugin.
2014-10-11 21:59:06 +02:00
Max Kellermann
7cd53fb452 ThreadInputStream: add assertions 2014-10-11 21:57:31 +02:00
Max Kellermann
7e12aea1d8 input/Open: use OpenLocalInputStream()
Make the "open" method of plugins "file" and "archive" dummy methods
that always fail.  Instead, let InputStream::Open() hard-code access
to these two plugins by using OpenLocalInputStream().  This allows
simplifyin the algorithm for falling back to probing archive plugins.
2014-10-02 21:50:14 +02:00
Max Kellermann
9d2d58c4b6 input/LocalOpen: new library for opening local files
Combines the "file" and the "archive" input plugins.
2014-10-02 21:06:01 +02:00
Max Kellermann
0c461c3859 input/archive: export function OpenArchiveInputStream() 2014-10-02 21:00:38 +02:00
Max Kellermann
0d38bd9b3b input/file: export function OpenFileInputStream() 2014-10-02 20:44:03 +02:00
Max Kellermann
2f02e49b9f input/file: generate Error when errno==ENOENT
This special case was useless.  Fixes the dreaded "Unrecognized URI"
error message when a file does not exist.
2014-10-02 20:16:05 +02:00
Max Kellermann
064e8a7c68 input/file: make the "fd" attribute "const" 2014-10-02 19:55:01 +02:00