diff options
author | Max Kellermann <max@duempel.org> | 2008-10-15 22:34:47 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-10-15 22:34:47 +0200 |
commit | 6d3488c8b38c07c197e97843a516868bbab7571a (patch) | |
tree | 01eb4624d2f4456eb530d87de6727b1fb13fa503 | |
parent | 4a7ad5b618957f75da5b305a3d0cc8006e3e7416 (diff) | |
download | mpd-6d3488c8b38c07c197e97843a516868bbab7571a.tar.gz mpd-6d3488c8b38c07c197e97843a516868bbab7571a.tar.xz mpd-6d3488c8b38c07c197e97843a516868bbab7571a.zip |
song: added song_in_database()
Some functions assume that a song is not in the database when it is a
remote song. Based on that, they decide whether they are responsible
for freeing the song struct. Add a special function which checks
whether a song is in the database (currently equal to song_is_file()).
-rw-r--r-- | src/playlist.c | 15 | ||||
-rw-r--r-- | src/song.h | 8 |
2 files changed, 14 insertions, 9 deletions
diff --git a/src/playlist.c b/src/playlist.c index bfcfb1f7a..dc098a03f 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -181,11 +181,9 @@ static int getNextId(void) void finishPlaylist(void) { int i; - for (i = 0; i < playlist.length; i++) { - if (!song_is_file(playlist.songs[i])) { + for (i = 0; i < playlist.length; i++) + if (!song_in_database(playlist.songs[i])) song_free(playlist.songs[i]); - } - } playlist.length = 0; @@ -208,9 +206,9 @@ void clearPlaylist(void) stopPlaylist(); for (i = 0; i < playlist.length; i++) { - if (!song_is_file(playlist.songs[i])) { + if (!song_in_database(playlist.songs[i])) song_free(playlist.songs[i]); - } + playlist.idToPosition[playlist.positionToId[i]] = -1; playlist.songs[i] = NULL; } @@ -678,9 +676,8 @@ enum playlist_result deleteFromPlaylist(int song) || playlist.order[playlist.current] == song)) clearPlayerQueue(); - if (!song_is_file(playlist.songs[song])) { + if (!song_in_database(playlist.songs[song])) song_free(playlist.songs[song]); - } playlist.idToPosition[playlist.positionToId[song]] = -1; @@ -858,6 +855,8 @@ static void syncCurrentPlayerDecodeMetadata(void) if (!song_is_file(song) && 0 == strcmp(song_get_url(song, path_max_tmp), songPlayer->url) && !tag_equal(song->tag, songPlayer->tag)) { + assert(!song_in_database(song)); + if (song->tag) tag_free(song->tag); song->tag = tag_dup(songPlayer->tag); diff --git a/src/song.h b/src/song.h index 7d174c51e..6016b8d93 100644 --- a/src/song.h +++ b/src/song.h @@ -68,9 +68,15 @@ char * song_get_url(const struct song *song, char *path_max_tmp); static inline bool -song_is_file(const struct song *song) +song_in_database(const struct song *song) { return song->parent != NULL; } +static inline bool +song_is_file(const struct song *song) +{ + return song_in_database(song); +} + #endif |