slightly safer copying of metadataChunk to MpdTag
git-svn-id: https://svn.musicpd.org/mpd/trunk@1359 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
b29f73c819
commit
81720da06d
@ -11,13 +11,21 @@ void initMetadataChunk(MetadataChunk * chunk) {
|
|||||||
chunk->title = -1;
|
chunk->title = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define dupElementToTag(string, element) { \
|
||||||
|
if(element >= 0 && element < METADATA_BUFFER_LENGTH) { \
|
||||||
|
string = strdup(chunk->buffer+element); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
MpdTag * metadataChunkToMpdTagDup(MetadataChunk * chunk) {
|
MpdTag * metadataChunkToMpdTagDup(MetadataChunk * chunk) {
|
||||||
MpdTag * ret = newMpdTag();
|
MpdTag * ret = newMpdTag();
|
||||||
|
|
||||||
if(chunk->name >= 0) ret->name = strdup(chunk->buffer+chunk->name);
|
chunk->buffer[METADATA_BUFFER_LENGTH] = '\0';
|
||||||
if(chunk->artist >= 0) ret->artist = strdup(chunk->buffer+chunk->artist);
|
|
||||||
if(chunk->album >= 0) ret->album = strdup(chunk->buffer+chunk->album);
|
dupElementToTag(ret->name, chunk->name);
|
||||||
if(chunk->title >= 0) ret->title = strdup(chunk->buffer+chunk->title);
|
dupElementToTag(ret->title, chunk->title);
|
||||||
|
dupElementToTag(ret->artist, chunk->artist);
|
||||||
|
dupElementToTag(ret->album, chunk->album);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
12
src/player.c
12
src/player.c
@ -478,16 +478,16 @@ Song * playerCurrentDecodeSong() {
|
|||||||
sizeof(MetadataChunk)))))
|
sizeof(MetadataChunk)))))
|
||||||
{
|
{
|
||||||
printf("metadata in the PLAYER!\n");
|
printf("metadata in the PLAYER!\n");
|
||||||
if(song) freeJustSong(song);
|
|
||||||
song = newNullSong();
|
|
||||||
if(song->utf8url) free(song->utf8url);
|
|
||||||
song->utf8url = strdup(pc->currentUrl);
|
|
||||||
song->tag = metadataChunkToMpdTagDup(&(pc->metadataChunk));
|
|
||||||
validateUtf8Tag(song->tag);
|
|
||||||
if(prev) free(prev);
|
if(prev) free(prev);
|
||||||
prev = malloc(sizeof(MetadataChunk));
|
prev = malloc(sizeof(MetadataChunk));
|
||||||
memcpy(prev, &(pc->metadataChunk), sizeof(MetadataChunk));
|
memcpy(prev, &(pc->metadataChunk), sizeof(MetadataChunk));
|
||||||
resetPlayerMetadata();
|
resetPlayerMetadata();
|
||||||
|
if(song) freeJustSong(song);
|
||||||
|
song = newNullSong();
|
||||||
|
if(song->utf8url) free(song->utf8url);
|
||||||
|
song->utf8url = strdup(pc->currentUrl);
|
||||||
|
song->tag = metadataChunkToMpdTagDup(prev);
|
||||||
|
validateUtf8Tag(song->tag);
|
||||||
return song;
|
return song;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -802,19 +802,15 @@ void syncCurrentPlayerDecodeMetadata() {
|
|||||||
songNum = playlist.order[playlist.current];
|
songNum = playlist.order[playlist.current];
|
||||||
song = playlist.songs[songNum];
|
song = playlist.songs[songNum];
|
||||||
|
|
||||||
printf("HERE 1\n");
|
|
||||||
|
|
||||||
if(song->type == SONG_TYPE_URL &&
|
if(song->type == SONG_TYPE_URL &&
|
||||||
0 == strcmp(song->utf8url, songPlayer->utf8url) &&
|
0 == strcmp(song->utf8url, songPlayer->utf8url) &&
|
||||||
!mpdTagsAreEqual(song->tag, songPlayer->tag))
|
!mpdTagsAreEqual(song->tag, songPlayer->tag))
|
||||||
{
|
{
|
||||||
printf("HERE 1-1\n");
|
|
||||||
if(song->tag) freeMpdTag(song->tag);
|
if(song->tag) freeMpdTag(song->tag);
|
||||||
song->tag = mpdTagDup(songPlayer->tag);
|
song->tag = mpdTagDup(songPlayer->tag);
|
||||||
playlist.songMod[songNum] = playlist.version;
|
playlist.songMod[songNum] = playlist.version;
|
||||||
incrPlaylistVersion();
|
incrPlaylistVersion();
|
||||||
}
|
}
|
||||||
printf("HERE 2\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void syncPlayerAndPlaylist() {
|
void syncPlayerAndPlaylist() {
|
||||||
|
Loading…
Reference in New Issue
Block a user