Commit 75582d47 authored by Max Kellermann's avatar Max Kellermann

SongSave: wrap DetachedSong* in std::unique_ptr

parent 28fdf1e9
......@@ -76,10 +76,10 @@ song_save(BufferedOutputStream &os, const DetachedSong &song)
os.Format(SONG_END "\n");
}
DetachedSong *
std::unique_ptr<DetachedSong>
song_load(TextFile &file, const char *uri)
{
DetachedSong *song = new DetachedSong(uri);
auto song = std::make_unique<DetachedSong>(uri);
TagBuilder tag;
......@@ -88,8 +88,6 @@ song_load(TextFile &file, const char *uri)
strcmp(line, SONG_END) != 0) {
char *colon = strchr(line, ':');
if (colon == nullptr || colon == line) {
delete song;
throw FormatRuntimeError("unknown line in db: %s", line);
}
......@@ -116,8 +114,6 @@ song_load(TextFile &file, const char *uri)
song->SetStartTime(SongTime::FromMS(start_ms));
song->SetEndTime(SongTime::FromMS(end_ms));
} else {
delete song;
throw FormatRuntimeError("unknown line in db: %s", line);
}
}
......
......@@ -20,6 +20,8 @@
#ifndef MPD_SONG_SAVE_HXX
#define MPD_SONG_SAVE_HXX
#include <memory>
#define SONG_BEGIN "song_begin: "
struct Song;
......@@ -39,7 +41,7 @@ song_save(BufferedOutputStream &os, const DetachedSong &song);
*
* Throws #std::runtime_error on error.
*/
DetachedSong *
std::unique_ptr<DetachedSong>
song_load(TextFile &file, const char *uri);
#endif
......@@ -160,11 +160,10 @@ directory_load(TextFile &file, Directory &directory)
if (directory.FindSong(name) != nullptr)
throw FormatRuntimeError("Duplicate song '%s'", name);
DetachedSong *song = song_load(file, name);
auto song = song_load(file, name);
directory.AddSong(Song::NewFrom(std::move(*song),
directory));
delete song;
} else if ((p = StringAfterPrefix(line, PLAYLIST_META_BEGIN))) {
const char *name = p;
playlist_metadata_load(file, directory.playlists, name);
......
......@@ -89,7 +89,7 @@ queue_load_song(TextFile &file, const SongLoader &loader,
return;
}
DetachedSong *song;
std::unique_ptr<DetachedSong> song;
if ((p = StringAfterPrefix(line, SONG_BEGIN))) {
const char *uri = p;
......@@ -111,14 +111,11 @@ queue_load_song(TextFile &file, const SongLoader &loader,
const char *uri = endptr + 1;
song = new DetachedSong(uri);
song = std::make_unique<DetachedSong>(uri);
}
if (!playlist_check_translate_song(*song, nullptr, loader)) {
delete song;
if (playlist_check_translate_song(*song, nullptr, loader))
return;
}
queue.Append(std::move(*song), priority);
delete song;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment