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
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