diff options
author | Max Kellermann <max@duempel.org> | 2013-08-05 21:31:54 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-08-05 21:31:54 +0200 |
commit | 6d0ada7f4564d24fd4d556a938552787054169cd (patch) | |
tree | 5deee048a8c4e2774ab071e028481365fa4537c8 /src | |
parent | af63372d2ba4f4b251053c110b4676edf1ea1e7a (diff) | |
download | mpd-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.cxx | 29 |
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; } |