Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mpd for openSUSE:Factory checked in at 2022-10-17 14:58:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mpd (Old) and /work/SRC/openSUSE:Factory/.mpd.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mpd" Mon Oct 17 14:58:10 2022 rev:44 rq:1011997 version:0.23.10 Changes: -------- --- /work/SRC/openSUSE:Factory/mpd/mpd.changes 2022-08-24 15:11:54.424547589 +0200 +++ /work/SRC/openSUSE:Factory/.mpd.new.2275/mpd.changes 2022-10-17 14:58:11.094148634 +0200 @@ -1,0 +2,10 @@ +Mon Oct 17 07:12:07 UTC 2022 - ???????? ???????????? <[email protected]> + +- Updated to 0.23.10 + * https://raw.githubusercontent.com/MusicPlayerDaemon/MPD/v0.23.10/NEWS + * storage: curl: fixed file time stamps + * decoder: ffmpeg: fixed libfmt 9 compiler warning + * encoder: flac: fixed failure when libFLAC is built without Ogg support + * output: alsa: fixed crash bug + +------------------------------------------------------------------- Old: ---- mpd-0.23.9.tar.xz mpd-0.23.9.tar.xz.sig New: ---- mpd-0.23.10.tar.xz mpd-0.23.10.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mpd.spec ++++++ --- /var/tmp/diff_new_pack.b0pHKb/_old 2022-10-17 14:58:11.834150055 +0200 +++ /var/tmp/diff_new_pack.b0pHKb/_new 2022-10-17 14:58:11.838150063 +0200 @@ -20,7 +20,7 @@ %bcond_with faad %bcond_without mpd_iso9660 Name: mpd -Version: 0.23.9 +Version: 0.23.10 Release: 0 Summary: Music Player Daemon License: GPL-2.0-or-later @@ -34,12 +34,11 @@ Patch0: %{name}-conf.patch Patch1: %{name}-sndfile.patch BuildRequires: cmake -BuildRequires: gcc BuildRequires: gcc-c++ +BuildRequires: group(audio) BuildRequires: hicolor-icon-theme BuildRequires: libboost_headers-devel BuildRequires: libcue-devel -BuildRequires: group(audio) # MPD_ENABLE_AUTO_LIB BuildRequires: libgcrypt-devel BuildRequires: libmikmod-devel ++++++ mpd-0.23.9.tar.xz -> mpd-0.23.10.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/NEWS new/mpd-0.23.10/NEWS --- old/mpd-0.23.9/NEWS 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/NEWS 2022-10-14 23:51:41.000000000 +0200 @@ -1,3 +1,15 @@ +ver 0.23.10 (2022/10/14) +* storage + - curl: fix file time stamps +* decoder + - ffmpeg: fix libfmt 9 compiler warning +* encoder + - flac: fix failure when libFLAC is built without Ogg support +* output + - alsa: fix crash bug +* Windows + - log to stdout by default, don't require "log_file" setting + ver 0.23.9 (2022/08/18) * input - cdio_paranoia: add options "mode" and "skip" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/android/AndroidManifest.xml new/mpd-0.23.10/android/AndroidManifest.xml --- old/mpd-0.23.9/android/AndroidManifest.xml 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/android/AndroidManifest.xml 2022-10-14 23:51:41.000000000 +0200 @@ -2,8 +2,8 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.musicpd" android:installLocation="auto" - android:versionCode="68" - android:versionName="0.23.9"> + android:versionCode="69" + android:versionName="0.23.10"> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/doc/conf.py new/mpd-0.23.10/doc/conf.py --- old/mpd-0.23.9/doc/conf.py 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/doc/conf.py 2022-10-14 23:51:41.000000000 +0200 @@ -38,7 +38,7 @@ # built documents. # # The short X.Y version. -version = '0.23.9' +version = '0.23.10' # The full version, including alpha/beta/rc tags. #release = version + '~git' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/doc/user.rst new/mpd-0.23.10/doc/user.rst --- old/mpd-0.23.9/doc/user.rst 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/doc/user.rst 2022-10-14 23:51:41.000000000 +0200 @@ -199,7 +199,7 @@ You need: * Android SDK -* `Android NDK r23 <https://developer.android.com/ndk/downloads>`_ +* `Android NDK r25b <https://developer.android.com/ndk/downloads>`_ * `Meson 0.56.0 <http://mesonbuild.com/>`__ and `Ninja <https://ninja-build.org/>`__ * cmake diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/meson.build new/mpd-0.23.10/meson.build --- old/mpd-0.23.9/meson.build 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/meson.build 2022-10-14 23:51:41.000000000 +0200 @@ -1,7 +1,7 @@ project( 'mpd', ['c', 'cpp'], - version: '0.23.9', + version: '0.23.10', meson_version: '>= 0.56.0', default_options: [ 'c_std=c11', @@ -251,6 +251,14 @@ fmt_dep = dependency('fmt', fallback: ['fmt', 'fmt_dep']) +if compiler.get_id() == 'clang' and compiler.version().version_compare('<15') + fmt_dep = declare_dependency( + dependencies: fmt_dep, + # suppress bogus clang 14 warning (the version in Android NDK r25b) + compile_args: ['-Wno-unused-local-typedef'], + ) +endif + log = static_library( 'log', 'src/Log.cxx', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/python/build/libs.py new/mpd-0.23.10/python/build/libs.py --- old/mpd-0.23.9/python/build/libs.py 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/python/build/libs.py 2022-10-14 23:51:41.000000000 +0200 @@ -43,20 +43,22 @@ ) flac = AutotoolsProject( - 'http://downloads.xiph.org/releases/flac/flac-1.3.4.tar.xz', - '8ff0607e75a322dd7cd6ec48f4f225471404ae2730d0ea945127b1355155e737', + 'http://downloads.xiph.org/releases/flac/flac-1.4.0.tar.xz', + 'af41c0733c93c237c3e52f64dd87e3b0d9af38259f1c7d11e8cbf583c48c2506', 'lib/libFLAC.a', [ '--disable-shared', '--enable-static', + '--disable-stack-smash-protection', '--disable-xmms-plugin', '--disable-cpplibs', '--disable-doxygen-docs', + '--disable-programs', ], subdirs=['include', 'src/libFLAC'], ) zlib = ZlibProject( - 'http://zlib.net/zlib-1.2.12.tar.xz', - '7db46b8d7726232a621befaab4a1c870f00a90805511c0e0090441dac57def18', + 'http://zlib.net/zlib-1.2.13.tar.xz', + 'd14c38e313afc35a9a8760dadf26042f51ea0f5d154b0630a31da0540107fb98', 'lib/libz.a', ) @@ -112,16 +114,20 @@ ) libopenmpt = AutotoolsProject( - 'https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.5.12+release.autotools.tar.gz', - '892aea7a599b5d21842bebf463b5aafdad5711be7008dd84401920c6234820af', + 'https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.6.6+release.autotools.tar.gz', + '6ddb9e26a430620944891796fefb1bbb38bd9148f6cfc558810c0d3f269876c7', 'lib/libopenmpt.a', [ '--disable-shared', '--enable-static', '--disable-openmpt123', + '--disable-examples', + '--disable-tests', + '--disable-doxygen-doc', '--without-mpg123', '--without-ogg', '--without-vorbis', '--without-vorbisfile', '--without-portaudio', '--without-portaudiocpp', '--without-sndfile', + '--without-flac', ], - base='libopenmpt-0.5.12+release.autotools', + base='libopenmpt-0.6.6+release.autotools', ) wildmidi = CmakeProject( @@ -151,8 +157,8 @@ ) ffmpeg = FfmpegProject( - 'http://ffmpeg.org/releases/ffmpeg-5.1.tar.xz', - '55eb6aab5ee235550fa54a33eaf8bf1b4ec66c01453182b12f6a993d75698b03', + 'http://ffmpeg.org/releases/ffmpeg-5.1.2.tar.xz', + '619e706d662c8420859832ddc259cd4d4096a48a2ce1eefd052db9e440eef3dc', 'lib/libavcodec.a', [ '--disable-shared', '--enable-static', @@ -387,8 +393,8 @@ ) curl = CmakeProject( - 'https://curl.se/download/curl-7.84.0.tar.xz', - '2d118b43f547bfe5bae806d8d47b4e596ea5b25a6c1f080aef49fbcd817c5db8', + 'https://curl.se/download/curl-7.85.0.tar.xz', + '88b54a6d4b9a48cb4d873c7056dcba997ddd5b7be5a2d537a4acb55c20b04be6', 'lib/libcurl.a', [ '-DBUILD_CURL_EXE=OFF', @@ -422,8 +428,8 @@ ) libnfs = AutotoolsProject( - 'https://github.com/sahlberg/libnfs/archive/libnfs-5.0.1.tar.gz', - '7ef445410b42f36b9bad426608b53ccb9ccca4101e545c383f564c11db672ca8', + 'https://github.com/sahlberg/libnfs/archive/libnfs-5.0.2.tar.gz', + '637e56643b19da9fba98f06847788c4dad308b723156a64748041035dcdf9bd3', 'lib/libnfs.a', [ '--disable-shared', '--enable-static', @@ -434,7 +440,7 @@ '--disable-utils', '--disable-examples', ], - base='libnfs-libnfs-5.0.1', + base='libnfs-libnfs-5.0.2', autoreconf=True, ) @@ -445,7 +451,7 @@ ) boost = BoostProject( - 'https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.bz2', - '475d589d51a7f8b3ba2ba4eda022b170e562ca3b760ee922c146b6c65856ef39', + 'https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.bz2', + '1e19565d82e43bc59209a168f5ac899d3ba471d55c7610c677d4ccf2c9c500c0', 'include/boost/version.hpp', ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/LogInit.cxx new/mpd-0.23.10/src/LogInit.cxx --- old/mpd-0.23.9/src/LogInit.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/LogInit.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -158,12 +158,15 @@ getenv("NOTIFY_SOCKET") != nullptr) { /* if MPD was started as a systemd service, default to journal (which - is connected to fd=2) */ + is connected to stdout&stderr) */ out_fd = STDOUT_FILENO; return; } #endif -#ifndef HAVE_SYSLOG +#ifdef _WIN32 + /* default to stdout on Windows */ + out_fd = STDOUT_FILENO; +#elif !defined(HAVE_SYSLOG) throw std::runtime_error("config parameter 'log_file' not found"); #endif #ifdef HAVE_SYSLOG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/android/Context.cxx new/mpd-0.23.10/src/android/Context.cxx --- old/mpd-0.23.9/src/android/Context.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/android/Context.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -46,7 +46,7 @@ AllocatedPath Context::GetExternalFilesDir(JNIEnv *env, const char *type) noexcept { - assert(_type != nullptr); + assert(type != nullptr); jobject file = env->CallObjectMethod(Get(), getExternalFilesDir_method, Java::String::Optional(env, type).Get()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/archive/plugins/Iso9660ArchivePlugin.cxx new/mpd-0.23.10/src/archive/plugins/Iso9660ArchivePlugin.cxx --- old/mpd-0.23.9/src/archive/plugins/Iso9660ArchivePlugin.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/archive/plugins/Iso9660ArchivePlugin.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -166,7 +166,7 @@ assert(fill <= data.size()); assert(position <= fill); - return {&data[position], &data[fill]}; + return {data.data() + position, data.data() + fill}; } void Consume(size_t nbytes) noexcept { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/decoder/plugins/FfmpegDecoderPlugin.cxx new/mpd-0.23.10/src/decoder/plugins/FfmpegDecoderPlugin.cxx --- old/mpd-0.23.9/src/decoder/plugins/FfmpegDecoderPlugin.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/decoder/plugins/FfmpegDecoderPlugin.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -31,6 +31,7 @@ #include "lib/ffmpeg/Format.hxx" #include "lib/ffmpeg/Codec.hxx" #include "lib/ffmpeg/SampleFormat.hxx" +#include "lib/ffmpeg/LibFmt.hxx" #include "../DecoderAPI.hxx" #include "FfmpegMetaData.hxx" #include "FfmpegIo.hxx" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/encoder/plugins/FlacEncoderPlugin.cxx new/mpd-0.23.10/src/encoder/plugins/FlacEncoderPlugin.cxx --- old/mpd-0.23.9/src/encoder/plugins/FlacEncoderPlugin.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/encoder/plugins/FlacEncoderPlugin.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -38,6 +38,7 @@ FLAC__StreamEncoder *const fse; const unsigned compression; + const bool oggflac; PcmBuffer expand_buffer; @@ -122,7 +123,7 @@ } static void -flac_encoder_setup(FLAC__StreamEncoder *fse, unsigned compression, +flac_encoder_setup(FLAC__StreamEncoder *fse, unsigned compression, bool oggflac, const AudioFormat &audio_format) { unsigned bits_per_sample; @@ -157,7 +158,7 @@ throw FormatRuntimeError("error setting flac sample rate to %d", audio_format.sample_rate); - if (!FLAC__stream_encoder_set_ogg_serial_number(fse, + if (oggflac && !FLAC__stream_encoder_set_ogg_serial_number(fse, GenerateSerial())) throw FormatRuntimeError("error setting ogg serial number"); } @@ -166,11 +167,12 @@ :Encoder(_oggchaining), audio_format(_audio_format), fse(_fse), compression(_compression), + oggflac(_oggflac), output_buffer(8192) { /* this immediately outputs data through callback */ - auto init_status = _oggflac ? + auto init_status = oggflac ? FLAC__stream_encoder_init_ogg_stream(fse, nullptr, WriteCallback, nullptr, nullptr, nullptr, @@ -209,7 +211,7 @@ throw std::runtime_error("FLAC__stream_encoder_new() failed"); try { - flac_encoder_setup(fse, compression, audio_format); + flac_encoder_setup(fse, compression, oggflac, audio_format); } catch (...) { FLAC__stream_encoder_delete(fse); throw; @@ -222,7 +224,7 @@ FlacEncoder::SendTag(const Tag &tag) { /* re-initialize encoder since flac_encoder_finish resets everything */ - flac_encoder_setup(fse, compression, audio_format); + flac_encoder_setup(fse, compression, oggflac, audio_format); FLAC__StreamMetadata *metadata = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT); FLAC__StreamMetadata_VorbisComment_Entry entry; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/input/plugins/CurlInputPlugin.cxx new/mpd-0.23.10/src/input/plugins/CurlInputPlugin.cxx --- old/mpd-0.23.9/src/input/plugins/CurlInputPlugin.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/input/plugins/CurlInputPlugin.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -439,6 +439,8 @@ request->SetVerifyPeer(verify_peer); request->SetVerifyHost(verify_host); request->SetOption(CURLOPT_HTTPHEADER, request_headers.Get()); + request->SetProxyVerifyPeer(verify_peer); + request->SetProxyVerifyHost(verify_host); } void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/java/File.cxx new/mpd-0.23.10/src/java/File.cxx --- old/mpd-0.23.9/src/java/File.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/java/File.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -49,9 +49,6 @@ AllocatedPath Java::File::ToAbsolutePath(JNIEnv *env, jobject _file) noexcept { - assert(env != nullptr); - assert(_file != nullptr); - LocalObject file(env, _file); const jstring path = GetAbsolutePath(env, file); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/lib/curl/Request.hxx new/mpd-0.23.10/src/lib/curl/Request.hxx --- old/mpd-0.23.9/src/lib/curl/Request.hxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/lib/curl/Request.hxx 2022-10-14 23:51:41.000000000 +0200 @@ -123,6 +123,14 @@ easy.SetVerifyPeer(value); } + void SetProxyVerifyHost(bool value) { + easy.SetOption(CURLOPT_PROXY_SSL_VERIFYHOST, value ? 2L : 0L); + } + + void SetProxyVerifyPeer(bool value) { + easy.SetOption(CURLOPT_PROXY_SSL_VERIFYPEER, value); + } + void SetNoBody(bool value=true) { easy.SetNoBody(value); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/lib/ffmpeg/LibFmt.hxx new/mpd-0.23.10/src/lib/ffmpeg/LibFmt.hxx --- old/mpd-0.23.9/src/lib/ffmpeg/LibFmt.hxx 1970-01-01 01:00:00.000000000 +0100 +++ new/mpd-0.23.10/src/lib/ffmpeg/LibFmt.hxx 2022-10-14 23:51:41.000000000 +0200 @@ -0,0 +1,39 @@ +/* + * Copyright 2003-2022 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#pragma once + +extern "C" { +#include <libavutil/samplefmt.h> +} + +#include <fmt/format.h> + +template<> +struct fmt::formatter<AVSampleFormat> : formatter<string_view> +{ + template<typename FormatContext> + auto format(const AVSampleFormat format, FormatContext &ctx) { + const char *name = av_get_sample_fmt_name(format); + if (name == nullptr) + name = "?"; + + return formatter<string_view>::format(name, ctx); + } +}; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/output/plugins/AlsaOutputPlugin.cxx new/mpd-0.23.10/src/output/plugins/AlsaOutputPlugin.cxx --- old/mpd-0.23.9/src/output/plugins/AlsaOutputPlugin.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/output/plugins/AlsaOutputPlugin.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -812,8 +812,12 @@ fmt::format("Failed to open ALSA device \"{}\"", GetDevice()).c_str()); + const char *pcm_name = snd_pcm_name(pcm); + if (pcm_name == nullptr) + pcm_name = "?"; + FmtDebug(alsa_output_domain, "opened {} type={}", - snd_pcm_name(pcm), + pcm_name, snd_pcm_type_name(snd_pcm_type(pcm))); #ifdef ENABLE_DSD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/storage/plugins/CurlStorage.cxx new/mpd-0.23.10/src/storage/plugins/CurlStorage.cxx --- old/mpd-0.23.9/src/storage/plugins/CurlStorage.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/storage/plugins/CurlStorage.cxx 2022-10-14 23:51:41.000000000 +0200 @@ -34,7 +34,6 @@ #include "event/InjectEvent.hxx" #include "thread/Mutex.hxx" #include "thread/Cond.hxx" -#include "time/Parser.hxx" #include "util/ASCII.hxx" #include "util/RuntimeError.hxx" #include "util/StringCompare.hxx" @@ -171,8 +170,9 @@ } }; +[[gnu::pure]] static unsigned -ParseStatus(const char *s) +ParseStatus(const char *s) noexcept { /* skip the "HTTP/1.1" prefix */ const char *space = std::strchr(s, ' '); @@ -182,37 +182,37 @@ return strtoul(space + 1, nullptr, 10); } +[[gnu::pure]] static unsigned -ParseStatus(const char *s, size_t length) +ParseStatus(const char *s, size_t length) noexcept { return ParseStatus(std::string(s, length).c_str()); } +[[gnu::pure]] static std::chrono::system_clock::time_point -ParseTimeStamp(const char *s) +ParseTimeStamp(const char *s) noexcept { - try { - // TODO: make this more robust - return ParseTimePoint(s, "%a, %d %b %Y %T"); - } catch (...) { - return std::chrono::system_clock::time_point::min(); - } + return std::chrono::system_clock::from_time_t(curl_getdate(s, nullptr)); } +[[gnu::pure]] static std::chrono::system_clock::time_point -ParseTimeStamp(const char *s, size_t length) +ParseTimeStamp(const char *s, size_t length) noexcept { return ParseTimeStamp(std::string(s, length).c_str()); } +[[gnu::pure]] static uint64_t -ParseU64(const char *s) +ParseU64(const char *s) noexcept { return strtoull(s, nullptr, 10); } +[[gnu::pure]] static uint64_t -ParseU64(const char *s, size_t length) +ParseU64(const char *s, size_t length) noexcept { return ParseU64(std::string(s, length).c_str()); } @@ -278,6 +278,7 @@ "<a:resourcetype/>" "<a:getcontenttype/>" "<a:getcontentlength/>" + "<a:getlastmodified/>" "</a:prop>" "</a:propfind>"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/time/Parser.cxx new/mpd-0.23.10/src/time/Parser.cxx --- old/mpd-0.23.9/src/time/Parser.cxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/time/Parser.cxx 1970-01-01 01:00:00.000000000 +0100 @@ -1,57 +0,0 @@ -/* - * Copyright 2014-2019 Max Kellermann <[email protected]> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "Parser.hxx" -#include "Convert.hxx" - -#include <cassert> -#include <stdexcept> - -#include <time.h> - -std::chrono::system_clock::time_point -ParseTimePoint(const char *s, const char *format) -{ - assert(s != nullptr); - assert(format != nullptr); - -#ifdef _WIN32 - /* TODO: emulate strptime()? */ - (void)s; - (void)format; - throw std::runtime_error("Time parsing not implemented on Windows"); -#else - struct tm tm{}; - const char *end = strptime(s, format, &tm); - if (end == nullptr || *end != 0) - throw std::runtime_error("Failed to parse time stamp"); - - return TimeGm(tm); -#endif /* !_WIN32 */ -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/time/Parser.hxx new/mpd-0.23.10/src/time/Parser.hxx --- old/mpd-0.23.9/src/time/Parser.hxx 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/time/Parser.hxx 1970-01-01 01:00:00.000000000 +0100 @@ -1,43 +0,0 @@ -/* - * Copyright 2014-2019 Max Kellermann <[email protected]> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef TIME_PARSER_HXX -#define TIME_PARSER_HXX - -#include <chrono> - -/** - * Parse a time stamp. - * - * Throws std::runtime_error on error. - */ -std::chrono::system_clock::time_point -ParseTimePoint(const char *s, const char *format); - -#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/src/time/meson.build new/mpd-0.23.10/src/time/meson.build --- old/mpd-0.23.9/src/time/meson.build 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/src/time/meson.build 2022-10-14 23:51:41.000000000 +0200 @@ -1,6 +1,5 @@ time = static_library( 'time', - 'Parser.cxx', 'Convert.cxx', 'ISO8601.cxx', 'Math.cxx', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/subprojects/expat.wrap new/mpd-0.23.10/subprojects/expat.wrap --- old/mpd-0.23.9/subprojects/expat.wrap 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/subprojects/expat.wrap 2022-10-14 23:51:41.000000000 +0200 @@ -1,12 +1,12 @@ [wrap-file] -directory = expat-2.4.8 -source_url = https://github.com/libexpat/libexpat/releases/download/R_2_4_8/expat-2.4.8.tar.xz -source_filename = expat-2.4.8.tar.bz2 -source_hash = f79b8f904b749e3e0d20afeadecf8249c55b2e32d4ebb089ae378df479dcaf25 -patch_filename = expat_2.4.8-1_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.4.8-1/get_patch -patch_hash = 9aec253a2c6d1c0feb852c5c6920298d14701eeec7acc6832bb402438b52112a +directory = expat-2.4.9 +source_url = https://github.com/libexpat/libexpat/releases/download/R_2_4_9/expat-2.4.9.tar.xz +source_filename = expat-2.4.9.tar.bz2 +source_hash = 6e8c0728fe5c7cd3f93a6acce43046c5e4736c7b4b68e032e9350daa0efc0354 +patch_filename = expat_2.4.9-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.4.9-1/get_patch +patch_hash = 51b42d935008552f9d6c4d3e7511b84690a2a0c9d90165d1d192fc892f0a4787 +wrapdb_version = 2.4.9-1 [provide] expat = expat_dep - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/subprojects/fmt.wrap new/mpd-0.23.10/subprojects/fmt.wrap --- old/mpd-0.23.9/subprojects/fmt.wrap 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/subprojects/fmt.wrap 2022-10-14 23:51:41.000000000 +0200 @@ -1,12 +1,12 @@ [wrap-file] -directory = fmt-8.1.1 -source_url = https://github.com/fmtlib/fmt/archive/8.1.1.tar.gz -source_filename = fmt-8.1.1.tar.gz -source_hash = 3d794d3cf67633b34b2771eb9f073bde87e846e0d395d254df7b211ef1ec7346 -patch_filename = fmt_8.1.1-2_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/fmt_8.1.1-2/get_patch -patch_hash = cd001046281330a8862591780a9ea71a1fa594edd0d015deb24e44680c9ea33b -wrapdb_version = 8.1.1-2 +directory = fmt-9.0.0 +source_url = https://github.com/fmtlib/fmt/archive/9.0.0.tar.gz +source_filename = fmt-9.0.0.tar.gz +source_hash = 9a1e0e9e843a356d65c7604e2c8bf9402b50fe294c355de0095ebd42fb9bd2c5 +patch_filename = fmt_9.0.0-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/fmt_9.0.0-1/get_patch +patch_hash = 5f12924065e0fe7ccae40593d256a082955c273cb2880b3e3de05df9d8d10697 +wrapdb_version = 9.0.0-1 [provide] fmt = fmt_dep diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/subprojects/sqlite3.wrap new/mpd-0.23.10/subprojects/sqlite3.wrap --- old/mpd-0.23.9/subprojects/sqlite3.wrap 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/subprojects/sqlite3.wrap 2022-10-14 23:51:41.000000000 +0200 @@ -1,12 +1,12 @@ [wrap-file] -directory = sqlite-amalgamation-3380000 -source_url = https://sqlite.org/2022/sqlite-amalgamation-3380000.zip -source_filename = sqlite-amalgamation-3380000.zip -source_hash = e055f6054e97747a135c89e36520c0a423249e8a91c5fc445163f4a6adb20df6 -patch_filename = sqlite3_3.38.0-1_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/sqlite3_3.38.0-1/get_patch -patch_hash = 49e30bf010ff63ab772d5417885e6905379025ceac80382e292c6dbd3a9da744 +directory = sqlite-amalgamation-3390300 +source_url = https://sqlite.org/2022/sqlite-amalgamation-3390300.zip +source_filename = sqlite-amalgamation-3390300.zip +source_hash = a89db3030d229d860ae56a8bac50ac9761434047ae886e47e7c8f9f428fa98ad +patch_filename = sqlite3_3.39.3-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/sqlite3_3.39.3-1/get_patch +patch_hash = f5c41ff7b3da1108ed221b9a820b41188550cafb8a6c3d247bb40bd598775050 +wrapdb_version = 3.39.3-1 [provide] sqlite3 = sqlite3_dep - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/subprojects/vorbis.wrap new/mpd-0.23.10/subprojects/vorbis.wrap --- old/mpd-0.23.9/subprojects/vorbis.wrap 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/subprojects/vorbis.wrap 2022-10-14 23:51:41.000000000 +0200 @@ -3,13 +3,12 @@ source_url = https://downloads.xiph.org/releases/vorbis/libvorbis-1.3.7.tar.xz source_filename = libvorbis-1.3.7.tar.xz source_hash = b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b -patch_filename = vorbis_1.3.7-3_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/vorbis_1.3.7-3/get_patch -patch_hash = 6cb90a61ede8c64d3e8e379b96dcc800c9dd69e925122b3d73d8f59a563c3afa -wrapdb_version = 1.3.7-3 +patch_filename = vorbis_1.3.7-4_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/vorbis_1.3.7-4/get_patch +patch_hash = 979e22b24b16c927040700dfd8319cd6ba29bf52a14dbc66b1cb4ea60504f14a +wrapdb_version = 1.3.7-4 [provide] vorbis = vorbis_dep vorbisfile = vorbisfile_dep vorbisenc = vorbisenc_dep - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/test/meson.build new/mpd-0.23.10/test/meson.build --- old/mpd-0.23.9/test/meson.build 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/test/meson.build 2022-10-14 23:51:41.000000000 +0200 @@ -320,11 +320,6 @@ include_directories: inc, dependencies: [ curl_dep, - - # Explicitly linking with zlib here works around a linker - # failure on Windows, because our Windows CURL build is - # statically linked and thus declares no dependency on zlib - zlib_dep, ], ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mpd-0.23.9/test/net/meson.build new/mpd-0.23.10/test/net/meson.build --- old/mpd-0.23.9/test/net/meson.build 2022-08-18 18:20:54.000000000 +0200 +++ new/mpd-0.23.10/test/net/meson.build 2022-10-14 23:51:41.000000000 +0200 @@ -19,6 +19,7 @@ include_directories: inc, dependencies: [ net_dep, + util_dep, gtest_dep, ], ),
