diff --git a/NEWS b/NEWS
index 020606139..ab7465171 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,10 @@ ver 0.21 (not yet released)
* output
- alsa: non-blocking mode
+ver 0.20.7 (not yet released)
+* database
+ - simple: fix false positive directory loop detection with NFS
+
ver 0.20.6 (2017/03/10)
* input
- curl: fix headers after HTTP redirect to Shoutcast server
diff --git a/doc/user.xml b/doc/user.xml
index 865369c23..461d7f1b7 100644
--- a/doc/user.xml
+++ b/doc/user.xml
@@ -4080,7 +4080,7 @@ run
(logical "and") can be used to select portions of
the format string depending on the existing tag
values. Example:
- ~/.mpd/recorder/[%title|%name%].ogg
+ ~/.mpd/recorder/[%title%|%name%].ogg
(use the "name" tag if no title exists)
diff --git a/python/build/libs.py b/python/build/libs.py
index d4b994655..7f757d93c 100644
--- a/python/build/libs.py
+++ b/python/build/libs.py
@@ -36,8 +36,8 @@ flac = AutotoolsProject(
)
zlib = ZlibProject(
- 'http://zlib.net/zlib-1.2.8.tar.xz',
- '28f1205d8dd2001f26fec1e8c2cebe37',
+ 'http://zlib.net/zlib-1.2.11.tar.xz',
+ '4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066',
'lib/libz.a',
)
diff --git a/src/db/plugins/simple/Directory.hxx b/src/db/plugins/simple/Directory.hxx
index 6e20716ab..980ac7615 100644
--- a/src/db/plugins/simple/Directory.hxx
+++ b/src/db/plugins/simple/Directory.hxx
@@ -86,7 +86,7 @@ struct Directory {
Directory *const parent;
time_t mtime = 0;
- unsigned inode = 0, device = 0;
+ uint64_t inode = 0, device = 0;
const std::string path;
diff --git a/src/decoder/plugins/PcmDecoderPlugin.cxx b/src/decoder/plugins/PcmDecoderPlugin.cxx
index 85e177751..de9390c97 100644
--- a/src/decoder/plugins/PcmDecoderPlugin.cxx
+++ b/src/decoder/plugins/PcmDecoderPlugin.cxx
@@ -43,7 +43,8 @@ FillBuffer(DecoderClient &client, InputStream &is, B &buffer)
{
buffer.Shift();
auto w = buffer.Write();
- assert(!w.IsEmpty());
+ if (w.IsEmpty())
+ return true;
size_t nbytes = decoder_read(client, is, w.data, w.size);
if (nbytes == 0 && is.LockIsEOF())
diff --git a/src/output/plugins/RoarOutputPlugin.cxx b/src/output/plugins/RoarOutputPlugin.cxx
index a6620f7b4..88baacbd4 100644
--- a/src/output/plugins/RoarOutputPlugin.cxx
+++ b/src/output/plugins/RoarOutputPlugin.cxx
@@ -287,8 +287,6 @@ roar_tag_convert(TagType type, bool *is_uuid)
case TAG_MUSICBRAINZ_ALBUMID:
case TAG_MUSICBRAINZ_ALBUMARTISTID:
case TAG_MUSICBRAINZ_TRACKID:
- *is_uuid = true;
- return "HASH";
case TAG_MUSICBRAINZ_RELEASETRACKID:
*is_uuid = true;
return "HASH";
diff --git a/src/storage/FileInfo.hxx b/src/storage/FileInfo.hxx
index 6a8bc2dd6..d768f0532 100644
--- a/src/storage/FileInfo.hxx
+++ b/src/storage/FileInfo.hxx
@@ -50,7 +50,7 @@ struct StorageFileInfo {
* Device id and inode number. 0 means unknown / not
* applicable.
*/
- unsigned device, inode;
+ uint64_t device, inode;
StorageFileInfo() = default;
diff --git a/src/util/ScopeExit.hxx b/src/util/ScopeExit.hxx
index 0c7414f18..e93601dd4 100644
--- a/src/util/ScopeExit.hxx
+++ b/src/util/ScopeExit.hxx
@@ -45,7 +45,7 @@ public:
explicit ScopeExitGuard(F &&f):F(std::forward(f)) {}
ScopeExitGuard(ScopeExitGuard &&src)
- :F(std::move(src)) {
+ :F(std::move(src)), enabled(src.enabled) {
src.enabled = false;
}