diff --git a/NEWS b/NEWS index 11484947a..571b2cbb6 100644 --- a/NEWS +++ b/NEWS @@ -48,11 +48,13 @@ ver 0.20 (not yet released) * update - apply .mpdignore matches to subdirectories -ver 0.19.13 (not yet released) +ver 0.19.13 (2016/02/23) * tags - aiff, riff: fix ID3 chunk padding * decoder - ffmpeg: support the TAK codec +* fix disappearing duration of remote songs during playback +* initialize supplementary groups with glibc 2.19+ ver 0.19.12 (2015/12/15) * fix assertion failure on malformed UTF-8 tag diff --git a/configure.ac b/configure.ac index 05ff3ad50..ab98b19f8 100644 --- a/configure.ac +++ b/configure.ac @@ -229,6 +229,7 @@ if test x$host_is_linux = xyes; then fi AC_CHECK_FUNCS(getpwnam_r getpwuid_r) +AC_CHECK_FUNCS(initgroups) AC_CHECK_FUNCS(fnmatch) AC_CHECK_FUNCS(strndup) diff --git a/src/DetachedSong.hxx b/src/DetachedSong.hxx index 844283dcf..52ea19926 100644 --- a/src/DetachedSong.hxx +++ b/src/DetachedSong.hxx @@ -188,6 +188,14 @@ public: tag = std::move(other.tag); } + /** + * Similar to the MoveTagFrom(), but move only the #TagItem + * array. + */ + void MoveTagItemsFrom(DetachedSong &&other) { + tag.MoveItemsFrom(std::move(other.tag)); + } + time_t GetLastModified() const { return mtime; } diff --git a/src/queue/Playlist.cxx b/src/queue/Playlist.cxx index 384a76a3b..9bc10610e 100644 --- a/src/queue/Playlist.cxx +++ b/src/queue/Playlist.cxx @@ -37,7 +37,7 @@ playlist::TagModified(DetachedSong &&song) DetachedSong ¤t_song = queue.GetOrder(current); if (song.IsSame(current_song)) - current_song.MoveTagFrom(std::move(song)); + current_song.MoveTagItemsFrom(std::move(song)); queue.ModifyAtOrder(current); queue.IncrementVersion(); diff --git a/src/tag/Tag.hxx b/src/tag/Tag.hxx index aca2bf6a0..200064b79 100644 --- a/src/tag/Tag.hxx +++ b/src/tag/Tag.hxx @@ -80,9 +80,17 @@ struct Tag { Tag &operator=(Tag &&other) { duration = other.duration; has_playlist = other.has_playlist; + MoveItemsFrom(std::move(other)); + return *this; + } + + /** + * Similar to the move operator, but move only the #TagItem + * array. + */ + void MoveItemsFrom(Tag &&other) { std::swap(items, other.items); std::swap(num_items, other.num_items); - return *this; } /** diff --git a/src/unix/Daemon.cxx b/src/unix/Daemon.cxx index 9aa16a078..4c31c5b8d 100644 --- a/src/unix/Daemon.cxx +++ b/src/unix/Daemon.cxx @@ -103,7 +103,7 @@ daemonize_set_user(void) (int)user_gid); } -#ifdef _BSD_SOURCE +#ifdef HAVE_INITGROUPS /* init supplementary groups * (must be done before we change our uid) */