Shen-Ta Hsieh
db7caa2dac
src/output: Move event and spsc_queue into thread object
2021-03-04 18:45:56 +01:00
Shen-Ta Hsieh
2974737746
src/win32: Add ComWorker to run all COM function on same thread
2021-03-04 18:43:43 +01:00
Shen-Ta Hsieh
b1d7567226
win32: Add ComWorker to run all COM function on same thread
2021-03-04 18:43:16 +01:00
Max Kellermann
5103eb3039
meson.build: compile Win32Main.cxx only on Windows
2021-03-04 18:43:00 +01:00
Shen-Ta Hsieh
0cccdcf9b2
src/win32: Add support for COINIT_APARTMENTTHREADED
2021-03-04 18:37:56 +01:00
Shen-Ta Hsieh
22b840c2f1
win32/Com: use if with init-statement
2021-03-04 18:37:35 +01:00
Shen-Ta Hsieh
ed1a995bff
thread: Add Future
implement for mingw32 without pthread
2021-03-04 18:26:46 +01:00
Shen-Ta Hsieh
0f39dc1edb
output/wasapi: use AUDCLNT_BUFFERFLAGS_SILENT for paused output
2021-03-04 18:17:57 +01:00
Max Kellermann
dc9103befe
util/AllocatedString: remove Null(), IsNull()
2021-03-04 18:05:29 +01:00
Max Kellermann
67760f5283
util/AllocatedString: support casting a nulled instance to string_view
2021-03-04 18:05:29 +01:00
Max Kellermann
99405a4c93
util/AllocatedString: add operator=()
2021-03-04 18:05:26 +01:00
Max Kellermann
b833c5d2c7
util/AllocatedString: replace Clone() with copy constructor
2021-03-04 18:04:21 +01:00
Max Kellermann
bca5d79f88
util/AllocatedString: add const_pointer constructor
2021-03-04 18:04:17 +01:00
Max Kellermann
6e1c8edf09
util/AllocatedString: add string_view constructor
...
Replaces the static Duplicate() method.
2021-03-04 18:04:11 +01:00
Max Kellermann
32b7b2e2fa
util/AllocatedString: add default constructor
2021-03-04 18:04:06 +01:00
Max Kellermann
cfb7f8ab84
util/AllocatedString: rename to BasicAllocatedString
...
To make things simpler, AllocatedString is now a non-template class.
2021-03-04 18:03:56 +01:00
Max Kellermann
d4bbb8c851
Merge branch 'struc' of git://github.com/neheb/MPD
2021-03-04 17:50:53 +01:00
Érico Rolim
8d80280ab9
time/ISO8601: don't use glibc extension in strptime.
...
Per the manual for strptime, %F is equivalent %Y-%m-%d, so use that
directly.
2021-03-04 17:49:51 +01:00
Érico Rolim
c95e3dc065
storage/plugins/CurlStorage: don't use glibc extension in
...
ParseTimePoint.
%Z is a glibc extension to strptime, and is a no-op there, due to the
mapping between timezone names and their definition (especially when the
name comes from a different machine) being ambiguous / impossible. Time
in HTTP headers is guaranteed to be UTC.
Passing an unknown format to strptime() implementations that don't
support it will generally cause them to return NULL, which will lead to
ParseTimePoint throwing an exception and ParseTimeStamp using an
unnecessary fallback.
Since the timezone name goes at the end of the string, we don't need to
use %Z to skip it (could be an issue in a different time stamp format),
so simply removing %Z works best.
2021-03-04 17:48:23 +01:00
Max Kellermann
428f769c38
output/pipewire: new output plugin
...
Very rough draft. Barely works.
2021-03-03 18:44:39 +01:00
Max Kellermann
133c8834df
output/httpd: update API documentation
2021-03-02 18:24:57 +01:00
Max Kellermann
a6eb264770
util/IntrusiveList: add type alias "Hook"
...
By casting to SafeLinkIntrusiveListHook if appropriate, this fixes a
bug in the erase() method, where erase() calls
IntrusiveListHook::unlink() instead of
SafeLinkIntrusiveListHook::unlink().
2021-03-02 17:51:50 +01:00
Max Kellermann
f5f296b13a
event/TimerWheel: add a "ready" list as a special case
...
This reduces delays of zero-duration timers from up to 1 second to
zero. libavahi-client schedules zero-duration timers often.
2021-03-02 17:14:33 +01:00
Max Kellermann
0091c4e12b
util/Exception: add FindNested()
2021-03-02 17:13:29 +01:00
Max Kellermann
80172e17ac
util/Exception: remove redundant std::exception catch clause
...
The "std::nested_exception" catch block already covers this perfectly.
2021-03-02 17:13:21 +01:00
Max Kellermann
ec0c1f0d02
util/Exception: fix comment typo
2021-03-02 17:12:20 +01:00
Max Kellermann
946b3c1f80
util/IntrusiveList: add method erase_and_dispose()
2021-02-25 14:12:47 +01:00
Max Kellermann
a0dc398f36
util/IntrusiveList: erase() returns an iterator
2021-02-25 14:12:39 +01:00
Max Kellermann
b54d2d984a
util/IntrusiveList: use ToHook() in erase()
2021-02-25 14:12:10 +01:00
Max Kellermann
4ab73f9de9
util/IntrusiveList: add missing ToNode() cast in iterator_to()
2021-02-25 14:10:55 +01:00
Max Kellermann
5ebe23e4bb
db/upnp/Discovery: use class IntrusiveList
2021-02-24 20:39:42 +01:00
Max Kellermann
aa227cded1
input/qobuz: use class IntrusiveList
2021-02-24 20:31:47 +01:00
Max Kellermann
e406bdbb80
input/tidal: use class IntrusiveList
2021-02-24 20:31:13 +01:00
Max Kellermann
1048f23680
util/IntrusiveList: add hook class SafeLinkIntrusiveListHook
...
Similar to boost::intrusive::safe_link.
2021-02-24 20:29:16 +01:00
Max Kellermann
8fe8f09027
util/IntrusiveList: add noexcept
2021-02-24 20:17:28 +01:00
Max Kellermann
78670c0941
util/IntrusiveList: add constexpr
2021-02-24 20:16:54 +01:00
Max Kellermann
34f735890e
output/snapcast: remove obsolete TODO comment
2021-02-24 17:05:14 +01:00
Max Kellermann
f08810b202
output/snapcast: add missing #ifdef HAVE_ZEROCONF
2021-02-24 17:04:15 +01:00
Max Kellermann
7a68775e6c
output/snapcast: Zeroconf support
2021-02-24 17:03:30 +01:00
Max Kellermann
e4fccc85c8
Main: move Zeroconf to the I/O thread
...
This will allow using Zeroconf in output plugins (preparing for
Snapcast with Zeroconf).
2021-02-24 16:29:33 +01:00
Max Kellermann
2efa142ec9
output/init: use the real-time I/O thread only for the ALSA plugin
2021-02-24 16:09:11 +01:00
Max Kellermann
29b49dd630
zeroconf/{bonjour,avahi}: pass service_type as parameter
2021-02-24 15:11:11 +01:00
Max Kellermann
5f34508aae
zeroconf/Glue: move code to the ZeroconfHelper constructor
2021-02-24 15:09:10 +01:00
Max Kellermann
2d8ecd561b
zeroconf: return a publisher object
2021-02-24 15:09:10 +01:00
Max Kellermann
2059195ae9
zeroconf: add dependency on event_dep
2021-02-24 15:09:10 +01:00
Max Kellermann
d89856f77b
zeroconf/avahi/Helper: make class SharedAvahiClient final
2021-02-24 15:09:10 +01:00
Max Kellermann
975d5be046
zeroconf/avahi/Init: return a std::unique_ptr<AvahiHelper>
2021-02-24 14:41:37 +01:00
Max Kellermann
b01ef1b9a6
zeroconf/Bonjour: return a std::unique_ptr<BonjourHelper>
2021-02-24 14:25:06 +01:00
Max Kellermann
ceb76b6a82
zeroconf/Bonjour: pass a context pointer to the callback
2021-02-24 14:18:35 +01:00
Max Kellermann
a7e697b588
zeroconf/Bonjour: add const
2021-02-24 14:18:17 +01:00
Max Kellermann
3ecd918442
zeroconf/Bonjour: move the DNSServiceRegister() call to the constructor
2021-02-24 14:17:59 +01:00
Max Kellermann
4fbdb3a2d5
zeroconf/Bonjour: convert the callback function to a method
2021-02-24 14:15:26 +01:00
Max Kellermann
0157643667
zeroconf/Glue: add noexcept
2021-02-24 14:15:26 +01:00
Max Kellermann
fe741bd767
zeroconf/Glue: allow ZeroconfInit() to throw
2021-02-24 14:15:04 +01:00
Max Kellermann
06b9bdba2c
zeroconf/Bonjour: disallow copying
2021-02-24 13:53:36 +01:00
Max Kellermann
bd0aa74bdd
zeroconf/Bonjour: rename class BonjourMonitor to BonjourHelper
2021-02-24 13:53:35 +01:00
Max Kellermann
47461df59c
zeroconf/Bonjour: don't call DNSServiceRefDeallocate() if DNSServiceRegister() fails
...
According to
https://developer.apple.com/documentation/dnssd/1804733-dnsserviceregister
the DNSServiceRef is initialized only if DNSServiceRegister() returns
kDNSServiceErr_NoError. The faulty error handling code could
therefore crash.
2021-02-24 13:49:03 +01:00
Max Kellermann
04d5588fe5
zeroconf/Zeroconf*: drop prefix from file names
2021-02-24 13:33:59 +01:00
Max Kellermann
40d061621b
zeroconf/Avahi: remove useless log messages
2021-02-24 13:33:58 +01:00
Max Kellermann
a312629aad
zeroconf: pass global port to init function
2021-02-24 06:40:26 +01:00
Max Kellermann
d527d4b530
zeroconf/avahi/Publisher: new class, replacing lots of code from ZeroconfAvahi.cxx
2021-02-23 22:07:57 +01:00
Max Kellermann
978d2638d8
zeroconf/avahi/Client: new class, replacing lots of code from ZeroconfAvahi.cxx
2021-02-23 21:53:07 +01:00
Max Kellermann
cfcafdf822
zeroconf/avahi: add class AvahiGlue
2021-02-23 21:53:00 +01:00
Max Kellermann
07865d0707
zeroconf/avahi/Poll: move to namespace Avahi
2021-02-23 21:41:16 +01:00
Max Kellermann
1ac16516a1
event/TimerList: add option to avoid the Boost dependency
2021-02-22 23:35:16 +01:00
Max Kellermann
75e8795e3f
util/IntrusiveList: add method insert()
2021-02-22 23:32:51 +01:00
Max Kellermann
4912466d50
util/IntrusiveList: add method erase()
2021-02-22 23:32:47 +01:00
Max Kellermann
664674913e
event/Loop: include cleanup
2021-02-22 23:32:39 +01:00
Max Kellermann
31e3658823
Merge branch 'v0.22.x'
2021-02-22 23:25:07 +01:00
Max Kellermann
abd416735d
output/snapcast: implement SendTag()
2021-02-22 23:20:56 +01:00
Max Kellermann
6090bd2095
lib/yajl/Gen: new class
2021-02-22 23:12:08 +01:00
Max Kellermann
1777592ec0
lib/yajl/Handle: fix API documentation
2021-02-22 22:56:52 +01:00
Max Kellermann
8e8fbe14b1
output/snapcast: implement Drain()
2021-02-22 22:49:32 +01:00
Max Kellermann
a8a39b6a38
output/snapcast: queue chunks
2021-02-22 22:41:31 +01:00
Max Kellermann
f84cb6de5e
output/snapcast/client: remove obsolete TODO comment
...
See commit dfc67c45c7
2021-02-22 22:39:32 +01:00
Max Kellermann
dfc67c45c7
output/snapcast: calculate the latency for TIME responses
2021-02-22 21:57:20 +01:00
Max Kellermann
e875da5d38
output/snapcast/protocol: swap "received" and "sent"
...
Snapcast's protocol documentation is wrong, see
https://github.com/badaix/snapcast/pull/811
2021-02-22 21:42:42 +01:00
Max Kellermann
9b9522e3f5
zeroconf/avahi/Poll: rename internal variables
2021-02-22 15:01:01 +01:00
Max Kellermann
87963685fb
zeroconf/avahi/Poll: use C++11 initializer
2021-02-22 15:00:20 +01:00
Max Kellermann
0405a57f26
zeroconf/avahi/Poll: make EventLoop the first parameter
2021-02-22 14:52:21 +01:00
Max Kellermann
f29c69d6a9
zeroconf/avahi/Poll: rename timer
to event
2021-02-22 14:39:28 +01:00
Max Kellermann
7ec4de841e
zeroconf/avahi/Poll: add constexpr
2021-02-22 14:34:32 +01:00
Max Kellermann
1f08d2d03c
zeroconf/avahi/Poll: add noexcept
2021-02-22 14:31:37 +01:00
Max Kellermann
c1a695d1ac
zeroconf/avahi/Poll: add method GetEventLoop()
2021-02-22 14:31:10 +01:00
Max Kellermann
ec05056e38
zeroconf/avahi/Poll: forbid copying
2021-02-22 14:26:08 +01:00
Max Kellermann
c0b9339d31
zeroconf/AvahiPoll: move to lib/avahi/
2021-02-22 14:24:00 +01:00
Max Kellermann
6eba621045
decoder/ffmpeg: fix build problem with FFmpeg 3.4
...
Regression by commit a22d1c88d7
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1097
2021-02-22 13:36:46 +01:00
Max Kellermann
a9ad8fa505
decoder/ffmpeg: move code to IsSeekable(AVFormatContext)
2021-02-22 13:33:25 +01:00
Max Kellermann
c729f16dcd
song/DetachedSong: copy the AudioFormat from LightSong
...
Enables the "Format" row in "playlistinfo" responses.
https://github.com/MusicPlayerDaemon/MPD/issues/1094
2021-02-18 22:16:11 +01:00
Max Kellermann
81d0c04ed4
song/DetachedSong: add noexcept
2021-02-18 22:01:52 +01:00
Max Kellermann
0924b63e10
event/TimerWheel: add empty
flag to optimize a common case
2021-02-17 19:52:45 +01:00
Max Kellermann
ce6afe9379
output/httpd/Page: convert to type alias on AllocatedArray
2021-02-17 18:01:27 +01:00
Max Kellermann
6f04b2230a
output/httpd/Page: use std::byte
2021-02-17 17:54:38 +01:00
Max Kellermann
8d90b831e1
output/snapcast/Timestamp: drop static
2021-02-17 14:39:20 +01:00
Max Kellermann
9c8da03c5c
output/snapcast: new output plugin
...
New experimental code, first draft - it works, but there's a lot left
to do. Just look at all the TODO comments.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/975
2021-02-17 14:25:23 +01:00
Max Kellermann
85adefd9a4
encoder/wave: remove constexpr
because memcpy() is not allowed
2021-02-17 14:19:02 +01:00
Max Kellermann
8a4b88a59d
encoder/wave: use the structs from RiffFormat.hxx
2021-02-16 19:50:52 +01:00
Max Kellermann
d2371af120
encoder/wave: add static_assert on sizeof(WaveHeader)
2021-02-16 19:50:46 +01:00
Max Kellermann
aa2e1bb310
encoder/wave: refactor fill_wave_header() to function
2021-02-16 19:50:43 +01:00
Max Kellermann
6153fca4fc
tag/RiffFormat: add struct RiffFmtChunk
2021-02-16 19:50:40 +01:00
Max Kellermann
f090af0a22
tag/RiffFormat: add static_asserts on sizeof()
2021-02-16 19:50:25 +01:00
Max Kellermann
58f420fdca
tag/RiffFormat: use CamelCase
2021-02-16 19:24:51 +01:00
Max Kellermann
ded2b31fbc
tag/Riff: split into RiffId3.?xx and RiffFormat.hxx
2021-02-16 19:23:01 +01:00
Max Kellermann
75c8d2235b
util/ByteOrder: add classes PackedBE16, PackedLE16, PackedLE32
2021-02-16 17:37:25 +01:00
Max Kellermann
f679961564
release v0.22.6
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmArwO4QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEjvyD/9M2icQCKSQheXVD0UWvDZlTaOG6dJtZIfM
1M9eLC/WG9F6ss2eQy69mfd1IkxO0qx7pPG5NN7zKp7msyK8Hbq6QAoqygKIU9S/
m5jbrdpuy8A09Mae62b0eapphhtp+Lbpl6RN8QpeROQPd3nX/eSsTngMu//5e4g8
3qbqkh8Z802FdppcLdBj7f2nUkNoW77bIbVsbm3BQd8EIiVwis9wMgs9Oh9ZEtC9
krUuij8WjTurSORC/IvqvvOh3QUmb7q7+YwoUrcEBOF1ABcpjf//qVUb4rhOwuVh
s8BxW+L8sxv3dCSrjG3msbxXLLIVXU8H2pafHyS/rosrnHmTHshiraG1ZMlOh0dE
kk8piE+7cLERR4JufEnmDtMLQdJfGVTs7QIAsOqtXWNaihsDKA2cZy9AcW3UZTxE
Vf0PDWl5W8+ibWJ/m9CVWYUEssZ3Jvbi3X0IFAgfYYT8PkIQEqNUWJFelr20Cr6H
5GNGUooiOGUXBWotrQO8Blhcx3rzwGxzeRLV0JFBqhl7zPnXdQ3Wzo70U714V+rT
ZRKSisLVbb7vVY2S5OlQf17mGSZufdNc6yzNar9CKwEaUqS64bdzo13NmiIyKqpO
tuSJlL4otO4/nsdKVj1Pcdr+LKJLFLLR9V5W6DLCiyPChR5adZ9rjN7RS9fChkBn
9G4ifkbK0w==
=NeqR
-----END PGP SIGNATURE-----
Merge tag 'v0.22.6'
release v0.22.6
2021-02-16 13:58:47 +01:00
Max Kellermann
80531ef8d8
db/simple: fix ExportedSong move constructor for non-owning sources
...
If the constructor moves from an ExportedSong instance which refers to
somebody else's "Tag" instance, the newly constructed instance will
instead refer to its own empty "tag_buffer" field. This broke
SimpleDatabase::GetSong(), i.e. all songs on the queue restored from
the state file or added using the "addid" command.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1089
2021-02-16 13:52:25 +01:00
Max Kellermann
471c37be59
queue/PlaylistEdit: convert start/end parameters to RangeArg
2021-02-15 22:51:09 +01:00
Max Kellermann
157ddcbab1
protocol/RangeArg: add methods ClipRelaxed(), CheckClip(), CheckAdjustEnd()
2021-02-15 22:50:49 +01:00
Max Kellermann
ab160aa359
queue/PlaylistEdit: check "current>=0" before updating it
2021-02-15 22:50:37 +01:00
Max Kellermann
ecc07e4e98
release v0.22.5
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmAq1woQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFElB1EACItrIKgEywkzW3l+gmgSjtwwQOiLfg+0Zg
Z3YgpegDvhmjBVXAHFDlhnXf//zCr286ZmCCVItrz2eGHYX2lvul0SdYxp/+Kebk
WrCez6LMecaoGjbgiwQ70u/stNkX85ZT62CznNyYvwMx4bRhXXgOuBdKYTAZTvT8
ABvfL+Ari7TBi88qCAaufmxyv7VFOaZg8+GpV1unIlHE6vu3febzDffPdjfODmOe
BpLILJJIzUd9p1tGmSCvNCUUHdElktbK1aSVS/0x2xdKG3eDKmPIhSdxdqOdunr7
9us4Mg7ZB5REaRC0ZfxR6P+vId0uIT3kpyDqs5i8Zao1WwmCdZhvaMMxJ3KF0MVs
q4Lb99LMF2xAvsoA4x+wY0E0SlFrBhySrFY/i4gaBd9ctzQsbxID3cOZhSbEmQnk
VNlPK/cYtWVHouLzSOUZeg3/nyMMWXTXy87esB/JdKWqushYLFqy/WIIJvKh4dRL
YTEJtGeAe7wn9BPoD5Sf1xaj9ULw5CG/Z72inMk1rdzQBn+sWypb8HwJiGtHH43Q
3YwTSAg/Z3MuxcMM1F9ce/IeE+sqCtOZKgTTpdp56hPlHMV9Fa0v7mnMHz508jB/
4ZwAm3eEbCy14IKtW1jfKwA/IgPnF6bR6D1nn7F9SKnBG+hdHsyAVyHaTsXbfO4u
0RZ5Y9vxdQ==
=I2BI
-----END PGP SIGNATURE-----
Merge tag 'v0.22.5'
release v0.22.5
2021-02-15 22:50:16 +01:00
Max Kellermann
6b1d264b35
command/queue: better error message for open-ended range with "move"
...
The "move" command doesn't allow open-ended ranges because they don't
make a lot of sense; moving an open-ended range is only possible if
the destination index is before the range, and in that case, the
client should be well aware how many songs there are.
Closes https://github.com/MusicPlayerDaemon/MPD/pull/1057
2021-02-15 20:57:22 +01:00
Max Kellermann
a6c10e9a1c
protocol/ArgParser: check for invalid ranges
...
Catch errors like that early, before invalid ranges get passed to
internal MPD subsystems.
2021-02-15 20:55:30 +01:00
Max Kellermann
19a46064e9
protocol/RangeArg: add methods IsWellFormed(), IsEmpty(), HasAtLeast(), Count()
2021-02-15 20:54:51 +01:00
Max Kellermann
b57eeaa720
protocol/RangeArg: add static method Single()
2021-02-15 20:29:37 +01:00
Max Kellermann
ad059d5804
protocol/RangeArg: add method IsOpenEnded()
2021-02-15 20:29:35 +01:00
Max Kellermann
6e1940e930
protocol/RangeArg: add static method OpenEnded()
2021-02-15 20:29:34 +01:00
Max Kellermann
103194e32d
protocol/RangeArg: add missing noexcept
2021-02-15 19:56:02 +01:00
Shen-Ta Hsieh
481c330c17
src/output: Set thread name for Wasapi output thread
2021-02-15 17:51:49 +01:00
Shen-Ta Hsieh
7ef489e057
src/win32: run clang-format
2021-02-15 17:50:51 +01:00
Shen-Ta Hsieh
d9e5d5ff5b
src/win32: Add error message for NO_ERROR
2021-02-15 17:45:25 +01:00
Max Kellermann
d4d06da2f8
db/simple: fix dangling LightSong::tag reference in moved ExportedSong
...
After commit 1afa33c3c7
, an old bug was revealed:
SimpleDatabase::GetSong() constructs an ExportedSong instance by
moving the return value of Song::Export(), which causes the
LightSong::tag field to be dangling on the moved-from
ExportedSong::tag_buffer. This broke tags from CUE sheets.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1070
2021-02-15 17:38:37 +01:00
Max Kellermann
efde78db77
output/Thread: skip drain calls if there is no data to be played
...
Keep track of whether there is data being played, and don't call
AudioOutput::Drain() after Cancel() has been called already.
2021-02-15 16:39:13 +01:00
Max Kellermann
f1b8bcd6b2
output/pulse: don't drain if stream is suspended or corked
...
In this state, we can't make any progress.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1084
2021-02-15 16:07:16 +01:00
Max Kellermann
c2bc3704e1
output/pulse: move code to virtual method Drain()
...
Drain only if it was requested explicitly.
2021-02-15 15:59:54 +01:00
Max Kellermann
def120aca4
output/pulse: eliminate the pause
field
...
It is useless, because we're always checking pa_stream_is_corked().
2021-02-15 15:59:46 +01:00
AndriiZ
f5460b35a3
Add cacert option for Curl plugin. Allows to set cacert for curl lib ( #3 )
...
Add cacert option for curl plugin
add cacert option for Curl plugin. Allows to set cacert for curl lib
Added documentation line into doc/plugins.rst with explanation for cacert option
2021-02-13 13:49:15 +02:00
Max Kellermann
3456b1e50d
use std::size_t
2021-02-12 18:39:28 +01:00
Max Kellermann
fe6abe1750
zlib/Error: add noexcept
2021-02-12 18:37:32 +01:00
Max Kellermann
6cdb3ff21e
use [[gnu::pure]] instead of gcc_pure
...
This is semi-standard and doesn't require the util/Compiler.h header.
2021-02-12 18:34:16 +01:00
Max Kellermann
01af2778ab
time/ISO8601: throw std::invalid_argument on error
...
Throwing std::runtime_error was slightly wrong.
2021-02-12 18:31:56 +01:00
Max Kellermann
ad03c70753
event/TimerWheel: workaround for GCC9 bug
2021-02-12 18:29:02 +01:00
Max Kellermann
7fe0095fa7
util/IntrusiveList: add noexcept
to defaulted constructor
2021-02-11 21:22:15 +01:00
Max Kellermann
a4b236348f
Merge branch 'v0.22.x'
2021-02-07 22:04:07 +01:00
Max Kellermann
e7da5b104d
archive/iso9660: another fix for unaligned reads
...
Commit 79b2366387
added the field `skip`
to support unaligned reads, but set the `offset` field to a wrong
value. This resulted in miscalculation of `remaining`, causing
an assertion failure.
The fix is to assign `offset` the correct value, but consider the
`skip` value in the assertion.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1067
2021-02-07 21:41:51 +01:00
Max Kellermann
4be76f3c8f
archive/iso9660: check "skip==0" before doing optimized large read
...
After a Seek() to an odd offset, some data needs to be skipped from
the start of the block, and reading right into the given buffer
doesn't work.
2021-02-07 21:38:13 +01:00
vkostas
a59f1b21a6
Fix: Separate Conductor from Performer
...
Conductor was incorrectly saved to Performer tag in MPD database
2021-02-07 20:45:01 +01:00
Max Kellermann
5a16e3ffa3
event/TimerWheel: optimized container for CoarseTimerEvent
2021-02-05 18:24:25 +01:00
Max Kellermann
d1957b83c8
event/Chrono: add type alias TimePoint
2021-02-05 18:19:23 +01:00
Max Kellermann
1b4fd74575
event/TimerEvent: rename to FineTimerEvent
...
... and make TimerEvent a type alias for FineTimerEvent (i.e. swap
names).
2021-02-05 18:18:05 +01:00
Max Kellermann
def962b6cb
event/{Coarse,Fine,Far}TimerEvent: aliases for TimerEvent
...
Preparing for a variant of TimerEvent with coarse 1-second
granularity, but cheaper (with a timer wheel).
2021-02-05 18:16:05 +01:00
Max Kellermann
e802f1f61a
event/Loop: move TimerSet to separate class
2021-02-05 18:09:21 +01:00
Max Kellermann
271b287356
event/TimerEvent: assign due
in Schedule()
2021-02-05 17:57:05 +01:00
Max Kellermann
2a30acd99c
event/Loop: use [[gnu::pure]]
2021-02-05 17:55:33 +01:00
Max Kellermann
a8e70f18fd
event/*: use using
instead of typedef
2021-02-05 17:54:16 +01:00
Max Kellermann
ddd9f20a0b
fs/io/GunzipReader: document that the constructor throws
2021-02-04 17:29:00 +01:00
Max Kellermann
f4a5d671fe
util/{Const,Writable}Buffer: include cleanup
2021-02-04 17:27:48 +01:00
Richard Backhouse
c72006dbcc
zeroconf/ZeroconfBonjour: Cleanup formatting from previous commit
2021-01-23 06:13:05 -05:00
Richard Backhouse
06fe30e2bd
zeroconf/ZeroconfBonjour: Fix compile errors resulting from "refactor to SocketEvent" and reenable bonjour for darwin build
2021-01-23 06:06:49 -05:00
Max Kellermann
08e76815ba
io/FileDescriptor: use std::byte
2021-01-22 12:50:16 +01:00
Max Kellermann
33ac3eb551
lib/curl/Easy: add methods SetVerify{Host,Peer}()
2021-01-22 12:34:04 +01:00
Max Kellermann
d56a51cb5e
Merge branch 'v0.22.x'
2021-01-21 22:28:11 +01:00
Max Kellermann
9e2d09dabc
net/SocketError: add syscall specific check functions
...
Fixes Windows compatibility.
2021-01-21 22:05:21 +01:00
Max Kellermann
2719f62feb
net/SocketError: relicense to BSD-2
2021-01-21 21:31:02 +01:00
Max Kellermann
065a0c09f8
fs/io/StdioOutputStream: include cleanup
2021-01-21 21:13:40 +01:00
Max Kellermann
04731fb7cc
util/StringPointer: add operator==(std::nullptr_t)
2021-01-21 21:08:52 +01:00
Max Kellermann
12ff5a547f
fs/io/FileOutputStream: add noexcept
2021-01-21 21:04:19 +01:00
Max Kellermann
9b2eb74f95
util/AllocatedString: fix operator= parameter type
2021-01-21 20:44:07 +01:00
Max Kellermann
84084baa65
util/AllocatedString: remove wrong std::
prefix
2021-01-21 20:16:32 +01:00
Max Kellermann
3bc45fbf68
util/AllocatedString: remove Null(), IsNull()
2021-01-21 20:12:05 +01:00
Max Kellermann
36168a24f5
util/AllocatedString: support casting a nulled instance to string_view
2021-01-21 20:06:01 +01:00
Max Kellermann
5e67443a1a
util/{Const,Writable}Buffer: always enable assertions
2021-01-21 20:04:00 +01:00
Max Kellermann
17858143b3
util/{Const,Writable}Buffer: enable constexpr
on more methods
2021-01-21 20:03:53 +01:00
Max Kellermann
c44a7b2705
util/AllocatedArray: add operator=(nullptr)
2021-01-21 20:03:38 +01:00
Max Kellermann
0ded23591b
util/AllocatedString: add operator=()
2021-01-21 20:02:52 +01:00
Max Kellermann
c1a7aa652d
util/AllocatedString: replace Clone() with copy constructor
2021-01-21 20:02:41 +01:00
Max Kellermann
8d47f51399
util/AllocatedString: add const_pointer constructor
2021-01-21 18:06:10 +01:00
Max Kellermann
a81c9bfb81
util/AllocatedString: add string_view constructor
...
Replaces the static Duplicate() method.
2021-01-21 18:05:51 +01:00
Max Kellermann
1caf57644f
util/AllocatedString: add default constructor
2021-01-21 18:05:50 +01:00
Max Kellermann
c70b63c183
util/AllocatedString: rename to BasicAllocatedString
...
To make things simpler, AllocatedString is now a non-template class.
2021-01-21 18:04:03 +01:00
Max Kellermann
8279cafd6d
release v0.22.4
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmAJqgAQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEg2QEACJLeN2mk2RU7Iqxbh/ekwm6aTM8D6bx8RH
Xys4l1YAFQ0cg7sKZwMqefedGJG2j8CORbihYIF6Z8EvFsAiI6I3LjElfXrmnAc0
Y9SnWHIR5vxlSQgyqPlJ0jl213uzoHHpel8PpEJbTtYONT+8f3fQEuLpO4/uWOIT
S6mlX16vI0/Ydp//8UIazUUvjar1pPvBnSEZ0JZsZl8RTYlS/4SOfqpHnhhWnWpO
9RXlLP9Zo68rJzNhUPwRj7NkyVEkg74xpjHOWoyeTMNQ6tKMQn8b4jb/LcBfj6hk
I7mof5oX0aS+GyYaehKi9c9Az7wUcBxnnaN02qlAaSutcuox7ce70fKMtiAXRN0o
T9mFSJm1JKqHZb1dFvxqSqFjVr7eO9XCxHqaEqTbXCT+CL/6AJQZi5SVcX4gCY1P
NSM3Jnydjr73WFLmEfjCkWLTdtiJhY/2Q/J6+vcILMb3W2y5FaSHZTOFbxVG4nMM
spoQ27b7PoB9MbxLR3QJkYLa0WE3FrTORYgsH8Po7ZcCU9+JvqDSBnGXxx+Yv+JJ
dKMI5bEAvPziodSHHQXgD4lhx744JuiLAJNtlSYJvev1s2Irf2TtMHdmGERHQZwH
5cr9sQLgyHCLvTBDGt1dVZq/Z0T/PCkweIa5cT6ZBAim1hs7g20g8ksyFK2ZPUbB
vEGBNcuMIg==
=CEEr
-----END PGP SIGNATURE-----
Merge tag 'v0.22.4'
release v0.22.4
2021-01-21 17:42:26 +01:00
Max Kellermann
995aafe9cc
protocol: add command "binarylimit"
...
Increasing the protocol version to 0.22.4 to allow clients to detect
this feature.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1038
2021-01-21 17:17:10 +01:00
Max Kellermann
6e33566cee
client/FileCommands: validate the given offset
2021-01-21 16:57:38 +01:00
Max Kellermann
3b3c1d466d
event/FullyBufferedSocket: add method GetOutputMaxSize()
2021-01-21 16:49:38 +01:00
Max Kellermann
056ab199ab
util/PeakBuffer: add method max_size()
2021-01-21 16:45:56 +01:00
Max Kellermann
eea0e084af
util/PeakBuffer: use std::byte instead of std::uint8_t
2021-01-21 16:45:31 +01:00
Max Kellermann
fa82f558be
util/PeakBuffer: add noexcept
2021-01-21 16:45:17 +01:00
Max Kellermann
6b555b7017
util/PeakBuffer: use std::size_t
2021-01-21 16:45:14 +01:00
Max Kellermann
dafba203e7
util/ForeignFifoBuffer: use auto
2021-01-21 16:38:32 +01:00
Max Kellermann
a5d382348e
command/Request: ParseUnsigned() returns unsigned
...
Of course, it should do that!
2021-01-21 16:33:17 +01:00
Max Kellermann
74396448df
input/curl: disable verify_peer on Android by default
...
I havn't yet figured out how to use Android's system CA certificates
with CURL/OpenSSL, so a temporary workaround is to disable verify_peer
by default. The data MPD transfers isn't extremely important, so the
servers's authenticity isn't extremely important either.
2021-01-21 14:55:09 +01:00
Max Kellermann
014c2a82bd
event/SignalMonitor: fix non-Linux build failure
...
Regression by commit cd4b673b6c
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1060
2021-01-21 14:05:23 +01:00
Max Kellermann
1afa33c3c7
db/simple/Song: Export() merges tags with "target"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1048
2021-01-21 13:57:59 +01:00
Max Kellermann
3a7c9c7c84
db/simple/ExportedSong: add option to own a Tag
2021-01-21 13:52:01 +01:00
Max Kellermann
6d08e761c8
db/simple/ExportedSong: new class
2021-01-21 13:52:01 +01:00
Max Kellermann
fee282f49c
SongPrint: use LightSong::GetDuration()
...
This properly prints the "Time"/"duration" values for songs in virtual
CUE folders.
This is loosely related to
https://github.com/MusicPlayerDaemon/MPD/issues/1048
2021-01-21 13:52:00 +01:00
Max Kellermann
07d2bc6898
util/StringView: add method SplitLast()
2021-01-21 13:20:01 +01:00
Max Kellermann
9551166f27
command/file: use %zu to format a size_t
...
`PRIoffset` was wrong, because it expects an `offset_type`
(i.e. `uint64_t`). This broke on 32 bit machines where `size_t` has
32 bits.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1058
2021-01-20 20:44:47 +01:00
Max Kellermann
2a8c420cff
client/Response: add printf
attribute
2021-01-20 20:43:16 +01:00
Max Kellermann
ec1e04a65d
Merge branch 'bugfix/1043/remove-basepath-handling' of git://github.com/PVince81/MPD into v0.22.x
2021-01-20 20:02:31 +01:00
Max Kellermann
4949cd98f3
output/sles: add missing include for assert()
2021-01-19 20:17:17 +01:00
Max Kellermann
a14ce4c7cb
lib/pcre/RegexPointer: work around bogus -Wmaybe-uninitialized with GCC 11
2021-01-19 19:58:04 +01:00
Rosen Penev
594dfe572b
clang-tidy: mark a bunch of variables constexpr
...
Found with cppcoreguidelines-interfaces-global-init
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-01-16 18:35:31 -08:00
Max Kellermann
906e82f600
event/Loop: fix assertion failure due to wrong "busy" value
...
If an InjectEvent callback schedules a timer, the loop will restart,
but the "busy" flag is still false. The fix is to move the "again"
check before the "busy" setting.
2021-01-12 17:28:42 +01:00
Max Kellermann
bcb7e954e9
net/Resolver: add simple getaddrinfo() wrapper
2021-01-12 15:43:26 +01:00
Max Kellermann
866c87c65e
net/ToString: include cleanup
2021-01-12 12:22:44 +01:00
Max Kellermann
4ba36d7cb9
net/SocketError: relicense to BSD-2
2021-01-11 22:31:46 +01:00
Max Kellermann
13f8a912e3
event/Loop: simplify wake_event initializer
2021-01-11 20:14:20 +01:00
Max Kellermann
51f110a990
system/EventPipe: use class Unique{Socket,File}Descriptor
2021-01-11 17:51:22 +01:00
Max Kellermann
17eae74c1c
system/EventFD: Get() returns FileDescriptor
2021-01-11 17:38:30 +01:00
Max Kellermann
cd4b673b6c
event/WakeFD: convert macro to class with a GetSocket() method
2021-01-11 17:02:54 +01:00
Ethan Halsall
0d606c743b
add additional opus encoder options
2021-01-09 22:04:00 -06:00
Vincent Petry
ec0d3ac95d
Remove relative path handling which was not needed
...
The original base relative path was introduced due to an erroneous test
where the URL started with three slashes: "https:/// " instead of two,
which led to implementing handling for such cases but broke the two
slashes case.
This fix removes the base relative path handling because with two
slashes the path is anyway always relative to the host (aka absolute
URI, without host).
This reverts 216f62ea14
and part of 74b2fc7fdc
Signed-off-by: Vincent Petry <PVince81@yahoo.fr>
2021-01-08 16:50:27 +01:00
Max Kellermann
81ea749248
Merge branch 'v0.22.x'
2021-01-05 13:11:29 +01:00
Vincent Petry
74b2fc7fdc
Use uri_has_scheme for Webdav response href
...
Use uri_has_scheme to find out if the href in Webdav responses is absolute
to use the matching base path extraction.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr>
2021-01-05 12:04:08 +01:00
Vincent Petry
216f62ea14
Webdav href in response can be relative
...
Fixed Webdav base path stripping in cases where href is a relative path.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr>
2021-01-04 21:50:03 +01:00
Vincent Petry
b7d0001390
Fix parsing propstat blocks
...
There can be more than one propstat block each with their own status
code. We're only interested in the one with the 200 status, the found
properties.
This fixes parsing to make sure we process all propstat blocks instead
of just the last one, which might have a 404 status for not-found
properties.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr>
2021-01-04 21:49:38 +01:00
Vincent Petry
687788e4d3
Fix Webdav storage PROPFIND request
...
Remove additional "a:prop" in PROPFIND request to match RFC 4918 section 9.1.3.
Added Content-Type header as the body is not a true multipart POST.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr>
2021-01-04 14:28:42 +01:00
Max Kellermann
e009ad1a72
thread/Id: relicense to BSD-2
2021-01-03 19:25:20 +01:00
Max Kellermann
abbd980671
Merge branch 'v0.22.x'
2021-01-01 19:59:15 +01:00
Max Kellermann
5348f8c9c8
copyright year 2021
2021-01-01 19:54:28 +01:00
Max Kellermann
937da63ba6
util/StringView: add {Starts,Ends}With(char)
2020-12-15 17:04:39 +01:00
Max Kellermann
1f312b2e42
curl/Handler: disallow OnData() to throw
...
This eliminates some complexity from class CurlRequest.
2020-12-15 17:03:24 +01:00
Max Kellermann
1e3089ffb7
curl/Request: move struct Pause to class CurlResponseHandler
2020-12-15 17:01:18 +01:00
Max Kellermann
5d7ff150dd
curl/Request: add more wrapper methods
2020-12-15 16:56:20 +01:00
Max Kellermann
7a56837141
odbus/Watch: support DBUS_WATCH_{ERROR,HANGUP}
2020-12-14 15:10:19 +01:00
Max Kellermann
ed1caffc79
odbus/Watch: use SocketEvent::ReleaseSocket() to allow another Open()
2020-12-14 15:10:15 +01:00
Max Kellermann
65473b5113
lib/dbus/FilterHelper: new class
2020-12-14 15:07:12 +01:00
Max Kellermann
178d115ccb
lib/dbus/Glue: add noexcept
2020-12-14 13:19:51 +01:00
Max Kellermann
10e5b0759c
lib/dbus/Glue: relicense to BSD-2
2020-12-14 13:02:37 +01:00
arcnmx
0a81e462db
event/SocketEvent: remove FD before closing socket
...
SocketEvent knows the FD is still open and is about to close it, so
it's unnecessary to rely on the kernel (via AbandonFD) to clean up the
epoll_wait list.
### Why this is relevant
- `AbandonFD` assumes that upon closing the socket, the FD will be automatically removed from the epoll list. That fd is associated with a reference to the `SocketEvent`, so this is an important and dangerous assumption to get wrong. In the case that the FD isn't immediately removed from the list by the kernel, the event loop can crash due to the `SocketEvent` being destroyed and it being a use-after-free bug at that point.
- If a socket FD happens to be duplicated, then closing the SocketEvent FD will not automatically remove it from epoll, and will trigger said bug/crash. It is only automatically removed when all FD references to the underlying socket/resource are closed?
- A `fork()` is one example where a socket FD can be duplicated and result in this situation.
- `CLOEXEC` might be considered mitigation for this but also introduces a race condition where the crash can occur between a `fork()` and `exec()` without additional synchronization to freeze the event loop.
One could argue the mpd event loop isn't fork-safe, and thus should be allowed to use `AbandonFD` however it likes. A decision on whether this is intended should probably be declared; but either way this fix seems appropriate in cases where `Abandon` isn't actually necessary. It also might be possible to fix `AbandonFD` to mark the `SocketEvent` as removed without using `EPOLL_CTL_DEL`?
[edit: made this dependent on HAVE_THREADED_EVENT_LOOP which is always
true for MPD, but not for ncmpc, for example - mk]
2020-12-04 10:32:46 +01:00
Max Kellermann
5cbbe8ae2e
event/TimerEvent: update API documentation
2020-12-04 09:57:19 +01:00
Max Kellermann
00fafa16c7
event/SocketEvent: remove assert(), reduce header dependencies
2020-12-04 09:56:28 +01:00
Max Kellermann
cea8db7eaa
event/SocketEvent: add comment
2020-12-04 09:55:08 +01:00
Max Kellermann
b56c0e69e4
event/SocketEvent: add another assert() to Open()
2020-12-04 09:24:02 +01:00
Max Kellermann
b27e82e4a9
event/SocketEvent: allow Schedule() with IMPLICIT_FLAGS
...
Relax the API (instead of tightening it further like commit
7bc1c9925b
tried to do unsuccessfully).
2020-12-04 09:17:45 +01:00
Max Kellermann
ad48834469
Revert "event/SocketEvent: add assert()"
...
This reverts commit 7bc1c9925b
. It
caused a crash with the ALSA plugin family (through
MultiSocketMonitor::ReplaceSocketList() and
MultiSocketMonitor::AddSocket()). Until we have a proper fix, the
assertion patch is reverted.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1020
2020-12-02 20:43:29 +01:00
Max Kellermann
9d6b5e2ba1
event/TimerEvent: rename IsActive() to IsPending()
2020-12-02 15:41:11 +01:00
Max Kellermann
33ba190bec
event/TimerEvent: add ScheduleEarlier()
2020-12-02 15:30:37 +01:00
Max Kellermann
3783350d25
event/SocketEvent: document Dispatch()
2020-12-02 15:24:23 +01:00
Max Kellermann
173405a343
event/SocketEvent: make Dispatch() private
2020-12-02 15:14:51 +01:00
Max Kellermann
7bc1c9925b
event/SocketEvent: add assert()
2020-12-02 15:12:30 +01:00
Max Kellermann
618f94f589
util/TemplateString: add StringView cast operator
2020-12-02 15:00:49 +01:00
Max Kellermann
ad2c22844c
util/TemplateString: add FromLiteral()
2020-12-02 15:00:39 +01:00
Max Kellermann
b8df851414
io/FileDescriptor: use std::size_t
2020-12-02 14:56:00 +01:00
Max Kellermann
a584141cae
io/Open: add flags
parameter to OpenReadOnly()
2020-12-02 14:52:51 +01:00
Max Kellermann
4e88f95f94
event/Loop: move the "again" check out of the mutex scope
2020-12-01 20:29:21 +01:00
Max Kellermann
790e540c19
event/Loop: use ClockCache
2020-12-01 20:25:42 +01:00
Max Kellermann
16074c565f
time/ClockCache: new library
2020-12-01 20:22:26 +01:00
Max Kellermann
2a1dd55b11
event/Loop: include cleanup
2020-12-01 20:19:40 +01:00
Max Kellermann
be20f760ab
event/Loop: disallow copying
2020-12-01 20:18:33 +01:00
Max Kellermann
8050394003
event/Loop: add noexcept
2020-12-01 20:10:53 +01:00
Max Kellermann
ff8b5bc61b
event/Loop: reorder methods
2020-12-01 20:09:25 +01:00
Max Kellermann
ef8797821f
event/Loop: inline field initializers
2020-12-01 20:07:35 +01:00
Max Kellermann
5f2797e7cc
event/Loop: add more assertions to dtor
2020-12-01 20:05:54 +01:00
Max Kellermann
e286702f4c
event/Loop: rename AddDeferred() to AddDefer()
2020-12-01 17:26:39 +01:00
Max Kellermann
c58aaf545f
event/IdleEvent: make a special case of DeferEvent
2020-12-01 17:14:24 +01:00
Max Kellermann
990f2dc1cf
event/DeferEvent: use class IntrusiveList instead of boost::intrusive::list
2020-12-01 17:14:24 +01:00
Max Kellermann
774b4313f2
event/DeferEvent: split the thread-safe version into new class InjectEvent
2020-12-01 17:14:24 +01:00
Max Kellermann
1ecbc2ff0f
event/DeferEvent: explicitly forbid copying
2020-12-01 17:14:24 +01:00
Max Kellermann
fd8e38f8cd
event/DeferEvent: use using
instead of typedef
2020-12-01 17:14:24 +01:00
Max Kellermann
e86d4db55c
Merge branch 'v0.22.x'
2020-12-01 17:14:21 +01:00
Max Kellermann
d9583faf06
input/{tidal,qobus}: add missing includes for assert()
2020-12-01 17:14:11 +01:00
Max Kellermann
2788cf9330
input/tidal: add missing include for assert()
2020-12-01 17:13:13 +01:00
Max Kellermann
9420c74101
util/AllocatedArray: add nullptr constructor
2020-11-30 22:30:57 +01:00
Max Kellermann
b1bef9c21d
util/AllocatedArray: add method data()
2020-11-30 22:30:28 +01:00
Max Kellermann
5b0ef7ea98
util/AllocatedArray: add types pointer, const_pointer
2020-11-30 22:30:25 +01:00
Max Kellermann
ab53c414bc
util/StringView: add method SplitLast()
2020-11-30 22:29:38 +01:00
Max Kellermann
d547ace749
io/FileDescriptor: use std::size_t
2020-11-30 22:27:16 +01:00
Max Kellermann
b47e0cffdd
util/TemplateString: rename CharAsString() to FromChar()
2020-11-30 22:23:28 +01:00
Max Kellermann
3af35aee9e
util/TemplateString: add cast operators
2020-11-30 22:22:24 +01:00
Max Kellermann
02314ac7dd
util/TemplateString: rewrite as constexpr functions
...
Hooray C++17!
2020-11-30 22:19:57 +01:00
Max Kellermann
e7c4e87ac4
util/TemplateString: remove unnecessary implementation for static variable
...
This is obsolete since C++17.
2020-11-30 22:13:13 +01:00
Max Kellermann
de58bfbb7f
util/TemplateString: use std::size_t
2020-11-30 22:13:08 +01:00
Max Kellermann
0dda4c06b1
util/TemplateString: no indent after namespace
2020-11-30 22:13:04 +01:00
Max Kellermann
79fd6143ec
lib/dbus/Values: use T::Traits, not T
...
This template was never instantiated, so the problem never occurred.
2020-11-30 22:11:18 +01:00
Max Kellermann
8f89e3f7f4
lib/dbus/Values: use using
instead of typedef
2020-11-30 22:11:14 +01:00
Max Kellermann
fc01d11b8d
odbus/Types: use using
instead of typedef
2020-11-30 22:08:37 +01:00
Max Kellermann
0c28d8dcbe
time/ISO8601: support YYYY-MM (without day of month)
2020-11-30 21:55:12 +01:00
Max Kellermann
764eaadd25
time/Math: new library
2020-11-30 21:55:05 +01:00
Max Kellermann
273771ffec
net/SocketAddress: add CastTo()
2020-11-30 21:51:07 +01:00
Max Kellermann
32ce9ce919
net/IPv[46]Address: pass SocketAddress by value to Cast()
2020-11-30 21:49:07 +01:00
Max Kellermann
34a070f5a6
net/IPv[46]Address: add Cast(const sockaddr_in&)
2020-11-30 21:49:02 +01:00
Danilo Spinella
92bfdffa42
lib/ffmpeg/Filter: Add define required for avutil
2020-11-30 20:06:21 +01:00
Max Kellermann
ac4975cd7a
util/MimeType: relicense to BSD-2
2020-11-18 15:28:21 +01:00
Max Kellermann
fbbbfb9668
Merge branch 'v0.22.x'
2020-11-16 09:41:20 +01:00
Max Kellermann
38b41fc3fd
filter/ffmpeg: detect the output sample format
...
Some FFmpeg filters change the sample format, and since MPD assumes
this never happens, this results in loud noise instead of music. This
commit finally implements the TODO comment by sending one frame of
silence to the filter and checking the output frame's format.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1009
2020-11-16 09:39:34 +01:00
Max Kellermann
394f69bee1
output/Control: allow copy elision (fix -Wpessimizing-move)
2020-11-15 19:55:11 +01:00
Stapper
ba5531f9dd
Fixes #994 - moveoutput: new AudioOutputControl created from copyMoving an output to a partition is now done via MultipleOutputs::AddCopy(),using a new AudioOutputControl constructor. Tags and always_on settings willpersist when moving outputs between partitions.
2020-11-15 19:47:53 +01:00
Max Kellermann
eb9f5339b6
Merge branch 'v0.22.x' into master
2020-11-11 12:43:50 +01:00
Max Kellermann
a9714e73c8
Merge branch 'bind' of git://github.com/neheb/MPD into master
2020-11-10 16:02:34 +01:00
Max Kellermann
1092882f38
decoder/dsdiff: apply padding to odd-sized chunks
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1001
2020-11-10 15:55:33 +01:00
Max Kellermann
a99bc91eb0
release v0.22.3
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl+lZ/cQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEpfmD/wPsQl/bLHuU1su2OqOAtFfPEhkJAetllE5
vpkXUqATEiBFKTDj2tpherZsioGpExoNmypgehVp0oDSuWvF+wbYf+SNpsqW4Ck0
+RoOg1Nr5tKtjc7dCQA8AricguR4nU9ecfXPKU/Q62AJbdlUhi5Ly4QcFyT3NZUK
SK0yp4i83osWMEAEhn1k7ducqljSyjIBt1dvK3FK9JY3lYXXARVG5THDnlbbXhxP
Hn9Jygd7bJ3J3g0I45q4Nfop7BiPBowmiqDxe6scL/owW+5MXlC+nkX1OIYRA37E
Byud/kV5/gi5YyK4Z6hNI5p1By4ggJ8N5O7h2CiktMvkd4KQMUm4SfMH3ah3o2JG
CiC90WgwdWeTbRaZvSKWSPo3V2htbzObeglvyUjnmV2HTNN0vRWzS5vrbvWK81+R
XMqICrJNwlQduCNbl1UcnCdIN+0tS1Ecg8xEDkbe6VVHAoxwIsWASYgKr3fxXnuQ
N2vWkqLXHrgJWtpVU8aP2ufnkbHDWA1T1vgPsgNUKv/vEQAaRP0XkMIc+VW3u8H8
AWj87r+qxjjWCfAbg9nxdGzen+KHZnq0/hiPLq1C2skm4JP+LsWuI4mjB/oGfJ6y
aZsXHxCV/aKakDucpmkMfC/oYnXD+dvBXTgIr68teEuLnmLauZa3oXocdRqQdCUW
qKh9rVD7vg==
=FEmy
-----END PGP SIGNATURE-----
Merge tag 'v0.22.3' into master
release v0.22.3
2020-11-06 16:14:46 +01:00
Max Kellermann
f849b07766
storage/curl: fix nullptr dereference
...
Pass a std::string to PathTraitsUTF8::Relative(), implicitly casting
it to std::string_view. This selects the right overload which returns
std::string_view instead of `const char *`; the latter could return
`nullptr` which would cause the implicit conversion of the return
value to std::string_view to crash.
Regression caused by commits ead208987d
and a98d627c0b
.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/995
2020-11-06 15:35:47 +01:00
Rosen Penev
071d3c71d8
clang-tidy: replace std::bind with lambdas
...
Found with modernize-avoid-bind
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-11-05 18:09:30 -08:00
Max Kellermann
afbcac9fb1
util/MimeType: use IterableSplitString() in ParseMimeTypeParameters()
2020-11-04 21:29:42 +01:00
Max Kellermann
51e5b56b3a
playlist/registry: remove duplicate function ExtractMimeTypeMainPart()
...
This is the same as GetMimeTypeBase(), which has already been applied.
2020-11-04 21:20:43 +01:00
Max Kellermann
bb07fd42ce
util/MimeType: migrate GetMimeTypeBase() to std::string_view
2020-11-04 21:20:03 +01:00
Max Kellermann
bab626c325
util/UriExtract: remove the query string at the beginning of uri_get_suffix()
2020-11-04 21:15:41 +01:00
Max Kellermann
2a9131498f
util/UriExtract: pass std::string_view to uri_get_suffix()
2020-11-04 21:13:57 +01:00
Max Kellermann
35a232105e
util/UriExtract: uri_get_suffix() returns std::string_view
...
No need to copy it to a buffer.
2020-11-04 21:08:26 +01:00
Max Kellermann
19dd1a25d7
{decoder,archive,playlist}/plugin: pass std::string_view to SupportsMimeType()
2020-11-04 21:00:49 +01:00
Max Kellermann
53396c0e50
Merge branch 'v0.22.x' into master
2020-11-04 20:37:25 +01:00
Max Kellermann
0b8208fe7f
Merge branch 'clng11' of git://github.com/neheb/MPD into master
2020-11-04 20:34:55 +01:00
Max Kellermann
2da3cff1e8
filter/LoadChain: use the AutoConvertFilter
...
This adds support for input samples other than 16 bit to the FFmpeg
filter plugin.
2020-11-04 20:15:19 +01:00
Max Kellermann
0c965d0573
filter/AutoConvert: move the Filter class to TwoFilters.cxx
2020-11-04 20:15:19 +01:00
Max Kellermann
77c14692c9
filter/AutoConvert: eliminate AutoConvertFilter if possible
...
If no conversion is necessary, return the child Filter as-is. This
allows removing all nullptr checks from AutoConvertFilter.
2020-11-04 20:15:19 +01:00
Max Kellermann
226eb26300
filter/ffmpeg: interleave the output AVFrame
...
If the FFmpeg filter outputs planar data, interleave it, just like the
FFmpeg decoder plugin does.
2020-11-04 20:15:19 +01:00
Max Kellermann
2d606fa989
decoder/ffmpeg: move code to lib/ffmpeg/Interleave.cxx
...
To be reused by the FFmpeg filter plugin.
2020-11-04 20:15:19 +01:00
Max Kellermann
7a0342c8bb
decoder/ffmpeg: use AVFrame fields instead of AVCodecContext fields
2020-11-04 20:06:45 +01:00
Max Kellermann
42c9d765cf
lib/ffmpeg/Buffer: add missing include
2020-11-04 20:06:41 +01:00
Max Kellermann
a8a80ee689
lib/ffmpeg/Buffer: disallow copying
2020-11-04 19:51:21 +01:00
Max Kellermann
f9bdb4b0b8
lib/ffmpeg/Buffer: add noexcept
2020-11-04 19:50:38 +01:00
Max Kellermann
9332527872
lib/ffmpeg/{Buffer,Time}: remove obsolete "#undef SampleFormat"
...
This compatibility macro has been removed from FFmpeg long ago.
2020-11-04 19:50:33 +01:00
Max Kellermann
84f772357e
filter/convert: convert_filter_new() returns std::unique_ptr
2020-11-04 16:47:11 +01:00
Max Kellermann
f2b9785a67
filter/chain: pass std::string_view to filter_chain_append()
2020-11-04 16:37:53 +01:00
Max Kellermann
eeaec99c59
filter/LoadChain: use IterableSplitString()
2020-11-04 16:36:11 +01:00
Max Kellermann
b0002e3b73
filter/chain: copy the child name
...
filter_chain_parse() passes a temporary string pointer which results
in a use-after-free in the PreparedChainFilter::Child::Open() error
message.
2020-11-04 16:34:38 +01:00
Max Kellermann
27c589da97
filter/chain: remove unused field ChainFilter::Child::name
2020-11-04 16:26:50 +01:00
Max Kellermann
92a218b7a9
playlist/registry: add option "as_directory"
...
This allows users to disable the "CUE files as directories" feature
without having to disable the CUE playlist plugin completely. This
feature has been annoying some users.
2020-11-04 16:13:12 +01:00
Max Kellermann
bb009daf66
playlist/registry: simplify ExtractMimeTypeMainPart()
2020-11-04 13:34:04 +01:00
Max Kellermann
3d276d50b4
event/PollBackend: use vector::push_back() instead of resize()
2020-10-30 16:35:20 +01:00
Max Kellermann
b1b731340e
event/PollBackend: add Item constructor
2020-10-30 16:32:45 +01:00
Max Kellermann
b9b02b4ff2
event/PollBackend: use unordered_map::find() instead of operator[]
...
The latter creates a new object, but we know that the key already
exists.
2020-10-30 16:25:41 +01:00
Max Kellermann
ab5d23da11
event/PollBackend: use unordered_map::emplace() in Add()
2020-10-30 16:24:32 +01:00
Max Kellermann
0554fe3652
event/PollBackend: use std::size_t
2020-10-30 16:09:29 +01:00
Max Kellermann
b0282fe36f
event/PollGroupWinSelect: add Item constructor
2020-10-30 16:07:23 +01:00
Max Kellermann
69b45e693b
event/WinSelect: use unordered_map::find() instead of operator[]
...
The latter creates a new object, but we know that the key already
exists.
2020-10-30 16:05:25 +01:00
Max Kellermann
9e97acc28d
event/WinSelect: merge duplicate code into ApplyReady()
2020-10-30 15:55:23 +01:00
Max Kellermann
b1e446a931
event/WinSelect: add missing const
to deleted copy ctor/operator
2020-10-30 15:45:29 +01:00
Max Kellermann
938319cd44
event/WinSelect: reorder method prototypes
2020-10-30 15:45:12 +01:00
Max Kellermann
fee29001fa
event/WinSelect: use unordered_map::emplace() in Add()
...
This allow using erase() with iterator, without a key lookup.
2020-10-30 15:32:11 +01:00
Max Kellermann
6d894a1806
event/WinSelect: use SOCKET as std::unordered_map key
2020-10-30 15:25:09 +01:00
Rosen Penev
f1fc5d79ca
clang-tidy: convert to all/any_of
...
Found with readability-use-anyofallof
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-10-28 15:51:21 -07:00
Rosen Penev
0fd2c74a66
use structured binding declarations
...
Shorter.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-10-28 15:41:31 -07:00
Max Kellermann
bb99cf37e3
release v0.22.2
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl+Zm30QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEm0BD/0eeuI09j2LPCCQQdOUxl3ydWDLVVqDbT/b
wUYLFEIscr0Kr8k4Mcl3C5LBEeCJq4ZYQ/VqlgNVC11SXVhq7IHJALJ3rYQVIpx+
7MGfd1M0G39d9nlEFeKG2iNKx78aiBTqkMC9MtctacIOiKmntXP0cZZxpqGMMVZs
5t8l8i2CM35BWisu0PjSvPJMzGVf9lgEIqx1ejHBFrX6V6DEZ8d6KEbV9FulNo1Y
bH1UmKdsz71LC1ZE9EescmL5kVvaXyWyJmDDiu2/sqcMRjAHl2+RIAsunv6SqdGH
Sk4OZbtXB8M8EQHuSJESUS6SnQEyGdwCptBn4NHXkajzRJqKCq0FRDyQGT+qrmUr
H+91rZeWRYFbBMStP9l9MMQiTTjXgfCnHExDK9AmrMhiuYnuVxV1deEP7FXswCkd
yU3sPpcKgdzMEYzoTuzXJVyMIKr0WOmNGFMEUbxfBXZDCbT1i9SH+Bi0kQAYe9h9
JQTSWeS5NDRcI/b6nHS6ccUGFEp1scbXQNLw+17UvrUwfeZW9N9/t6jPS4kdUNEm
tnNmbM/3o7yT3B8BGKTl5qBVSjCcgqKfsBXvy9Qn2zE0TN4HQPiJSDXZEH9LuZR1
c6b8aI94gZkN4av1OAjmZgLyn+Pr2gyrei4FQNXyjNJkV5F3wiiLhhDTEMc2WLNm
Zf4qpZArww==
=eRNp
-----END PGP SIGNATURE-----
Merge tag 'v0.22.2' into master
release v0.22.2
2020-10-28 17:33:10 +01:00
Max Kellermann
7b9295ff99
lib/yajl/Handle: strip newlines from error messages
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/981
2020-10-28 16:06:52 +01:00
Max Kellermann
5f61d440eb
lib/yajl/Handle: un-inline the throwing code
...
Reduces header dependencies.
2020-10-28 16:02:14 +01:00
Max Kellermann
6bc73a9ebe
util/FormatString: update API documentation
2020-10-28 15:48:42 +01:00
Max Kellermann
1195eb266e
protocol/Ack: remove unused variable ack_domain
2020-10-28 15:47:05 +01:00
Max Kellermann
3562a3e51e
Main: save the state_file on shutdown
...
This got lost in commit 5d597a3646
(v0.21.19), but it was never
noticed because the state_file_interval was way too short due to
commit 3413d1bf23
, fixed recently by commit 27cc7b352d
2020-10-28 15:29:47 +01:00
Max Kellermann
7c47fe746c
event/Loop: AbandonFD() unlinks the SocketEvent
...
Fixes use-after-free bugs causing assertion failures at shutdown,
because all "abandoned" SocketEvents are still in the linked list.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/986
Closes https://github.com/MusicPlayerDaemon/MPD/issues/987
2020-10-28 15:01:32 +01:00
Max Kellermann
65a1c4a016
event/Loop: pass SocketEvent& to AbandonFD()
2020-10-28 14:59:28 +01:00
Max Kellermann
46418d0f2d
event/ServerSocket: remove obsolete API documentation
2020-10-28 14:52:31 +01:00
Max Kellermann
bbfa6fe632
db/simple: purge songs for unavailable decoder plugins on update
2020-10-28 14:36:20 +01:00
Max Kellermann
bf97d13d0b
fs/Traits: add GetPathSuffix()
2020-10-28 14:29:46 +01:00
Max Kellermann
b5673b6333
db/simple/Directory: add pure
attribute
2020-10-28 14:24:58 +01:00
Max Kellermann
ee802867df
db/update/Walk: add code comments
2020-10-28 14:23:39 +01:00
Max Kellermann
ecaa51e322
db/simple: purge special directories for unavailable plugins on update
2020-10-27 19:14:31 +01:00
Max Kellermann
0779333064
db/update/Walk: adjust lamba indent
2020-10-27 19:14:31 +01:00
Max Kellermann
6f1a4a73b7
fs/Traits: add GetFilenameSuffix()
2020-10-27 19:14:31 +01:00
arcnmx
ad585e179f
system/FileDescriptor: fix Duplicate result
...
dup2 returns new_fd on success, not 0
2020-10-20 09:32:43 -07:00
Max Kellermann
8348a1ec8f
event/PollGroup: rename to PollBackend
2020-10-19 14:52:59 +02:00
Max Kellermann
c18e00daa4
event/PollGroup: move event flags to a separate header
...
Reduce header dependencies for SocketEvent.hxx.
2020-10-19 14:48:41 +02:00
Max Kellermann
418ba96334
event/SocketEvent: forbid copying
2020-10-18 20:07:49 +02:00
Max Kellermann
a60e782959
event/Loop: reorder assertions
2020-10-18 20:05:22 +02:00
Max Kellermann
8bab5733d7
event/Loop: add assertions
2020-10-18 20:04:16 +02:00
Max Kellermann
e3270dfd68
event/SocketEvent: use class IntrusiveList<>
2020-10-18 20:02:47 +02:00
Max Kellermann
a14997ffb8
event/Loop: manage all SocketEvents in a linked list
...
Not only those which are "ready".
2020-10-18 20:01:38 +02:00
Max Kellermann
dd94f97572
event/Loop: un-inline AddFD(), ModifyFD()
...
Prepare for adding more code here.
2020-10-18 19:58:42 +02:00
Max Kellermann
7d502fb448
event/Loop: round epoll_wait() timeout up
...
This implements proper rounding, amending commit dcbb9fe07c
2020-10-18 19:58:42 +02:00
Max Kellermann
3ac87bbcda
io/uring/Queue: use IntrusiveList<>
2020-10-18 19:37:54 +02:00
Max Kellermann
f64799622d
event/IdleEvent: use class IntrusiveList<>
2020-10-18 19:28:12 +02:00
Max Kellermann
6f0ad2b6c5
util/IntrusiveList: replacement for boost::intrusive::list
2020-10-18 19:23:34 +02:00
Max Kellermann
b5750afb24
event/IdleEvent: use auto
2020-10-18 19:23:34 +02:00
Max Kellermann
442dd5e955
event/IdleEvent: forbid copying
2020-10-18 19:23:25 +02:00
Max Kellermann
172c2ae1aa
release v0.22.1
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl+K29wQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEh/YEACRSf+EJaSCnqDWICcqMqh5NfUMkZhq6IXA
36Vk2njYkEiNdePLTkoB/L4fVHiUuTiyeRTUshL6uy2J37fYc9w3tmyTdSStbFP+
LAH4wVT0PKNVCpit8CVL1lwABG1fmUohejztrf7dIDqUrESwLrTtSbKKYKofQ5hp
zVgFkV+Kza9fL2FGiw0ySpkhNfOv+eJBhpi8xitnYT8TpYrLqJdMzGW8oP5CFagI
9Ot5LFRKfhoKmh8TklKI2jlRCziQ3Y/kCvtJcOxE1d8BhXdgUbnF1KRUKxcM+oqP
jcFZ949zHl4vIqgdZ+dYczUZV74KbMIhqhB1jTApPnTSrpizt2h1+UhB7Jnxo2uC
CfXf88+I/BPx5UY7wGxDSJnOqTs2RVa64EZPf0pgB/aOdM4tM96HWzZrFF0CilgD
E897O9eyNzNeESzbXuhZwoO4luGyoiicpzZ6rLiH0fbkhpngBlJmYLup7pDfXe2E
6jDev0YKtfzXeM0NHHGeZRMcYyMq6swDvfHF7ndpXdUMgOSu6lVSoR+VTe0oPoIB
zrJV0pge901Q4wByMsoebY8K3eX9W8bqXtuaVMu6ZdYnHeCy79QiZkIDHMGZWDJb
YBrHd+/zkGgyB6XndmtNSg6Uo7RPKwQEBP/sk5YhJ04KUdYSdPMKG1WXSRy7NfzL
yaUPBqay2Q==
=LH6z
-----END PGP SIGNATURE-----
Merge tag 'v0.22.1' into master
release v0.22.1
2020-10-17 13:58:36 +02:00
Max Kellermann
6a65b4c305
lib/nfs/patches: disable the snprintf->sprintf_s alias
...
snprintf() is available on mingw, and the libnfs kludge broke the
build with mingw, because sprintf_s() was now both an inline function
and a "dllimport" function (because the macro renamed the inline
function snprintf() to sprintf_s() in mingw's stdio.h).
2020-10-17 13:56:02 +02:00
Max Kellermann
4f0e0af319
Merge branch 'v0.22.x' into master
2020-10-16 19:02:03 +02:00
Max Kellermann
cb382b1e7d
event/PollGroupWinSelect: add missing return value
...
Fixes regression from commit 1473d8474f
2020-10-16 19:02:00 +02:00
Max Kellermann
31268ad7cd
decoder/opus: fix track/album ReplayGain fallback
...
Fixes regression by commit 23d5a2b862
-
that commit always pretended that any Opus file has both track and
album gain, and thus disabled the fallback to the other if one is not
set.
This patch changes the logic to only submit ReplayGain if at least one
value is set, and apply the offset only to that value. If none is
available, then the new check in HandleAudio() will submit only the
output gain.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/977
2020-10-16 18:45:18 +02:00
Max Kellermann
a0d43dd87f
decoder/opus: submit output_gain even if there is no OpusTags packet
2020-10-16 18:41:16 +02:00
Max Kellermann
1db533c8cf
decoder/opus: move formula to EbuR128ToReplayGain()
2020-10-16 18:39:29 +02:00
Max Kellermann
78ee663660
decoder/opus: move comment to output_gain
field
2020-10-16 18:30:51 +02:00
Max Kellermann
c32a809d38
decoder/opus: convert field output_gain
to float
2020-10-16 18:28:57 +02:00
Max Kellermann
871bf3b88f
command: add command "getvol"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/979
2020-10-16 17:51:51 +02:00
Max Kellermann
b611b1824a
event/Loop: move code to Wait()
2020-10-15 20:21:00 +02:00
Max Kellermann
1473d8474f
event/PollGroup: ReadEvents() returns PollResult
2020-10-15 20:15:09 +02:00
Max Kellermann
0ecc3394c3
Merge branch 'v0.22.x' into master
2020-10-15 20:14:36 +02:00
Max Kellermann
725985379a
event/SocketEvent: add ScheduleImplicit(), Is{Read,Write}Pending()
2020-10-15 17:01:30 +02:00
Max Kellermann
8849b9b62c
event/SocketEvent: move Abandon() up
2020-10-15 16:59:45 +02:00
Max Kellermann
caa2611ad5
event/SocketEvent: add Abandon()
2020-10-15 16:57:55 +02:00
Max Kellermann
f8ff597963
event/SocketEvent: document Close()
2020-10-15 16:55:31 +02:00
Max Kellermann
ff6e434caf
event/SocketEvent: rename Steal() to ReleaseSocket()
2020-10-15 16:54:33 +02:00
Max Kellermann
95bb12880d
net/UniqueSocketDescriptor: add noexcept
2020-10-15 16:46:29 +02:00
Max Kellermann
257196664a
net/SocketAddress: add missing include
2020-10-15 16:45:50 +02:00
Max Kellermann
643bf95366
util/OffsetPointer: use std::ptrdiff_t
2020-10-15 16:41:39 +02:00
Max Kellermann
36a187da39
util/Cast: include cleanup
2020-10-15 16:40:26 +02:00
Max Kellermann
fec80f2835
util/Cast: use std::ptrdiff_t
2020-10-15 16:40:18 +02:00
Max Kellermann
4e47653cf6
lib/curl/Global: ignore curl_multi_socket_action() errors
...
Keep the logging library out of this low-level libcurl wrapper.
2020-10-15 16:31:31 +02:00
Max Kellermann
c13004f985
lib/curl/Multi: add Add(), Remove(), ...
2020-10-15 16:25:57 +02:00
Max Kellermann
baba41e304
lib/curl/Global: adjust parameter name
2020-10-15 16:16:02 +02:00
Max Kellermann
d87e09a8b4
lib/dbus/ReadIter: remove obsolete GCC warning workaround
...
We need at least GCC 8 anyway.
2020-10-15 16:08:29 +02:00
Max Kellermann
33146ac353
lib/dbus/Watch: adjust parameter name
2020-10-15 16:06:19 +02:00
Max Kellermann
1406144210
lib/dbus/Watch: add missing include for assert()
2020-10-15 16:05:05 +02:00
Max Kellermann
bb6ab67175
output/osx: fix several -Wdouble-promotion warnings
2020-10-15 15:01:28 +02:00
Max Kellermann
ed3d8222d6
net/SocketAddress: include cleanup
2020-10-15 15:01:19 +02:00
Max Kellermann
bb20af8f20
util/StringStrip: use std::strlen()
2020-10-15 12:54:47 +02:00
Max Kellermann
9355ec44e0
util/StringStrip: use std::size_t
2020-10-15 12:53:02 +02:00
Max Kellermann
c63bd323ce
util/StringCompare: use std::memcmp()
2020-10-15 12:48:33 +02:00
Max Kellermann
55db7105c5
event/SocketEvent: check/clear scheduled_flags in Close()
...
Fixes regression by commit 521e573be9
2020-10-14 21:08:39 +02:00
Max Kellermann
1c079e554b
io/UniqueFileDescriptor: add method Release()
2020-10-14 20:50:02 +02:00
Max Kellermann
48afb68f3a
event/SocketEvent: remove assert() from GetScheduledFlags()
...
Fixes regression by commit 7901b04c78
2020-10-14 20:50:02 +02:00
Max Kellermann
21f409d5e2
event/SocketEvent: fix grammar
2020-10-14 16:30:38 +02:00
Max Kellermann
521e573be9
event/SocketEvent: use EventLoop::AbandonFD() in Close()
2020-10-14 16:29:49 +02:00
Max Kellermann
abf9ae2dd9
event/Loop: rename Abandon() to AbandonFD()
2020-10-14 16:26:06 +02:00
Max Kellermann
9f013f7de4
event/SocketEvent: allow Close() without socket
2020-10-14 16:26:01 +02:00
Max Kellermann
7fc04fd5cd
event/SocketEvent: move Dispatch() down
2020-10-14 16:21:41 +02:00
Max Kellermann
7901b04c78
event/SocketEvent: allow Cancel() without socket
2020-10-14 16:20:43 +02:00
Max Kellermann
653eea5840
event/SocketEvent: remove unnecessary initializer
2020-10-14 16:18:39 +02:00
Max Kellermann
5a4055fb08
event/SocketMonitor: refactor to SocketEvent
...
Similar to commits 1686f4e857
and
30a5dd267b
2020-10-14 15:54:12 +02:00
Max Kellermann
4d68a12f03
event/Loop: split the AtScopeExit()
...
Fixes the !HAVE_THREADED_EVENT_LOOP build.
2020-10-14 14:47:59 +02:00
Max Kellermann
0e951da64b
event/Loop: add missing #ifdef
2020-10-14 14:37:29 +02:00
Max Kellermann
38dab040b3
event/Loop: add compile-time option to disable multithreading
...
Not for MPD, but for other applications which might want to copy its
event loop, but do not need multi-threading.
2020-10-14 14:08:38 +02:00
Max Kellermann
e9f6af61f9
event/Loop: forward-declare class {Idle,Defer}Event
2020-10-14 14:05:17 +02:00
Max Kellermann
b06c4e2711
event/{Idle,Defer}Event: use base_hook instead of member_hook
...
Allows forward declaration.
2020-10-14 14:04:30 +02:00
Max Kellermann
1686f4e857
event/IdleMonitor: refactor to IdleEvent
...
Instead of using this as a base class implementing a virtual method,
the new class IdleEvent can be used as a variable, decoupling
IdleMonitor's internal state from the derived class.
This is similar to commit 30a5dd267b
which refactored TimeoutMonitor to TimerEvent.
2020-10-14 13:47:25 +02:00
Max Kellermann
329382c1da
event/SignalMonitor: add noexcept
2020-10-13 17:26:33 +02:00
Max Kellermann
fadc03df21
meson.build: move macros to event/Features.h
2020-10-13 16:15:52 +02:00
Max Kellermann
54ee0e28ab
event/PollGroup: check _WIN32 instead of USE_WINSELECT
2020-10-13 15:27:58 +02:00
Max Kellermann
92fc53ebef
event/PollGroupWinSelect: use range-based for
2020-10-12 12:44:23 +02:00
Max Kellermann
7e7a1613cf
event/PollGroupWinSelect: use std::copy_n()
2020-10-12 12:40:32 +02:00
Max Kellermann
f73c4643ef
event/PollGroupWinSelect: move IsEmpty() check to GetPtr()
2020-10-12 12:39:10 +02:00
Max Kellermann
8b94e8f260
event/PollGroupWinSelect: use SOCKET
instead of int
2020-10-12 12:13:46 +02:00
Max Kellermann
41bc17a27f
event/SocketMonitor: add ready_flags
...
By making each SocketMonitor keep track of its ready flags, this
removes a lot of overhead from EventLoop::RemoveFD().
2020-10-09 17:28:11 +02:00
Max Kellermann
41c0bbab13
event/SocketMonitor: don't filter out ERROR/HANGUP
...
By bit-wise ANDing the reported flags with GetScheduledFlags(),
ERROR/HANGUP always get cleared. This means the MPD event loop could
never report those conditions.
2020-10-08 21:16:18 +02:00
Max Kellermann
eeb96eb367
event/TimerEvent: add type alias for std::chrono::steady_clock::duration
2020-10-08 20:48:50 +02:00
Max Kellermann
ce93e58944
event/TimerEvent: use using
instead of typedef
2020-10-08 20:46:18 +02:00
Max Kellermann
263b0ffdbb
event/TimerEvent: use auto_unlink hook
2020-10-08 20:46:15 +02:00
Max Kellermann
22bea5c97e
event/Loop: reorder includes
...
This just happened to break the Windows build because of the
`GetObject` macro in `windows.h`, so I added a kludge to
PollResultGeneric.hxx.
2020-10-08 20:43:21 +02:00
Max Kellermann
75802ebcc6
StateFileConfig, ...: drop obsolete out-of-class definition
2020-10-08 20:38:11 +02:00
Max Kellermann
27cc7b352d
config/Data: cast to std::chrono::steady_clock::duration properly
...
Oh no, 3413d1bf23
was broken! Instead of passing a number as
"seconds" to the duration constructor, it just abused the duration
constructor as cast operator, which caused custom state_file_interval
settings to be extremely short.
2020-10-08 20:30:33 +02:00
Max Kellermann
d64729065e
config/Parser: use std::size_t
2020-10-08 20:26:39 +02:00
Max Kellermann
ab318200db
config/{Data,Block}: use With() in GetUnsigned(), GetPositive()
2020-10-08 20:21:09 +02:00
Max Kellermann
947856ca8e
event/Loop: forward-declare class TimerEvent
2020-10-08 17:24:32 +02:00
Max Kellermann
cd9ff9d9b0
event/TimerEvent: use base_hook instead of member_hook
2020-10-08 17:00:09 +02:00
Max Kellermann
4cd0f661d6
event/Loop: use using
instead of typedef
2020-10-08 16:59:21 +02:00
Max Kellermann
ca0179b2a9
event/Loop: set the uring_initialized flag
...
Don't attempt to initialize the io_uring subsystem more than once.
2020-10-06 18:58:54 +02:00
Max Kellermann
6682cf749f
playlist/cue/parser: use lambda to fix ambiguous overload
...
On Windows, there is an IsWhitespaceOrNull() overload with TCHAR, and
the compiler doesn't know which one to pass to std::find_if().
2020-10-05 21:15:10 +02:00
Max Kellermann
492607ecbe
playlist/cue/parser: use StringView internally
...
Don't copy the input StringView.
2020-10-05 21:04:49 +02:00
Max Kellermann
e0c75da266
playlist/cue/parser: pass StringView to Feed()
2020-10-05 20:33:58 +02:00
Max Kellermann
34bb53a29f
playlist/cue/parser: add noexcept
2020-10-05 20:33:50 +02:00
Max Kellermann
cb4fdac469
playlist/cue/parser: fix nullptr dereference
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/974
2020-10-05 20:26:42 +02:00
Max Kellermann
ac46a84391
playlist/cue/parser: fix off-by-one buffer overflow
...
cue_next_word() can return a pointer one past the end of the string if
the word is followed by the terminating null byte.
2020-10-05 20:26:02 +02:00
Max Kellermann
4484d7a5c2
output/jack: implement Interrupt()
2020-10-02 11:00:04 +02:00
Max Kellermann
b80a135cf3
output/pulse: implement Interrupt()
2020-10-02 10:52:25 +02:00
Max Kellermann
4ad525d939
output/alsa: implement Interrupt()
...
This allows canceling the blocking method LockWaitWriteAvailable(),
and thus allows breaking free of misbehaving ALSA drivers, avoiding a
MPD lockup.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/966
2020-10-02 10:35:18 +02:00
Max Kellermann
4cb5e69811
output/Interface: add virtual method Interrupt()
...
This allows interrupting the output thread (for some plugins which
implement this method). This way, operations can be canceled
properly, instead of waiting for some external entity.
2020-10-02 10:20:39 +02:00
Max Kellermann
b0596291a8
output/Thread: simplify the main loop switch
...
Move the InternalPlay() call and the wake_cond.wait() call into the
`case Command::NONE` and revert all `continue` statements to a simple
`break`.
2020-10-02 10:10:53 +02:00
Max Kellermann
8f0a1a5d82
output/Interface: add noexcept
2020-10-01 20:44:14 +02:00
Max Kellermann
c0775d328c
output/Filtered: move try/catch from IteratePause() to caller
2020-10-01 20:44:11 +02:00
Max Kellermann
362f391b76
Merge remote-tracking branches 'neheb/defa', 'neheb/auto' and 'neheb/clocale' into master
2020-09-30 11:48:05 +02:00
Rosen Penev
980e32f69c
remove clocale test
...
clocale is part of C++11.
In practical terms, gcc's libstdc++ comes with its own locale defines
when the libc does not have them.
Also reworked to be dependent on !ANDROID.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-29 14:51:17 -07:00
Rosen Penev
dd639e18b8
clang-tidy: remove pointless std::move
...
Found with performance-move-const-arg
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-26 21:34:25 -07:00
Rosen Penev
c883f178b8
clang-tidy: use auto
...
Found with modernize-use-auto
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-26 21:33:35 -07:00
Max Kellermann
e9df4116fd
db/upnp: store UPnPDirContent in local variable
...
Fixes use-after-free because the temporary goes out of scope.
2020-09-23 15:25:39 +02:00
Max Kellermann
c843bce9f5
LogLevel: rename DEFAULT to NOTICE
...
"DEFAULT" is a bad name - all it says is that it's the default value,
but it doesn't say what it means. The name NOTICE mimics the syslog
level.
2020-09-23 14:22:33 +02:00
Max Kellermann
e3106a019d
LogInit: provide mappings for LogLevel::{ERROR,WARNING}
2020-09-23 14:17:11 +02:00
Max Kellermann
3e0ceb12d5
LogInit: rename "secure" to "info"
...
Calling this "secure" never made sense. Messages about client
connects are just a small part of what gets logged as "secure",
a.k.a. "info".
2020-09-23 14:15:58 +02:00
Max Kellermann
60bbc9f626
LogInit: use StringIsEqual()
2020-09-23 13:28:19 +02:00
Max Kellermann
065926d6a4
decoder/ffmpeg: support album art
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/892
2020-09-23 12:50:28 +02:00
Max Kellermann
85bab67083
input/uring: safe cancellation
...
My concept with `class CancellableOperation` doesn't work properly,
because the kernel may continue to write to the given buffer as soon
as the read finishes.
To fix this, this commit adds `class ReadOperation` which owns the
buffer and the `struct iovec`. Instances of this class persist until
the read really finishes, even if the operation is canceled.
2020-09-23 11:07:26 +02:00
Max Kellermann
4001379663
io/uring/Operation: add method ReplaceUring()
2020-09-22 21:50:48 +02:00
Max Kellermann
382273abc5
io/uring/Operation: add API documentation
2020-09-22 21:49:48 +02:00
Max Kellermann
6825e1144e
net/SocketError: work around -Wvla by defining a constexpr variable
2020-09-22 20:40:53 +02:00
Max Kellermann
bc47a16943
release v0.21.26
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl9op0MQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEvtmD/46dhcOHUXBreLkKmfy1d8YYrSUBfaNGNIa
m32Lhh2Di27yd5uclQiOVnBghbPEdPobNB6dpZzM7VFkl0LXovbi2bOP0/IkfV0L
0Aa8yacUjHo9zoSjGWnw0uJxLkMjwp7ybV/RI0yI9Z203zUdQX5BqAwc0GlDAhrq
ZheuvHbZqr6PIdy+yFMvS7zhkeO7kMRxlT8xy7/6LskkSmc5wJ90X2vS1sD/6T+9
NfAQkEE7PgKHir6xjZfPTi5PzIO+tK9/RVw705LDubsjFjEPBLWyvG4uD97dazbu
EQZzj5E82wxwvZvx+/xuyyykkhaoBqtegD2DrkafFm20sIzsc9qLC24GXzWd4Oq0
u7RQoO8hn6WI3mMUW/nJNSZk/c9xgeKcFBtgZiNFaDrnwKeWHNtafwqJlU0lanXH
tpjRP0kWphAcTfa1JBcCN0SpqjlB+s18xM102hnIWxWlfSmlEyb9yLk+jbFDQcpP
6i/UmWIDEBlNf68beg89wD4p/FJePgEuwBGrIMHxA41hqjmFCwuklcvhdbu0zBFy
frr9kWMSp6Xun1lwW0jWdfbEBWujNGMEHx//SDoIKD22gpdtnajLhNqjiZuu1LN7
RE7fF1v5c7cSGNVMLEam4bUXntzxTXhCCFbYUdh29TWqEr+pM+a429/jZMgYcGtz
jVp2qqxc5w==
=mDD4
-----END PGP SIGNATURE-----
Merge tag 'v0.21.26' into master
release v0.21.26
2020-09-21 15:20:02 +02:00
Max Kellermann
79b2366387
archive/iso9660: fix odd seeking bug (assertion failure)
...
Skip the beginning of a sector if the last seek was odd, and clear the
buffer on seek.
2020-09-21 15:11:21 +02:00
Max Kellermann
5acea014b0
archive/iso9660: remove unused macro CEILING()
2020-09-21 15:11:17 +02:00
Max Kellermann
5130acf3ea
decoder/ffmpeg: implement protocols() and uri_decode() (for RTSP)
...
This implements the feature that was missing/broken in this bug
report: https://github.com/MusicPlayerDaemon/MPD/issues/930
2020-09-21 14:57:12 +02:00
Max Kellermann
a22d1c88d7
decoder/ffmpeg: pass InputStream by pointer
...
Prepare for an implementation without InputStream.
2020-09-21 14:53:18 +02:00
Max Kellermann
85849c9396
decoder/plugin: add method protocols()
...
Similar to commit 4e2a551f30
but for
decoder plugins. This is tailored for the FFmpeg decoder plugin which
implements some protocols (e.g. RTSP) as demuxer plugin.
2020-09-21 14:53:18 +02:00
Max Kellermann
d3c257d97d
CommandLine: reindent lambdas
2020-09-21 14:52:45 +02:00
Max Kellermann
c13fe63f10
archive/iso9660: fix odd seeking bug (assertion failure)
...
Skip the beginning of a sector if the last seek was odd, and clear the
buffer on seek.
2020-09-21 14:43:58 +02:00
Max Kellermann
07842abcb0
input/ffmpeg: add "hls+http://" to the list of supported protocols
...
Same as e10b867fe6
but it got lost in
the merge, because the v0.22 branch uses a different way to detect
supported protocols at runtime.
2020-09-21 12:55:32 +02:00
Max Kellermann
07e524509f
input/Plugin: add noexcept
2020-09-21 11:43:18 +02:00
Max Kellermann
2c05752071
archive/iso9660: remove unused function CEILING()
2020-09-21 11:38:24 +02:00
Max Kellermann
7c8427b0f7
Merge branch 'v0.21.x' into master
2020-09-21 11:37:50 +02:00
Max Kellermann
b72801abf3
util/ByteOrder: add FromLE16S()
2020-09-21 11:15:45 +02:00
Desuwa
23d5a2b862
Support opus header gain tags and match opus playback volume to other tracks when ReplayGain is enabled.
2020-09-21 10:51:06 +02:00
Rosen Penev
7715311117
fix double promotions
...
Found with -Wdouble-promotion
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-21 09:13:51 +02:00
Max Kellermann
7552f70c8d
Merge branch 'gcc5' of git://github.com/neheb/MPD into master
2020-09-21 09:07:19 +02:00
Max Kellermann
0acc398c52
Merge branch 'v0.21.x' into master
2020-09-17 14:44:20 +02:00
Max Kellermann
4c1cfca95b
db/update/InotifyUpdate: pass path by value to recursive_watch_subdirectories()
2020-09-17 14:18:29 +02:00
Max Kellermann
e113ce9621
db/update/InotifyUpdate: obey .mpdignore
files
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/846
2020-09-17 14:17:17 +02:00
Rosen Penev
821d08999a
remove GCC5 hacks
...
GCC5 cannot build mpd.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-16 18:10:27 -07:00
Max Kellermann
e8213220e2
db/update/InotifyUpdate: split the WatchDirectory constructor
2020-09-16 21:08:22 +02:00
Max Kellermann
83f9d2a963
db/update/InotifyUpdate: use class DirectoryReader
2020-09-16 21:02:07 +02:00
Max Kellermann
bf97ebf89f
db/update/InotifyUpdate: convert pointer to reference
2020-09-16 20:59:41 +02:00
Max Kellermann
5b22d27cbb
db/update/InotifyUpdate: remove commented log call
2020-09-16 20:59:40 +02:00
Max Kellermann
e907ff43ae
command/file, storage/{nfs,smbclient}: use PathTraitsFS::IsSpecialFilename()
...
Eliminate some duplicate code.
2020-09-16 20:57:46 +02:00
Max Kellermann
b18fc3a8d0
db/update/InotifySource: use auto
2020-09-16 20:40:27 +02:00
Max Kellermann
a8e23c4140
db/update/InotifySource: add noexcept
2020-09-16 20:40:06 +02:00
Max Kellermann
fc3861b421
db/update/InotifyQueue: add noexcept
2020-09-16 20:40:03 +02:00
Max Kellermann
e81bb5d8f1
db/update/Inotify*: include cleanup
2020-09-16 20:39:44 +02:00
Max Kellermann
32f4f15831
player/Thread: call OnPlayerSync() in SeekDecoder()
...
This fixes a spurious "single" mode bug which occurs when using "play"
or "seek" to start playback on the song that is currently paused: in
that case, the main thread never queues the next song, and at the end
of the song, the player thread exits Run(), stopping playback, and
after that, the main thread starts the next song without considering
"single" mode.
By calling OnPlayerSync(), we ensure that the main thread gets a
chance to queue the next song before the player thread exits the Run()
loop.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/850
2020-09-16 20:36:19 +02:00
Max Kellermann
e29c06b718
player/Thread: add another code comment explaining OnPlayerSync()
2020-09-16 20:12:52 +02:00
Max Kellermann
d9d511f33e
player/Thread: update function name in comment
2020-09-16 20:12:05 +02:00
Max Kellermann
c61a3b8d13
LogBackend: change the initial log_threshold to DEFAULT
...
The log levels have always been very confusing (and badly named), but
this was most confusing: if there's a log level called "default", why
is it not the default?
Closes https://github.com/MusicPlayerDaemon/MPD/issues/926
2020-09-16 17:17:34 +02:00
Max Kellermann
e10b867fe6
decoder/ffmpeg: add "hls+http://" to the list of supported protocols
2020-09-16 16:36:07 +02:00
Max Kellermann
43e230f543
decoder/ffmpeg: remove "rtsp://" from the list of supported protocols
...
FFmpeg implements RTSP as a demuxer, not as a protocol handler. Thus,
avio_open() cannot be used, and our input plugin cannot handle RTSP.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/930
2020-09-16 16:32:31 +02:00
Max Kellermann
e8380cf2aa
Merge branch 'v0.21.x' into master
2020-09-07 21:15:53 +02:00
Max Kellermann
b2ae5298a7
archive/iso9660: implement seeking
2020-09-07 21:13:28 +02:00
Max Kellermann
17dd21ac7f
archive/iso9660: fix unaligned reads
...
Oh the horror! This plugin cannot possibly ever have worked. It was
broken from the start, when it was added in commit 37796699cf
nearly
twelve (!) years ago.
The plugin would always read at sector boundaries, so it could only
ever work at multiples of 2 kB.
2020-09-07 21:08:46 +02:00
Max Kellermann
291be84704
Merge branch 'v0.21.x' into master
2020-09-07 20:18:40 +02:00
Max Kellermann
ae23682372
system/FileDescriptor: add method FullWrite()
2020-09-07 20:13:43 +02:00
Max Kellermann
540919f256
*: use nullptr instead of NULL
2020-09-07 20:08:27 +02:00
Max Kellermann
398281cd76
io/FileDescriptor: add method FullRead()
2020-09-07 20:07:47 +02:00
Max Kellermann
67c7116f05
Merge branch 'v0.21.x' into master
2020-09-04 18:35:21 +02:00
bitkeeper
9aa432c078
Support soxr custom recipes.
...
MPD uses soxr with prefined resample recipes. Soxr also support defining a recipe your self.
This commit will support a custom recipe by changing the existing quality setting to "custom".
The same structs as the predefined recipes uses can now set by hand.
This will make the following settings available:
- precision 16|20|24|28|32 bits, example "28"
- phase_response - 0-100, example "45"
- passband_end - used bandwidth of source 80-99.7%, example "99.7.0"
- stopband_begin - anti aliasing 100.0+%, example "100".
- attenuation - signal reduciton in dB's, 0-30. example "3.0".
- flags "0" - additional bitmask with extra settings
The data is set in the structs soxr_quality_spec and soxr_io_spec (found in soxr.h).
2020-09-04 18:32:03 +02:00
Max Kellermann
db8b419b8c
archive/iso9660: free iso9660_stat_t as early as possible
2020-09-04 18:17:24 +02:00
Max Kellermann
990f631cbc
archive/bzip2: make variables more local
2020-09-04 18:02:22 +02:00
Max Kellermann
db46d84458
archive/bzip2: move the eof check out of the ScopeUnlock
2020-09-04 18:01:29 +02:00
Max Kellermann
9e6c4f8d80
archive/bzip2: throw on unexpected input EOF
...
Don't silently return 0 when there is no more data, because this may
crash the caller. And flush output even if input EOF has been reached.
2020-09-04 17:54:53 +02:00
Max Kellermann
41b47f95c5
archive/bzip2: simplify bz_stream initializer
2020-09-04 17:52:04 +02:00
Max Kellermann
15939fd87c
archive/bzip2: fold Open() into constructor
2020-09-04 17:51:41 +02:00
Max Kellermann
f63c343f68
archive/bzip2: reorder fields to improve packing
2020-09-04 17:51:22 +02:00
Max Kellermann
1a516e7744
archive/bzip2: add override
2020-09-04 17:51:21 +02:00
Max Kellermann
1f6a7d6462
archive/zzip: fix crash on corrupt ZIP file
...
Sometimes, zzip_file_read() returns 0 even though the end of the file
was not reached. This causes assertion failures in
DecoderBridge::Read().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/935
2020-09-04 14:34:54 +02:00
Max Kellermann
e44b953d9a
archive/zzip: use zzip_ssize_t to avoid integer overflows
2020-09-04 14:33:44 +02:00
Max Kellermann
6c85020630
archive/zzip: add override
2020-09-04 14:33:44 +02:00
Max Kellermann
9d910320f3
archive/zzip: pass std::shared_ptr as template parameter
...
This eliminates a tiny amount of overhead because the compiler can
choose how to pass the parameter.
2020-09-04 14:33:44 +02:00
Max Kellermann
c53074efc9
archive/zzip: add explicit
2020-09-04 14:33:11 +02:00
Max Kellermann
0aa0ffb67b
decoder/sndfile: allow partial reads at end of file
...
While libsndfile doesn't like partial reads in the middle of a file
(see commit 95ac6071b9
), it allows partial reads at the end of a file.
It doesn't pay attention to the file size when issuing a read.
Commit ecb67a1ed1
(MPD 0.18.12) was a regression: previously,
partial reads at the end of a file were possible, but switching to
decoder_read_full() made this an error condition. This way, a portion
at the end of each file was lost, leading to corruption with gapless
playback (https://github.com/MusicPlayerDaemon/MPD/issues/936 ).
This fix switches to the newly introduced function
decoder_read_much(), which does the same as the code before commit
ecb67a1ed1
.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/936
2020-09-04 13:35:00 +02:00
Max Kellermann
33f70931dd
decoder/API: add decoder_read_much()
2020-09-04 13:35:00 +02:00
Max Kellermann
8830ea319f
decoder/API: add noexcept
2020-09-04 13:35:00 +02:00
Johann Uhrmann
38498d3ee2
Removed duplicate check for negative song time
2020-08-23 12:17:10 +02:00
Max Kellermann
ddb524b6b2
input/uring: add noexcept
2020-08-14 16:45:00 +02:00
Max Kellermann
cbcdc73f9a
system/ByteOrder: add noexcept
2020-08-14 16:36:24 +02:00
Max Kellermann
4f6c54ecb3
output/osx: catch kAudioDevicePropertyHogMode errors
...
Our AudioObjectGetPropertyDataT() wrapper throws exception on error,
and calling it from OSXOutput::Disable() can cause MPD crash due to
std::terminate().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/932
2020-08-14 16:33:43 +02:00
Max Kellermann
dbdf782e59
net/{Resolver,HostParser}: include <cstring>
...
Fixup after e4dad42ca1
2020-07-23 17:40:29 +02:00
Max Kellermann
f102cbb613
net/AllocatedSocketAddress: add missing forward declaration
2020-07-23 17:40:29 +02:00
Max Kellermann
5522967286
net/StaticSocketAddress: add IWYU pragma
2020-07-23 17:40:29 +02:00
Max Kellermann
a2f42e6424
time/ISO8601: use <cstdlib>
2020-07-23 16:26:18 +02:00
Max Kellermann
bdfe6c2c45
lib/dbus/Values: use using
instead of typedef
2020-07-23 16:26:18 +02:00
Max Kellermann
5e1a2e2a93
lib/dbus/Values: add uint32_t
and uint64_t
support
2020-07-23 16:26:18 +02:00
Max Kellermann
7376f31c97
lib/dbus/Message: add noexcept
2020-07-23 16:26:18 +02:00
Max Kellermann
155fc8fa5a
include cleanup
2020-07-23 16:26:18 +02:00
Max Kellermann
7daf80a0c0
util/RuntimeError: add IWYU pragma
2020-07-23 16:10:28 +02:00
Max Kellermann
eb87c28225
util/CharUtil: fix doc typo
2020-07-23 16:08:52 +02:00
Rosen Penev
c876d6a51c
lib/icu: fix build without libc iconv support
...
Need to check for it in iconv.h. Otherwise meson prefixes a __builtin variant in the check.
2020-07-23 14:09:43 +02:00
Max Kellermann
47f54b5650
input/smbclient: close handle on stat error
2020-07-20 22:43:49 +02:00
Max Kellermann
fbfa1723e7
lib/smbclient/Mutex: remove obsolete library
2020-07-20 22:40:27 +02:00
Max Kellermann
a74140842c
storage/smbclient: add Mutex attribute
...
This per-object Mutex replaces the global `smbclient_mutex`.
2020-07-20 22:39:59 +02:00
Max Kellermann
f5a85a816c
storage/smbclient: store SmbclientStorage reference
2020-07-20 22:37:11 +02:00
Max Kellermann
2a15fafbd7
input/smbclient: remove mutex locking
...
This is no longer necessary with the new API.
2020-07-20 22:34:56 +02:00
Max Kellermann
2fc4802886
neighbor/smbclient: remove mutex locking
...
This is no longer necessary with the new API.
2020-07-20 22:32:59 +02:00
Max Kellermann
bb3f487ee5
lib/smbclient/Context: add global Mutex for smbc_{new,free}_context()
...
Preparing to replace `smbclient_mutex`, for finer-grained locking.
2020-07-20 22:32:00 +02:00
Max Kellermann
7d97d0ae87
lib/smbclient/Init: move code to SmbclientContext::New()
...
We no longer need to call smbc_init() because we don't need the compat
layer anymore.
2020-07-20 22:23:18 +02:00
Max Kellermann
f6dc9bcad6
*/smbclient: use the new API with SMBCCTX parameter
...
As a side effect, the input plugin closes the SMB/CIFS connection
after closing the file.
This solves one part of
https://github.com/MusicPlayerDaemon/MPD/issues/916
2020-07-20 22:05:05 +02:00
Max Kellermann
697531a948
lib/smbclient/Context: new wrapper for SMBCCTX
2020-07-20 22:01:10 +02:00
Max Kellermann
3c745b4bc6
neighbor/smbclient: remove obsolete commented code
2020-07-20 18:13:38 +02:00
Max Kellermann
448b397cb8
output/sles: support floating point samples
...
According to https://developer.android.com/ndk/guides/audio/opensl/android-extensions
This feature was mentioned in https://github.com/MusicPlayerDaemon/MPD/issues/922
2020-07-20 15:23:50 +02:00
Max Kellermann
64a1386eb6
output/sles: move SampleFormat selection to switch/case block
2020-07-20 14:47:36 +02:00
Max Kellermann
cf674e9273
input/Init: downgrade PluginUnconfigured to LogLevel::DEBUG
...
`LogLevel::INFO` is logged by default, but this message shall only
appear with `--verbose`.
This finally solves https://github.com/MusicPlayerDaemon/MPD/issues/430
2020-07-16 13:19:14 +02:00
Max Kellermann
b74a91427d
release v0.21.25
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl8DfoEQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEgVqD/0X+QAV77Pw+RDP7qPtyYDfBH6jOvSpAmHm
moXIFMBaPeIrAFd6jfYTL+JMcVf+jfS6H86JlrWVz5/jerV0St/LxwrTGRqkac8K
OFDmMl2SE2KkniLOTHC2nKq3RFzAKDKK8uCaw3JFpXiAezuRXutX19nHitbau+HC
jD+2Ybyy149fPAB+D6aON6vjZI9hQyyeGoEbducZ5uZz+tvzwY0w1KcnDlaicjJq
Wdu16RFFZNXJnrXQ8hPWTxltgIdRfc9xMrIkydsyQkpW5jLZAJn9Yvl4xIQJhJlb
HlF2/xAUAIqykDqjbxWGnQYywOtCh12XDdn2S2AzAGgNH0z++EBiMyQjLorHf3Eo
wSa/qvi1E5rf8WBCaz3Qa/oa9trj4TQcQFQ+v9esO/yBn3O0K6oGr67P45f1KRqg
SAwnwd+YwYp838lT+MlueD+c67QAY64qCYjI810o3rZ3cyEitWKF6kkvwfzqCfly
HeZJS7OsG1UoxInSfnYwJW1svwtkfZU0WqWHxqKSL/MnwihXhlkhkom8jIS+yYcO
pVPllLvF1H0d/Y2Eb2MH6OKZF+7c5cwSeXJzA808NwzE5dpL2tHAgjxhS/P66voF
/UqLyXySqEaUijp9hW3jEeFJ5TSP2bCaNXnbsQUoM4uqjhkoUi9QLTJIqyG1PKmM
3JKzuZXy2g==
=eK6Y
-----END PGP SIGNATURE-----
Merge tag 'v0.21.25'
release v0.21.25
2020-07-06 21:47:30 +02:00
Max Kellermann
00789de7d4
db/upnp/Object: root nodes are allowed to omit parent_id and name
...
This fixes compatibility with Plex DLNA.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/851
2020-07-06 21:36:30 +02:00
Max Kellermann
9964a5ffe8
db/update/Service: avoid copying the mount point path
2020-07-06 21:09:58 +02:00
Max Kellermann
5ece9685c2
PluginUnavailable: backport class PluginUnconfigured from master
...
Stop bothering people about the Tidal/Qobuz plugins.
2020-07-06 21:08:22 +02:00
Max Kellermann
e7c5a42821
Log: add Log() and LogFormat() overloads with std::exception_ptr
...
Make LogError()/FormatError() wrappers for those. Now we can log
exceptions with a lower level.
2020-07-06 21:08:04 +02:00
Max Kellermann
36e6079c57
Log: make LogLevel the first parameter
...
Prepare for templated functions.
2020-07-06 21:07:26 +02:00
Max Kellermann
e5f23678ca
Log: use GetFullMessage() to print exceptions
...
Print all nested exceptions on a single line to avoid confusion.
2020-07-06 21:07:16 +02:00
Max Kellermann
c3cfb5fe16
Merge branch 'v0.21.x'
2020-07-06 20:56:52 +02:00
Max Kellermann
749ad7cd83
PluginUnavailable: inherit the base class constructor
2020-07-06 20:40:25 +02:00
Max Kellermann
fe48e5596f
command/storage: automatically scan new mounts
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/841
2020-07-06 20:23:41 +02:00
Max Kellermann
d7744d2b8e
command/storage: check if storage is already mounted
...
Mounting one storage URI twice on different mount points can lead to
conflicts with the database cache file, and it doesn't make a lot of
sense.
But most importantly, our udisks storage plugin will unmount the disk
from the kernel VFS, and if two exist, they will compete with each
others. We could (and should) fix this in the udisks storage plugin,
but for now, this workaround is good enough (and useful).
2020-07-06 18:02:47 +02:00
Max Kellermann
33ee35ab92
command/storage: check if mount point is busy
...
When mounting something over a directory that is already a mount
point, CompositeStorage::Mount() silently overwrites the previously
mounted storage, disposing it. After that, SimpleDatabase::Mount()
will fail and handle_mount() will roll back the
CompositeStorage::Mount() command, effectively unmounting what was
there before (and also leaking memory).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/918
2020-07-06 17:49:38 +02:00
Max Kellermann
5b291ff768
db/update/Walk: pass concatenated .mpdignore URI to storage.MapUTF8()
...
Fixes the "Unrecognized URI" error with the udisks storage plugin,
which is caused by the kludge in UdisksStorage::MapUTF8().
2020-07-06 17:19:38 +02:00
Max Kellermann
39d6816a6d
neighbor/upnp: roll back changes if DoOpen() fails
2020-07-06 16:23:58 +02:00
Max Kellermann
6517b2d2ac
neighbor/upnp: remove D-Bus filter and match in Close()
...
Fixes use-after-free crash bug during MPD shutdown.
2020-07-06 16:15:18 +02:00
Max Kellermann
bfdf13dca3
decoder/Plugin: allow scan_{file,stream}() to throw
...
Bug #915 is about an I/O exception thrown where none was allowed,
leading to crash via std::terminate(). However, instead of catching
and logging the error inside the decoder plugin, it should be able to
propagate the I/O error to the MPD core, so MPD can avoid trying other
decoder plugins.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/915
2020-07-06 14:13:34 +02:00
Max Kellermann
86823af685
Merge branch 'v0.21.x'
2020-07-02 15:34:16 +02:00
Max Kellermann
daefc61aa4
output/osx: postpone start until the end of Play()
...
Wait until there is data in the ring buffer.
2020-07-02 15:26:38 +02:00
Max Kellermann
6fed6e50e4
output/osx: merge some duplicate code
2020-07-02 15:25:51 +02:00
Max Kellermann
bc9e074822
output/osx: postpone start until the first Play() call
...
Wait until there is some data; don't let our render callback be
invoked without any data.
2020-07-02 15:21:54 +02:00
Max Kellermann
8047102542
output/osx: don't restart AudioUnit at the end of Cancel()
...
We shouldn't restart the AudioUnit while the ring buffer is empty, or
else our render callback may emit noise.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/771
2020-07-02 15:20:43 +02:00
Max Kellermann
fe5b81e180
output/osx: check started
in Close() and Cancel()
2020-07-02 15:19:40 +02:00
Max Kellermann
f032925c2d
output/osx: add started
flag
...
This will keep track of AudioOutputUnitStart() and
AudioOutputUnitStop(). This will provide some separation between "not
(yet) (re)started" and "paused".
2020-07-02 15:18:37 +02:00
Max Kellermann
8125a5dddb
output/osx: don't uninitialize AudioUnit if restart fails
...
This shall be done by Close(), which will be called automatically
after an error.
2020-07-02 15:10:03 +02:00
Max Kellermann
154170e475
output/osx: clear pause
flag only after successful AudioOutputUnitStart()
2020-07-02 15:08:59 +02:00
Max Kellermann
fb83936feb
apple/AudioUnit: add AudioUnitSetPropertyT()
2020-07-02 14:59:40 +02:00
Max Kellermann
db8bf52f7d
apple/AudioObject: add AudioObjectGetStringProperty()
2020-07-02 13:50:05 +02:00
Max Kellermann
756f0b8027
apple: build static library
...
Move build rules from src/output/plugins/meson.build
2020-07-02 13:49:54 +02:00
Max Kellermann
b1fba8d3d7
apple/AudioObject: add missing inline
2020-07-02 13:49:52 +02:00
Max Kellermann
4d88bddfe2
Merge branch 'v0.21.x'
2020-07-01 23:07:57 +02:00
Max Kellermann
e606044271
apple/AudioUnit: library wrapping AudioUnit*() functions
2020-07-01 23:02:22 +02:00
Max Kellermann
bcbb3371ff
apple/AudioUnit: rename to AudioObject.hxx
2020-07-01 22:49:03 +02:00
Max Kellermann
de632882d1
output/osx: move code to FindAudioDeviceByName()
2020-07-01 22:48:12 +02:00
Max Kellermann
745e492d15
output/osx: use [[maybe_unused]]
2020-07-01 22:41:00 +02:00
Max Kellermann
c5dc615efe
output/osx: use IsDigitASCII()
2020-07-01 22:39:54 +02:00
Max Kellermann
a08d4b3d66
Merge branch 'v0.21.x'
2020-07-01 22:09:33 +02:00
Max Kellermann
beeb02025e
output/osx: use range-based for
2020-07-01 22:06:36 +02:00
Max Kellermann
cdf7062597
apple/AudioUnit: wrapper functions for AudioObject properties
2020-07-01 22:05:11 +02:00
Max Kellermann
346084da1e
apple/Throw: new helper library replacing osx_os_status_to_cstring()
2020-07-01 22:05:11 +02:00
Max Kellermann
bbceb5eb91
output/osx: silently ignore some errors in osx_output_set_device()
2020-07-01 22:05:11 +02:00
Max Kellermann
90d85319c2
apple/ErrorRef: new library wrapping CFErrorRef
2020-07-01 22:05:10 +02:00
Max Kellermann
3d03683e7d
output: use StringIsEqual()
2020-07-01 22:04:26 +02:00
Max Kellermann
d8a74802d1
apple/StringRef: new library wrapping CFStringRef
2020-07-01 22:01:53 +02:00
Max Kellermann
191919d1b1
output/osx: remove trailing newline from exception messages
2020-07-01 22:01:51 +02:00
Max Kellermann
df38e7565b
util/HugeAllocator: import std::swap()
2020-07-01 21:56:58 +02:00
Max Kellermann
cb49a03fd7
util/HugeAllocator: add noexcept
2020-07-01 21:56:54 +02:00
Max Kellermann
faee5bbb78
decoder/opus: implement End Trimming (RFC7845 4.4)
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/867
2020-07-01 21:26:34 +02:00
Max Kellermann
7befab7e83
decoder/opus: keep track of the granulepos
...
Will be needed for End Trimming (RFC7845 4.4,
https://github.com/MusicPlayerDaemon/MPD/issues/867 ).
2020-07-01 21:21:06 +02:00
Max Kellermann
4244e61214
decoder/opus: simplify indentation in HandleAudio()
2020-07-01 21:19:52 +02:00
Max Kellermann
46eab05045
decoder/opus: allocate buffer only in the first chained song
...
Fixes memory leak. That's what we get for
2020-07-01 21:07:49 +02:00
Max Kellermann
5ca137c73c
decoder/opus: add API docs
2020-07-01 20:55:18 +02:00
Max Kellermann
760238fe16
decoder/opus: apply pre-skip (RFC7845 4.2)
...
Fixes the first part of
https://github.com/MusicPlayerDaemon/MPD/issues/867
2020-07-01 20:44:53 +02:00
Max Kellermann
a99b4abae8
decoder/OpusHead: return pre-skip
2020-07-01 17:51:07 +02:00
Max Kellermann
472881cb95
util/ByteOrder: remove redundant inline
keywords from constexpr
functions
2020-07-01 17:50:34 +02:00
Max Kellermann
c4efc37ad8
system/ByteOrder: move to util/
2020-07-01 17:49:57 +02:00
Max Kellermann
691b6a236e
output/osx: improve sample rate selection
...
The formula in osx_output_score_sample_rate() to detect multiples of
the source sample rate was broken: when given a 44.1 kHz input file,
it preferred 16 kHz over 48 kHz, because its `frac_portion(16)=0.75`
is smaller than `frac_portion(48)=0.91`.
That formula, introduced by commit 40a1ebee29
, looks completely
wrong. It doesn't do what the code comment pretends it does.
Instead of using that `frac_portion` to calculate a score, this patch
adds to the score only if `frac_portion` is nearly `0` or `1`. This
means that the factor is nearly integer.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/904
2020-07-01 17:38:08 +02:00
Max Kellermann
5c7243d3ad
output/osx: make several fields const
2020-07-01 17:35:39 +02:00
Max Kellermann
44cfdff39a
output/osx: make variables more local
2020-07-01 17:35:33 +02:00
Max Kellermann
5eedda691a
output/osx: make more AudioObjectPropertyAddress instances static constexpr
2020-07-01 17:35:19 +02:00
Max Kellermann
a30d5e1b6a
output/osx: make AudioObjectPropertyAddress variables static constexpr
2020-07-01 17:34:12 +02:00
Max Kellermann
8ef09a0a71
output/osx: don't use C99 designated initializers
...
Fixes `-Wpedantic`.
2020-07-01 17:34:06 +02:00
Max Kellermann
e8044663b3
output/{alsa,osx}: use ConstBuffer::empty()
2020-07-01 17:32:37 +02:00
Max Kellermann
8444c33514
output/osx: don't use variable-length arrays
2020-07-01 17:31:46 +02:00
Max Kellermann
2b7328b434
output/osx: fix coding style
2020-07-01 17:11:02 +02:00
Max Kellermann
3d7147390f
Merge branch 'v0.21.x'
2020-07-01 16:56:17 +02:00
Max Kellermann
25b5ca6435
output/plugins/meson.build: add dependency on libevent.a for ALSA
2020-07-01 15:24:52 +02:00
Max Kellermann
fd217daad4
meson.build: always write encoder/Features.h
...
Fixes a build failure in `CommandLine.cxx`.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/905
2020-07-01 15:16:14 +02:00
Max Kellermann
d9f9b3df10
input/file: detect premature end of file
...
A bug report (https://github.com/MusicPlayerDaemon/MPD/issues/912 )
suggests that on Linux, reading on `cifs` files may rarely return 0 (=
end of file) before the end of the file has really been reached. But
that's just a theory which I need to validate, so this runtime check
shall catch this condition before the assertion in
DecoderBridge::Read() crashes MPD. Let's see.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/912
2020-07-01 15:14:27 +02:00
Max Kellermann
a43ee97746
util/UriUtil: strip credentials from smb:// URIs
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/910
2020-06-22 22:48:56 +02:00
Max Kellermann
43c32372e7
util/UriUtil: make schemes
array static
2020-06-22 22:48:07 +02:00
Max Kellermann
5716cde1fb
queue/PlaylistEdit: fix crash in SetSongIdRange() while playing
...
An assertion failure in UpdateQueuedSong() could trigger because the
`prev` parameter is always `nullptr`, but `queued` may be set. And in
fact, calling UpdateQueuedSong() is only necessary when the queued
song was edited, to re-queue it with the new range.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/901
2020-06-11 07:07:02 +02:00
Max Kellermann
c6a7f6dabc
release v0.21.24
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl7hRzQQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEp7dD/483fkBEyipufQyQT9nntP8R/vqKlUT+M9V
8LyoJBtNtbNkO4bdrgAQCzElYzkDnd8VR++ZDEcqSEF49y5wafsiuufJNW2/s02Y
ygAqgTCpcuS58F7aK92CW99bhZcKC6zoQovkenSMaZ39gorE1ZuO1JyrFR1LWOat
ELekougQe0JbX2YX0YOH0Qags5fv9joxYJYsx8ZC60sCRNc+h8CBQjpyhZqzk7wC
EPviLeMDw5lXkoSI3C045QmwJRFG8GMEyZ/4E/mnibxoTXBJmsm4ArKrfJznrUUs
r8Mkf4G7sVqbsRMyMFBpzw+lsRDpVWI26mhdah9Y1zuUYPaEMe7OVKuEsASJQ/oK
33wRSBVZc7EPhV3m8f7U8NAJI0/XaaPKGgP2OrtnOfxD+OyAze4vNLZ/GJCYSsh+
wN1grmJw1mTP52xBicN2AITqXSVVpuvznn+p0g9MBB9Nw8/vbeWaqGPQhMHGHW6a
JIL9yUTWwhkvkhav1bT7zKaeZv3qfgO7fjkgJqQFYt/q4FZwPFHJme55mVGq9d1y
FNR8BMh+0A8hRhhQVwVycLxr4+NJja3vaqx+uVG2kov1g3eQBSgnEYCiEV7uls4V
Pr4sIEeU/QQ+0jsMoJCaW65bNm4tOGKibpjSHrwJ+gxwKn3N7sJaAOo7PgGsUZyS
30cBC5zkjw==
=XHev
-----END PGP SIGNATURE-----
Merge tag 'v0.21.24'
release v0.21.24
2020-06-10 22:58:41 +02:00
Max Kellermann
6b3a282db4
lib/curl/Request: don't enable CURLOPT_NETRC on Windows
...
Our Windows build is built with `--disable-netrc`, and that makes
CURLOPT_NETRC fail, causing failures with all streams. D'oh!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/886
2020-06-10 22:46:42 +02:00
Max Kellermann
aafc9ce75b
decoder/gme: use class NarrowPath() for Windows compatibility
2020-06-10 21:22:00 +02:00
Max Kellermann
fea326530b
decoder/gme: simplify LoadGmeAndM3u() by moving code to ReplaceSuffix()
2020-06-10 21:20:49 +02:00
Max Kellermann
8925cc17d8
decoder/gme: use StringAfterPrefix()
2020-06-10 21:11:08 +02:00
Max Kellermann
14412c867f
add a few IWYU pragmas
2020-06-10 21:10:33 +02:00
Max Kellermann
c5cc256bf2
decoder/gme: use Path::GetSuffix()
2020-06-10 21:02:07 +02:00
Max Kellermann
563c7318f9
fs/AllocatedPath: add method GetSuffix()
2020-06-10 21:00:41 +02:00
Max Kellermann
374cc51f77
decoder/Bridge: add flag to make initial seek errors fatal
...
When the client wants to seek, but the decoder has already finished
decoding the current song, the player restarts the decoder with an
initial seek at the new position. When this initial seek fails, MPD
pretends nothing has happened and plays this song from the start.
With this new flag, a restarted decoder marks the initial seek as
"essential" and fails the decoder if that seek fails.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/895
2020-06-10 17:49:10 +02:00
Max Kellermann
068006ebd7
decoder/Bridge: install an InputStreamHandler on local files
...
Before the advent of io_uring (commit dae8da7066
), this didn't
matter, because the `FileInputStream` never called this. But
`UringInputStream` is derived from `AsyncInputStream`, and needs the
handler to signal completion.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/898
2020-06-09 21:07:38 +02:00
Shen-Ta Hsieh
93d87854e9
src/output: add wasapi output and mixer plugin
2020-05-30 22:21:03 +08:00
Shen-Ta Hsieh
e5eac71d72
win32: add COM helper classes
2020-05-30 22:21:03 +08:00
Max Kellermann
f20b927858
Merge branch 'v0.21.x'
2020-05-30 14:05:18 +02:00
Rosen Penev
e4dad42ca1
use std chr functions
...
The ones in std have overloads for const char/char.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-05-30 13:36:53 +02:00
Max Kellermann
99afe8e6d1
lib/icu/Win32: paranoid-ify the buffer length checks
...
Passing `length+1` to `MultiByteToWideChar()` means the function may
fill the whole buffer with output data, and could theoretically
overwrite the null terminator. In practice, this will never happen,
but this way, it's slightly more correct.
Also, null-terminate after `MultiByteToWideChar()`, after we got the
real output length. Again, this would never have been a problem, but
who knows...
2020-05-30 13:29:09 +02:00
Rosen Penev
1008d5f67c
use cwchar include
...
Needed for std::wmemchr under libcxx
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-05-30 13:22:04 +02:00
Shen-Ta Hsieh
169810e8f4
lib/icu: add null terminate in win32 string and wstring
2020-05-30 04:04:34 +08:00
Shen-Ta Hsieh
8e07ea7ad8
src/db: fitting libmpdclient interface
2020-05-29 19:00:16 +02:00
Max Kellermann
9f5c6d29b2
output/osx: use range-based for
2020-05-28 15:59:52 +02:00
Max Kellermann
f6823cc679
output/osx: move code to FindAudioDeviceByName()
2020-05-28 15:54:57 +02:00
Max Kellermann
69c0f0fe99
apple/AudioUnit: wrapper functions for AudioObject properties
2020-05-28 15:54:57 +02:00
Max Kellermann
28a00472ff
apple/Throw: new helper library replacing osx_os_status_to_cstring()
2020-05-28 15:06:53 +02:00
Max Kellermann
8d540737b9
output/osx: silently ignore some errors in osx_output_set_device()
2020-05-28 15:06:51 +02:00
Max Kellermann
1112d779be
apple/ErrorRef: new library wrapping CFErrorRef
2020-05-28 15:06:41 +02:00
Max Kellermann
ecced0ce13
apple/StringRef: new library wrapping CFStringRef
2020-05-28 15:06:38 +02:00
Max Kellermann
d751df0a73
storage/State: disable -Wcomma to work around Boost compiler warning
2020-05-28 14:00:31 +02:00
Max Kellermann
2c084781b0
output/openal: disable -Wdeprecated-declarations on Apple
2020-05-28 13:59:52 +02:00
Max Kellermann
6e1a21a42a
output/osx: make several fields const
2020-05-28 13:59:32 +02:00
Max Kellermann
80e8338014
output/osx: make variables more local
2020-05-28 13:44:28 +02:00
Max Kellermann
bfaa7afcb0
output/osx: make more AudioObjectPropertyAddress instances static constexpr
2020-05-28 13:39:46 +02:00
Max Kellermann
7fdbaa6156
output/osx: make AudioObjectPropertyAddress variables static constexpr
2020-05-27 19:50:44 +02:00
Max Kellermann
aa7dc62f72
output/osx: don't use C99 designated initializers
...
Fixes `-Wpedantic`.
2020-05-27 19:50:43 +02:00
Max Kellermann
6a4992118a
lib/ffmpeg/Time: redefine AV_TIME_BASE_Q with initializer list
...
libavutil's macro definition is a compound literal, which is illegal
in C++. Fixes yet another -Wpedantic warning.
2020-05-27 16:55:55 +02:00
Max Kellermann
f03cc1012d
lib/upnp/Compat: workaround for -Wkeyword-macro
2020-05-27 16:50:27 +02:00
Max Kellermann
736a696f98
lib/upnp: drop support for libupnp versions older than 1.8
2020-05-27 16:49:02 +02:00
Max Kellermann
caec384ed0
archive/ArchiveList, input/Registry: avoid zero-sized array
...
Some more `-Wpedantic` fixups.
2020-05-27 16:31:52 +02:00
Max Kellermann
5e93e882c9
Merge branch 'v0.21.x'
2020-05-27 16:16:30 +02:00
Max Kellermann
30d97fe8a0
meson.build: fix the WildMidi check when the feature is disabled
...
Fixes regression from commit 69f09648a4
2020-05-27 16:06:49 +02:00
Max Kellermann
8e4ca23727
lib/ffmpeg/Time: replace C99 compound literal with C++ initializer list
2020-05-27 15:54:34 +02:00
Max Kellermann
bdc861f058
util/TemplateString: remove extra semicolon
2020-05-27 15:46:55 +02:00
Rosen Penev
8925040262
remove some more extra semicolons
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-05-27 15:36:53 +02:00
Max Kellermann
4e5d6e560b
decoder/modplug: assume ModPlug is built as static library on Windows
2020-05-27 15:03:46 +02:00
Max Kellermann
d276d8eda2
decoder/wildmidi: assume WildMidi is built as static library on Windows
2020-05-27 15:03:35 +02:00
Max Kellermann
ebcb5e9368
decoder/wildmidi: use NarrowPath, fixing the Windows build
2020-05-27 15:03:33 +02:00
Max Kellermann
69f09648a4
meson.build: attempt to detect WildMidi using pkg-config
...
The WildMidi project added the pkg-config file in version 0.3.3, but
unfortunately, Debian still doesn't ship it 4 years later:
https://bugs.debian.org/916631
However, for cross-compiling, the pkg-config file is very helpful.
2020-05-27 15:03:16 +02:00
Max Kellermann
6cc58ccb9b
lib/icu/Converter: add missing <string_view> include
2020-05-26 17:48:01 +02:00
Max Kellermann
be94b4373a
util/OffsetPointer: add noexcept
2020-05-14 15:44:23 +02:00
Max Kellermann
eeec0ee804
dsd/Dsd2Pcm: convert struct GenerateCtableValue to lambda
...
Since we have dropped support for GCC 6 a while ago, we can use
constexpr lambdas now.
2020-05-07 15:04:51 +02:00
Max Kellermann
60f957ed64
util/MimeType: use string_view::substr()
...
Fixes regression from commit db93bb996c
because
ParseMimeTypeParameters() assumed the items were null-terminated, but
after that commit, they were not anymore.
2020-05-06 20:33:13 +02:00
Max Kellermann
864d26cd1b
Merge branch 'bind' of git://github.com/neheb/MPD
2020-05-06 06:14:55 +02:00
Max Kellermann
ba576ffa37
Merge branch 'v0.21.x'
2020-05-05 19:00:53 +02:00
Max Kellermann
209364adf2
db/simple: fix crash when mounting twice
...
The `db->close()` call was a `nullptr` dereference because the `db`
variable had already been moved.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/839
2020-05-05 18:57:29 +02:00
Max Kellermann
dae8da7066
input/uring: new input plugin using io_uring
...
This is the final piece of the series to establish io_uring support on
Linux.
MPD doesn't need io_uring for its efficient bulk I/O support, but to
allow file I/O to be cancelled. This is a big problem on CIFS/NFS
mounts where processes sleep uninterruptable if the file server
disappears, deadlocking MPD.
With io_uring, a flaky NFS connection allows MPD to continue to work
(even though there are still deadlocks inside MPD which need to be
addressed).
This plugin does not yet use cancellable `open()` using
`IORING_OP_OPENAT`. This will be implemented later.
Lots of other optimization opportunities for io_uring are still
missing as well - for example the database update could benefit a lot,
but unfortunately, io_uring doesn't have `readdir()` support just yet.
2020-05-05 17:41:03 +02:00
Max Kellermann
cdf8ac001c
event/Loop: integrate io_uring support
2020-05-05 17:13:14 +02:00
Max Kellermann
62d0ceabcc
io/uring: basic Linux io_uring support
2020-05-05 17:10:17 +02:00
Max Kellermann
935e622915
event/Loop: allow calling AddFD()... before starting the EventThread
...
Relax the assertions. This is necessary if BlockingCall() is used
before the thread is started.
2020-05-05 17:10:17 +02:00
Max Kellermann
1efbbfcd6f
GitVersion: make GIT_VERSION const
2020-05-05 15:12:40 +02:00
Max Kellermann
e0edf0b206
meson.build: move VERSION and others to Version.h
2020-05-05 15:12:11 +02:00
Max Kellermann
8f178401e4
*/plugins/meson.build: define feature macros in Features.h
...
This makes ccache more efficient when recompiling with different
plugins.
2020-05-05 15:06:50 +02:00
Max Kellermann
8c1d78873d
system/KernelVersion: new library
2020-05-05 14:30:56 +02:00
Max Kellermann
9815d10137
system/FileDescriptor: move to io/
2020-05-05 14:27:03 +02:00
Max Kellermann
97f7270aa8
fs/FileSystem: remove unused function FOpen()
2020-05-05 14:19:29 +02:00
Max Kellermann
1787aa5e00
decoder/sidplay: drop support for libsidplayfp < 1.8
2020-05-05 13:53:10 +02:00
Rosen Penev
e6a77e1297
remove std::bind usage as much as possible
...
Reduces unstripped size. stripped size is the same.
Also took the time to remove using std::placeholders.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-05-04 15:40:28 -07:00
Max Kellermann
24afdee35c
command/all: "tagtypes" requires no permissions
...
The command is used to configure the client's connection, and this
shouldn't require any permissions. The client should be able to do
that before sending a password.
2020-04-30 13:08:09 +02:00
Max Kellermann
7aea285361
Revert "Fix unsafe float comparison."
...
This reverts commit a5273d6992
. It was
wrong and broke the MixRamp unit test.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/844
2020-04-30 06:57:36 +02:00
Rosen Penev
47a7707df1
Math.hxx: fix wrong macro name
...
_GLIBCXX_USE_C99_MATH_TR1 is the correct one.
_GLIBCXX_USE_C99_MATH is always defined.
2020-04-29 23:20:04 +02:00
skidoo23
a485c4856c
decoder/sidplay: support new song length format with libsidplayfp 2.0
2020-04-29 16:27:54 +02:00
Max Kellermann
bca9678683
tag/FixString: use IsNonPrintableASCII()
...
Fixes breakage of non-ASCII characters, regression from commit
cc72ceb368
Fixes https://github.com/MusicPlayerDaemon/MPD/issues/842
2020-04-27 14:01:54 +02:00
Max Kellermann
814b2a218d
util/CharUtil: add IsNonPrintableASCII()
...
Prepare to fix cc72ceb368
2020-04-27 14:01:54 +02:00
John Regan
6423670eae
gme: use song-reported fade-out time when available
2020-04-26 09:24:34 -04:00
John Regan
90a2109fd1
gme: add configurable fade-out time
...
Also include fade-out time in song length.
2020-04-26 09:21:57 -04:00
Max Kellermann
464b90210c
tag/GenParseName: include stdlib.h for EXIT_SUCCESS
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/838
2020-04-24 20:39:24 +02:00
Max Kellermann
fa45a8adfa
tag/ParseName: generate an optimized tag_name_parse() at build time
2020-04-24 16:28:29 +02:00
Max Kellermann
1532983fb5
tag/Pool: use strncmp() without strlen() to compare strings
2020-04-24 16:16:19 +02:00
Max Kellermann
ae5b2643da
tag/Builder: reserve room in std::vector in default constructor
...
This reduces resource waste for resizing the std::vector in most
cases.
2020-04-24 16:16:19 +02:00
Max Kellermann
02556ffce9
tag/Tag: use class DereferenceIterator
2020-04-24 16:02:36 +02:00
Max Kellermann
18ca734819
util/DereferenceIterator: new utility class
2020-04-24 16:02:31 +02:00
Max Kellermann
8a28f7b0a1
tag/FixString: add optimistic quick check
...
Optimizes a few nanoseconds from the common code path.
2020-04-24 15:57:40 +02:00
Max Kellermann
cc72ceb368
tag/FixString: use IsPrintableASCII()
2020-04-24 15:42:09 +02:00
Max Kellermann
0b3acc3eec
release v0.21.23
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl6huEwQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEgcrD/9jLUkiszNc+QWbUGj+RiTaD6fMxA1M8itn
nB7MKI/g/3ggryWMWNhG51O+8wFNs/4PmJJPGxKoU6i6wmS3YFhTAcs0ryilDGAU
1FumnMg/2qIyi2E6K2BMbi0YwZiJhBPWwD4JSt1KGvwPes/qQPFgHAi7ZWhP3tar
fHmgmjwDZ/Kgpl5/Bn7nVNgVuzk/MpBOSwxX9tFtRxqE9wdpm9idve7SVDT7MTvk
vdONWbAe8jXl/A8JHWaUsws0l7fyK5ZKSOXvdeSbzd67I8Rz3aqJMqUh2k/rDuv/
GrDyeEtLV5cXZsL4B3/34kCTKac2ZJmRbSh+buKeDc1Gf0clWnvRMdsMbSoRBY4F
lTWJbjndfq2+iHHBRfaqRjombv52R11yLT+O0aMLEm6l7xPm/rHZXJIcYSmCafd7
FR1qMaVKP5s+M+MqGePxzCUJSWJ+1bjZwjLaHrYXYPUoXSg3mSaeDE5g7BjQhm1E
2Hcfui9lvqR55UNo0NvDBjRT5FBGBUdjF6DjYplUGApw7xFtdahXlEvG7yfyg3ae
pZ3FQ1MZ4dESAw7EhTEBwajsVRQ9DhGQenYTxxCnGVdCucZRPQ9Abhas0U4iFHUA
wGj7j4WKPi+OUSyiT0j4nGuwEVtCkBFv34DqPMLjx8jqtJ8YgCt4iJD4dFwhk1zz
uoQBhq27Gg==
=sR2r
-----END PGP SIGNATURE-----
Merge tag 'v0.21.23'
release v0.21.23
2020-04-23 18:01:23 +02:00
Max Kellermann
3040ddb5ec
lib/nfs/FileReader: use struct stat64
on Windows 32-bit
...
libnfs is compiled with `-D_FILE_OFFSET_BITS=64`, but Meson decides
not to enable this mode. We could force this mode, but then again,
these days, nobody should be using 32-bit Windows ... so this is a
kludge only for debugging with 32-bit WINE.
2020-04-23 17:32:34 +02:00
Max Kellermann
fdb28eb0c4
fs/NarrowPath: preserve nullptr in Path operator
...
Fixes Path::IsNull() checks on Windows.
2020-04-23 17:10:28 +02:00
Max Kellermann
7ded244a61
lib/nfs/Connection: pass POLLHUP and POLLERR to nfs_service()
2020-04-23 16:58:53 +02:00
Max Kellermann
8ed533acf3
event/SocketMonitor: handle epoll_ctl()=EBADF/ENOENT in Schedule()
...
This fixes a freeze bug in the NFS input/storage plugins: when libnfs
auto-reconnets after a failure, it installs the new socket on the same
file descriptor number. MPD's attempt to unregister the old socket by
calling SocketMonitor::Steal() from NfsConnection::ScheduleSocket()
fails because the new/old socket number is not registered in epoll, so
epoll_ctl() returns ENOENT. The problem is that it left
`scheduled_flags`, and so subsequent Schedule() calls will use
`EPOLL_CTL_MOD`, which will fail again and again. Instead, we need to
use `EPOLL_CTL_ADD` to register the new socket.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/806
Closes https://github.com/MusicPlayerDaemon/MPD/issues/756
2020-04-23 16:58:26 +02:00
Max Kellermann
a27580d0cc
lib/nfs/Connection: don't pass HANGUP to Schedule()
...
This flag is output-only.
2020-04-23 15:21:04 +02:00
Max Kellermann
905db05cf9
zeroconf/AvahiPoll: don't pass ERROR|HANGUP to Schedule()
...
These flags are output-only.
2020-04-23 15:19:24 +02:00
Max Kellermann
4242aee21e
event/SocketMonitor: remove HANGUP|ERROR from ScheduleRead()
...
These flags are output-only. Using them here is misleading.
2020-04-23 15:18:18 +02:00
Max Kellermann
e71bd2a08b
event/PollGroupWinSelect: make EVENT_{READ,WRITE} static
2020-04-23 15:10:57 +02:00
Max Kellermann
e53a4d0a9e
lib/nfs/FileReader: reset state
in OnNfsCallback()
...
The object's state is `IDLE` when OnNfsCallback() gets invoked, so
let's use the start of the method to reset the `state` field.
2020-04-23 14:54:52 +02:00
Max Kellermann
159389164a
lib/nfs/FileReader: set state=IDLE
before invoking callback
...
Fixes assertion failure if the callback fails.
2020-04-23 14:51:43 +02:00
geneticdrift
0a92fbc18e
tag/Fallback: add tag fallback for AlbumSort
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/832
2020-04-22 22:00:38 +02:00
Max Kellermann
138c29320b
gme: adapt to API change in the upcoming version 0.7.0
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/833
2020-04-22 21:53:00 +02:00
Max Kellermann
8f00dbea45
lib/icu/Compare: add Windows implementation
...
Using CompareStringEx() and FindNLSStringEx().
Implements a missing piece for
https://github.com/MusicPlayerDaemon/MPD/issues/820
2020-04-22 21:42:12 +02:00
Max Kellermann
f3fd2eb618
lib/icu/Compare: use AllocatedString::Clone()
2020-04-22 21:39:13 +02:00
Max Kellermann
fc92db83cf
lib/icu/Collate: use NORM_IGNORECASE instead of LINGUISTIC_IGNORECASE
...
LINGUISTIC_IGNORECASE is unimplemented on Wine, but since we don't
have any locale support (yet), and we're using LOCALE_NAME_INVARIANT,
NORM_IGNORECASE should essentially be the same, so why bother.
2020-04-22 21:39:13 +02:00
Max Kellermann
3b0f8d5516
lib/icu/CaseFold: remove Windows implementation
...
Reverts commit fb3564fbe7
LCMapStringEx() doesn't do what I imagined it would do 5 years ago.
D'oh!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/820
2020-04-22 19:32:36 +02:00
Rosen Penev
a5273d6992
Fix unsafe float comparison.
...
Switching == to >= should be safe here since the next if is the opposite.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-04-22 18:21:40 +02:00
Rosen Penev
6979be008c
[clang-tidy] use auto
...
Found with modernize-use-auto.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-04-22 18:21:07 +02:00
Rosen Penev
71792ffd43
[clang-tidy] use raw string
...
Found with modernize-raw-string-literal
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-04-22 18:21:00 +02:00
Rosen Penev
3c145c0f49
[clang-tidy] add nodiscard
...
Found with modernize-use-nodiscard
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-04-22 18:20:51 +02:00
Thomas Guillem
b18074f899
storage/curl: fix path comparison when the server escapes differently
...
Unescape the base path and the path coming from the server (href) to fix the
comparison when the server uses different escaped characters.
The outputted name need to be unescaped. Doing that before or after the
HrefToEscapedName() call should not change the current behavior.
2020-04-15 13:50:12 +02:00
Thomas Guillem
3d8067a041
storage/curl: fix href when file has a '&' char
...
If the file name is "Hello & bye", 3 CharacterData events will be sent with the
State::HREF state:
- "Hello%20"
- "&"
- "%20bye"
Reproduced with files hosted on an apache2 DAV server: 2.4.38-3+deb10u3.
2020-04-15 13:18:16 +02:00
Florian Heese
f6fe001fa9
Added missing channel order setups for ALSA
2020-04-15 13:13:09 +02:00
Max Kellermann
32a5bf043b
player/Thread: drain outputs at end of song in "single" mode
...
Without this, the Pause() call would drop the ring buffers and would
skip a considerable portion of the end of the song.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/824
2020-04-14 16:07:03 +02:00
nia
8437b141a4
SolarisOutputPlugin: Support S8 and S32 encodings.
2020-04-14 14:38:30 +01:00
nia
1f0881eec0
SolarisOutputPlugin: Use AUDIO_INITINFO for initialization
...
This is recommended by Solaris and NetBSD documentation.
2020-04-14 14:20:24 +01:00
Rosen Penev
6080c3b4ba
Math.hxx: move cmath include out of define
...
The _GLIBCXX_USE_C99_MATH macro is defined in glibcxx by c++config.h, which
gets included by every header. Which means a header needs to be present.
(cherry picked from commit 79e9aff338
)
2020-04-09 14:24:06 -07:00
Max Kellermann
3c240e2119
db/simple/DirectorySave: pass std::string_view to _load_subdir()
...
Eliminates one strlen() call.
2020-04-08 23:54:58 +02:00
Max Kellermann
57fb153c5d
db/Interface: pass std::string_view to GetSong()
2020-04-08 23:43:59 +02:00
Max Kellermann
212401d687
db/update/Service: pass std::string_view to Enqueue()
2020-04-08 23:38:28 +02:00
Max Kellermann
dd831d3922
db/simple: pass std::string_view to Directory::LookupDirectory()
2020-04-08 23:38:24 +02:00
Max Kellermann
9f8dc31b50
input/Plugin: copy protocols() to stack before using it
...
Fixes regression by commit 015cbff93d
causing a crash bug because the
iterators of two different temporaries were used.
2020-04-08 23:37:32 +02:00
Max Kellermann
db93bb996c
util/SplitString: convert return value to std::string_view
...
Eliminates lots of overhead.
2020-04-08 23:14:25 +02:00
Max Kellermann
2c02a04566
db/update/Walk: pass std::string_view to DirectoryMakeUriParentChecked()
...
Split the string into path segments with StringView::Split(). This
prepares to eliminate all allocations from the method.
2020-04-08 23:09:37 +02:00
Max Kellermann
f13f66487a
fs/Charset: pass std::string_view to PathToUTF8()
2020-04-08 23:04:37 +02:00
Max Kellermann
0a4c5edc3b
Merge branch 'stl' of git://github.com/neheb/MPD
2020-04-08 23:03:44 +02:00
Rosen Penev
015cbff93d
[cppcheck] convert several functions to use std::all_of
...
std::all_of becomes constexpr in C++20. I'm not sure it results in better
performance.
Found with useStlAlgorithm
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-04-08 14:01:12 -07:00
Rosen Penev
79e9aff338
Math.hxx: move cmath include out of define
...
The _GLIBCXX_USE_C99_MATH macro is defined in glibcxx by c++config.h, which
gets included by every header. Which means a header needs to be present.
2020-04-07 20:14:00 -07:00
Max Kellermann
3a51fe31df
util/ConstBuffer, ...: use using
instead of typedef
2020-04-06 15:19:12 +02:00
Max Kellermann
cc3e71d8c7
util/CharUtil: add IsHexDigit()
2020-04-06 15:07:08 +02:00
Max Kellermann
dd37b4656e
storage/{composite,local}: fix -Wnonnull warnings
2020-04-06 15:06:52 +02:00
Max Kellermann
e2d2bb8755
storage/Composite: use IterableSplitString()
2020-04-03 19:51:14 +02:00
Max Kellermann
a98d627c0b
storage/Interface: convert URI parameters to std::string_view
2020-04-03 19:45:10 +02:00
Max Kellermann
0080eee857
fs/Traits: add Relative() overload with std::string_view
2020-04-03 19:45:01 +02:00
Max Kellermann
2429cc8778
fs/Traits: convert first Relative() parameter to std::string_view
2020-04-03 19:29:29 +02:00
Max Kellermann
3a83a6b527
storage/Composite: NextSegment() returns std::string_view
2020-04-03 19:29:01 +02:00
Max Kellermann
bcf4645263
db/simple/Directory: add LookupResult::uri
2020-04-03 17:18:00 +02:00
Max Kellermann
6c8eb3c7ed
db/simple/Directory: rename LookupResult::uri to "rest"
2020-04-03 17:07:15 +02:00
Max Kellermann
870151214d
util/SplitString: convert parameter to std::string_view
2020-04-03 16:47:45 +02:00
Max Kellermann
ae4fd576bf
output/ao: use IterableSplitString() instead of SplitString()
2020-04-03 16:47:25 +02:00
Max Kellermann
747436b17e
db,storage: pass std::string_view to PathTraits::Build()
2020-04-03 16:25:09 +02:00
Max Kellermann
7a58b8c3e8
fs/AllocatedPath: pass std::string_view to FromUTF8()
2020-04-03 16:21:41 +02:00
Max Kellermann
56b4b010d6
fs/FileSystem, ...: use AllocatedPath::FromFS(string_view)
2020-04-03 16:13:15 +02:00
Max Kellermann
91c75a133f
lib/icu/Collate: pass std::string_view
2020-04-03 16:13:15 +02:00
Max Kellermann
e620677d7c
lib/icu/CaseFold: pass std::string_view
2020-04-03 16:13:14 +02:00
Max Kellermann
09d8e44d56
lib/icu/Converter: pass std::string_view
2020-04-03 16:13:14 +02:00
Max Kellermann
9dc530ab51
lib/icu/Util: pass std::string_view
2020-04-03 16:13:14 +02:00
Max Kellermann
2d0798cd4d
lib/icu/Win32: pass std::string_view
2020-04-03 16:13:14 +02:00
Max Kellermann
a269fc988b
fs/Charset: enable RVO in FixSeparators()
2020-04-03 16:12:51 +02:00
Max Kellermann
915c48f748
util/AllocatedString: std::string_view support
2020-04-03 16:08:55 +02:00
Max Kellermann
f04a245769
util/AllocatedString: add noexcept
2020-04-03 15:26:47 +02:00
Max Kellermann
a8687fb7df
util/AllocatedString: use using
instead of typedef
2020-04-03 15:25:37 +02:00
Max Kellermann
3b88bac07c
util/StringPointer: add noexcept
2020-04-03 15:25:33 +02:00
Max Kellermann
358f231391
util/StringPointer: use using
instead of typedef
2020-04-03 15:25:16 +02:00
Max Kellermann
f0923231d0
storage/Interface: pass std::string_view to MapChildFS()
2020-04-02 20:14:00 +02:00
Max Kellermann
dadf054fbb
db/simple/Directory: reimplement LookupDirectory() without allocations
...
Use std::string_view to avoid modifying the string for the temporary
null terminators.
2020-04-02 20:08:00 +02:00
Max Kellermann
6593b5998a
db/simple/Directory: pass std::string_view to several methods
2020-04-02 19:58:24 +02:00
Max Kellermann
386235e2d2
db/simple/Mount: pass std::string_view to WalkMount()
2020-04-02 19:52:03 +02:00
Max Kellermann
ddfd92e547
db/simple/PrefixedLightSong: templatize the constructor
2020-04-02 19:51:41 +02:00
Max Kellermann
d5fd309484
db/update/IO: pass std::string_view to directory_child_is_regular()
2020-04-02 19:50:16 +02:00
Max Kellermann
6197b29aa0
db/PlaylistInfo: pass std::string_view to CompareName
2020-04-02 19:49:39 +02:00
Max Kellermann
02294a8236
song/Filter: pass std::string_view to WithoutBasePrefix()
2020-04-02 19:49:24 +02:00
Max Kellermann
66bcf04cbd
db/update/Queue: pass std::string_view to Push()
2020-04-02 19:49:16 +02:00
Max Kellermann
12b97bbe38
release v0.21.22
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl6GCWgQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEvkQD/9qg6cnCgCKSOmTjteJu1ayeXBMDiL3cCCg
AwarHQoxsB0102NpV+MLka+4HIwHn+WNL55TzYgfbSh0nfmnki2fZ0YpsZoQR79w
MP11iMPnFH1oKqj58minBkFNmAis2aLYHJGKaQNUh7wcf0WhbVTqtWBUrKb07RQ0
Zj5lXtg65O/+yaCVdQGS6fMk2t7CqBM+S3RmbXCib/JRMC6aozoC7nWPvj8b2R8d
PgxwKMRzyslyFoxDQZrusDjJ1piyigzUMMr32yzYDED4Xr8jsEELaJfULbr6qWT2
ZNYF91e+D5V7riASAtlFTaVMaISx4QbHjKWR5Xcx0q/SJPAXTxF8RrAqGvqpWYmc
kqmC8iNxQsW5o3sNhI9qg6sOkq2dIu43VasRCvuo19GABR36wwTK5ORoazIi8fbU
/Ki/oZHtZczHRop9Cd6698Qr9jyTPdIs55FbgejzrVADvAmslqtcA6XxCBuG1nSF
Qo48dp9Px7J74qNNuDt5/xLnQGJKaW60/BXrMK9G9QG4x9r4zuCayDO6Qc7FMWWR
DG7k9nYoXJU5YG7xp9Rk+Yj3Ade8kqhTnKfqw0f2JfkLt0ChPG+rZcxICWSdzZm0
AfHxuEQlwKaaFHFEsZhVehlsXkeU9OVywo+QDzmY2uqQ2ddlBZ47Qm2MWgTsv8i/
euVsrzLtag==
=EedX
-----END PGP SIGNATURE-----
Merge tag 'v0.21.22'
release v0.21.22
2020-04-02 18:02:10 +02:00
Max Kellermann
afe2aaa5f6
fs/io/GzipOutputStream: increase buffer size to 16 kB
...
Reduce I/O overhead.
2020-04-02 17:17:58 +02:00
Max Kellermann
9b11caa0e6
fs/io/BufferedReader: larger default buffer (4 kB -> 16 kB)
...
Reduce I/O overhead.
2020-04-02 17:17:27 +02:00
Max Kellermann
e94c436264
src/event/meson.build: depend in libnet.a
...
The event library uses various libnet.a classes,
e.g. SocketDescriptor.
2020-04-02 17:16:05 +02:00
Max Kellermann
4d453a8313
fs/NarrowPath: add class FromNarrowPath
...
Move code from ParseCommandLine().
2020-04-02 17:15:34 +02:00
Max Kellermann
61d7b436a2
fs/NarrowPath: un-inline Windows constructor
2020-04-02 16:27:44 +02:00
Max Kellermann
cdddaf21b0
db/simple/Directory: optimize GetName() using the parent's path
...
This method gets called a lot during MPD startup, via FindChild() and
directory_load_subdir(), so this is worth optimizing at the expense of
code readability.
This speeds up MPD startup by 10%.
2020-04-02 16:12:08 +02:00
Max Kellermann
b267ba5f0a
tag/Pool: enlarge hash table
...
This consumes more memory (plus 48 kB on 32 bit systems), but reduces
the number of hash collisions, speeding up MPD startup with large
databases.
2020-04-02 15:45:35 +02:00
Max Kellermann
8270043053
Revert "decoder/ffmpeg: copy the AVPacket in ffmpeg_send_packet()"
...
This reverts commit eb192137d6
.
This is no longer necessary because we require FFmpeg 3.1 or newer
since MPD 0.21.2.
This fixes a deprecation warning because the implicit AVPacket copy
constructor copies the deprecated attribute `convergence_duration`.
2020-04-01 17:30:28 +02:00
Max Kellermann
672bc3ab67
time/Convert: fix GetTimeZoneOffset() on Windows
...
Was using the wrong parameter.
2020-04-01 16:21:29 +02:00
Max Kellermann
7d7bd51bc0
util/AllocatedArray: use using
instead of typedef
2020-04-01 15:42:55 +02:00
Rosen Penev
71e551df42
replace locale.h with clocale
...
Switch to std:: functions. Changed the meson check. Works locally.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-31 18:05:23 -07:00
Max Kellermann
9c3e1d450a
fs/io/GunzipReader: increase buffer size to 64 kB
...
Reduces I/O overhead while reading a compressed database file.
2020-03-31 15:07:39 +02:00
Rosen Penev
3540cf26b1
replace exit and _exit with std variants
...
_exit and std::_Exit are identical, expect the latter is standard C++.
Added several functions to the std namespace as a result of headers.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-26 18:44:09 -07:00
Max Kellermann
e1c43ec65f
Merge branch 'ucl' of git://github.com/neheb/MPD into v0.21.x
2020-03-26 17:28:21 +01:00
Thomas Guillem
4dd10894ba
lib/curl/Request: fix Exception "error" on Android
...
Apparently, it's not possible to change CURLOPT_NETRC on Android.
2020-03-26 17:26:14 +01:00
Rosen Penev
608d7ec1e7
[clang-tidy] change integer prefixes to uppercase
...
Found with readability-uppercase-literal-suffix
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-26 17:25:20 +01:00
Max Kellermann
8474599ed6
lib/curl/Easy: add method Unpause()
2020-03-26 17:22:10 +01:00
Max Kellermann
ab39f64fc0
lib/curl/Easy: add setter functions
2020-03-26 17:21:30 +01:00
Max Kellermann
185fbca282
lib/curl/Global: make ReadInfo() private
2020-03-26 17:20:10 +01:00
Max Kellermann
6e3b2fd844
lib/curl/Global: remove redundant API docs
2020-03-26 17:20:06 +01:00
Max Kellermann
dab39dc778
lib/curl: fix coding style
2020-03-26 17:19:48 +01:00
Max Kellermann
8cd5e79fbd
event/*, ...: make GetEventLoop() const
2020-03-26 17:19:13 +01:00
Max Kellermann
1de3ac6c78
lib/curl/Init: add const
overloads
2020-03-26 17:18:27 +01:00
Max Kellermann
abe06a5fa6
lib/curl/Init: add noexcept
2020-03-26 17:18:23 +01:00
Rosen Penev
85c27840a3
treewide: use boost::lround when std::round is unavailable
...
This is the case with uClibc-ng currently.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
(cherry picked from commit 769cd0ee9f0cf8ceb026aa751b5d4a390bb5dbdc)
(changed define to match master)
2020-03-25 18:54:15 -07:00
Thomas Guillem
81c16273c5
output/sles: use the AndroidMixerPlugin
2020-03-25 20:08:53 +01:00
Thomas Guillem
801ae86b5d
mixer: add AndroidMixerPlugin
2020-03-25 20:07:26 +01:00
Thomas Guillem
5619fd0bba
android: Context: add GetAudioManager
2020-03-25 20:07:25 +01:00
Thomas Guillem
200258c7c3
android: add AudioManager
2020-03-25 20:07:24 +01:00
Max Kellermann
5418bb49fb
android/Context: add noexcept
2020-03-25 20:07:18 +01:00
Max Kellermann
3449c14ff5
java/Object: rename class Object to GlobalObject
2020-03-25 20:07:15 +01:00
Rosen Penev
cfa4524cb3
util/Math: change define
...
This has nothing to do with uClibc. It has everything to do with gcc's
libstdc++.
C99 math can be compile time disabled for it. Check for that and use boost
lround when std is not available.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-25 19:27:45 +01:00
Rosen Penev
4fd0c84f46
replace lrint with lround
...
lrint is a configurable version of lround that behaves either as round,
floor, ceil, or trunc based on setting the proper FE_ macro using
fset/getround. Given that it's not set at all and that it defaults to
round behavior, simply replace with round.
Also removed the util/Math defines.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-25 19:27:44 +01:00
Rosen Penev
e41a52d909
change abs() to std::abs()
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-25 19:27:42 +01:00
Rosen Penev
01e00632cc
[cppcheck] fix format string
...
Found with invalidPrintfArgType_sint
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-25 19:27:40 +01:00
Rosen Penev
9bad5ee3c5
remove boost pow stuff for uClibc-ng
...
It's available there.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-24 17:21:21 -07:00
Rosen Penev
e87454ae88
MpcdecDecoderPlugin: use std variant of pow
...
It's available with uClibc-ng. It also offers overloads.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-24 17:16:51 -07:00
Rosen Penev
f319f88df4
[cppcheck] use const for several variables
...
Found with constVariable
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-23 21:03:22 -07:00
Max Kellermann
637840264a
util/WStringCompare: reorder functions to relocate API docs
2020-03-22 19:20:29 +01:00
Max Kellermann
3888bafc1f
util/StringCompare: add API documentation
2020-03-22 19:15:55 +01:00
Max Kellermann
adad4c7298
util/StringCompare: add missing include
2020-03-22 19:12:02 +01:00
Max Kellermann
d54acbcffd
Merge branch 'sles-assert-fix' of git://github.com/tguillem/MPD-1
2020-03-22 10:51:28 +01:00
kowalcj0
36a89e8fe7
Support RSS feeds with application/xml MIME-type
2020-03-22 10:49:38 +01:00
Thomas Guillem
86613af37e
output/sles: fix invalid assert
...
Regression from 973c87b351
2020-03-21 22:34:04 +01:00
Rosen Penev
ba3ff10ccd
remove false ifdef
...
The entire section falls under the else path of #ifdef _WIN32. Checking
for it makes no sense. Probably some refactoring mistake.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-20 17:56:33 -07:00
Max Kellermann
1ec283d213
util/Exception: include cleanup
2020-03-19 20:13:04 +01:00
Max Kellermann
2261bcb5d3
android/Environment: remove another extra semicolon
2020-03-19 20:13:04 +01:00
Max Kellermann
0e17629445
android/Environment: remove extra semicolon
2020-03-19 15:27:43 +01:00
Max Kellermann
0da6344726
release v0.21.21
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl5zgCQQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEnkCD/0RNcohFb2svCDYXuAz3BN5hBxUvepMJJId
aNaT+jz8FpWTpIi4TaHqF4iODyDXR9YkVBv2aPqEjJad0tVEHHijyHkA25jd8moz
lR46RRK4CEkBTTlmui9FmajelqoidMxRMQLR8HRTKCQPPZcgXhNOhdciJg1EovMT
maZD81UyuZXPAq+v3IMJHy+H/LUA5yFcsjIdyJs7EEFZXHb9LUVRW/ZxUwFzl1Os
TAiLQ0Ix4ebsy1MmE4n7f9T6dAuPO/+GkHXMKn6ruvAYUKPeKcjjdm5QW+Gyt9X1
IArx0oaEqxPY5r7YruyGoPMj9pIwMVnHMLCTc8sbBNKS8ibtD/mlI+9Vj8C4gCoZ
ZRjMFnPMSC6RmoTWbDw8U28j0vxMbQ/SWrLNIgW44QUHyFPfBgWNwqqKux6b/Mph
u+SjVi/9ds8FKewLVi3dotdS8YmPF/b46Ov0ycfWLbyB7BvcP31o1zR1uLN6BqYj
bzI4n4hKOxT0SsA74odJJDamA60J/DW4tAGxyscKaq8pDFYlBFo9dq+9+/aoDAMj
sFLP32h/HqlO/ilZuuUVES4tg/shzF7VOhI9+GCvc/Ic1NXIdug4pUcXJ8ubXxzD
ObnvF8RX8Vwf/ofwjcHIE7sqJAT5/QZhB1RTg/SkdlaUczjle0gVgCN1hAqlNSCP
mJ8831lArg==
=YxBZ
-----END PGP SIGNATURE-----
Merge tag 'v0.21.21'
release v0.21.21
2020-03-19 15:26:27 +01:00
Rosen Penev
cade4e71c4
[clang-tidy] add [[nodiscard]]
...
Found with modernize-use-nodiscard
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-19 13:38:40 +01:00
Rosen Penev
403612c666
[clang-tidy] run through performance checks
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-19 13:38:40 +01:00
Rosen Penev
7fe49cf24d
[clang-tidy] use default member init
...
Found with modernize-use-default-member-init
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-19 13:38:40 +01:00
Rosen Penev
d2115e908a
[clang-tidy] remove redundant access specifiers
...
Found with readability-redundant-access-specifiers
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-19 13:38:40 +01:00
Max Kellermann
56c234b410
raise default "max_connections" value to 100
...
Documentation says the limit is 5, but it was really 10 (at least
since 2004). But since MPD wants to promote using many small clients
idling around, and these clients consume only very few resources, it
seems reasonable to raise this limit's default value.
2020-03-19 13:30:46 +01:00
Max Kellermann
61b5ab2663
thread/CriticalSection: remove extra semicolons
2020-03-17 16:57:57 +01:00
Rosen Penev
84f71cec2c
add two extra noreturn that clang picked up
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 23:02:35 -07:00
Rosen Penev
00b9f69c90
remove some more extra semicolons
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 13:37:13 -07:00
Rosen Penev
6d91b5c7b2
fix double promotions
...
Found with -Wdouble-promotion
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 12:43:24 -07:00
Max Kellermann
fd71514068
Merge remote-tracking branch 'neheb/h'
2020-03-16 17:29:05 +01:00
Max Kellermann
256cfc545d
Merge remote-tracking branches 'neheb/fwhfggwe', 'neheb/nvm2', 'neheb/nvm22', 'neheb/bvm' and 'neheb/cl2'
2020-03-16 17:25:50 +01:00
Rosen Penev
77c6c3fabf
remove unreachable code
...
Found with -Wunreachable-code-break
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:14:13 -07:00
Rosen Penev
e25a3d17e7
remove extra semicolon
...
Found with -Wextra-semi
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:13:20 -07:00
Rosen Penev
7f10e7a610
fix implicit-fallthrough warnings under clang
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:12:38 -07:00
Rosen Penev
88d56c01e7
fix missing overrides
...
Found with clang's -Winconsistent-missing-destructor-override
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:11:15 -07:00
Rosen Penev
97425d56e7
remove gcc_unused
...
[[maybe_unused]] (introduced in C++17) is standard C++.
https://clang.llvm.org/docs/AttributeReference.html#maybe-unused-unused
says that this is equivalent to the GNU unused attribute.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:08:21 -07:00
Rosen Penev
0afb156a5b
remove gcc_warn_unused
...
[[nodiscard] (introduced in C++17) can be used instead.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:08:21 -07:00
Rosen Penev
a192e7b29b
remove gcc_deprecated
...
[[deprecated]] (introduced in C++14) may be used instead.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:08:21 -07:00
Rosen Penev
591f51f3d3
replace noreturn attribute with standard C++ version
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:08:18 -07:00
Rosen Penev
5e4b7e2fb7
[clang-tidy] fix incorrect rounding
...
Found with bugprone-incorrect-roundings
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-15 20:22:08 -07:00
Rosen Penev
177371a003
treewide: get rid of C math function usage
...
Boost does not seem to offer an overload for lrint.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-15 20:22:07 -07:00
Rosen Penev
a78841d6a9
volume_mapping: get rid of exp10 workaround
...
exp10 is a GNU function, is not part of C++, and is not available
everywhere.
pow(10,x) is an alternative that works just as well. It is used in musl as
the implementation of exp10.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-15 20:17:31 -07:00
Rosen Penev
3ec9fcfc44
treewide: use boost::lround when std::round is unavailable
...
This is the case with uClibc-ng currently.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-15 20:17:31 -07:00
Max Kellermann
b5d1a09010
util/StringUtil: pass std::string_view to StringArrayContainsCase()
2020-03-13 20:38:40 +01:00
Max Kellermann
85b072b3d3
util/StringCompare: add StringIsEqual() with string_view
2020-03-13 20:36:48 +01:00
Max Kellermann
8a1f1fbe06
util/ASCII: migrate to std::string_view
2020-03-13 20:17:53 +01:00
Max Kellermann
45b60b3d38
fs/Traits: GetParent() returns std::string_view
2020-03-13 20:01:10 +01:00
Max Kellermann
cefc773992
playlist/PlaylistSong: pass std::string_view
2020-03-13 19:58:36 +01:00
Max Kellermann
a885bdba4c
fs/Traits: pass string_view to Build()
2020-03-13 19:55:28 +01:00
Max Kellermann
b6b15afb5a
fs/Path: make constructor explicit
2020-03-13 19:55:25 +01:00
Max Kellermann
1d560c8f0f
fs/AllocatedPath: add string_view
constructor
2020-03-13 19:46:29 +01:00
Max Kellermann
189f6eaa6f
fs/Traits: add string_view
2020-03-13 19:43:39 +01:00
Max Kellermann
87f78b9c39
fs/Traits: use {} notation for return values
2020-03-13 19:43:23 +01:00
Max Kellermann
aa722bd8ac
fs/Traits: use auto
2020-03-13 19:43:23 +01:00
Max Kellermann
58c7ec07a4
fs: use using
instead of typedef
2020-03-13 19:43:23 +01:00
Max Kellermann
3796247d6d
util/Stringview: use const_pointer
instead of hard-coding const char *
...
Fixes Windows build failure.
2020-03-13 19:43:23 +01:00
Max Kellermann
332f480ec3
util/UriExtract: uri_get_path() returns std::string_view
2020-03-13 18:54:41 +01:00
Max Kellermann
9a164668f2
util/UriExtract: migrate uri_get_scheme() to std::string_view
2020-03-13 18:51:11 +01:00
Max Kellermann
6876d160cf
util/StringCompare: add more StringView overloads
2020-03-13 18:49:47 +01:00
Max Kellermann
a63d0ee8fc
util/StringView: add method substr()
2020-03-13 18:48:40 +01:00
Max Kellermann
d4135935e4
lib/upnp/Util: remove unused function stringToTokens()
2020-03-13 17:59:07 +01:00
Max Kellermann
569773cc75
lib/upnp/Device: remove UPnPService::clear()
2020-03-13 17:56:29 +01:00
Rosen Penev
a2f5a63bbc
replace stdint.h with cstdint
...
The former is deprecated by C++14. The standard says they are the same:
The header defines all types and macros the same as the C standard library
header<stdint.h>.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 19:04:39 -07:00
Rosen Penev
2db8bcc353
replace stddef.h with cstddef
...
The former is deprecated with C++14. The standard says both are the same:
The contents and meaning of the header<cstddef>are the same as the C
standard library header<stddef.h>,except that it does not declare the type
wchar_t, that it also declares the type byte and its associated
operations (21.2.5), and as noted in 21.2.3 and 21.2.4.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 19:04:38 -07:00
Rosen Penev
c846ee0d1b
replace stdarg.h with cstdarg
...
The former was deprecated in C++14. The Standard says they are the same:
The contents of the header<cstdarg>are the same as the C standard library
header<stdarg.h>, with the following changes: The restrictions that ISO C
places on the second parameter to the va_start macro in header<stdarg.h>
are different in this International Standard. The parameter parmN is the
rightmost parameter in the variable parameter list of the function
definition (the one just before the...).219If the parameter parmN is a
pack expansion (17.5.3) or an entity resulting from a lambda capture
(8.1.5), the program is ill-formed, no diagnostic required. If the
parameter parmN is of a reference type, or of a type that is not
compatible with the type that results when passing an argument for which
there is no parameter, the behavior is undefined.
Also changed va_list to the std:: namespace version, which is the same.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 19:03:12 -07:00
Rosen Penev
69a51e12c9
replace signal.h with csignal.h
...
The former was deprecated with C++14. The standard says they are the same:
The contents of the header<csignal>are the same as the C standard library
header<signal.h>.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 18:56:51 -07:00
Rosen Penev
4b57b7f5a5
replace limits.h with climits
...
The former was deprecated with C++14. The standard says they are the same
with one exception:
The header<climits>defines all macros the same as the C standard library
header<limits.h>.
[Note:The types of the constants defined by macros in<climits>are not
required to match the types to which themacros refer.— end note]
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 16:14:04 -07:00
Rosen Penev
5cd400f578
replace inttypes.h with cinttypes
...
The former has been deprecated by C++14. They are also the same.
From the standard:
The contents and meaning of the header<cinttypes>are the same as the C
standard library header<inttypes.h>, with the following changes:
-The header<cinttypes>includes the header<cstdint>instead of<stdint.h>,and
—if and only if the typeintmax_tdesignates an extended integer type
(6.7.1), the following functionsignatures are added:intmax_t
abs(intmax_t);imaxdiv_t div(intmax_t, intmax_t);which shall have the same
semantics as the function signaturesintmax_t imaxabs(intmax_t)andimaxdiv_t
imaxdiv(intmax_t, intmax_t), respectively.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 16:07:28 -07:00
Rosen Penev
edc4989d9c
change errno.h to cerrno
...
The former is deprecated by C++14. It's also functionally the same.
From the standard:
19.4
The header<cerrno>is described in Table 43. Its contents are the same as
the POSIX header<errno.h>,except that errno shall be defined as a macro.
[Note: The intent is to remain in close alignment with the POSIX
standard.] A separate errno value shall be provided for each thread.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 15:51:16 -07:00
Rosen Penev
2b3d6461e3
remove unused ctype.h header
...
None of the functions in these files come from ctype.h
Also changed one instance of isdigit to the C++ variant.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 15:43:50 -07:00
Rosen Penev
ab9f5d2067
replace assert.h with cassert
...
The former was deprecated with C++14.
According to the C++11 and C++17 standards, both files are identical.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 15:25:38 -07:00
Max Kellermann
82743dfd02
playlist/asx: concatenate multiple CharacterData fragments
...
Similar to c45f113856
2020-03-12 21:07:37 +01:00
Rosen Penev
f00f8b002a
[clang-tidy] use nodiscard
...
Introduced in C++17. It replaces gcc's warn_unused_result.
Found with modernize-use-nodiscard.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 12:59:16 -07:00
Max Kellermann
33694642bd
playlist/asx: add State::TAG
2020-03-12 20:42:16 +01:00
Max Kellermann
c71242d743
playlist/asx: use tag_table to convert element name to TagType
2020-03-12 20:40:18 +01:00
Max Kellermann
2229e86673
client/Expire: cancel the BackgroundCommand before deleting it
...
Fixes assertion failure.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/774
2020-03-12 20:32:08 +01:00
Max Kellermann
f24c274f5c
client/BackgroundCommand: fix typo in comment
2020-03-12 20:32:07 +01:00
Max Kellermann
3824bf66ca
lib/chromaprint/DecoderClient: add assertion
2020-03-12 20:32:07 +01:00
Max Kellermann
d942f874ae
lib/chromaprint/DecoderClient: check ready
in GetCommand()
...
Fixes access to uninitialized memory (`remaining_bytes` isn't
initialized until Ready() is called) and fixes spurious
`getfingerprint` failures.
2020-03-12 20:31:46 +01:00
Max Kellermann
01632d37ef
Merge branch 'v0.21.x'
2020-03-12 08:11:08 +01:00
Max Kellermann
c45f113856
playlist/xspf: concatenate multiple CharacterData fragments
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/781
2020-03-12 08:02:58 +01:00
Max Kellermann
e0a8fd398c
playlist/xspf: add State::TAG
2020-03-12 08:00:54 +01:00
Max Kellermann
3e97058151
playlist/xspf: move location.empty() check to _start_element()
2020-03-11 20:54:53 +01:00
Max Kellermann
51b1dd8672
playlist/xspf: use tag_table to convert element name to TagType
2020-03-11 20:51:47 +01:00
Max Kellermann
98a7d8da6c
playlist/xspf: use C++11 initializer
2020-03-11 20:51:10 +01:00
Max Kellermann
acb29f792f
tag/Mask: fix yet another typo, this time in Unset()
...
Similar to commits e8f2f98048
and
ff1ff1e54a
Closes https://github.com/MusicPlayerDaemon/MPD/issues/783
2020-03-11 20:34:02 +01:00
Max Kellermann
8d34a1cfc6
archive/iso9660: skip empty filenames
...
Aparently, libcdio sometimes returns empty filenames, causing MPD
crashes. This shouldn't really happen, and I consider this a libcdio
bug - but if it happens, people blame MPD, so let's add a check.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/776
2020-03-07 09:30:56 +01:00
Max Kellermann
73a1f078a6
archive/iso9660: use IsSpecialFilename()
2020-03-07 09:30:56 +01:00
Max Kellermann
b7ce452308
fs/Traits: add IsSpecialFilename()
...
Merge some duplicate code in a central library.
2020-03-07 09:30:56 +01:00
Thomas Klausner
7a68b1e71f
Adapt SolarisOutputPlugin.cxx to be usable on NetBSD.
2020-02-29 10:05:29 +01:00
Thomas Klausner
d5468dfe89
Add missing header.
...
Fixes
../src/time/ISO8601.cxx:67:24: error: use of undeclared identifier 'strtoul'
unsigned long value = strtoul(s, &endptr, 10);
^
../src/time/ISO8601.cxx:77:14: error: use of undeclared identifier 'strtoul'
minutes = strtoul(s, &endptr, 10);
^
on NetBSD with clang 9.0.0.
2020-02-29 10:04:54 +01:00
John Regan
976372ff63
gme: check for empty metadata strings instead of nullptr
...
Using libgme 0.6.2 on macOS, it appears that gme_info_t strings can be
empty, which creates weird track titles: (001/050)
This adds an additional check for an empty string.
2020-02-25 20:12:08 +01:00
Max Kellermann
c977d646c7
Merge remote-tracking branches 'neheb/j', 'neheb/f', 'neheb/qwe' and 'neheb/hgf'
2020-02-20 16:58:17 +01:00
Rosen Penev
ac50bb5d2b
[clang-tidy] remove needless std::move
...
Found with performance-move-const-arg
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-02-20 16:47:34 +01:00
Max Kellermann
85e33f7d60
lib/dbus/Udisks2: make path
non-const to allow moving from it
2020-02-20 16:47:32 +01:00
Max Kellermann
7646866a32
neighbor/smbclient: make iterators non-const to enable the std::move()
2020-02-20 16:47:32 +01:00
Max Kellermann
d072b3cb17
storage/smbclient: remove misplaced .c_str() call
2020-02-20 16:47:32 +01:00
Max Kellermann
646fef108a
storage/composite: make variable non-const to enable the std::move()
2020-02-20 16:41:38 +01:00
Max Kellermann
d1cc73775f
Instance: flush input cache on SIGHUP
2020-02-17 15:23:05 +01:00
Max Kellermann
29d05cdb8e
unix/SignalHandlers: pass Instance to ...Init()
2020-02-17 15:23:03 +01:00
Rosen Penev
351a4a80d2
[clang-tidy] use using instead of typedef
...
Found with modernize-use-using
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-02-16 19:22:32 -08:00
Rosen Penev
87f7b0f0bb
[clang-tidy] use emplace_back
...
Found with hicpp-use-emplace
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-02-16 19:21:55 -08:00