(svn r23034) -Fix: make sure the custom playlists are 0 terminated

This commit is contained in:
rubidium 2011-10-16 19:56:47 +00:00
parent f04746a9ff
commit 0656660f22
1 changed files with 10 additions and 6 deletions

View File

@ -79,20 +79,24 @@ static byte * const _playlists[] = {
/**
* Validate a playlist.
* @param playlist the playlist to validate
* @param playlist The playlist to validate.
* @param last The last location in the list.
*/
void ValidatePlaylist(byte *playlist)
void ValidatePlaylist(byte *playlist, const byte *last)
{
while (*playlist != 0) {
while (*playlist != 0 && playlist <= last) {
/* Song indices are saved off-by-one so 0 is "nothing". */
if (*playlist <= NUM_SONGS_AVAILABLE && !StrEmpty(GetSongName(*playlist - 1))) {
playlist++;
continue;
}
for (byte *p = playlist; *p != 0; p++) {
for (byte *p = playlist; *p != 0 && p <= last; p++) {
p[0] = p[1];
}
}
/* Make sure the list is null terminated. */
*last = 0;
}
/** Initialize the playlists */
@ -118,8 +122,8 @@ void InitializeMusic()
_playlists[k + 1][j] = 0;
}
ValidatePlaylist(_settings_client.music.custom_1);
ValidatePlaylist(_settings_client.music.custom_2);
ValidatePlaylist(_settings_client.music.custom_1, lastof(_settings_client.music.custom_1));
ValidatePlaylist(_settings_client.music.custom_2, lastof(_settings_client.music.custom_2));
if (BaseMusic::GetUsedSet()->num_available < _music_wnd_cursong) {
/* If there are less songs than the currently played song,