aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-08-05 21:31:54 +0200
committerMax Kellermann <max@duempel.org>2013-08-05 21:31:54 +0200
commit6d0ada7f4564d24fd4d556a938552787054169cd (patch)
tree5deee048a8c4e2774ab071e028481365fa4537c8 /src
parentaf63372d2ba4f4b251053c110b4676edf1ea1e7a (diff)
downloadmpd-6d0ada7f4564d24fd4d556a938552787054169cd.tar.gz
mpd-6d0ada7f4564d24fd4d556a938552787054169cd.tar.xz
mpd-6d0ada7f4564d24fd4d556a938552787054169cd.zip
playlist/lastfm: allocate the lastfm_playlist object at the end
Simplify the error path, because the other allocations may fail.
Diffstat (limited to '')
-rw-r--r--src/playlist/LastFMPlaylistPlugin.cxx29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/playlist/LastFMPlaylistPlugin.cxx b/src/playlist/LastFMPlaylistPlugin.cxx
index 34abaeb5f..b1ef10269 100644
--- a/src/playlist/LastFMPlaylistPlugin.cxx
+++ b/src/playlist/LastFMPlaylistPlugin.cxx
@@ -156,7 +156,6 @@ lastfm_find(const char *response, const char *name)
static struct playlist_provider *
lastfm_open_uri(const char *uri, Mutex &mutex, Cond &cond)
{
- struct lastfm_playlist *playlist;
GError *error = NULL;
char *p, *q, *response, *session;
@@ -209,11 +208,6 @@ lastfm_open_uri(const char *uri, Mutex &mutex, Cond &cond)
}
}
- /* create the playlist object */
-
- playlist = g_new(struct lastfm_playlist, 1);
- playlist_provider_init(&playlist->base, &lastfm_playlist_plugin);
-
/* open the last.fm playlist */
p = g_strconcat("http://ws.audioscrobbler.com/radio/xspf.php?"
@@ -221,40 +215,45 @@ lastfm_open_uri(const char *uri, Mutex &mutex, Cond &cond)
NULL);
g_free(session);
- playlist->is = input_stream_open(p, mutex, cond, &error);
+ const auto is = input_stream_open(p, mutex, cond, &error);
g_free(p);
- if (playlist->is == NULL) {
+ if (is == nullptr) {
if (error != NULL) {
g_warning("Failed to load XSPF playlist: %s",
error->message);
g_error_free(error);
} else
g_warning("Failed to load XSPF playlist");
- g_free(playlist);
return NULL;
}
mutex.lock();
- input_stream_wait_ready(playlist->is);
+ input_stream_wait_ready(is);
/* last.fm does not send a MIME type, we have to fake it here
:-( */
- input_stream_override_mime_type(playlist->is, "application/xspf+xml");
+ input_stream_override_mime_type(is, "application/xspf+xml");
mutex.unlock();
/* parse the XSPF playlist */
- playlist->xspf = playlist_list_open_stream(playlist->is, NULL);
- if (playlist->xspf == NULL) {
- input_stream_close(playlist->is);
- g_free(playlist);
+ const auto xspf = playlist_list_open_stream(is, nullptr);
+ if (xspf == nullptr) {
+ input_stream_close(is);
g_warning("Failed to parse XSPF playlist");
return NULL;
}
+ /* create the playlist object */
+
+ const auto playlist = g_new(struct lastfm_playlist, 1);
+ playlist_provider_init(&playlist->base, &lastfm_playlist_plugin);
+ playlist->is = is;
+ playlist->xspf = xspf;
+
return &playlist->base;
}