Merge branch 'v0.19.x'
This commit is contained in:
commit
412bedb697
5
NEWS
5
NEWS
@ -24,6 +24,8 @@ ver 0.19.8 (not yet released)
|
|||||||
- mms: reduce delay at the beginning of playback
|
- mms: reduce delay at the beginning of playback
|
||||||
* decoder
|
* decoder
|
||||||
- dsdiff, dsf: allow ID3 tags larger than 4 kB
|
- dsdiff, dsf: allow ID3 tags larger than 4 kB
|
||||||
|
- ffmpeg: support interleaved floating point
|
||||||
|
* fix clang 3.6 warnings
|
||||||
|
|
||||||
ver 0.19.7 (2014/12/17)
|
ver 0.19.7 (2014/12/17)
|
||||||
* input
|
* input
|
||||||
@ -188,6 +190,9 @@ ver 0.19 (2014/10/10)
|
|||||||
* install systemd unit for socket activation
|
* install systemd unit for socket activation
|
||||||
* Android port
|
* Android port
|
||||||
|
|
||||||
|
ver 0.18.22 (not yet released)
|
||||||
|
* fix clang 3.6 warnings
|
||||||
|
|
||||||
ver 0.18.21 (2014/12/17)
|
ver 0.18.21 (2014/12/17)
|
||||||
* playlist
|
* playlist
|
||||||
- embcue: fix filename suffix detection
|
- embcue: fix filename suffix detection
|
||||||
|
10
doc/user.xml
10
doc/user.xml
@ -89,7 +89,7 @@ cd mpd-version</programlisting>
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
apt-get install g++ automake autoconf \
|
apt-get install g++ \
|
||||||
libmad0-dev libmpg123-dev libid3tag0-dev \
|
libmad0-dev libmpg123-dev libid3tag0-dev \
|
||||||
libflac-dev libvorbis-dev libopus-dev \
|
libflac-dev libvorbis-dev libopus-dev \
|
||||||
libadplug-dev libaudiofile-dev libsndfile1-dev libfaad-dev \
|
libadplug-dev libaudiofile-dev libsndfile1-dev libfaad-dev \
|
||||||
@ -98,19 +98,21 @@ apt-get install g++ automake autoconf \
|
|||||||
libsidplay2-dev libsidutils-dev libresid-builder-dev \
|
libsidplay2-dev libsidutils-dev libresid-builder-dev \
|
||||||
libavcodec-dev libavformat-dev \
|
libavcodec-dev libavformat-dev \
|
||||||
libmp3lame-dev \
|
libmp3lame-dev \
|
||||||
libsamplerate0-dev \
|
libsamplerate0-dev libsoxr-dev \
|
||||||
libbz2-dev libcdio-paranoia-dev libiso9660-dev libmms-dev \
|
libbz2-dev libcdio-paranoia-dev libiso9660-dev libmms-dev \
|
||||||
libzzip-dev \
|
libzzip-dev \
|
||||||
libcurl4-gnutls-dev libyajl-dev \
|
libcurl4-gnutls-dev libyajl-dev libexpat-dev \
|
||||||
libasound2-dev libao-dev libjack-jackd2-dev libopenal-dev \
|
libasound2-dev libao-dev libjack-jackd2-dev libopenal-dev \
|
||||||
libpulse-dev libroar-dev libshout3-dev \
|
libpulse-dev libroar-dev libshout3-dev \
|
||||||
libmpdclient-dev \
|
libmpdclient-dev \
|
||||||
|
libnfs-dev libsmbclient-dev \
|
||||||
|
libupnp-dev \
|
||||||
libavahi-client-dev \
|
libavahi-client-dev \
|
||||||
libsqlite3-dev \
|
libsqlite3-dev \
|
||||||
libsystemd-daemon-dev libwrap0-dev \
|
libsystemd-daemon-dev libwrap0-dev \
|
||||||
libcppunit-dev xmlto \
|
libcppunit-dev xmlto \
|
||||||
libboost-dev \
|
libboost-dev \
|
||||||
libglib2.0-dev
|
libglib2.0-dev libicu-dev
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -64,6 +64,13 @@
|
|||||||
# warning Untested compiler. Use at your own risk!
|
# warning Untested compiler. Use at your own risk!
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are we building with the specified version of clang or newer?
|
||||||
|
*/
|
||||||
|
#define CLANG_CHECK_VERSION(major, minor) \
|
||||||
|
(defined(__clang__) && \
|
||||||
|
CLANG_VERSION >= GCC_MAKE_VERSION(major, minor, 0))
|
||||||
|
|
||||||
#if CLANG_OR_GCC_VERSION(4,0)
|
#if CLANG_OR_GCC_VERSION(4,0)
|
||||||
|
|
||||||
/* GCC 4.x */
|
/* GCC 4.x */
|
||||||
|
@ -76,7 +76,10 @@ idle_get_names(void)
|
|||||||
unsigned
|
unsigned
|
||||||
idle_parse_name(const char *name)
|
idle_parse_name(const char *name)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(name != nullptr);
|
assert(name != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
for (unsigned i = 0; idle_names[i] != nullptr; ++i)
|
for (unsigned i = 0; idle_names[i] != nullptr; ++i)
|
||||||
if (StringEqualsCaseASCII(name, idle_names[i]))
|
if (StringEqualsCaseASCII(name, idle_names[i]))
|
||||||
|
@ -77,7 +77,10 @@ SongFilter::Item::Item(unsigned _tag, time_t _time)
|
|||||||
bool
|
bool
|
||||||
SongFilter::Item::StringMatch(const char *s) const
|
SongFilter::Item::StringMatch(const char *s) const
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(s != nullptr);
|
assert(s != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (fold_case) {
|
if (fold_case) {
|
||||||
const std::string folded = IcuCaseFold(s);
|
const std::string folded = IcuCaseFold(s);
|
||||||
|
@ -77,7 +77,10 @@ SongLoader::LoadFile(const char *path_utf8, Error &error) const
|
|||||||
DetachedSong *
|
DetachedSong *
|
||||||
SongLoader::LoadSong(const char *uri_utf8, Error &error) const
|
SongLoader::LoadSong(const char *uri_utf8, Error &error) const
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(uri_utf8 != nullptr);
|
assert(uri_utf8 != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (memcmp(uri_utf8, "file:///", 8) == 0)
|
if (memcmp(uri_utf8, "file:///", 8) == 0)
|
||||||
/* absolute path */
|
/* absolute path */
|
||||||
|
@ -43,7 +43,7 @@ public:
|
|||||||
|
|
||||||
virtual const LightSong *GetSong(const char *uri_utf8,
|
virtual const LightSong *GetSong(const char *uri_utf8,
|
||||||
Error &error) const override;
|
Error &error) const override;
|
||||||
virtual void ReturnSong(const LightSong *song) const;
|
void ReturnSong(const LightSong *song) const override;
|
||||||
|
|
||||||
virtual bool Visit(const DatabaseSelection &selection,
|
virtual bool Visit(const DatabaseSelection &selection,
|
||||||
VisitDirectory visit_directory,
|
VisitDirectory visit_directory,
|
||||||
|
@ -103,7 +103,7 @@ public:
|
|||||||
virtual void Close() override;
|
virtual void Close() override;
|
||||||
virtual const LightSong *GetSong(const char *uri_utf8,
|
virtual const LightSong *GetSong(const char *uri_utf8,
|
||||||
Error &error) const override;
|
Error &error) const override;
|
||||||
virtual void ReturnSong(const LightSong *song) const;
|
void ReturnSong(const LightSong *song) const override;
|
||||||
|
|
||||||
virtual bool Visit(const DatabaseSelection &selection,
|
virtual bool Visit(const DatabaseSelection &selection,
|
||||||
VisitDirectory visit_directory,
|
VisitDirectory visit_directory,
|
||||||
@ -731,7 +731,7 @@ ProxyDatabase::Visit(const DatabaseSelection &selection,
|
|||||||
{
|
{
|
||||||
// TODO: eliminate the const_cast
|
// TODO: eliminate the const_cast
|
||||||
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
|
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
|
||||||
return nullptr;
|
return false;
|
||||||
|
|
||||||
if (!visit_directory && !visit_playlist && selection.recursive &&
|
if (!visit_directory && !visit_playlist && selection.recursive &&
|
||||||
(ServerSupportsSearchBase(connection)
|
(ServerSupportsSearchBase(connection)
|
||||||
@ -757,7 +757,7 @@ ProxyDatabase::VisitUniqueTags(const DatabaseSelection &selection,
|
|||||||
{
|
{
|
||||||
// TODO: eliminate the const_cast
|
// TODO: eliminate the const_cast
|
||||||
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
|
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
|
||||||
return nullptr;
|
return false;
|
||||||
|
|
||||||
enum mpd_tag_type tag_type2 = Convert(tag_type);
|
enum mpd_tag_type tag_type2 = Convert(tag_type);
|
||||||
if (tag_type2 == MPD_TAG_COUNT) {
|
if (tag_type2 == MPD_TAG_COUNT) {
|
||||||
@ -810,7 +810,7 @@ ProxyDatabase::GetStats(const DatabaseSelection &selection,
|
|||||||
|
|
||||||
// TODO: eliminate the const_cast
|
// TODO: eliminate the const_cast
|
||||||
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
|
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
|
||||||
return nullptr;
|
return false;
|
||||||
|
|
||||||
struct mpd_stats *stats2 =
|
struct mpd_stats *stats2 =
|
||||||
mpd_run_stats(connection);
|
mpd_run_stats(connection);
|
||||||
|
@ -435,9 +435,12 @@ SimpleDatabase::Save(Error &error)
|
|||||||
bool
|
bool
|
||||||
SimpleDatabase::Mount(const char *uri, Database *db, Error &error)
|
SimpleDatabase::Mount(const char *uri, Database *db, Error &error)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(uri != nullptr);
|
assert(uri != nullptr);
|
||||||
assert(*uri != 0);
|
|
||||||
assert(db != nullptr);
|
assert(db != nullptr);
|
||||||
|
#endif
|
||||||
|
assert(*uri != 0);
|
||||||
|
|
||||||
ScopeDatabaseLock protect;
|
ScopeDatabaseLock protect;
|
||||||
|
|
||||||
@ -445,13 +448,13 @@ SimpleDatabase::Mount(const char *uri, Database *db, Error &error)
|
|||||||
if (r.uri == nullptr) {
|
if (r.uri == nullptr) {
|
||||||
error.Format(db_domain, DB_CONFLICT,
|
error.Format(db_domain, DB_CONFLICT,
|
||||||
"Already exists: %s", uri);
|
"Already exists: %s", uri);
|
||||||
return nullptr;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strchr(r.uri, '/') != nullptr) {
|
if (strchr(r.uri, '/') != nullptr) {
|
||||||
error.Format(db_domain, DB_NOT_FOUND,
|
error.Format(db_domain, DB_NOT_FOUND,
|
||||||
"Parent not found: %s", uri);
|
"Parent not found: %s", uri);
|
||||||
return nullptr;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Directory *mnt = r.directory->CreateChild(r.uri);
|
Directory *mnt = r.directory->CreateChild(r.uri);
|
||||||
@ -478,7 +481,7 @@ SimpleDatabase::Mount(const char *local_uri, const char *storage_uri,
|
|||||||
if (cache_path.IsNull()) {
|
if (cache_path.IsNull()) {
|
||||||
error.Format(db_domain, DB_NOT_FOUND,
|
error.Format(db_domain, DB_NOT_FOUND,
|
||||||
"No 'cache_directory' configured");
|
"No 'cache_directory' configured");
|
||||||
return nullptr;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string name(storage_uri);
|
std::string name(storage_uri);
|
||||||
|
@ -110,9 +110,9 @@ public:
|
|||||||
virtual bool Open(Error &error) override;
|
virtual bool Open(Error &error) override;
|
||||||
virtual void Close() override;
|
virtual void Close() override;
|
||||||
|
|
||||||
virtual const LightSong *GetSong(const char *uri_utf8,
|
const LightSong *GetSong(const char *uri_utf8,
|
||||||
Error &error) const override;
|
Error &error) const override;
|
||||||
virtual void ReturnSong(const LightSong *song) const;
|
void ReturnSong(const LightSong *song) const override;
|
||||||
|
|
||||||
virtual bool Visit(const DatabaseSelection &selection,
|
virtual bool Visit(const DatabaseSelection &selection,
|
||||||
VisitDirectory visit_directory,
|
VisitDirectory visit_directory,
|
||||||
|
@ -85,7 +85,7 @@ public:
|
|||||||
virtual void Close() override;
|
virtual void Close() override;
|
||||||
virtual const LightSong *GetSong(const char *uri_utf8,
|
virtual const LightSong *GetSong(const char *uri_utf8,
|
||||||
Error &error) const override;
|
Error &error) const override;
|
||||||
virtual void ReturnSong(const LightSong *song) const;
|
void ReturnSong(const LightSong *song) const override;
|
||||||
|
|
||||||
virtual bool Visit(const DatabaseSelection &selection,
|
virtual bool Visit(const DatabaseSelection &selection,
|
||||||
VisitDirectory visit_directory,
|
VisitDirectory visit_directory,
|
||||||
@ -101,7 +101,9 @@ public:
|
|||||||
virtual bool GetStats(const DatabaseSelection &selection,
|
virtual bool GetStats(const DatabaseSelection &selection,
|
||||||
DatabaseStats &stats,
|
DatabaseStats &stats,
|
||||||
Error &error) const override;
|
Error &error) const override;
|
||||||
virtual time_t GetUpdateStamp() const {return 0;}
|
time_t GetUpdateStamp() const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool Configure(const config_param ¶m, Error &error);
|
bool Configure(const config_param ¶m, Error &error);
|
||||||
|
@ -26,7 +26,10 @@
|
|||||||
bool
|
bool
|
||||||
DecoderPlugin::SupportsSuffix(const char *suffix) const
|
DecoderPlugin::SupportsSuffix(const char *suffix) const
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(suffix != nullptr);
|
assert(suffix != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
return suffixes != nullptr && string_array_contains(suffixes, suffix);
|
return suffixes != nullptr && string_array_contains(suffixes, suffix);
|
||||||
|
|
||||||
@ -35,7 +38,10 @@ DecoderPlugin::SupportsSuffix(const char *suffix) const
|
|||||||
bool
|
bool
|
||||||
DecoderPlugin::SupportsMimeType(const char *mime_type) const
|
DecoderPlugin::SupportsMimeType(const char *mime_type) const
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(mime_type != nullptr);
|
assert(mime_type != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
return mime_types != nullptr &&
|
return mime_types != nullptr &&
|
||||||
string_array_contains(mime_types, mime_type);
|
string_array_contains(mime_types, mime_type);
|
||||||
|
@ -232,6 +232,7 @@ ffmpeg_sample_format(enum AVSampleFormat sample_fmt)
|
|||||||
case AV_SAMPLE_FMT_S32P:
|
case AV_SAMPLE_FMT_S32P:
|
||||||
return SampleFormat::S32;
|
return SampleFormat::S32;
|
||||||
|
|
||||||
|
case AV_SAMPLE_FMT_FLT:
|
||||||
case AV_SAMPLE_FMT_FLTP:
|
case AV_SAMPLE_FMT_FLTP:
|
||||||
return SampleFormat::FLOAT;
|
return SampleFormat::FLOAT;
|
||||||
|
|
||||||
|
@ -53,10 +53,11 @@ public:
|
|||||||
children.emplace_back(name, filter);
|
children.emplace_back(name, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual AudioFormat Open(AudioFormat &af, Error &error) override;
|
/* virtual methods from class Filter */
|
||||||
virtual void Close();
|
AudioFormat Open(AudioFormat &af, Error &error) override;
|
||||||
virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
void Close() override;
|
||||||
Error &error);
|
ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
||||||
|
Error &error) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
|
@ -34,10 +34,11 @@ class NormalizeFilter final : public Filter {
|
|||||||
PcmBuffer buffer;
|
PcmBuffer buffer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual AudioFormat Open(AudioFormat &af, Error &error) override;
|
/* virtual methods from class Filter */
|
||||||
virtual void Close();
|
AudioFormat Open(AudioFormat &af, Error &error) override;
|
||||||
virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
void Close() override;
|
||||||
Error &error) override;
|
ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
||||||
|
Error &error) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
static Filter *
|
static Filter *
|
||||||
|
@ -112,10 +112,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
virtual AudioFormat Open(AudioFormat &af, Error &error) override;
|
/* virtual methods from class Filter */
|
||||||
virtual void Close();
|
AudioFormat Open(AudioFormat &af, Error &error) override;
|
||||||
virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
void Close() override;
|
||||||
Error &error) override;
|
ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
||||||
|
Error &error) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -120,10 +120,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool Configure(const config_param ¶m, Error &error);
|
bool Configure(const config_param ¶m, Error &error);
|
||||||
|
|
||||||
virtual AudioFormat Open(AudioFormat &af, Error &error) override;
|
/* virtual methods from class Filter */
|
||||||
virtual void Close();
|
AudioFormat Open(AudioFormat &af, Error &error) override;
|
||||||
virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
void Close() override;
|
||||||
Error &error) override;
|
ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
||||||
|
Error &error) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -43,10 +43,11 @@ public:
|
|||||||
pv.SetVolume(_volume);
|
pv.SetVolume(_volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual AudioFormat Open(AudioFormat &af, Error &error) override;
|
/* virtual methods from class Filter */
|
||||||
virtual void Close();
|
AudioFormat Open(AudioFormat &af, Error &error) override;
|
||||||
virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
void Close() override;
|
||||||
Error &error) override;
|
ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
|
||||||
|
Error &error) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr Domain volume_domain("pcm_volume");
|
static constexpr Domain volume_domain("pcm_volume");
|
||||||
|
@ -89,7 +89,10 @@ static inline void FixSeparators(std::string &s)
|
|||||||
std::string
|
std::string
|
||||||
PathToUTF8(const char *path_fs)
|
PathToUTF8(const char *path_fs)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(path_fs != nullptr);
|
assert(path_fs != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_FS_CHARSET
|
#ifdef HAVE_FS_CHARSET
|
||||||
if (fs_converter == nullptr) {
|
if (fs_converter == nullptr) {
|
||||||
@ -111,7 +114,10 @@ PathToUTF8(const char *path_fs)
|
|||||||
std::string
|
std::string
|
||||||
PathFromUTF8(const char *path_utf8)
|
PathFromUTF8(const char *path_utf8)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(path_utf8 != nullptr);
|
assert(path_utf8 != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (fs_converter == nullptr)
|
if (fs_converter == nullptr)
|
||||||
return path_utf8;
|
return path_utf8;
|
||||||
|
@ -52,7 +52,10 @@ template<typename Traits>
|
|||||||
typename Traits::const_pointer
|
typename Traits::const_pointer
|
||||||
GetBasePathImpl(typename Traits::const_pointer p)
|
GetBasePathImpl(typename Traits::const_pointer p)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(p != nullptr);
|
assert(p != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
typename Traits::const_pointer sep = Traits::FindLastSeparator(p);
|
typename Traits::const_pointer sep = Traits::FindLastSeparator(p);
|
||||||
return sep != nullptr
|
return sep != nullptr
|
||||||
@ -64,7 +67,10 @@ template<typename Traits>
|
|||||||
typename Traits::string
|
typename Traits::string
|
||||||
GetParentPathImpl(typename Traits::const_pointer p)
|
GetParentPathImpl(typename Traits::const_pointer p)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(p != nullptr);
|
assert(p != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
typename Traits::const_pointer sep = Traits::FindLastSeparator(p);
|
typename Traits::const_pointer sep = Traits::FindLastSeparator(p);
|
||||||
if (sep == nullptr)
|
if (sep == nullptr)
|
||||||
|
@ -57,7 +57,11 @@ struct PathTraitsFS {
|
|||||||
|
|
||||||
gcc_pure gcc_nonnull_all
|
gcc_pure gcc_nonnull_all
|
||||||
static const_pointer FindLastSeparator(const_pointer p) {
|
static const_pointer FindLastSeparator(const_pointer p) {
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(p != nullptr);
|
assert(p != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
const_pointer pos = p + GetLength(p);
|
const_pointer pos = p + GetLength(p);
|
||||||
while (p != pos && !IsSeparator(*pos))
|
while (p != pos && !IsSeparator(*pos))
|
||||||
@ -77,7 +81,11 @@ struct PathTraitsFS {
|
|||||||
|
|
||||||
gcc_pure gcc_nonnull_all
|
gcc_pure gcc_nonnull_all
|
||||||
static bool IsAbsolute(const_pointer p) {
|
static bool IsAbsolute(const_pointer p) {
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(p != nullptr);
|
assert(p != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
if (IsDrive(p) && IsSeparator(p[2]))
|
if (IsDrive(p) && IsSeparator(p[2]))
|
||||||
return true;
|
return true;
|
||||||
@ -147,7 +155,11 @@ struct PathTraitsUTF8 {
|
|||||||
|
|
||||||
gcc_pure gcc_nonnull_all
|
gcc_pure gcc_nonnull_all
|
||||||
static const_pointer FindLastSeparator(const_pointer p) {
|
static const_pointer FindLastSeparator(const_pointer p) {
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(p != nullptr);
|
assert(p != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
return strrchr(p, SEPARATOR);
|
return strrchr(p, SEPARATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +172,11 @@ struct PathTraitsUTF8 {
|
|||||||
|
|
||||||
gcc_pure gcc_nonnull_all
|
gcc_pure gcc_nonnull_all
|
||||||
static bool IsAbsolute(const_pointer p) {
|
static bool IsAbsolute(const_pointer p) {
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(p != nullptr);
|
assert(p != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
if (IsDrive(p) && IsSeparator(p[2]))
|
if (IsDrive(p) && IsSeparator(p[2]))
|
||||||
return true;
|
return true;
|
||||||
|
@ -122,7 +122,10 @@ InputStream::IsAvailable()
|
|||||||
size_t
|
size_t
|
||||||
InputStream::LockRead(void *ptr, size_t _size, Error &error)
|
InputStream::LockRead(void *ptr, size_t _size, Error &error)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(ptr != nullptr);
|
assert(ptr != nullptr);
|
||||||
|
#endif
|
||||||
assert(_size > 0);
|
assert(_size > 0);
|
||||||
|
|
||||||
const ScopeLock protect(mutex);
|
const ScopeLock protect(mutex);
|
||||||
|
@ -43,7 +43,7 @@ protected:
|
|||||||
virtual size_t ThreadRead(void *ptr, size_t size,
|
virtual size_t ThreadRead(void *ptr, size_t size,
|
||||||
Error &error) override;
|
Error &error) override;
|
||||||
|
|
||||||
virtual void Close() {
|
void Close() override {
|
||||||
mmsx_close(mms);
|
mmsx_close(mms);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -78,8 +78,11 @@ gcc_pure
|
|||||||
int
|
int
|
||||||
IcuCollate(const char *a, const char *b)
|
IcuCollate(const char *a, const char *b)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(a != nullptr);
|
assert(a != nullptr);
|
||||||
assert(b != nullptr);
|
assert(b != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ICU
|
#ifdef HAVE_ICU
|
||||||
assert(collator != nullptr);
|
assert(collator != nullptr);
|
||||||
@ -116,7 +119,10 @@ IcuCaseFold(const char *src)
|
|||||||
{
|
{
|
||||||
#ifdef HAVE_ICU
|
#ifdef HAVE_ICU
|
||||||
assert(collator != nullptr);
|
assert(collator != nullptr);
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(src != nullptr);
|
assert(src != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
const auto u = UCharFromUTF8(src);
|
const auto u = UCharFromUTF8(src);
|
||||||
if (u.IsNull())
|
if (u.IsNull())
|
||||||
|
@ -109,7 +109,7 @@ ShoutOutput::Configure(const config_param ¶m, Error &error)
|
|||||||
if (!audio_format.IsFullyDefined()) {
|
if (!audio_format.IsFullyDefined()) {
|
||||||
error.Set(config_domain,
|
error.Set(config_domain,
|
||||||
"Need full audio format specification");
|
"Need full audio format specification");
|
||||||
return nullptr;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *host = require_block_string(param, "host");
|
const char *host = require_block_string(param, "host");
|
||||||
|
@ -44,7 +44,7 @@ PcmFormatConverter::Open(SampleFormat _src_format, SampleFormat _dest_format,
|
|||||||
"PCM conversion from %s to %s is not implemented",
|
"PCM conversion from %s to %s is not implemented",
|
||||||
sample_format_to_string(_src_format),
|
sample_format_to_string(_src_format),
|
||||||
sample_format_to_string(_dest_format));
|
sample_format_to_string(_dest_format));
|
||||||
return nullptr;
|
return false;
|
||||||
|
|
||||||
case SampleFormat::S16:
|
case SampleFormat::S16:
|
||||||
case SampleFormat::S24_P32:
|
case SampleFormat::S24_P32:
|
||||||
|
@ -288,7 +288,7 @@ NfsStorage::GetInfo(const char *uri_utf8, gcc_unused bool follow,
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!WaitConnected(error))
|
if (!WaitConnected(error))
|
||||||
return nullptr;
|
return false;
|
||||||
|
|
||||||
NfsGetInfoOperation operation(*connection, path.c_str(), info);
|
NfsGetInfoOperation operation(*connection, path.c_str(), info);
|
||||||
return operation.Run(error);
|
return operation.Run(error);
|
||||||
|
@ -182,7 +182,10 @@ TagBuilder::Complement(const Tag &other)
|
|||||||
inline void
|
inline void
|
||||||
TagBuilder::AddItemInternal(TagType type, const char *value, size_t length)
|
TagBuilder::AddItemInternal(TagType type, const char *value, size_t length)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(value != nullptr);
|
assert(value != nullptr);
|
||||||
|
#endif
|
||||||
assert(length > 0);
|
assert(length > 0);
|
||||||
|
|
||||||
auto f = FixTagString(value, length);
|
auto f = FixTagString(value, length);
|
||||||
@ -203,7 +206,10 @@ TagBuilder::AddItemInternal(TagType type, const char *value, size_t length)
|
|||||||
void
|
void
|
||||||
TagBuilder::AddItem(TagType type, const char *value, size_t length)
|
TagBuilder::AddItem(TagType type, const char *value, size_t length)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(value != nullptr);
|
assert(value != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (length == 0 || ignore_tag_items[type])
|
if (length == 0 || ignore_tag_items[type])
|
||||||
return;
|
return;
|
||||||
@ -214,7 +220,10 @@ TagBuilder::AddItem(TagType type, const char *value, size_t length)
|
|||||||
void
|
void
|
||||||
TagBuilder::AddItem(TagType type, const char *value)
|
TagBuilder::AddItem(TagType type, const char *value)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(value != nullptr);
|
assert(value != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
AddItem(type, value, strlen(value));
|
AddItem(type, value, strlen(value));
|
||||||
}
|
}
|
||||||
|
@ -43,24 +43,30 @@ gcc_pure gcc_nonnull_all
|
|||||||
static inline bool
|
static inline bool
|
||||||
StringEqualsCaseASCII(const char *a, const char *b)
|
StringEqualsCaseASCII(const char *a, const char *b)
|
||||||
{
|
{
|
||||||
assert(a != nullptr);
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
assert(b != nullptr);
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
|
assert(a != nullptr);
|
||||||
|
assert(b != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* note: strcasecmp() depends on the locale, but for ASCII-only
|
/* note: strcasecmp() depends on the locale, but for ASCII-only
|
||||||
strings, it's safe to use */
|
strings, it's safe to use */
|
||||||
return strcasecmp(a, b) == 0;
|
return strcasecmp(a, b) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
gcc_pure gcc_nonnull_all
|
gcc_pure gcc_nonnull_all
|
||||||
static inline bool
|
static inline bool
|
||||||
StringEqualsCaseASCII(const char *a, const char *b, size_t n)
|
StringEqualsCaseASCII(const char *a, const char *b, size_t n)
|
||||||
{
|
{
|
||||||
assert(a != nullptr);
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
assert(b != nullptr);
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
|
assert(a != nullptr);
|
||||||
|
assert(b != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* note: strcasecmp() depends on the locale, but for ASCII-only
|
/* note: strcasecmp() depends on the locale, but for ASCII-only
|
||||||
strings, it's safe to use */
|
strings, it's safe to use */
|
||||||
return strncasecmp(a, b, n) == 0;
|
return strncasecmp(a, b, n) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -140,8 +140,11 @@ uri_remove_auth(const char *uri)
|
|||||||
bool
|
bool
|
||||||
uri_is_child(const char *parent, const char *child)
|
uri_is_child(const char *parent, const char *child)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(parent != nullptr);
|
assert(parent != nullptr);
|
||||||
assert(child != nullptr);
|
assert(child != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
const size_t parent_length = strlen(parent);
|
const size_t parent_length = strlen(parent);
|
||||||
return memcmp(parent, child, parent_length) == 0 &&
|
return memcmp(parent, child, parent_length) == 0 &&
|
||||||
|
Loading…
Reference in New Issue
Block a user