Max Kellermann
db5f270f42
util/AllocatedString: fix string_view specialization in TotalSize()
2023-10-09 14:54:40 +02:00
Max Kellermann
f49d4ef4ad
tag/Mask: switch to 64 bit because have we 34 tags now and 32 bits are not enough
2023-10-08 10:02:50 +02:00
Max Kellermann
2859845567
Merge branch 'v0.23.x'
2023-10-08 10:02:19 +02:00
Max Kellermann
f3c37e484e
tag/Mask: add static_assert on the size of the mask
2023-10-08 10:01:00 +02:00
Max Kellermann
e521b58b01
io/PeekReader: fix offset/size mixup
...
Regression by commit 7ccc4ddf0d
2023-10-08 09:55:59 +02:00
Max Kellermann
34182990ef
fs/FileInfo: add fstat() wrapper
2023-10-07 12:49:07 +02:00
Max Kellermann
1ca5d6baa6
io/FileReader: do not copy the path
2023-10-07 12:48:03 +02:00
Max Kellermann
9365f68454
io/FileReader: use GetFileInfoByHandle()
2023-10-07 12:47:57 +02:00
Max Kellermann
7b5f107341
fs/FileInfo: add GetFileInformationByHandleEx() wrapper
2023-10-07 12:37:49 +02:00
Max Kellermann
e9ec03f769
PlaylistFile: use uint_least64_t
2023-10-07 12:29:14 +02:00
Max Kellermann
579a6ee299
fs/FileInfo: un-inline the constructor to reduce header dependencies
2023-10-07 12:28:31 +02:00
Max Kellermann
7d31659137
PlaylistFile: add missing include
2023-10-07 12:28:31 +02:00
Max Kellermann
f549c611ab
fs/FileInfo: make constructor explicit
2023-10-07 12:24:05 +02:00
Max Kellermann
51c0a03e94
fs/FileInfo: add constexpr
and noexcept
2023-10-07 12:22:54 +02:00
Max Kellermann
19c73680cf
io/FileReader: use uint_least64_t
2023-10-07 08:49:04 +02:00
Max Kellermann
a9ba9a5f92
io/Reader: add [[nodiscard]]
2023-10-07 08:45:59 +02:00
Max Kellermann
3032792563
io/Reader: add method ReadFull()
2023-10-07 08:45:52 +02:00
Max Kellermann
7ccc4ddf0d
io/Reader: use std::span
2023-10-07 08:44:42 +02:00
Max Kellermann
b9704715fb
io/FileOutputStream: pass dfd=-1 for absolute /proc/self/fd/N path
2023-10-07 08:42:35 +02:00
Max Kellermann
86e7dff2fc
util/TextFile: add missing cast
2023-10-07 08:39:24 +02:00
Max Kellermann
c450f644e6
lib/xiph/OggSyncState: fix indent
2023-10-07 08:30:12 +02:00
Max Kellermann
496184b1bc
io/Reader: add method ReadT()
2023-10-07 08:27:13 +02:00
Max Kellermann
b81cac3305
lib/nfs/Error: include cleanup
2023-10-04 23:12:45 +02:00
Max Kellermann
bf9dd24536
lib/pcre/UniqueRegex: wrap Compile() options in struct
2023-10-04 17:32:12 +02:00
Max Kellermann
e5680c712b
util/IntrusiveList: add reverse_iterator
2023-10-04 16:51:17 +02:00
Max Kellermann
44daa6d3e6
util/IntrusiveForwardList: reset last_cache properly in clear()
2023-10-04 16:50:46 +02:00
Max Kellermann
5aaa3f50aa
util/BindMethod: move SignatureHelper to return type
2023-10-04 16:50:25 +02:00
Max Kellermann
7d26cd74c1
util/BindMethod: add noexcept
2023-10-04 16:50:25 +02:00
Max Kellermann
7e6941acc8
util/BindMethod: add constexpr
2023-10-04 16:50:25 +02:00
Max Kellermann
63d865666e
util/StringBuffer: use using
instead of typedef
2023-10-04 16:50:25 +02:00
Max Kellermann
5dda4084df
util/BindMethod: use using
instead of typedef
2023-10-04 16:50:25 +02:00
Max Kellermann
19f9238ef0
util/BindMethod: fix indent
2023-10-04 16:50:25 +02:00
Max Kellermann
491cc8f54d
net/SocketDescriptor: add {Read,Write}NoWait()
...
It was surprising that Read() was non-blocking, but there was no
blocking version of it. Let's make the non-blocking behavior explicit
and change Read() to be blocking.
In order to find existing callers easily with compiler errors, this
also refactors Read()/Write() to take a std::span parameter.
2023-09-27 11:39:55 +02:00
Max Kellermann
cad35a83fb
io/FileDescriptor: add Read()/Write() overloads with std::span
2023-09-27 11:14:23 +02:00
Max Kellermann
5fbe5951ab
output/snapcast/Client: use SocketDescriptor::Send()
2023-09-27 10:39:48 +02:00
Max Kellermann
21590e60e6
event/FullyBufferedSocket: pass std::span to DirectWrite()
2023-09-27 10:36:56 +02:00
Max Kellermann
fe69ad0861
event/BufferedSocket: pass std::span to DirectRead()
2023-09-27 10:34:50 +02:00
Max Kellermann
9daf8f6de5
event/BufferedSocket: use std::byte
2023-09-27 10:30:09 +02:00
Max Kellermann
8ca6606323
net/SocketDescriptor: move code to Receive(), Send()
2023-09-27 10:16:21 +02:00
Max Kellermann
09a2da89a2
io/FileDescriptor: pass std::span to Full{Read,Write}()
2023-09-27 10:14:02 +02:00
Max Kellermann
9a0b3775d8
encoder/ToOutputStream: add API docs
2023-09-26 15:48:55 +02:00
Max Kellermann
2075a9a999
encoder/ToOutputStream: remove unnecessary cast
2023-09-26 15:48:22 +02:00
Max Kellermann
1090cc964a
event/Loop: relicense to BSD-2
...
This library has been initially developed at CM4all and eventually
published here:
https://github.com/CM4all/libcommon/tree/master/src/event/
On this copy of it, there were only minor modifications by people
other than me, and these are below the copyright threshold; only
non-epoll backends (which remain under the GPL) were developed by
somebody else.
2023-09-26 15:47:09 +02:00
Max Kellermann
101e12cf9a
modplug: add patch to remove the deprecated register
keyword
2023-09-26 11:48:44 +02:00
Max Kellermann
26467e61a3
Merge branch 'consume_single_oneshot-restore' of https://github.com/jcorporation/MPD
2023-09-26 11:43:27 +02:00
Max Kellermann
fbdd2324a5
sticker/Database: add method Reopen()
2023-09-26 10:14:05 +02:00
Max Kellermann
dc31aa6a61
decoder/Plugin: remove unused and broken wrapper method ContainerScan()
2023-09-26 10:13:42 +02:00
Max Kellermann
5b28a987e5
util/IntrusiveForwardList: add method remove_and_dispose_if()
2023-09-22 11:32:40 +02:00
Max Kellermann
78d28063c4
util/IntrusiveForwardList: push_{front,back}() returns iterator
2023-09-22 11:32:33 +02:00
Max Kellermann
64647edbe1
lib/fmt/SocketAddressFormatter: new library
2023-09-19 11:22:39 +02:00
Max Kellermann
b36f5f1ec4
net/ToString: use #pragma once
2023-09-18 22:01:40 +02:00
Max Kellermann
592649d3f2
net/ToString: check family==AF_INET6 instead of looking for colons
2023-09-18 21:59:27 +02:00
Max Kellermann
9398599816
net/ToString: use libfmt
2023-09-18 21:58:55 +02:00
Max Kellermann
61c29473d3
net/ToString: append port only if it is non-zero
2023-09-18 11:11:00 +02:00
Max Kellermann
5fd2fc77f3
net/ToString: add null check
2023-09-18 11:08:16 +02:00
Max Kellermann
3eb0681e3d
net/ToString: use SocketAddress::GetLocalRaw()
2023-09-18 10:54:52 +02:00
Max Kellermann
e831af35fd
input/curl: move code to CreateEasy()
2023-09-17 14:26:47 +02:00
Max Kellermann
fb2e0f734e
lib/fmt/ToBuffer: add overload with StringBuffer parameter
2023-09-16 23:05:48 +02:00
Max Kellermann
3d69f43cff
event/Loop: include SocketEvent.hxx only if HAVE_THREADED_EVENT_LOOP
2023-09-16 22:55:04 +02:00
Max Kellermann
41b1931d91
event/Loop: move the poll_backend to the top
...
This is where all sockets are registered, so it should be initialized
first and destructed last.
2023-09-16 22:45:45 +02:00
Max Kellermann
f086444e4a
lib/curl/Easy: add method SetRequestBody(std::string_view)
2023-09-16 22:39:03 +02:00
Max Kellermann
b8210bbc45
lib/avahi/Poll: fix copyright header
2023-09-16 22:39:03 +02:00
Max Kellermann
ce2965b5bc
io/uring/meson.build: disable io_uring on Android
...
On Android, the feature is forbidden by a seccomp filter, see
https://security.googleblog.com/2023/06/learnings-from-kctf-vrps-42-linux.html
2023-09-16 22:39:03 +02:00
Max Kellermann
18000ff499
io/uring/Handler: remove unused header
2023-09-16 22:39:03 +02:00
Max Kellermann
6f7dce6dca
test/util/TestIntrusiveForwardList: implement size() only if options.constant_time_size
is set
2023-09-16 22:39:03 +02:00
Max Kellermann
175524ad02
util/IntrusiveForwardList: make end() non-static
...
So we can have a `const` overload which is important for some
algorithm templates.
2023-09-16 22:39:03 +02:00
Max Kellermann
bfbde72676
util/Intrusive*: insertion methods return an iterator
2023-09-16 22:39:03 +02:00
Max Kellermann
f76583a08a
util/IntrusiveList: document the erase() return value
2023-09-16 22:39:03 +02:00
Max Kellermann
6d39b401b5
util/IntrusiveForwardList: add method iterator_to()
2023-09-16 22:39:03 +02:00
Max Kellermann
f448bfd3f3
util/IntrusiveForwardList: add option cache_last
2023-09-16 22:39:03 +02:00
Max Kellermann
64b0587e78
util/OptionalField: new library
2023-09-16 22:39:03 +02:00
Max Kellermann
9fe813e572
util/IntrusiveForwardList: add pop_front_and_dispose()
2023-09-16 22:39:03 +02:00
Max Kellermann
b0da0bbf8b
util/IntrusiveForwardList: pop_front() returns reference
2023-09-16 22:39:03 +02:00
Max Kellermann
5c44082b77
util/IntrusiveForwardList: add non-static insert_after() implementation
2023-09-16 22:39:03 +02:00
Max Kellermann
df7ed27b78
util/IntrusiveForwardList: fix move operator, really swap counter
2023-09-16 22:39:03 +02:00
Max Kellermann
bef7ce37d9
RemoteTagCache: use the pop_front() return value
2023-09-16 22:39:03 +02:00
Max Kellermann
c994fe4879
io/uring/meson.build: detect liburing with include_type=system
...
This avoids breakages due to `-Wgnu-anonymous-struct`.
2023-09-12 10:20:58 +02:00
Max Kellermann
50f0163f5f
time/SystemClock: pass by value
2023-09-12 09:56:06 +02:00
Max Kellermann
481c1b6f2e
lib/dbus/ReadIter: add method GetBool()
2023-09-12 09:53:58 +02:00
Max Kellermann
474b6610fa
lib/dbus/Error: add method GetName()
2023-09-12 09:53:15 +02:00
Max Kellermann
11c49da871
io/FileReader: remove unused method Close()
...
It's enough to have the destructor.
2023-09-12 09:53:06 +02:00
Max Kellermann
678828b56f
io/FileOutputStream: remove obsolete maybe_unused
2023-09-12 09:43:14 +02:00
Max Kellermann
9e802ad721
util/StringCompare: add pure
attribute
2023-09-12 09:34:52 +02:00
Max Kellermann
859ffddea3
io/BufferedReader: fix ReadFullT() after std::span migration
2023-09-12 09:32:20 +02:00
Max Kellermann
daf935d310
util/HexFormat: add non-const overload
2023-09-12 09:11:38 +02:00
Max Kellermann
99765cc704
modplug: add patch to remove the deprecated register
keyword
2023-09-11 22:17:45 +02:00
Max Kellermann
f68305bf00
util/NumberParser: remove obsolete __ANDROID_API__ check
2023-09-11 22:12:13 +02:00
Max Kellermann
517c234461
lib/zlib/GzipOutputStream: use MAX_WBITS
2023-09-11 22:02:04 +02:00
Max Kellermann
a58275591d
util/StaticVector: add methods erase(), pop_front()
2023-09-11 21:59:28 +02:00
Max Kellermann
a2f4fb9ddb
util/StaticVector: add method pop_back()
2023-09-11 21:59:21 +02:00
Max Kellermann
b2acf02af9
util/StaticVector: push_back(), emplace_back() return reference
...
Imitating std::vector since C++17.
2023-09-11 21:59:12 +02:00
Max Kellermann
d5b1ca1a52
util/StaticVector: use emplace_back() to implement push_back()
...
For this class, both are equal.
2023-09-11 21:58:56 +02:00
Max Kellermann
339b9f6e7b
net/StaticSocketAddress: add method GetSteadyPart()
2023-09-11 21:27:12 +02:00
Max Kellermann
35cfa6efa3
net/StaticSocketAddress: add SocketAddress cast constructor
2023-09-11 21:27:12 +02:00
Max Kellermann
34ec024bf4
net/AllocatedSocketAddress: add method GetSteadyPart()
2023-09-11 21:27:12 +02:00
Max Kellermann
75aa08ed6b
tag/Pool: use a power-of-2 hash table size
...
This is simpler to calculate and the advantage of using a prime is
negligible anyway.
2023-09-11 21:23:11 +02:00
Max Kellermann
c8dc1e0665
tag/Pool: use class IntrusiveHashSet intead of rolling a custom hash table
2023-09-11 21:15:28 +02:00
Max Kellermann
847ae7dd7c
util/IntrusiveHashSet: add insert_check_if()
2023-09-11 21:15:28 +02:00
Max Kellermann
44f55e1866
util/IntrusiveList: add missing initializer to insert_after()
...
We must not call std::next() if the list head was not yet initialized.
This was missing in commit 7065425927
2023-09-11 21:15:28 +02:00
Max Kellermann
c391adad10
tag/Pool: move code from calc_hash() to util/djb_hash.cxx
2023-09-11 20:53:37 +02:00
Max Kellermann
f578b06d83
tag/Pool: move calc_hash() returns std::size_t
2023-09-11 20:51:44 +02:00
Max Kellermann
0748f75d9b
tag/Pool: rename TagPoolSlot
to TagPoolItem
2023-09-11 20:44:55 +02:00
Max Kellermann
7dff29bcd1
util/IntrusiveHashSet: add option zero_initialized
2023-09-11 20:34:17 +02:00
Max Kellermann
3e09f95b40
tag/Pool: enable option zero_initialized
...
Commit 44beae519d
caused the MPD
executable to grow by more than 1 MB because the `slots` array
suddenly was not zero-initialized anymore, because the doubly-linked
list is circular, while the singly-linked list is zero-terminated.
This option moves the array back to the `bss` section.
2023-09-11 20:32:26 +02:00
Max Kellermann
7065425927
util/IntrusiveList: add option zero_initialized
2023-09-11 20:30:38 +02:00
Max Kellermann
f01793ad4a
util/Intrusive*: move constant_time_size
to an options struct
...
This makes it easier to add more options later.
2023-09-11 19:18:36 +02:00
Max Kellermann
1f495efb46
test/LoadDatabase: ignore tag/charset mismatches
...
This program shouldn't fail just because the configuration doesn't
match - it has no configuration, it's just a dumb test program.
2023-09-07 09:54:03 +02:00
Max Kellermann
2c01e79b47
SongSave: omit FixTagString() for strings from the database file
...
Strings in the database should have been sanitized already, so let's
not waste CPU on this.
2023-09-06 16:12:20 +02:00
Max Kellermann
a573d57de8
tag/Builder: remove unnecessary explicit AddItem() overload
2023-09-06 16:10:31 +02:00
Max Kellermann
2f4e2935a3
db/upnp, playlist/pls: use AddItem(std::string_view)
2023-09-06 16:08:42 +02:00
Max Kellermann
44beae519d
tag/Pool: use doubly-linked list
...
This adds some memory overhead but eliminates the linear search from
tag_pool_put_item().
2023-09-06 16:00:25 +02:00
Max Kellermann
b896711fc6
tag/Pool: fix crash in tag_pool_put_item()
...
Regression by commit 76bdfabcc5
2023-09-06 15:53:17 +02:00
Max Kellermann
76bdfabcc5
tag/Pool: use class IntrusiveForwardList
2023-09-06 15:33:26 +02:00
Max Kellermann
b35e8a588f
util/IntrusiveForwardList: add operator++(int)
2023-09-06 15:31:07 +02:00
Max Kellermann
6c48f5ac63
tag/Pool: use std::array
2023-09-06 15:10:47 +02:00
Max Kellermann
1448f52eac
util/VarSize: convert static_assert to concept check
2023-09-06 15:05:26 +02:00
Max Kellermann
c96e8ab47c
db/simple/DirectorySave: optimize duplicate checks with std::set
...
This reduces the CPU usage for loading a large database by more than 50%.
2023-09-06 14:56:41 +02:00
Max Kellermann
2c4ef4460f
db/update/SpecialDirectory: more std::string_view migration
2023-09-06 14:51:37 +02:00
Max Kellermann
20bbe1b57b
fs/Traits: add GetFilenameSuffix() overload with std::string_view
2023-09-06 14:50:36 +02:00
Max Kellermann
449d59af2f
db/simple/Directory: use operator== to compare strings
2023-09-06 14:30:08 +02:00
Max Kellermann
851136e6fd
db/simple/Directory: GetName() returns std::string_view
2023-09-06 14:29:32 +02:00
Max Kellermann
ad854e9867
db/simple/Save: initialize array without memset()
2023-09-06 14:17:07 +02:00
jcorporation
9a28176d72
Save consume and single oneshot as string
...
Consume and single oneshot should be saved as string.
closes #1853
2023-08-07 23:23:08 +02:00
Max Kellermann
ba2df05fb4
lib/zlib/GzipOutputStream: add noexcept
2023-08-03 20:58:43 +02:00
Max Kellermann
8722c51306
lib/dbus/AppendIter: add Append(int32_t), Append(int64_t)
2023-08-03 20:58:01 +02:00
Max Kellermann
80104eb6d5
util/IntrusiveList: fix illegal downcast (ubsan)
...
Fixes UBSanitizer warning:
src/util/IntrusiveList.hxx:108:10: runtime error: downcast of address 0xdeadbeef which does not point to an object of type 'Foo'
2023-08-03 20:56:34 +02:00
Max Kellermann
8743326924
sticker/Database: allow moving
2023-08-03 20:54:57 +02:00
Max Kellermann
83a6cb804b
util/IntrusiveHashSet: add template argument GetKey
...
This is a big simplification of all IntrusiveHashSet users: instead of
having to implement multiple overloads of Hash and Equal, the
IntrusiveHashSet class can first extract the effective key from an
item and then pass it to the Hash/Equal functions.
2023-08-03 20:50:21 +02:00
Max Kellermann
9691b609a2
util/IntrusiveHashSet: remove_and_dispose() returns number of removed elements
2023-08-03 20:44:47 +02:00
Max Kellermann
250fa8c732
util/IntrusiveHashSet: rename remove_and_dispose() to remove_and_dispose_key()
2023-08-03 20:44:39 +02:00
Max Kellermann
2cd5f4cd3e
util/IntrusiveHashSet: replace template parameters Hash/Equal with a single one
...
Preparing to add a key extraction function. Without this "Operators"
template parameter, we'd have even more template parameters, and that
parameter list would grow too complex. Better wrap it in one single
template that contains all operators.
This is an API change which all callers need to adjust to, but it will
be worth it.
2023-08-03 20:44:14 +02:00
Max Kellermann
dcd7c6337c
util/Intrusive{List,HashSet}: reimplement hook mode detection with implicit cast
2023-08-03 20:33:15 +02:00
Max Kellermann
43d633f560
Instance: use C++11 initializers
2023-07-23 09:14:25 +02:00
Max Kellermann
1c37b0487c
lib/fmt/SystemError: add VFmtErrno()
2023-07-21 19:44:45 +02:00
Max Kellermann
acc92b156b
util/Concepts: remove obsolete fallbacks
2023-07-21 19:43:04 +02:00
Max Kellermann
aeadae5399
util/IntrusiveHashSet: insert_check() returns the bucket head on success
...
The list head is a stable value that is guaranteed to be still valid
when insert_commit() gets called.
This fixes a linked list corruption bug in class StaticCache which
occurs when the cache item pointed to by the iterator gets evicted
between insert_check() and insert_commit().
2023-07-21 19:42:35 +02:00
Max Kellermann
42d5b05f54
util/IntrusiveHashSet: rename insert() to insert_commit()
...
Clarify that the method is not a freestanding insertion method but
should only be used after insert_check().
2023-07-21 19:42:26 +02:00
Max Kellermann
e133f621a4
util/IntrusiveHashSet: add insert_check() documentation
2023-07-21 19:41:46 +02:00
Max Kellermann
91437d9e63
util/IntrusiveList: add insert_after()
2023-07-21 19:41:40 +02:00
Max Kellermann
f1b497fb0c
util/IntrusiveList: document insert()
2023-07-21 19:41:36 +02:00
Max Kellermann
cc9d061e51
util/IntrusiveList: pop_front() and pop_back() return reference
2023-07-21 19:41:13 +02:00
Max Kellermann
62ee9a4d60
util/DynamicFifoBuffer: use T
instead of std::byte
...
Mistake added by commit b528b467649754
2023-07-21 19:40:38 +02:00
jcorporation
082f72dd20
Add support of TAG_MUSICBRAINZ_RELEASEGROUPID
...
Closes #1767
2023-07-12 19:43:37 +02:00
Max Kellermann
9c19368fc7
Merge branch 'v0.23.x'
2023-06-02 14:36:02 +02:00
Shen-Ta Hsieh
38f1237d49
output/wasapi: cast to const char *
for fmt 10 compatible
2023-06-02 14:29:43 +02:00
Shen-Ta Hsieh
fef6b9df80
flac: Try InputStream
interface if flac failed to read through a wchar_t
path
2023-06-02 14:28:22 +02:00
Shen-Ta Hsieh
70879f0abc
thread/WindowsFuture: remove wrong address_of operator
2023-06-02 14:27:24 +02:00
Shen-Ta Hsieh
bcb393628e
win32/ComWorker: rename variable name to prevent ambiguous
2023-06-02 14:22:11 +02:00
Max Kellermann
18d3a5c12b
decoder/flac: add noexcept
and inline
2023-06-02 14:22:11 +02:00
Simon Arlott
6ee3d0102b
decoder/mad: Fix decode of LAME peak value
...
6d91b5c7b2
("fix double promotions") changed
how LAME peak values are decoded, producing large incorrect values that
cause some MP3 files to play silently.
Restore the original decode from MAD fixed-point format to double and
document what it's doing.
Fixes #1823
2023-06-02 14:15:48 +02:00
Max Kellermann
45f81cde6d
Merge branch 'null-always-off' of https://github.com/nomis/MPD
2023-05-25 10:42:58 +02:00
John Regan
a482c798ad
pcm: declare IsSilentSample as const
...
GNU libstdc++ declares cmath functions as constexpr, but libc++ does
not. The C++ standards state the standard library functions should not
be declared constexpr unless explicitly required.
2023-05-24 15:05:19 -04:00
Max Kellermann
d9b1f6223e
io/uring/Close: wrapper for io_uring_prep_close()
2023-05-22 21:59:44 +02:00
Max Kellermann
26577d1301
io/uring/Queue: make Submit() virtual, Push() not
...
This allows submitting io_uring calls without an `Operation` instance
(fire & forget). We'll do that for close().
2023-05-22 21:57:18 +02:00
Max Kellermann
6496c1b806
util/ScopeExit: convert the function from base class to member
...
This allows using `final` callables.
2023-05-22 21:20:49 +02:00
Max Kellermann
7bb251dad8
db/update/Walk: use marker to remove deleted items
...
This eliminates all `Storage::GetInfo()` calls from
`UpdateWalk::PurgeDeletedFromDirectory()` and instead uses a "marker"
field to mark items that have been visited; later, all unmarked items
can be deleted.
This eliminates a lot of redundant I/O which is noticable with the
`curl` storage plugin (i.e. WebDAV).
2023-05-22 20:13:01 +02:00
Max Kellermann
9027e5c5bb
release v0.23.13
...
-----BEGIN PGP SIGNATURE-----
iQJBBAABCgArFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmRrqn4NHG1heEBibGFy
Zy5kZQAKCRAjbopYxttFErXiD/9QIaeO5d+U7BJK1yGkQgu5vHo4Pm34ewP8LTxs
K2MYxQQ2jZc7PXqi5Z04wmUw8ymq1BVA2D0ytMdl1Ejcbrste7UrP+1TuD8L9JBj
WCE+4otNVYDpx1PB32BN+gxCmJqiFtAQS+eMIz/SXdEXZ9sJvIgYRRkSiSFd0WHM
dT3OeeZ0V8cANbXpgI+RLghRGkVdpZJo4uXh3c0OHog1fjEBWPw6+7tH/mkotM0n
/hQjI5j14wnzZuIpkDR1kuzvGYmxJKG6LkuUqcm1WexNFbxMqDSbAlXeCmzJn7eK
NQvtROOGNjQ84thxRPLlDlYa6vbxoTqdYgZsVHzsQZWejhqw8zsPsF+Ea0A4tkLd
UKDQFTphZMVqx74+1u7IjQyW7x+k02iXWLwH2IheEl+BJhvEB7zEflN9TR81jek4
RrGx7jcTArdpt7okAe2ONkHvTYtIpaK5E2voza8K4TGOMzpkVlOkyvJ+rpn8CDRf
w0faVvmCQdSrgHKfwUUY8Z47a7d+kkKpFLlvvzNoDV8drQXfgIj5t9HOLATSVVux
l2pbgauXFsKyd4IsByXj+m8cBSvmy2C4eLJCsmguiZEvcobdJtzwOr4KuwQDjBsC
8HW0BD0t9S1dSL59vJdMG+CfK/QU5rmAIkxdydD42uo9UmSS78xw1uQgi9oDaPa8
XNCGdQ==
=nOGh
-----END PGP SIGNATURE-----
Merge tag 'v0.23.13'
release v0.23.13
2023-05-22 19:52:08 +02:00
Max Kellermann
d5bf128cee
storage/curl: throw HttpStatusError
2023-05-22 19:29:46 +02:00
Max Kellermann
5cd86e272f
input/curl: disable CURLOPT_FAILONERROR
...
Let OnHeaders() check the status.
The status checking code was added by commit 4f021cbced
in 2011,
but in 2008, commit a8e81326d0
enabled `CURLOPT_FAILONERROR`, which
means the status checking code never had any effect.
This allows `LoadExcludeListOrLog()` to hide boring "404 Not Found"
log messages via `IsFileNotFound()`.
2023-05-22 19:03:12 +02:00
Max Kellermann
740cbe9e02
event/Loop: remove failing assert()
...
The `assert(!quit)` can fail if the `EventThread` gets stopped before
it enters `EventLoop::Run()`. There is a similar problem with `alive`,
which gets reset by `EventThread::Stop()`.
If that happens, then `EventLoop::Run()` should return immediately
without handling any events.
2023-05-22 18:14:25 +02:00
Max Kellermann
068cd559e1
db/update/Walk: clear Song::in_playlist
...
Without clearing all `in_playlist` flags, the songs will never be
revealed again if they were hidden once by a CUE sheet, not even after
the CUE sheet gets deleted or modified.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1784
2023-05-22 15:41:58 +02:00
Max Kellermann
dc127f39a7
util/ScopeExit: use std::declval()
...
Fixes GCC 10 error:
error: cannot call member function `Foo` without object
2023-05-22 15:01:25 +02:00
Max Kellermann
7a99a7008c
util/ScopeExit: use std::exchange()
2023-05-22 14:44:45 +02:00
Max Kellermann
70b451db7b
util/ScopeExit: add noexcept
2023-05-22 14:44:17 +02:00
Max Kellermann
2ab03a0914
util/ScopeExit: allow the function to throw
...
Fixes crash inside AtScopeExit() in the WASAPI output plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1759
2023-05-22 14:43:23 +02:00
Max Kellermann
2fa8c7d2db
lib/crypto/meson.build: link with ffmpeg_util_dep
...
This adds `MakeFfmpegError()` to the executable and fixes a linker
failure when `libavutil` is available, but `libavformat` and
`libavcodec` are not.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1786
2023-05-22 14:05:13 +02:00
Max Kellermann
7c759ba8b0
lib/ffmpeg/meson.build: move libavutil helpers into separate library
2023-05-22 14:03:47 +02:00
Max Kellermann
6d9b452fde
lib/ffmpeg/LogError: remove unused library
2023-05-22 13:48:33 +02:00
Max Kellermann
8ba68fdb47
io/OutputStream: use std::span
2023-05-21 21:35:11 +02:00
Max Kellermann
e72d27566c
io/BufferedOutputStream: use std::string_view
2023-05-21 21:31:32 +02:00
Max Kellermann
01c02a1ef8
util/StaticFifoBuffer: add method MoveFrom()
2023-05-21 21:26:20 +02:00
Max Kellermann
e1e37cfe3c
TagPrint, command/File: two more libfmt 10 workarounds
...
libfmt 10 doesn't know how to format a StringView, and doesn't cast to
std::string_view anymore. The StringView class has been removed from
MPD 0.24 completely, and this is a stable-branch-only workaround.
Closes https://github.com/MusicPlayerDaemon/MPD/pull/1814
2023-05-21 21:03:20 +02:00
latex
381934985a
reorder ffmpeg to be lower priority than gme
...
This should prevent ffmpeg from taking priority over the gme plugin.
The ffmpeg plugin is more buggy than gme.
One of the prominent bugs of preferring ffmpeg over gme is that ffmpeg
cannot seek SAP files while gme can. This should prevent that from
happening.
2023-05-21 20:58:53 +02:00
Max Kellermann
a8042885ac
TimePrint: minor fixup for libfmt 10
...
libfmt version 10 has difficulties formatting a `StringBuffer`, and we
need to help it by explicitly invoking the `c_str()` method.
2023-05-21 20:58:19 +02:00
Max Kellermann
a71e68db50
command/player, SongPrint: use AudioFormatFormatter()
...
libfmt version 10 apparently doesn't know how to format a
`StringBuffer`, failing the MPD build. Since we have a formatter
specialization for `AudioFormat`, let's use that - it's better and
easier to use.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1807
2023-05-21 20:57:59 +02:00
Max Kellermann
1417578b3d
db/update/Archive: validate directory names
...
Fixes assertion failure if the ZIP file contains a path that begins
with a slash.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1793
2023-05-21 20:57:38 +02:00
Max Kellermann
96befa138c
db/update/Archive: ignore filenames with newline character
2023-05-21 20:56:38 +02:00
Max Kellermann
16a99804de
db/update/Archive: move check to IsAcceptableFilename()
2023-05-21 20:56:32 +02:00
Max Kellermann
75a39ed279
db/update/Archive: remove useless log message
2023-05-21 20:55:59 +02:00
datasone
d4f3dd49b4
db/SimpleDatabasePlugin: store in_playlist
value of songs into database
...
Fixes hide_playlist_targets not working after server restart
Currently, `hide_playlists_targets` works by skipping songs with
`in_playlist` value set to true in
[`Directory::Walk`](a57bcd0238/src/db/plugins/simple/Directory.cxx (L237)
). But
`in_playlist` is not stored and only updated in
[`UpdateWalk::PurgeDanglingFromPlaylists`](a57bcd0238/src/db/update/Playlist.cxx (L139)
),
which will only be executed while updating DB.
This causes the problem that playlist target songs are correctly
hidden after database update, but will remain visible after mpd server
restarted. This pr solves the problem by storing `in_playlist` value
of songs into the `SimpleDatabase` file.
2023-05-21 20:51:47 +02:00
Max Kellermann
0206a46d39
decoder/gme: require GME 0.6 or later
...
This allows dropping a few compile-time version checks and we can use
pkg-config to detect the library.
2023-05-21 20:50:03 +02:00
Max Kellermann
9475ef2202
fs/Charset: assign fs_charset
...
This got lost 8 years ago in commit 87c88fcb27
D'oh!
2023-05-21 20:50:03 +02:00
Max Kellermann
edae00e719
fs/Charset: remove useless log message
2023-05-21 20:50:03 +02:00
Max Kellermann
fb695bc55f
command/{file,storage}: remove stray "#pragma GCC diagnostic pop"
2023-05-21 20:50:03 +02:00
Max Kellermann
a0f6932ebe
unix/SignalHandlers: shut down if parent process dies in --no-daemon mode
...
By default, if the parent of a process dies, the process gets SIGHUP
and is supposed to shut down. This however doesn't work for MPD,
because MPD redefines SIGHUP with a different meaning (like most
daemons do).
To work around this, we configure the kernel to send SIGTERM instead
of SIGHUP.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1706
2023-05-21 20:40:47 +02:00
Max Kellermann
6e700dab69
CommandLine: hard-code daemon=false
if ENABLE_DAEMON is not set
2023-05-21 20:40:39 +02:00
Naïm Favier
949d72e368
output/PipeWire: lock thread loop in SendTag
2023-05-21 20:40:29 +02:00
Max Kellermann
541468f0ca
input/async: check for errors in Seek()
...
Fixes a busy loop in BufferingInputStream::RunThreadLocked() because
the method never learns that seeking is ignored, even though the HTTP
stream is already broken and can never be read; nobody cared to check
for errors.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1727
2023-05-21 20:34:19 +02:00
Max Kellermann
d2797effa3
command/database: add missing include for UINT_MAX
2023-05-21 20:33:34 +02:00
Max Kellermann
1170fb1e1e
output/osx: change type to std::size_t to fix -Wc++11-narrowing
2023-05-21 20:33:03 +02:00
Max Kellermann
65b9b3195c
lib/dbus/AppendIter: add missing include
2023-05-21 20:33:03 +02:00
Max Kellermann
c69b9780df
Merge branch 'reorder-decoder-plugins' of https://github.com/fuck-shithub/MPD
2023-05-15 21:03:35 +02:00
Max Kellermann
f869593ac8
TimePrint: minor fixup for libfmt 10
...
libfmt version 10 has difficulties formatting a `StringBuffer`, and we
need to help it by explicitly invoking the `c_str()` method.
2023-05-15 21:00:24 +02:00
Max Kellermann
181b96dd2d
command/player, SongPrint: use AudioFormatFormatter()
...
libfmt version 10 apparently doesn't know how to format a
`StringBuffer`, failing the MPD build. Since we have a formatter
specialization for `AudioFormat`, let's use that - it's better and
easier to use.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1807
2023-05-15 20:59:05 +02:00
latex
4e9f463bb6
reorder ffmpeg to be lower priority than gme
...
This should prevent ffmpeg from taking priority over the gme plugin.
The ffmpeg plugin is more buggy than gme.
One of the prominent bugs of preferring ffmpeg over gme is that ffmpeg
cannot seek SAP files while gme can. This should prevent that from
happening.
2023-05-12 00:28:56 +02:00
borine
4947bb113d
input/plugins/Alsa: limit ALSA buffer time to 2 seconds maximum
...
Some ALSA capture devices can have very large buffers, holding 10
seconds or more audio. Using the maximum buffer size with such
devices leads to unacceptably large, and unnecessary, latency.
Also, some ALSA drivers (e.g. HDA Intel PCH) report an invalid
maximum period size, and the period size that mpd calculates from
the maximum buffer size results in "Invalid argument" error when
applying the hw_params. Note that the "default" capture device on
many cards includes the "dsnoop" plugin which imposes a buffer
size of 16384 frames, so that "alsa://" works OK but
"alsa://plughw" or "alsa://hw" both fail.
Limit the maximum buffer time for ALSA input devices to a more useable
2 seconds, thereby avoiding both the above problems.
2023-05-06 10:33:48 +01:00
skidoo23
4345a656aa
output/httpd: fix libfmt icy-metaint replacement field
...
Since using libfmt (commit: dfc5b49
) ICY MetaData was broken. Eg MP3 streams encoded with LAME were affected resulting in missing stream titles on VLC or strange noises on Sonos hardware. This commit fixes the icy-metaint field.
2023-05-04 18:15:13 +02:00
Max Kellermann
31dc8b73b7
db/update/Archive: validate directory names
...
Fixes assertion failure if the ZIP file contains a path that begins
with a slash.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1793
2023-04-30 08:46:52 +02:00
Max Kellermann
e84db4f411
db/update/Archive: ignore filenames with newline character
2023-04-30 08:45:34 +02:00
Max Kellermann
395bf34a91
db/update/Archive: move check to IsAcceptableFilename()
2023-04-30 08:42:16 +02:00
Max Kellermann
dcc7628b67
db/update/Archive: remove useless log message
2023-04-30 08:39:34 +02:00
Max Kellermann
f2a4ae15aa
db/update: pass filenames as std::string_view
2023-04-30 08:28:43 +02:00
Max Kellermann
434bcb08ee
db/simple/Song: pass std::string_view to Load{File,FromArchive}()
2023-04-30 08:21:20 +02:00
Max Kellermann
99885c4cbc
util/IntrusiveHashSet: add method remove_and_dispose()
2023-04-22 08:40:53 +02:00
Simon Arlott
ab196f7afc
output/Control: Support always_off
outputs that are never used for playback
...
Add an `always_off` option to outputs that causes them to never start
playback even if they're enabled.
This allows placeholder `null` outputs to be defined for the purpose
of having an external client react to the enabled state without the
side effects of real outputs. Like an external mixer, the client can
perform some action when an output is enabled.
Normally `null` outputs can be used for playback so it's possible for
MPD to continue playback silently if a problem occurs with all the real
outputs (or there are none enabled).
2023-04-21 20:54:37 +01:00
Max Kellermann
90c3fe22f5
decoder/openmpt: check libopenmpt version at compile time, not at configure time
2023-04-21 17:29:20 +02:00
Simon Arlott
ad8117e7c8
decoder/openmpt: Fix build error with libopenmpt < 0.5
...
openmpt_at_end is a string, not an integer
Fixes build error:
src/decoder/plugins/OpenmptDecoderPlugin.cxx: In function 'void mod_decode(DecoderClient&, InputStream&)':
src/decoder/plugins/OpenmptDecoderPlugin.cxx:85:44: error: invalid cast from type 'std::string_view' {aka 'std::basic_string_view<char>'} to type 'unsigned in '
85 | mod.ctl_set("play.at_end", std::to_string((unsigned)openmpt_at_end));
| ^~~~~~~~~~~~~~~~~~~~~~~~
2023-04-21 17:24:42 +02:00
datasone
838b19c2b5
db/SimpleDatabasePlugin: store in_playlist
value of songs into database
...
Fixes hide_playlist_targets not working after server restart
Currently, `hide_playlists_targets` works by skipping songs with
`in_playlist` value set to true in
[`Directory::Walk`](a57bcd0238/src/db/plugins/simple/Directory.cxx (L237)
). But
`in_playlist` is not stored and only updated in
[`UpdateWalk::PurgeDanglingFromPlaylists`](a57bcd0238/src/db/update/Playlist.cxx (L139)
),
which will only be executed while updating DB.
This causes the problem that playlist target songs are correctly
hidden after database update, but will remain visible after mpd server
restarted. This pr solves the problem by storing `in_playlist` value
of songs into the `SimpleDatabase` file.
2023-04-12 05:18:21 +02:00
Max Kellermann
a57bcd0238
thread/Mutex: add RecursiveMutex
2023-04-06 21:32:18 +02:00
Max Kellermann
76497bd5f7
util/IntrusiveSortedList, event/TimerList: include cleanup
2023-04-06 10:24:53 +02:00
Max Kellermann
53ec02d5e9
net/SocketDescriptor: decouple from FileDescriptor on Windows
...
On Windows, a socket is not a file descriptor; it is a different beast
(and anyway, Windows doesn't have file descriptors).
2023-03-29 10:12:50 +02:00
Max Kellermann
7a5f485cf8
event/ServerSocket: use class UniqueSocketDescriptor in SupportsIPv6()
2023-03-29 10:06:48 +02:00
Max Kellermann
6f7c7a2149
event/EpollBackend: add missing header guard
2023-03-21 11:00:41 +01:00
Max Kellermann
a20d467bf1
event/Loop: move quit_injected check to inside #ifdef HAVE_THREADED_EVENT_LOOP
2023-03-20 15:02:32 +01:00
Max Kellermann
102dc123e8
LogBackend: log to stderr (regression fix)
2023-03-14 20:25:28 +01:00
Max Kellermann
b4d0b23369
LogBackend: use fmt::print()
2023-03-14 20:24:14 +01:00
Max Kellermann
119a949bb5
ls: use fmt::print()
2023-03-14 20:20:46 +01:00
Max Kellermann
f5b22bf2c3
input/Offset: remove unused macro PRIoffset
2023-03-14 20:20:10 +01:00
Max Kellermann
5b7a89d714
mixer/plugins/volume_mapping: convert to C++
2023-03-14 20:18:41 +01:00
Max Kellermann
5b41857a22
mixer/plugins/volume_mapping: add SPDX header
2023-03-14 20:08:43 +01:00
Max Kellermann
688d9ff114
util/UriExtract: add uri_get_path_query_fragment()
...
Rename uri_get_path() to uri_get_path_query_fragment() and add a new
uri_get_path() function.
2023-03-14 20:03:17 +01:00
Max Kellermann
bc51bc2933
pcm/Normalizer: add method Reset()
2023-03-13 13:54:12 +01:00
Max Kellermann
f547a56b1d
pcm/Normalizer: use Traits::long_type
2023-03-13 13:51:27 +01:00
Max Kellermann
1f6637d49a
pcm/Normalizer: add constant SHIFT
2023-03-13 13:49:25 +01:00
Max Kellermann
de155a740c
pcm/Normalizer: convert peakPos to std::size_t
2023-03-13 13:47:04 +01:00
Max Kellermann
f323fc48d7
pcm/Normalizer: eliminate the local variable slot
2023-03-13 13:45:28 +01:00
Max Kellermann
2ea634c302
pcm/Normalizer: replace the gain
array with a simple prev_gain
variable
2023-03-13 13:44:45 +01:00
Max Kellermann
c0d38d941a
pcm/Normalizer: split the normalization loop
...
Performance improvement because the ramp code is now moved out of the
hot code path, allowing the compiler to vectorize.
2023-03-13 13:38:19 +01:00
Max Kellermann
d7f2d90fd3
pcm/Normalizer: no in-place editing, separate src/dest parameters
...
This eliminates the memcpy() call from NormalizeFilter::FilterPCM().
2023-03-13 13:37:49 +01:00
Max Kellermann
8ea9b89321
pcm/Normalizer: use std::span
2023-03-13 13:16:44 +01:00
Max Kellermann
738254b2fc
pcm/Normalizer: use SampleTraits
2023-03-13 12:42:37 +01:00
Max Kellermann
fcc9a98cad
pcm/Normalizer: use PcmClamp()
2023-03-13 12:42:36 +01:00
Max Kellermann
dcf0a3e475
pcm/Normalizer: remove clipped
(only written to, never read)
2023-03-13 12:42:34 +01:00
Max Kellermann
e990d6eecc
pcm/Normalizer: make variables more local
2023-03-13 12:42:31 +01:00
Max Kellermann
941636b87b
pcm/Normalizer: eliminate local variable ap
2023-03-13 12:31:16 +01:00
Max Kellermann
1298a82f4f
pcm/Normalizer: use std::size_t
2023-03-13 12:31:16 +01:00
Max Kellermann
e6fedcbd10
pcm/Normalizer: expose the class, convert functions to methods
2023-03-13 12:25:09 +01:00
Max Kellermann
48c8c7daf5
pcm/Normalizer: move code to ctor/dtor
2023-03-13 12:25:09 +01:00
Max Kellermann
6e5d9d4490
pcm/Normalizer: hard-code the preferences
2023-03-13 12:25:09 +01:00
Max Kellermann
d2f2dde2e1
pcm/Normalizer: eliminate struct CompressorConfig
2023-03-13 12:25:09 +01:00
Max Kellermann
d0dd035075
pcm/Normalizer: use new/delete instead of malloc()/free()
2023-03-13 12:25:09 +01:00
Max Kellermann
7702643e1b
pcm/Normalizer: remove Compressor_setHistory(), no resize possible
...
This feature was never used.
2023-03-13 12:25:09 +01:00
Max Kellermann
984c9c317a
pcm/Normalizer: add noexcept
2023-03-13 12:25:09 +01:00
Max Kellermann
2d7068a09d
pcm/AudioCompress: convert to C++
2023-03-13 12:25:01 +01:00
Max Kellermann
d712c3b408
pcm/AudioCompress: fold config.h into compress.c
2023-03-13 11:55:44 +01:00
Max Kellermann
0a623122dc
pcm/AudioCompress: add SPDX header
2023-03-13 11:40:46 +01:00
Max Kellermann
68c36c0d3f
decoder/dsf: use PackedLE64 instead of DsdUint64
2023-03-12 20:27:05 +01:00
Max Kellermann
f3ebaf8bdd
util/ByteOrder: add class PackedLE64
2023-03-12 20:25:49 +01:00
Max Kellermann
c472046cbb
decoder/dsdiff: use PackedBE64 instead of DffDsdUint64
2023-03-12 20:22:50 +01:00
Max Kellermann
02296adbba
io/FileDescriptor: include cleanup
2023-03-12 20:18:13 +01:00