From bb1e369f304b86fae73ef36b7686e2836971c0c7 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Tue, 23 Jan 2018 09:57:52 +0100
Subject: [PATCH 1/3] playlist/SoundCloud: fix -Wunused-lambda-capture

---
 src/playlist/plugins/SoundCloudPlaylistPlugin.cxx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/playlist/plugins/SoundCloudPlaylistPlugin.cxx b/src/playlist/plugins/SoundCloudPlaylistPlugin.cxx
index a4dcb1972..88a9606c5 100644
--- a/src/playlist/plugins/SoundCloudPlaylistPlugin.cxx
+++ b/src/playlist/plugins/SoundCloudPlaylistPlugin.cxx
@@ -313,7 +313,7 @@ soundcloud_open_uri(const char *uri, Mutex &mutex, Cond &cond)
 
 	SoundCloudJsonData data;
 	yajl_handle hand = yajl_alloc(&parse_callbacks, nullptr, &data);
-	AtScopeExit(hand, &data) { yajl_free(hand); };
+	AtScopeExit(hand) { yajl_free(hand); };
 
 	int ret = soundcloud_parse_json(u, hand, mutex, cond);
 

From f762e8034f838b6087f6ea2e2010d3a23415f53c Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Tue, 23 Jan 2018 16:28:56 +0100
Subject: [PATCH 2/3] test/NullMixerListener: new class to fix
 -Wnull-dereference

---
 Makefile.am                |  2 ++
 test/NullMixerListener.hxx | 30 ++++++++++++++++++++++++++++++
 test/read_mixer.cxx        |  4 +++-
 test/run_output.cxx        | 11 ++++++++---
 4 files changed, 43 insertions(+), 4 deletions(-)
 create mode 100644 test/NullMixerListener.hxx

diff --git a/Makefile.am b/Makefile.am
index 5e468aa42..409f784e1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2159,6 +2159,7 @@ test_run_output_LDADD = $(MPD_LIBS) \
 	libutil.a
 test_run_output_SOURCES = test/run_output.cxx \
 	test/ScopeIOThread.hxx \
+	test/NullMixerListener.hxx \
 	src/Log.cxx src/LogBackend.cxx \
 	src/IOThread.cxx \
 	src/output/Domain.cxx \
@@ -2182,6 +2183,7 @@ test_read_mixer_LDADD = \
 	libsystem.a \
 	libutil.a
 test_read_mixer_SOURCES = test/read_mixer.cxx \
+	test/NullMixerListener.hxx \
 	src/Log.cxx src/LogBackend.cxx \
 	src/mixer/MixerControl.cxx \
 	src/filter/FilterPlugin.cxx \
diff --git a/test/NullMixerListener.hxx b/test/NullMixerListener.hxx
new file mode 100644
index 000000000..ed3986f41
--- /dev/null
+++ b/test/NullMixerListener.hxx
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2003-2018 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.
+ */
+
+#ifndef NULL_MIXER_LISTENER_HXX
+#define NULL_MIXER_LISTENER_HXX
+
+#include "mixer/Listener.hxx"
+
+class NullMixerListener : public MixerListener {
+public:
+	void OnMixerVolumeChanged(Mixer &, int) override {}
+};
+
+#endif
diff --git a/test/read_mixer.cxx b/test/read_mixer.cxx
index 4c7efabe3..9919b9c4c 100644
--- a/test/read_mixer.cxx
+++ b/test/read_mixer.cxx
@@ -18,6 +18,7 @@
  */
 
 #include "config.h"
+#include "NullMixerListener.hxx"
 #include "mixer/MixerControl.hxx"
 #include "mixer/MixerList.hxx"
 #include "filter/FilterRegistry.hxx"
@@ -50,9 +51,10 @@ try {
 
 	EventLoop event_loop;
 
+	NullMixerListener mixer_listener;
 	Mixer *mixer = mixer_new(event_loop, alsa_mixer_plugin,
 				 *(AudioOutput *)nullptr,
-				 *(MixerListener *)nullptr,
+				 mixer_listener,
 				 ConfigBlock());
 
 	mixer_open(mixer);
diff --git a/test/run_output.cxx b/test/run_output.cxx
index 43272591c..27e65cbc9 100644
--- a/test/run_output.cxx
+++ b/test/run_output.cxx
@@ -18,6 +18,7 @@
  */
 
 #include "config.h"
+#include "NullMixerListener.hxx"
 #include "output/Internal.hxx"
 #include "output/OutputPlugin.hxx"
 #include "output/Client.hxx"
@@ -64,7 +65,9 @@ filter_plugin_by_name(gcc_unused const char *name) noexcept
 }
 
 static AudioOutput *
-load_audio_output(EventLoop &event_loop, AudioOutputClient &client,
+load_audio_output(EventLoop &event_loop,
+		  NullMixerListener &mixer_listener,
+		  AudioOutputClient &client,
 		  const char *name)
 {
 	const auto *param = config_find_block(ConfigBlockOption::AUDIO_OUTPUT,
@@ -74,7 +77,7 @@ load_audio_output(EventLoop &event_loop, AudioOutputClient &client,
 					 name);
 
 	return audio_output_new(event_loop, ReplayGainConfig(), *param,
-				*(MixerListener *)nullptr,
+				mixer_listener,
 				client);
 }
 
@@ -144,8 +147,10 @@ try {
 
 	/* initialize the audio output */
 
+	NullMixerListener mixer_listener;
 	DummyAudioOutputClient client;
-	AudioOutput *ao = load_audio_output(event_loop, client, argv[2]);
+	AudioOutput *ao = load_audio_output(event_loop, mixer_listener,
+					    client, argv[2]);
 
 	/* parse the audio format */
 

From ea66cdd6a5cdcce0cf663e3c3a6e7e81ceacbbe5 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Tue, 23 Jan 2018 16:42:25 +0100
Subject: [PATCH 3/3] test/read_mixer: another kludge to work around
 -Wnull-dereference

---
 test/read_mixer.cxx | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/test/read_mixer.cxx b/test/read_mixer.cxx
index 9919b9c4c..a0d7487b2 100644
--- a/test/read_mixer.cxx
+++ b/test/read_mixer.cxx
@@ -53,7 +53,11 @@ try {
 
 	NullMixerListener mixer_listener;
 	Mixer *mixer = mixer_new(event_loop, alsa_mixer_plugin,
-				 *(AudioOutput *)nullptr,
+				 /* ugly dangerous dummy pointer to
+				    make the compiler happy; this
+				    works with most mixers, because
+				    they don't need the AudioOutput */
+				 *(AudioOutput *)0x1,
 				 mixer_listener,
 				 ConfigBlock());