Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8534f2d1e2 | ||
![]() |
665031467a | ||
![]() |
df33171107 | ||
![]() |
53f4044890 | ||
![]() |
a5049136ff | ||
![]() |
705b3c6b63 | ||
![]() |
6b4ac66962 | ||
![]() |
0964b06240 | ||
![]() |
92eeca3ba7 | ||
![]() |
2a86554ac4 | ||
![]() |
805caa30ce | ||
![]() |
acb798e544 | ||
![]() |
773de38bd9 | ||
![]() |
fa4beeee75 | ||
![]() |
d8351772d3 | ||
![]() |
1b5f33a435 | ||
![]() |
41b4a63f2b | ||
![]() |
d8fc2db910 | ||
![]() |
dc11dea7cc |
14
NEWS
14
NEWS
@@ -1,3 +1,17 @@
|
|||||||
|
ver 0.18.22 (2014/01/14)
|
||||||
|
* fix clang 3.6 warnings
|
||||||
|
|
||||||
|
ver 0.18.21 (2014/12/17)
|
||||||
|
* playlist
|
||||||
|
- embcue: fix filename suffix detection
|
||||||
|
* decoder
|
||||||
|
- ffmpeg: fix time stamp underflow
|
||||||
|
|
||||||
|
ver 0.18.20 (2014/12/08)
|
||||||
|
* decoder
|
||||||
|
- ffmpeg: support FFmpeg 2.5
|
||||||
|
* fix build failure with musl
|
||||||
|
|
||||||
ver 0.18.19 (2014/11/26)
|
ver 0.18.19 (2014/11/26)
|
||||||
* archive
|
* archive
|
||||||
- zzip: fix crash after seeking
|
- zzip: fix crash after seeking
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
AC_PREREQ(2.60)
|
AC_PREREQ(2.60)
|
||||||
|
|
||||||
AC_INIT(mpd, 0.18.19, mpd-devel@musicpd.org)
|
AC_INIT(mpd, 0.18.22, mpd-devel@musicpd.org)
|
||||||
|
|
||||||
VERSION_MAJOR=0
|
VERSION_MAJOR=0
|
||||||
VERSION_MINOR=18
|
VERSION_MINOR=18
|
||||||
VERSION_REVISION=19
|
VERSION_REVISION=22
|
||||||
VERSION_EXTRA=0
|
VERSION_EXTRA=0
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([src/Main.cxx])
|
AC_CONFIG_SRCDIR([src/Main.cxx])
|
||||||
|
@@ -20,33 +20,45 @@
|
|||||||
#ifndef COMPILER_H
|
#ifndef COMPILER_H
|
||||||
#define COMPILER_H
|
#define COMPILER_H
|
||||||
|
|
||||||
#define GCC_CHECK_VERSION(major, minor) \
|
#define GCC_MAKE_VERSION(major, minor, patchlevel) ((major) * 10000 + (minor) * 100 + patchlevel)
|
||||||
(defined(__GNUC__) && \
|
|
||||||
(__GNUC__ > (major) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))))
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define GCC_VERSION (__GNUC__ * 10000 \
|
#define GCC_VERSION GCC_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
|
||||||
+ __GNUC_MINOR__ * 100 \
|
|
||||||
+ __GNUC_PATCHLEVEL__)
|
|
||||||
#else
|
#else
|
||||||
#define GCC_VERSION 0
|
#define GCC_VERSION 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define GCC_CHECK_VERSION(major, minor) \
|
||||||
|
(defined(__GNUC__) && GCC_VERSION >= GCC_MAKE_VERSION(major, minor, 0))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are we building with gcc (not clang or any other compiler) and a
|
||||||
|
* version older than the specified one?
|
||||||
|
*/
|
||||||
|
#define GCC_OLDER_THAN(major, minor) \
|
||||||
|
(defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
GCC_VERSION < GCC_MAKE_VERSION(major, minor, 0))
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
# define CLANG_VERSION (__clang_major__ * 10000 \
|
# define CLANG_VERSION GCC_MAKE_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
|
||||||
+ __clang_minor__ * 100 \
|
|
||||||
+ __clang_patchlevel__)
|
|
||||||
# if __clang_major__ < 3
|
# if __clang_major__ < 3
|
||||||
# error Sorry, your clang version is too old. You need at least version 3.1.
|
# error Sorry, your clang version is too old. You need at least version 3.1.
|
||||||
# endif
|
# endif
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__)
|
||||||
# if !GCC_CHECK_VERSION(4,6)
|
# if GCC_OLDER_THAN(4,6)
|
||||||
# error Sorry, your gcc version is too old. You need at least version 4.6.
|
# error Sorry, your gcc version is too old. You need at least version 4.6.
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# 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 GCC_CHECK_VERSION(4,0)
|
#if GCC_CHECK_VERSION(4,0)
|
||||||
|
|
||||||
/* GCC 4.x */
|
/* GCC 4.x */
|
||||||
@@ -141,7 +153,7 @@
|
|||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
|
||||||
/* support for C++11 "override" was added in gcc 4.7 */
|
/* support for C++11 "override" was added in gcc 4.7 */
|
||||||
#if !defined(__clang__) && !GCC_CHECK_VERSION(4,7)
|
#if GCC_OLDER_THAN(4,7)
|
||||||
#define override
|
#define override
|
||||||
#define final
|
#define final
|
||||||
#endif
|
#endif
|
||||||
|
@@ -112,13 +112,15 @@ db_get_root(void)
|
|||||||
Directory *
|
Directory *
|
||||||
db_get_directory(const char *name)
|
db_get_directory(const char *name)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
|
assert(name != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (db == nullptr)
|
if (db == nullptr)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
Directory *music_root = db_get_root();
|
Directory *music_root = db_get_root();
|
||||||
if (name == nullptr)
|
|
||||||
return music_root;
|
|
||||||
|
|
||||||
return music_root->LookupDirectory(name);
|
return music_root->LookupDirectory(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -40,7 +40,10 @@ extern "C" {
|
|||||||
inline Directory *
|
inline Directory *
|
||||||
Directory::Allocate(const char *path)
|
Directory::Allocate(const char *path)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(path != nullptr);
|
assert(path != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
const size_t path_size = strlen(path) + 1;
|
const size_t path_size = strlen(path) + 1;
|
||||||
Directory *directory =
|
Directory *directory =
|
||||||
|
@@ -155,7 +155,10 @@ InputStream::IsAvailable()
|
|||||||
size_t
|
size_t
|
||||||
InputStream::Read(void *ptr, size_t _size, Error &error)
|
InputStream::Read(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);
|
||||||
|
|
||||||
return plugin.read(this, ptr, _size, error);
|
return plugin.read(this, ptr, _size, error);
|
||||||
@@ -164,7 +167,10 @@ InputStream::Read(void *ptr, size_t _size, Error &error)
|
|||||||
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);
|
||||||
|
@@ -78,7 +78,10 @@ SongFilter::Item::Item(unsigned _tag, const char *_value, bool _fold_case)
|
|||||||
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) {
|
||||||
char *p = g_utf8_casefold(s, -1);
|
char *p = g_utf8_casefold(s, -1);
|
||||||
|
@@ -57,7 +57,7 @@ public:
|
|||||||
virtual void Close() override;
|
virtual void Close() override;
|
||||||
virtual Song *GetSong(const char *uri_utf8,
|
virtual Song *GetSong(const char *uri_utf8,
|
||||||
Error &error) const override;
|
Error &error) const override;
|
||||||
virtual void ReturnSong(Song *song) const;
|
void ReturnSong(Song *song) const override;
|
||||||
|
|
||||||
virtual bool Visit(const DatabaseSelection &selection,
|
virtual bool Visit(const DatabaseSelection &selection,
|
||||||
VisitDirectory visit_directory,
|
VisitDirectory visit_directory,
|
||||||
@@ -592,7 +592,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)
|
||||||
@@ -617,7 +617,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) {
|
||||||
@@ -657,7 +657,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);
|
||||||
|
@@ -61,7 +61,7 @@ public:
|
|||||||
|
|
||||||
virtual Song *GetSong(const char *uri_utf8,
|
virtual Song *GetSong(const char *uri_utf8,
|
||||||
Error &error) const override;
|
Error &error) const override;
|
||||||
virtual void ReturnSong(Song *song) const;
|
void ReturnSong(Song *song) const override;
|
||||||
|
|
||||||
virtual bool Visit(const DatabaseSelection &selection,
|
virtual bool Visit(const DatabaseSelection &selection,
|
||||||
VisitDirectory visit_directory,
|
VisitDirectory visit_directory,
|
||||||
|
@@ -284,10 +284,13 @@ ffmpeg_send_packet(Decoder &decoder, InputStream &is,
|
|||||||
AVFrame *frame,
|
AVFrame *frame,
|
||||||
uint8_t **buffer, int *buffer_size)
|
uint8_t **buffer, int *buffer_size)
|
||||||
{
|
{
|
||||||
if (packet->pts >= 0 && packet->pts != (int64_t)AV_NOPTS_VALUE)
|
if (packet->pts >= 0 && packet->pts != (int64_t)AV_NOPTS_VALUE) {
|
||||||
|
auto start = start_time_fallback(*stream);
|
||||||
|
if (packet->pts >= start)
|
||||||
decoder_timestamp(decoder,
|
decoder_timestamp(decoder,
|
||||||
time_from_ffmpeg(packet->pts - start_time_fallback(*stream),
|
time_from_ffmpeg(packet->pts - start,
|
||||||
stream->time_base));
|
stream->time_base));
|
||||||
|
}
|
||||||
|
|
||||||
AVPacket packet2 = *packet;
|
AVPacket packet2 = *packet;
|
||||||
|
|
||||||
@@ -394,10 +397,15 @@ ffmpeg_probe(Decoder *decoder, InputStream &is)
|
|||||||
avpd.filename = is.uri.c_str();
|
avpd.filename = is.uri.c_str();
|
||||||
|
|
||||||
#ifdef AVPROBE_SCORE_MIME
|
#ifdef AVPROBE_SCORE_MIME
|
||||||
|
#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(56, 5, 1)
|
||||||
/* this attribute was added in libav/ffmpeg version 11, but
|
/* this attribute was added in libav/ffmpeg version 11, but
|
||||||
unfortunately it's "uint8_t" instead of "char", and it's
|
unfortunately it's "uint8_t" instead of "char", and it's
|
||||||
not "const" - wtf? */
|
not "const" - wtf? */
|
||||||
avpd.mime_type = (uint8_t *)const_cast<char *>(is.GetMimeType());
|
avpd.mime_type = (uint8_t *)const_cast<char *>(is.GetMimeType());
|
||||||
|
#else
|
||||||
|
/* API problem fixed in FFmpeg 2.5 */
|
||||||
|
avpd.mime_type = is.GetMimeType();
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return av_probe_input_format(&avpd, true);
|
return av_probe_input_format(&avpd, true);
|
||||||
|
@@ -52,10 +52,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 const void *FilterPCM(const void *src, size_t src_size,
|
void Close() override;
|
||||||
size_t *dest_size_r, Error &error);
|
const void *FilterPCM(const void *src, size_t src_size,
|
||||||
|
size_t *dest_size_r, 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 const void *FilterPCM(const void *src, size_t src_size,
|
void Close() override;
|
||||||
size_t *dest_size_r, Error &error);
|
const void *FilterPCM(const void *src, size_t src_size,
|
||||||
|
size_t *dest_size_r, Error &error) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
static Filter *
|
static Filter *
|
||||||
|
@@ -116,10 +116,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 const void *FilterPCM(const void *src, size_t src_size,
|
void Close() override;
|
||||||
size_t *dest_size_r, Error &error);
|
const void *FilterPCM(const void *src, size_t src_size,
|
||||||
|
size_t *dest_size_r, 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 const void *FilterPCM(const void *src, size_t src_size,
|
void Close() override;
|
||||||
size_t *dest_size_r, Error &error);
|
const void *FilterPCM(const void *src, size_t src_size,
|
||||||
|
size_t *dest_size_r, Error &error) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@@ -57,10 +57,10 @@ public:
|
|||||||
volume = _volume;
|
volume = _volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual AudioFormat Open(AudioFormat &af, Error &error) override;
|
AudioFormat Open(AudioFormat &af, Error &error) override;
|
||||||
virtual void Close();
|
void Close() override;
|
||||||
virtual const void *FilterPCM(const void *src, size_t src_size,
|
const void *FilterPCM(const void *src, size_t src_size,
|
||||||
size_t *dest_size_r, Error &error);
|
size_t *dest_size_r, Error &error) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr Domain volume_domain("pcm_volume");
|
static constexpr Domain volume_domain("pcm_volume");
|
||||||
|
@@ -79,7 +79,10 @@ GetFSCharset()
|
|||||||
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
|
||||||
|
|
||||||
if (fs_charset.empty())
|
if (fs_charset.empty())
|
||||||
return std::string(path_fs);
|
return std::string(path_fs);
|
||||||
@@ -109,7 +112,10 @@ PathToUTF8(const char *path_fs)
|
|||||||
char *
|
char *
|
||||||
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_charset.empty())
|
if (fs_charset.empty())
|
||||||
return g_strdup(path_utf8);
|
return g_strdup(path_utf8);
|
||||||
|
@@ -25,7 +25,10 @@
|
|||||||
const char *
|
const char *
|
||||||
PathTraits::GetBaseUTF8(const char *p)
|
PathTraits::GetBaseUTF8(const char *p)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(p != nullptr);
|
assert(p != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *slash = strrchr(p, SEPARATOR_UTF8);
|
const char *slash = strrchr(p, SEPARATOR_UTF8);
|
||||||
return slash != nullptr
|
return slash != nullptr
|
||||||
@@ -36,7 +39,10 @@ PathTraits::GetBaseUTF8(const char *p)
|
|||||||
std::string
|
std::string
|
||||||
PathTraits::GetParentUTF8(const char *p)
|
PathTraits::GetParentUTF8(const char *p)
|
||||||
{
|
{
|
||||||
|
#if !CLANG_CHECK_VERSION(3,6)
|
||||||
|
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||||
assert(p != nullptr);
|
assert(p != nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *slash = strrchr(p, SEPARATOR_UTF8);
|
const char *slash = strrchr(p, SEPARATOR_UTF8);
|
||||||
return slash != nullptr
|
return slash != nullptr
|
||||||
|
@@ -114,7 +114,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");
|
||||||
|
@@ -178,7 +178,7 @@ const struct playlist_plugin embcue_playlist_plugin = {
|
|||||||
embcue_playlist_open_uri,
|
embcue_playlist_open_uri,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
||||||
|
nullptr,
|
||||||
embcue_playlist_suffixes,
|
embcue_playlist_suffixes,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
|
||||||
};
|
};
|
||||||
|
@@ -77,7 +77,10 @@ TagBuilder::Commit()
|
|||||||
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);
|
||||||
|
|
||||||
char *p = FixTagString(value, length);
|
char *p = FixTagString(value, length);
|
||||||
@@ -98,7 +101,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;
|
||||||
@@ -109,7 +115,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));
|
||||||
}
|
}
|
||||||
|
@@ -75,7 +75,7 @@ public:
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return ::GetCurrentThreadId();
|
return ::GetCurrentThreadId();
|
||||||
#else
|
#else
|
||||||
return ::pthread_self();
|
return pthread_self();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ public:
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return id == other.id;
|
return id == other.id;
|
||||||
#else
|
#else
|
||||||
return ::pthread_equal(id, other.id);
|
return pthread_equal(id, other.id);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -43,8 +43,11 @@ 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)
|
||||||
{
|
{
|
||||||
|
#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
|
||||||
|
|
||||||
/* 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 */
|
||||||
@@ -55,8 +58,11 @@ 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)
|
||||||
{
|
{
|
||||||
|
#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
|
||||||
|
|
||||||
/* 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 */
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
#include <new>
|
#include <new>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#if !defined(__clang__) && __GNUC__ && !GCC_CHECK_VERSION(4,8)
|
#if GCC_OLDER_THAN(4,8)
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
*/
|
*/
|
||||||
template<class T>
|
template<class T>
|
||||||
class Manual {
|
class Manual {
|
||||||
#if !defined(__clang__) && __GNUC__ && !GCC_CHECK_VERSION(4,8)
|
#if GCC_OLDER_THAN(4,8)
|
||||||
/* no alignas() on gcc < 4.8: apply worst-case fallback */
|
/* no alignas() on gcc < 4.8: apply worst-case fallback */
|
||||||
__attribute__((aligned(8)))
|
__attribute__((aligned(8)))
|
||||||
#else
|
#else
|
||||||
|
@@ -128,8 +128,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 &&
|
||||||
|
Reference in New Issue
Block a user