Commit Graph

14926 Commits

Author SHA1 Message Date
Max Kellermann
f31ae7c556 util/RingBuffer: replacement for boost::lockfree::spsc_queue 2023-01-23 13:44:54 +01:00
Max Kellermann
5728c514d1 output/wasapi: use std::hardware_destructive_interference_size 2023-01-23 13:44:53 +01:00
Max Kellermann
debac0dfd4 win32/ComWorker: use std::queue/Mutex/Cond instead of boost::lockfree::spsc_queue/WinEvent 2023-01-23 13:25:07 +01:00
Max Kellermann
80b1f49af7 lib/dbus/AppendIter: add missing include 2023-01-22 12:29:54 +01:00
Max Kellermann
868958e159 util/IntrusiveHashSet: fix find_if() concept 2023-01-22 12:25:55 +01:00
Max Kellermann
52af03a5a6 util/IntrusiveHashSet: implement remove_and_dispose_if() with constant_time_size 2023-01-22 12:24:50 +01:00
Max Kellermann
7475e971bc util/IntrusiveList: remove_and_dispose_if() returns the number of removed items 2023-01-22 12:24:43 +01:00
Max Kellermann
c65b1fee8d util/IntrusiveHashSet: check key equivalence in remove_and_dispose_if() 2023-01-22 12:24:41 +01:00
Max Kellermann
e2abade6aa util/IntrusiveList: add postfix operator++ 2023-01-22 12:24:33 +01:00
Max Kellermann
57673136d8 util/IntrusiveHashSet: add method expire_find_if() 2023-01-22 12:24:30 +01:00
Max Kellermann
49e122a81d util/IntrusiveHashSet: add method remove_and_dispose_if(key) 2023-01-22 12:24:23 +01:00
Max Kellermann
74976d3199 event: make FineTimerEvent optional
Several applications don't need it, so let's eliminate the code from
the executable.
2023-01-22 12:21:46 +01:00
Max Kellermann
a750e4afa7 event/Loop: move code to GetEarlierTimeout() 2023-01-22 12:19:07 +01:00
Max Kellermann
c122e990a3 Merge branch 'master' of https://github.com/faceless2/MPD 2023-01-17 19:03:49 +01:00
Max Kellermann
b1422fbda4 release v0.23.12
-----BEGIN PGP SIGNATURE-----
 
 iQJBBAABCgArFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmPG4OcNHG1heEBibGFy
 Zy5kZQAKCRAjbopYxttFElGQD/4lXFixr2fJuAWFYyFT4ebr2w7sPyhXwjlt5uCL
 HTaMxTgQbhMmkHbGEO96UbF7gROGfq+dyvYTEmjWcVPTr/US3M8/mjT9T/DCLj6+
 kF7rZM5ft6npqVxqikg/TQcUgoiSsgfI7dEK/vcXELPyx78bCaq0M0sd2GZvwiiM
 vK9cxxDJ/RkF2dtfXRfGTJlihgQxaiuBZx8Bi3wJjbjvi/Lg85cu3iot9zFy5iDN
 gNzC39dnPYv261lAT/LLNpzLYQzIFE5ul+8ucRNPo+mMS/odSPRdL9XYFDtarsqP
 3Va83DChg7S6/GWfDeW81mQYPDuZ+1rPqbV5zEGimPsDWP9RugzPpZiFJlZrh8w7
 MJp66RYxUWQpracRZIW4zMRiSzGSI3OXbvhx6qBmsn1CuQ19TkovWuRleD4lpfFv
 dFzKHrdatJivM3xvq6CSg8ws+Q6f/j5sw1gzfvOofPlpybtvIrCvlvw78sKLW5n1
 Ecwc+xN38bIVL3E2Ae6zeYQwArpB4+gKT3Wb+r3bjXz7YQYpETI3IbX0vixbl8pP
 9O4ZKot/khOCaQBiZ5hHmiDmF5kxofLnJE4qgGX/c87ZaMUsu7hoKzksy9v7Z9wj
 PNTshhWk1WrSwM1JnVjD5Ahz+Oe43UsKsGZ8Kturbuu+61uTX4QcmYpbaNilGnwk
 J0cLyw==
 =MW7q
 -----END PGP SIGNATURE-----

Merge tag 'v0.23.12'

release v0.23.12
2023-01-17 18:58:04 +01:00
Max Kellermann
b3897df682 decoder/mad: add assert() 2023-01-17 18:53:18 +01:00
Max Kellermann
3cacb56bb7 fs/StandardDirectory: don't fall back to getpwuid() without $HOME
If the environment variable $HOME does not exist, don't attempt to
obtain it from /etc/passwd; without $HOME, the calling process
indicates that it does not wish MPD to access the home directory.

This also prevents MPD from attempting to load
`/root/.config/mpd/mpd.conf` if MPD got started as global systemd
service.  Reading from there makes no sense, only /etc/mpd.conf shall
be used then.

This piece of code was initially added by commit 5d85792178.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1687
2023-01-17 18:51:49 +01:00
Max Kellermann
15a1973e28 decoder/mad: fix integer underflow with very small files
When drop_start_samples and drop_end_samples overlap and are greater
than the actual number of samples, the `num_samples` calculation in
SubmitPCM() could underflow.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1712
2023-01-17 17:41:37 +01:00
Max Kellermann
ad7d47a8ba output/PipeWire: use PW_KEY_TARGET_OBJECT with PipeWire 0.3.64
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1721
2023-01-17 11:50:09 +01:00
Max Kellermann
0948c607b6 lib/curl/meson.build: require CURL 7.55.0 or later
For CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (commit 4efd0a9f77).
2023-01-16 19:42:48 +01:00
Mike Bremford
b96e44b362 Unlike album, artist and albumartist, title and composer were not used as a fallback
when titlesort and composersort were specified but unavailable - this patch fixes that.
2023-01-09 18:15:44 +00:00
Max Kellermann
8a7b7dffec Merge branch 'v0.23.x' 2023-01-06 08:12:38 +01:00
latex
7774e78864 openmpt: add at_end option 2023-01-06 03:18:36 +01:00
Max Kellermann
e1d641f684 lib/curl/Easy: drop deprecated CURLOPT_HTTPPOST wrapper 2023-01-02 14:29:17 +01:00
Max Kellermann
4efd0a9f77 lib/curl/Easy: use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
CURLINFO_CONTENT_LENGTH_DOWNLOAD is deprecated and is ugly because it
uses floating point.
2023-01-02 14:28:42 +01:00
Max Kellermann
f6f8751332 io/FileReader: add missing include for uint64_t 2023-01-02 14:27:47 +01:00
gd
abb28593ce TagBuilder::RemoveType: added missing tag pool lock before call to tag_pool_put_item 2022-12-29 08:43:10 +01:00
Max Kellermann
d7de8b1453 Merge branch 'iss-1546' of https://github.com/sp1ff/MPD 2022-12-29 08:37:25 +01:00
Mike Bremford
6adff85fd6 Added "searchcount" command, a case-insensitive "count"
The `count` command isn't case-insensitive.  This adds `searchcount`
which is a case-insensitive version of `count`.
2022-12-18 08:29:14 +01:00
Max Kellermann
756621c6e4 neighbor/meson.build: add missing dependency on libfmt 2022-12-01 15:57:28 +01:00
Max Kellermann
7e2ab1fd53 lib/yajl/meson.build: add missing dependency on libfmt 2022-12-01 15:50:34 +01:00
Max Kellermann
c7a0597fe7 util/Intrusive*: add C++20 concept checks 2022-12-01 15:43:51 +01:00
Max Kellermann
253d551684 lib/dbus/meson.build: add missing dependency on libfmt 2022-12-01 15:43:51 +01:00
Max Kellermann
00b7535cf1 util/Concepts: compatibility wrapper for std::predicate 2022-12-01 15:11:27 +01:00
Max Kellermann
5945877313 util/IntrusiveHashSet: add missing Cast()/ToHook() functions to IntrusiveHashSetMemberHookTraits 2022-12-01 15:10:42 +01:00
Max Kellermann
fe3e1d31bf util/IntrusiveHashSet: remove unused type alias "ListHookTraits" 2022-12-01 15:10:38 +01:00
Max Kellermann
65f1cafa43 util/IntrusiveHashSet: add method find_if() 2022-12-01 15:10:32 +01:00
Max Kellermann
d9b1f2fefa net/SocketAddress: add method HasPort() 2022-12-01 15:10:25 +01:00
Max Kellermann
e3ef0929f1 util/IntrusiveHashSet: add const overloads 2022-12-01 15:10:20 +01:00
Max Kellermann
8860962e09 util/IntrusiveHashSet: make several methods const 2022-12-01 15:10:13 +01:00
Max Kellermann
f13b8f669d util/IntrusiveList: simplify ToHook() overload with const_cast 2022-12-01 15:10:09 +01:00
Đoàn Trần Công Danh
e4b055eb6d
v0.23.x: RemoteTagCache: add missing include
Fix build with Boost 1.81.0. `<array>` was included by one of those boost headers,
however, it's no longer included as of Boost 1.81.0.

`master` doesn't use `std::array` in this file.

While we're at it, add all necessary inclusion files.
2022-12-01 08:29:23 +07:00
Max Kellermann
fa58db798b lib/fmt/RuntimeError: new library
Replacing FormatRuntimeError().
2022-11-29 14:10:34 +01:00
Max Kellermann
45b13fc2a6 util/OptionParser: move to cmdline/
This library will depend on libfmt, and libutil shouldn't depend on
any library.
2022-11-29 11:32:16 +01:00
Max Kellermann
cf3f3a7750 lib/pulse/Error: use std::system_error 2022-11-29 09:56:47 +01:00
Max Kellermann
e455b93fac lib/nfs/Connection: use class NfsClientError 2022-11-29 09:45:25 +01:00
Max Kellermann
cf762f2a9d lib/icu/Error: std::system_error with UErrorCode 2022-11-29 09:31:48 +01:00
Max Kellermann
8ad0d919b1 lib/icuConverter, ...: use FmtBuffer() and FmtErrno() 2022-11-29 09:09:11 +01:00
Max Kellermann
4b5c8d1f3e mixer/meson.build: split libmixer_api from libmixer_glue 2022-11-29 09:09:11 +01:00
Max Kellermann
eb6c649d47 lib/fmt/SystemError: add concept check to work around ambiguous overloads 2022-11-29 09:09:10 +01:00
Max Kellermann
f2b025ca6c lib/alsa/meson.build: add dependency on libpcm_basic
For PcmExport::CalcInputSampleRate().
2022-11-29 09:09:10 +01:00
Max Kellermann
4328a6f77d lib/fmt/ToBuffer: fix FMT_VERSION check 2022-11-29 09:09:10 +01:00
Max Kellermann
97a6851525 lib/curl/Error: std::system_error with CURLcode 2022-11-29 06:33:32 +01:00
Max Kellermann
846d7dc317 lib/curl/Error: rename header to HttpStatusError.hxx 2022-11-29 06:33:32 +01:00
Max Kellermann
f62d61f088 lib/fmt/ToBuffer: add missing template parameters 2022-11-29 06:33:32 +01:00
Max Kellermann
1f33ac3e98 lib/upnp/Error: wrap libupnp errors in std::system_error 2022-11-29 00:32:48 +01:00
Max Kellermann
ed08a4bd58 lib/fmt/ToBuffer: use iterator instead of pointer 2022-11-28 23:10:25 +01:00
Max Kellermann
40d0828ccd util/StringBuffer: add non-const iterator 2022-11-28 23:10:01 +01:00
Max Kellermann
66029c405f system/FmtError: move to lib/fmt/ 2022-11-28 23:09:27 +01:00
Max Kellermann
7d8c076e06 lib/fmt/ToBuffer: include fmt/format.h on libfmt 7 to fix linker error 2022-11-28 23:03:52 +01:00
Max Kellermann
05dcac55f9 lib/fmt: add meson.build 2022-11-28 22:18:46 +01:00
Max Kellermann
2aa42d2647 lib/fmt/ToBuffer: new library 2022-11-28 22:18:46 +01:00
Max Kellermann
dc8e0c9c5c archive/zzip: add missing include 2022-11-28 22:18:45 +01:00
Max Kellermann
96ae659fdf system/FmtError: new library
Replaces the Format*() functions in system/Error.hxx.
2022-11-28 21:56:12 +01:00
Max Kellermann
124e75c286 thread/Thread, fs: add missing WIN32 includes 2022-11-28 21:56:11 +01:00
Max Kellermann
25da798e7a system/Clock: compile only on Windows 2022-11-28 21:16:49 +01:00
Max Kellermann
88d5347d94 Log, client/Response, io/BufferedOutputStream: remove unnecessary libfmt include 2022-11-28 20:44:48 +01:00
Max Kellermann
7f3868727b Log, client/Response, io/BufferedOutputStream: drop support for libfmt < 7
Remove some compatibility code.
2022-11-28 20:17:16 +01:00
Max Kellermann
3103e8d719 fs/StandardDirectory: update #ifdef for GetEnvPath()
Fixes regression from a38eabc8bc
2022-11-28 20:17:16 +01:00
Max Kellermann
cfbd751742 fs/StandardDirectory: pass Path to IsValidDir() 2022-11-28 18:48:10 +01:00
Max Kellermann
a38eabc8bc fs/StandardDirectory: move code to GetExistingEnvDirectory() 2022-11-28 18:43:45 +01:00
Max Kellermann
9669ea6a12 fs/StandardDirectory: add noexcept 2022-11-28 18:27:06 +01:00
Max Kellermann
863a28daa3 fs/StandardDirectory: eliminate global variable "home_prefix" 2022-11-28 18:27:06 +01:00
Max Kellermann
ea5bcfed8b fs/StandardDirectory: pass std::string_view to ParseConfigLine() 2022-11-28 17:11:17 +01:00
Max Kellermann
f6f3c4c25b fs/StandardDirectory: pass const string to ParseConfigLine() 2022-11-28 17:07:29 +01:00
Max Kellermann
8fe29f5728 release v0.23.11
-----BEGIN PGP SIGNATURE-----
 
 iQJBBAABCgArFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmOE2gINHG1heEBibGFy
 Zy5kZQAKCRAjbopYxttFEiugD/9OKEBR9tfrJvtVGuO2INtaMeAzlZ9swFYCkphF
 i2R7H9/9E0AvtgyFi/6EDNgFCBbnUzSIGbtdc78EwHE6GxeK/Q9G1fo9AC+6I8Ww
 2ScEV9NKIMGTbsRvoomKnGZWpvNTpadPlLa02bckXpKK3wQUPhLb8RAH3newZ0RC
 OXs+mzSRReRKpjUBxZsI+6f+aajM6/PoiOmBbrNbYbsSlkpKtLeW8ptkQxPME12B
 QD9e7yf9ZndYfoHJdmmPxfvIGIEDATCs8MzY8tFUYkhdbEk0C0aRZQTODQS3DATp
 0wrmlJzmceiN2nhKjthg1bvC+jobPywIuDZdrEuyFumN/EZxldKAUCezduV+Dohm
 UPkQp5yiSTZRZVYQMEOSW6cMndC7URFrtn643+jV7SGkTmmV6nVOyg4e9GR1BakT
 rY0nZGr7dwEInODkA5lXMhph3u8aZa2Mfo5B8m2aloGVHYOX1t3bH07ym5oJiviq
 eiQx/bMpaS6ECCSnmHPGDl0NHHWDiPGv96EyPO2N9oeWiNuZz/Fla0N99Mi/JbVI
 EpSHF89F+bfiw5qIeet93ZrXjwQjMuC6zofZ1jbVFek2eKszCZSNdx233VLz170G
 edyN5Vxy3r24YBy/nrZVXPRxsj65KOxF1TZ9SzHKmfnuU45a+JZjZuWz5yedPn2/
 3fy7oA==
 =eLEd
 -----END PGP SIGNATURE-----

Merge tag 'v0.23.11'

release v0.23.11
2022-11-28 17:00:38 +01:00
Max Kellermann
a8b0c55818 input/curl: make proxy verify setting optional
These settings do not work if CURL was compiled with
CURL_DISABLE_PROXY, and cause error "An unknown option was passed in
to libcurl".

Fixes regression by commit 7ab0dfc8ce
2022-11-28 16:14:01 +01:00
Max Kellermann
e9f6a3482c db/Configured: add default "cache_directory" setting 2022-11-28 14:24:52 +01:00
Max Kellermann
5d2e80f188 db/Configured: use GetAppCacheDir() instead of GetUserCacheDir() 2022-11-28 14:20:15 +01:00
Max Kellermann
cfd4d5b13e StateFileConfig: use GetAppCacheDir() instead of GetUserCacheDir() 2022-11-28 14:20:14 +01:00
Max Kellermann
06514aec63 fs/StandardDirectory: add GetAppCacheDir() 2022-11-28 14:19:30 +01:00
Max Kellermann
4ded1ae67b fs/FileSystem: add CreateDirectoryNoThrow() 2022-11-28 14:19:08 +01:00
Max Kellermann
1da974e3fa fs/StandardDirectory: use PACKAGE_NAME from version.h 2022-11-28 14:05:34 +01:00
Max Kellermann
94f06f0946 fs/StandardDirectory: use mode=0777 in mkdir() call
Of course, mode=0700 is more secure, but allowing other users access
to new directories is a choice the user should make via umask().  If
the user-chosen umask allows everybody access, MPD should probably
respect that.
2022-11-28 14:04:47 +01:00
Max Kellermann
d9eec8a455 fs/StandardDirectory: do not use $RUNTIME_DIRECTORY on Android
This is systemd specific, and Android doesn't have systemd.
2022-11-28 10:44:50 +01:00
Max Kellermann
eaecbcafb2 PlaylistFile: disallow backslash in playlist names on Windows
The function spl_valid_name() should verify playlist names and prevent
path traversal, but it failed to do so on Windows, because it forgot
to check for backslashes.

This buggy piece of code was already present when stored playlists
were initially implemented in 2006 by commit 08003904d7, and
even during the many rounds of code refactoring, nobody ever bothered
to verify it.  D'oh!

(Thanks, Paul Arzelier)
2022-11-28 09:53:49 +01:00
Max Kellermann
73b5d0a9b9 system/Error: truncate the snprintf() return value
snprintf() does not return the (truncated) length actually written,
but the length that would be needed if the buffer were large enough.
This API usage mistake in FormatLastError() can lead to overflow of
the stack buffer, crashing the process (Windows only).

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1676
2022-11-28 09:42:37 +01:00
Michael Herstine
1adc2c0c51 playlist_load_into_queue: log on failure to load song.
Log at level error when failing to load a song. Limit the number
of log messages produced to avoid flooding the log file when attempting
to load a large, broken playlist.

Closes #1546
2022-11-26 08:28:10 -08:00
Max Kellermann
a3b32819b1 event/Loop: split InjectBreak() from Break() 2022-11-22 22:30:12 +01:00
Max Kellermann
a57cf443ed event/Loop: set "again" in AddDefer() only if HAVE_THREADED_EVENT_LOOP
Only AddDefer()/AddIdle() calls from within DeferEvents are relevant.
2022-11-22 21:40:52 +01:00
Max Kellermann
d0d095cbcd util/IntrusiveHashSet: rename "slot" to "bucket" 2022-11-22 21:40:52 +01:00
Max Kellermann
3239fce5c1 util/IntrusiveHashSet: add remove_and_dispose_if() 2022-11-22 21:40:11 +01:00
Max Kellermann
200b770104 util/IntrusiveHashSet: add for_each() 2022-11-22 21:40:04 +01:00
Max Kellermann
3aa959eda7 util/IntrusiveHashSet: add erase_and_dispose() 2022-11-22 21:39:40 +01:00
Max Kellermann
72c047f4f0 util/IntrusiveHashSet: add hash_function(), key_eq() 2022-11-21 09:10:44 +01:00
Max Kellermann
c71958af4b input/async: pass std::span to AppendToBuffer() 2022-11-17 06:15:58 +01:00
Max Kellermann
ce13d82657 input/async: use std::byte instead of uint8_t 2022-11-17 06:15:19 +01:00
Max Kellermann
73dc8ff6bd lib/nfs/FileReader: pass std::span to OnNfsFileRead() 2022-11-17 06:15:16 +01:00
Max Kellermann
3278ad2ed8 storage/State: remove obsolete Boost compiler warning workaround 2022-11-17 05:32:29 +01:00
Max Kellermann
2e453ef58a storage/State: use std::hash() instead of boost::crc
Also eliminate the useless std::set.
2022-11-17 05:28:53 +01:00
Max Kellermann
a5d04be21f storage/State: add noexcept 2022-11-17 05:19:11 +01:00
Max Kellermann
9467df526c song/StringFilter: add enum Position
Replaces two conflicting bools.
2022-11-15 21:55:55 +01:00
Max Kellermann
9ca75589c0 song/StringFilter: simplify GetOperator() 2022-11-15 21:55:55 +01:00
Max Kellermann
c158abe87c lib/icu/Compare: use StringIsEqualIgnoreCase() 2022-11-15 21:13:01 +01:00
Max Kellermann
53530bd1d5 lib/icu/Canonicalize: convert all punctuation to ASCII
To make tag matching easier.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1669
2022-11-15 21:04:16 +01:00
Max Kellermann
d7f545721b lib/icu/Canonicalize: use unorm2_normalize() instead of u_strFoldCase()
unorm2_normalize() can case-fold as well, plus it applies Unicode
normalization which MPD should do for proper string comparisons.
2022-11-15 20:53:29 +01:00
Max Kellermann
8b72cb64b2 lib/icu/CaseFold: rename to IcuCanonicalize() and add flag parameter
Prepare for adding more transformations.
2022-11-15 20:53:04 +01:00
Max Kellermann
852df2239e lib/icu/Transliterator: pass std::basic_string_view<UChar> to constructor 2022-11-15 20:53:03 +01:00
Max Kellermann
264b3f8543 lib/icu/Collate: clear the global variable in IcuCollateFinish()
To allow repeated init/finish cycles.
2022-11-15 20:48:50 +01:00
Max Kellermann
ac2bce8b7b lib/icu/Transliterator: add missing include 2022-11-15 17:07:54 +01:00
Max Kellermann
9f3faaf3c4 lib/icu/Transliterator: wrapper for UTransliterator 2022-11-15 01:09:27 +01:00
Max Kellermann
7be39e07e1 lib/icu/Normalize: wrapper for unorm2_normalize() 2022-11-15 00:49:25 +01:00
Max Kellermann
154fb4317f lib/icu/CaseFold: move low-level wrapper to FoldCase.cxx 2022-11-15 00:46:58 +01:00
Max Kellermann
aad5210820 lib/icu/CaseFold: use ToStringView() 2022-11-15 00:36:47 +01:00
Max Kellermann
7c4fca0ae1 util/SpanCast: add ToStringView() template 2022-11-15 00:36:28 +01:00
Max Kellermann
1a6ec716ef lib/icu/Converter: add noexcept 2022-11-15 00:28:41 +01:00
Max Kellermann
51769c40d8 util/IntrusiveSortedList: new class 2022-11-13 09:08:36 +01:00
Max Kellermann
85ab89a08b util/IntrusiveHashSet: add missing typename (to make clang happy) 2022-11-13 08:40:53 +01:00
Max Kellermann
a43062c575 RemoteTagCache: use IntrusiveHashSet instead of boost::intrusive::unordered_set 2022-11-13 08:39:04 +01:00
Max Kellermann
c943e27d51 util/IntrusiveHashSet: new class
Incomplete draft implementation, just enough methods for current
needs.
2022-11-13 08:38:53 +01:00
Max Kellermann
fb5d77158a util/IntrusiveList: add enum LinkMode
Compile-time code simplification.
2022-11-13 08:15:47 +01:00
Max Kellermann
98c24d1a32 Merge branch 'v0.23.x' 2022-11-12 12:29:21 +01:00
Max Kellermann
c2d0f35e7a storage/meson.build: move StorageState.cxx to "mpd" executable
Fixes spurious linker errors.
2022-11-12 12:24:48 +01:00
Max Kellermann
ab99a57997 test/meson.build: reduce test_translate_song. dependencies 2022-11-12 12:17:35 +01:00
Max Kellermann
f1dc1af85d util/IntrusiveList: use const_cast to eliminate duplicate HookTraits functions
I hate const_cast, but what I hate more is duplicate code.  Sigh.
2022-11-12 08:45:24 +01:00
Max Kellermann
7b3d870516 util/IntrusiveForwardList: remove unnecessary initializer from hook 2022-11-11 21:14:52 +01:00
Max Kellermann
970ccf043b util/SortList: enable the std::predicate kludge for macOS as well
Sigh.
2022-11-11 19:30:58 +01:00
Max Kellermann
29143dec87 util/SortList: kludge for Android NDK compatibility 2022-11-11 19:17:13 +01:00
Max Kellermann
0fd4c14043 db/simple/Directory: re-add Song.hxx to fix clang build failure 2022-11-11 19:13:01 +01:00
Max Kellermann
81e1f87e8c db/simple/{Directory,Song}: use IntrusiveList instead of boost::intrusive::list 2022-11-11 19:08:22 +01:00
Max Kellermann
a448d04d46 util/SortList: library which sorts linked lists 2022-11-11 19:03:39 +01:00
Max Kellermann
60e640af5a util/IntrusiveList: add single-item splice() overload 2022-11-11 18:29:50 +01:00
Max Kellermann
df15c418c7 util/IntrusiveList: fix swap() implementation if second list is empty 2022-11-11 18:29:50 +01:00
Max Kellermann
04ab8ae27b util/IntrusiveList: add type aliases value_type, pointer, reference 2022-11-11 17:15:20 +01:00
Max Kellermann
b4a64af15e util/IntrusiveList: constant_time_size is a template argument, not a variable 2022-11-11 17:15:16 +01:00
Max Kellermann
838c057231 util/IntrusiveList: use auto
Fixes typos in the const_iterator return types, and fixes returning
references to stack values.
2022-11-11 16:33:49 +01:00
Max Kellermann
af544bb16f util/IntrusiveList: fix typos 2022-11-11 10:11:42 +01:00
Max Kellermann
84fd401d21 util/IntrusiveList: add method splice() 2022-11-11 10:05:20 +01:00
Max Kellermann
b5d224496f util/IntrusiveList: iterators are bidirectional 2022-11-11 09:20:09 +01:00
Max Kellermann
78d8b5f73c util/OptionalCounter: add operator+= and operator-= 2022-11-10 16:55:04 +01:00
Max Kellermann
5670d98c54 util/IntrusiveList: move code to IntrusiveListNode::Connect() 2022-11-10 16:52:34 +01:00
gd
440c676be2 EventLoop: added assert(IsInside()) in Insert(CoarseTimerEvent &) and AddIdle(DeferEvent &)
Like AddDefer(DeferEvent &), Insert(FineTimerEvent &), these methods don't lock to update EventLoop::again
2022-11-10 15:35:14 +01:00
Max Kellermann
e820222c5b lib/nfs/Manager: use IntrusiveForwardList instead of boost::intrusive::slist 2022-11-10 12:08:23 +01:00
Max Kellermann
1786eef8e6 util/IntrusiveForwardList: new class 2022-11-10 12:07:59 +01:00
Max Kellermann
5f2fa1dbe3 RemoteTagCache: use IntrusiveList instead of boost::intrusive::list 2022-11-10 12:06:00 +01:00
Max Kellermann
77d257de27 input/cache: use IntrusiveList instead of boost::intrusive::list 2022-11-10 12:05:09 +01:00
Max Kellermann
89d950e9a7 output/httpd: use IntrusiveList instead of boost::intrusive::list 2022-11-10 12:02:54 +01:00
Max Kellermann
4041d87c34 lib/nfs/Cancellable: use IntrusiveList instead of boost::intrusive::list 2022-11-10 12:01:11 +01:00
Max Kellermann
b3c5e6a3cc event/Loop: use IntrusiveList instead of boost::intrusive::list 2022-11-10 11:57:57 +01:00
Max Kellermann
1da8faa285 client/List: use IntrusiveList instead of boost::intrusive::list 2022-11-10 11:08:11 +01:00
Max Kellermann
988f5d1b5d util/StringSplit: add SplitWhile() 2022-11-09 19:23:19 +01:00
Max Kellermann
3ab3d5555e util/StringSplit: reimplement without std::distance()
Avoid including <iterator>.
2022-11-09 19:23:10 +01:00
Max Kellermann
2e5d46c399 util/StringSplit: add constexpr 2022-11-09 19:23:05 +01:00
Max Kellermann
7600ad7cac util/StringSplit: add Partition() 2022-11-09 19:22:54 +01:00
Max Kellermann
485ad583a0 util/CharUtil: add IsLowerAlphaNumericASCII() 2022-11-09 19:21:43 +01:00
Max Kellermann
bbc82a9892 io/FileDescriptor, net/SocketDescriptor: make lots of methods "const"
Only the file descriptor value itself is const, but the file itself
may be readable/writable.
2022-11-09 19:19:20 +01:00
Max Kellermann
69596106d3 io/FileDescriptor: add pread() wrapper 2022-11-09 19:18:41 +01:00
Max Kellermann
a0a11be79b Merge branch 'v0.23.x' 2022-11-08 14:36:09 +01:00
Max Kellermann
32bddfabea archive/plugins/meson.build: do not generate empty library
If no archive library was found, return from the "plugins" directory
without creating "libarchive_plugins.a".  Empty static libraries are
unsupported on some operating systems such as macOS.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1650
2022-11-03 20:36:00 +01:00
gd
a1359f2388 TagBuilder: skip unnecessary preperation if there are no items to add 2022-11-01 17:55:42 +02:00
gd
ab687481cc Tag: skip tag pool lock if there are no items 2022-11-01 15:37:54 +02:00
Max Kellermann
0efbd4df8b lib/gcrypt: use std::size_t 2022-10-29 07:31:25 +02:00
gd
caaa050e60 curl input plugin - added config options: verbose, low_speed_limit, low_speed_time, tcp_keepalive, tcp_keepidle, tcp_keepintvl 2022-10-22 13:49:58 +03:00
gd
160f793e2a Added connect_timeout configuration to curl input plugin 2022-10-16 12:13:51 +03:00
Max Kellermann
1429d6bfb9 playlist/cue/Parser: use Split() 2022-10-15 08:33:51 +02:00
Max Kellermann
ced6a5ae07 playlist/cue/Parser: remove always-failing assert()
Not the assert() here fails, but the illegal src[-1] call.  Yet
another regression from commit 21e4c25e61
2022-10-15 08:32:37 +02:00
Max Kellermann
d6d0f78e93 release v0.23.10
-----BEGIN PGP SIGNATURE-----
 
 iQJBBAABCgArFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmNJ2e0NHG1heEBibGFy
 Zy5kZQAKCRAjbopYxttFEjBYEACk4QtVnD52sGtz0CwThFYzekvkZHOBcP2fYOH7
 rVcQaNmV7Fpnv+iz+k7zrqhs/A8FgQq6KUNpUn3gzxae4KsA7i1yEpopIqfzRh71
 eVrjTGijMirddehsxKbkjZ1TZy5S+SkZ+Bu965qzXUZuIrErKm4m5xqkIxXBHMEc
 twK9BSCqlTT2vpND5cmX90T/NBDgZd3uQxQP2ohWjVXvg9ou2gtns18ZdYUVRTym
 rLqRLfx1rG1lS8hzKqUqt9YxbWSD606T4giC2vYg2+2OFA9VFh3TNCSaFgWEJMZe
 ou6iaX+aSoCP+H6nktxfYravwdmHvBseRtrOouxPd8Br2k1eSQGXEVlZVTKrpBME
 OZnncEGqN27GggYH1RyVZ6showJ7G05HOhGFDDs8ABR0EbAbNkGvhrjl8cGXONYH
 ScTBbvqkTrhRMOOSmiAp7X1eLJ4QICAfhCV85YzSV93u69egO1MQLYzVYUurOOyt
 TuT+XbUD+Irk3DrHvhxs/IE+ciIvilFsvCmeNjCAyH4ZPvvHt/AIskQNyF3Jj720
 XKjtq6rMF9bizut/kboPgsVQoFbnj7ncCaIZ90h27obeqqiXajTx7ixJldvwDbrp
 yKQY6xDdm7DZChqYF0KKWWzLt2BoAzqVPW3zgRfJRqb9HtQ+ZVJuljvV8bBVFKN1
 zIA4Nw==
 =GQl1
 -----END PGP SIGNATURE-----

Merge tag 'v0.23.10'

release v0.23.10
2022-10-14 23:56:33 +02:00
Max Kellermann
76b25a1377 output/alsa: add nullptr check for snd_pcm_name() return value
It is not explicitly documented whether snd_pcm_name() is allowed to
return NULL:
https://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m.html#ga5031edc0422df8db1f70af056a12dd77

But apparently this is legal:
0222f45d11/src/pcm/pcm.c (L2761-L2762)

That's ... surprising!

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1645
2022-10-14 23:14:30 +02:00
Max Kellermann
ccc3ee663b java/File: remove assertions to work around -Wtautological-pointer-compare 2022-10-14 23:00:35 +02:00
Max Kellermann
0626661764 android/Context: fix typo in assert() variable name
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1644
2022-10-14 22:59:39 +02:00
jcorporation
2937a55582 add precondition for mount/unmount in commands response 2022-10-07 13:59:54 +02:00
gd
cd093a6014 Added new optional argument MODE to command 'save' to be able to append or replace an existing playlist 2022-10-02 11:19:36 +03:00
Max Kellermann
3e25916b37 time/Parser: remove unused library 2022-09-30 18:17:03 +02:00
Max Kellermann
5f9438dae6 storage/curl: include cleanup 2022-09-30 18:16:46 +02:00
BurroCargado
99e65c58ce storage/curl: make timestamp parsing more robust
According to the latest WebDAV specification (RFC4918),
timestamp string in the getlastmodified property is formatted
as rfc1123-date, such as "Sun, 06 Nov 1994 08:49:37 GMT".
However, to process responses from servers in the older style
format specified in RFC2518, timestamps in the HTTP-date format
had better be accepted.

As described in the libcurl api documentation, curl_getdate() can handle
timestamp strings in HTTP-date formats, including rfc1123-date.

https://www.rfc-editor.org/rfc/rfc4918#section-15.7
https://www.rfc-editor.org/rfc/rfc2518.html#section-13.7
https://curl.se/libcurl/c/curl_getdate.html
2022-09-29 18:19:30 +02:00
BurroCargado
df71b07e9d storage/curl: fix can't get timestamp of remote file 2022-09-29 18:19:03 +02:00
Max Kellermann
2694195215 storage/curl: add noexcept and [[gnu::pure]] 2022-09-29 18:18:18 +02:00
Max Kellermann
b0d6c0e7cb Merge branch 'v0.23.x' 2022-09-28 13:08:34 +02:00
Max Kellermann
76efea3aa7 decoder/ffmpeg: add libfmt formatter for AVSampleFormat
Fixes compiler warning because formatting unscoped enums is deprecated
since libfmt 9.
2022-09-28 11:34:33 +02:00
Max Kellermann
ac7bf12743 event/Loop: move call to FlushClockCaches() 2022-09-28 10:03:39 +02:00
Max Kellermann
db21e20c99 event/Loop: improve API doc wording 2022-09-28 09:55:35 +02:00
Max Kellermann
56adb27b44 event/Loop: push new idle events to the back of the list 2022-09-28 09:47:36 +02:00
Max Kellermann
520e96b6e8 event/Loop: rename parameter 2022-09-28 09:45:58 +02:00
Max Kellermann
45599e7840 Merge branch 'v0.23.x' 2022-09-27 20:40:41 +02:00
Max Kellermann
8d9b0c42cb Merge branch 'reflection' of https://github.com/jcorporation/MPD 2022-09-27 20:35:17 +02:00
jcorporation
7ab0dfc8ce Sets the curl proxy ssl verify options to the values of the host configuration options
This fixes #1616
2022-09-27 20:26:50 +02:00
Max Kellermann
2c11095eed lib/icu/Compare: use StringStartsWith() for improved code clarity
Also fixes the inverted strncmp() call.
2022-09-27 20:23:10 +02:00
jcorporation
07a0369b74 Add pcre status to config response 2022-09-27 20:10:35 +02:00
jcorporation
868a06eaf9 Add starts_with to filter expressions 2022-09-27 19:45:15 +02:00
Max Kellermann
512cd7b0de Merge branch 'ConsumeMode' of https://github.com/jcorporation/MPD 2022-09-21 11:36:25 +02:00
Max Kellermann
352c598916 command/other: use if-with-initializer 2022-09-20 22:07:10 +02:00
Max Kellermann
661aee29da Merge branch 'reflection' of https://github.com/jcorporation/MPD 2022-09-20 21:07:06 +02:00
jcorporation
0439df05cc Add playlist_directory to config command response 2022-09-20 21:04:25 +02:00
jcorporation
eb3baf7e99 Cast enum to unsigned 2022-09-20 20:27:25 +02:00
jcorporation
48a936ef5b Add ConsumeMode oneshot, closes #925 2022-09-20 20:26:49 +02:00
Max Kellermann
5a7d2be77d Merge remote-tracking branch 'jcorporation/idle' 2022-09-20 15:11:41 +02:00
Anthony DeRossi
9ab9b97f20 encoder/flac: only set a serial number for oggflac
This fixes a bug introduced in 87fa6bca where the FLAC encoder fails to
initialize unless libFLAC is built with Ogg support. When libFLAC is
built without Ogg support, FLAC__stream_encoder_set_ogg_serial_number
unconditionally returns false.
2022-09-16 17:58:41 -07:00
jcorporation
310a146a55 OutputCommands get ride of global mixer idle events 2022-09-06 21:58:18 +02:00
Max Kellermann
0e201ffdcc archive/iso9660: simplify std::span initializer 2022-09-06 21:16:28 +02:00
Max Kellermann
d5d25d78da Merge branch 'v0.23.x' 2022-09-06 21:15:42 +02:00
Max Kellermann
84f43ccde8 LogInit: default to stderr on Windows
Don't require "log_file" setting, for "--no-config" operation.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1600
2022-09-06 21:04:53 +02:00
Max Kellermann
38704c9cf3 LogInit: improve systemd/journald comment 2022-09-06 21:03:56 +02:00
Max Kellermann
3b05c89765 archive/iso9660: fix off-by-one assertion failure
Calling data[fill] could trigger an assertion failure if
fill==data.size(), even if we call it only to take the address.

Instead of doing that, this commit changes the code to pointer
arithmetic.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1556
2022-09-06 20:28:33 +02:00
jcorporation
4f8b4c605e player/Control: Change idle events from global to partition scope 2022-08-28 11:33:14 +02:00
Max Kellermann
4f041694d3 release v0.23.9
-----BEGIN PGP SIGNATURE-----
 
 iQJBBAABCgArFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmL+ZuYNHG1heEBibGFy
 Zy5kZQAKCRAjbopYxttFEmxjD/4sJEq9DroRRK2qnVL1c6rwdzAL05LQwXGfWMCY
 /eIfoYGgu+PPN65Xf/A7qEvsXXSpuDzq0jTzdmtSvQwfKgg5jy72Qn+LN0dmoSRn
 mqQoqPFFxr7URf7QhL/6/EKcKYSexu/dxLnnuOC/yB/32WB+JINGNLWABrCpFMW0
 4kbVSC6t/e07bfBxNoYKx+kSxX88n82v5LNjkPctx0oU0gRoyRZds273uuKHOIYQ
 KFHHuaW9eNT0x/JrrsBD0ASXcp/9CfyVvyoag4bqJIc6Bg4fJTEZ9QPy9SUF2R8L
 0QCG2DBqFoht7Xqyo7qe5vYy2lww/flVrH/UwB1V7xfWzbuv3qUYs2pRnFmPKjQx
 23FRBkmC3tWmno+pZFaYmzprRKQK7WS9DJUzaQ8DCjNVpncadNPDRvz13BZjVLAE
 LeAFxPZ3B3yrDIjNRGl9LEySMJs7M4jrqzXQZuWS3+O9IZV19ajGczWmFCyQOyu4
 F7bj9tfy1yhUjMYOiUIxXsWvxZSVIo8wK1payCJzvKTobnUUeDfDucnD/lpVRMF8
 HyJsaZrXwFIClBmK8nCh3LiB5Dh9nxl8xjtmrCiPVzGZvj5qnzMkZWF+C4wxblnZ
 XTVmHFrpdcI3nK4BzLVrxF+3A08gPkIHta9boqrMhfX4gPWkKmD1vH/+u2OD2BIY
 I2MASg==
 =tk1U
 -----END PGP SIGNATURE-----

Merge tag 'v0.23.9'

release v0.23.9
2022-08-18 18:23:12 +02:00
Max Kellermann
40bc60d6ae Main: load Android mpd.conf from ExternalFilesDir
See also https://github.com/MusicPlayerDaemon/MPD/issues/1061

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1570
2022-08-18 18:17:43 +02:00
Max Kellermann
7778210269 Main: move code to TryReadConfigFile() 2022-08-18 18:12:21 +02:00
Max Kellermann
6229210d51 Main: move code to LoadConfigFile() 2022-08-18 18:11:49 +02:00
Max Kellermann
5d0d5b5d97 Android/Context: allow type=nullptr in GetExternalFilesDir() 2022-08-18 18:11:49 +02:00
Max Kellermann
1aa3c1e543 java/String: add static method Optional() 2022-08-18 18:10:16 +02:00
Max Kellermann
b90e32fe4e Android/Context: look up methods once during startup 2022-08-18 18:10:14 +02:00
Max Kellermann
1f4df2a64d android/Environment: pass JNIEnv to all functions 2022-08-18 18:09:54 +02:00
Max Kellermann
2efc1db6a9 android/Environment: no namespace indent 2022-08-18 18:08:45 +02:00
Max Kellermann
51aa1d2db8 mixer/Internal: hide internal fields 2022-08-18 17:42:30 +02:00
Max Kellermann
2d2df25d04 mixer/Mixer: avoid locking twice 2022-08-18 17:39:17 +02:00
Max Kellermann
29eb3e9ebc mixer/Control: move some code to Lock*() methods 2022-08-18 17:34:00 +02:00
Max Kellermann
b0873fbc90 mixer/Mixer*: drop the "Mixer" prefix from source files 2022-08-18 17:21:39 +02:00
Max Kellermann
c14484a5cc mixer/MixerList: eliminate header 2022-08-18 17:14:42 +02:00
Max Kellermann
a966cfeb1f playlist/cue/CueParser: fix nullptr dereference
Regression from commit 21e4c25e61
2022-08-18 17:06:51 +02:00
Max Kellermann
6c0546d829 mixer/Internal: document that caller must lock the mutex 2022-08-18 16:57:58 +02:00
Max Kellermann
e1e8f45983 mixer/Control: add noexcept 2022-08-18 16:56:32 +02:00
Max Kellermann
3eedcc55b9 mixer/Control: convert pointers to references 2022-08-18 16:56:06 +02:00
Max Kellermann
dd2cab1488 Merge branch 'v0.23.x' 2022-08-18 16:54:18 +02:00
Max Kellermann
f883c09b6b fs/FileSystem: add pure attributes 2022-08-18 16:53:32 +02:00
Max Kellermann
71acad6c21 fs/FileSystem: add noexcept 2022-08-18 16:53:31 +02:00
Max Kellermann
e2d4654e20 filter/ReplayGain: invoke the MixerListener after volume change
This ensures that Partition::OnMixerVolumeChanged() invokes
MixerMemento::InvalidateHardwareVolume(), clearing the cached volume
level.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1526
2022-08-18 14:45:45 +02:00
Max Kellermann
2b8f1170a6 mixer/Control: use Mixer::IsGlobal() 2022-08-18 14:33:35 +02:00
Max Kellermann
5c4743441e mixer/All: use Mixer::IsPlugin() 2022-08-18 14:08:31 +02:00
Max Kellermann
938054bdb8 command/all: fix off-by-one bug in parameter count check 2022-08-09 12:47:57 +02:00
Max Kellermann
d0909adf6b command/all: use class StaticVector 2022-08-09 12:46:26 +02:00
Max Kellermann
a12b004fa4 util/StaticVector: new class 2022-08-09 12:44:02 +02:00
Max Kellermann
a8452957fc command/Request: pass std::span to constructor 2022-08-09 12:43:52 +02:00
Max Kellermann
feb334756e command/all: convert macro to constexpr 2022-08-09 12:39:18 +02:00
Max Kellermann
50a4d7169e TagAny: pass std::string_view to uri_has_scheme() 2022-08-09 11:43:35 +02:00
Max Kellermann
b789ffd2bf Merge branch 'v0.23.x' 2022-08-08 23:46:22 +02:00
Max Kellermann
69f741e8a6 mixer/Memento: move IDLE_MIXER out of SetVolume()
Make this idle event per-partition.
2022-08-08 23:32:57 +02:00
Max Kellermann
4b4f47002b mixer/Volume: refactor to class MixerMemento, per partition
Eliminate global variables, convert them to MixerMemento fields.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1583
2022-08-08 23:30:27 +02:00
Max Kellermann
615c301961 mixer/Volume: remove logging (mostly useless) 2022-08-08 23:13:14 +02:00
Max Kellermann
dc07180e48 input/CdioParanoia: add options "mode" and "skip"
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1529
2022-08-08 22:53:48 +02:00
Max Kellermann
d3b235bab5 input/CdioParanoia: move global variables up 2022-08-08 22:38:28 +02:00
Max Kellermann
0279f4fb57 output/jack: fix bogus assertion failure
Regression from commit 45071607aa

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1571
2022-08-08 22:01:59 +02:00
Max Kellermann
7c920ddebe filter/ffmpeg: fix FFmpeg 5.1 deprecation warnings 2022-08-08 21:34:26 +02:00
Max Kellermann
88793cbc1a output/httpd: avoid extra buffer copy if possible 2022-08-08 21:00:38 +02:00
Max Kellermann
2afe427ab3 output/httpd: copy from returned encoder buffer
This fixes a regression from commits c266fb7758 and 00b8ced09f,
but really caused by API change in commit 7e14f8f830, and this
plugin's failure to adapt to this API change.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1585
2022-08-08 21:00:27 +02:00
Dave Hocker
bbc088ae4e This PR provides forward and backward compatibility at macos SDK 12.0. At SDK 12.0, API function names were changed essentially replacing
occurrences of the word Master/master with Main/main. This change was test built on two different systems.

1. macos 10.15.7 with Xcode 12.4 and clang 12.0.0 on x86_64
2. macos 12.5 with Xcode 13.4.1 and clang 13.1.6 on arm64 (Apple silicon M1)

It should be noted that on macos 10.15.7 with Xcode 11.2 and clang 11.0, MPD will not build.
The MPD documentation states that clang 11.0 is the minimum requirement,
but clang 11.0 produces compile errors. Apparently the macos version
of clang 11.0 is not fully compliant.
2022-08-08 17:39:29 +02:00
Max Kellermann
4c08c0b8b1 Merge branch 'v0.23.x' 2022-07-27 11:06:47 +02:00
Max Kellermann
57d5df8118 decoder/ffmpeg: fix FFmpeg 5.1 deprecation warnings 2022-07-27 11:04:09 +02:00
Max Kellermann
59792cb0b8 decoder/ffmpeg: wrap FFmpeg include in "extern C"
Commit ebae25d175 added that #include, but forgot to wrap it in
"extern C", so the linker tried to look up C++ symbols, causing linker
failure.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1582
2022-07-27 11:04:03 +02:00
Max Kellermann
b864094fdc Merge branch 'master' of https://github.com/Sonico98/MPD 2022-07-21 21:14:15 +02:00
Sonico
3ef83cc34e Add titleSort tag 2022-07-20 23:05:10 -03:00