summaryrefslogtreecommitdiffstats
path: root/apps/playback.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-02-10 10:26:07 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-02-10 10:26:07 +0000
commitedfff8a5efb1bca75f8b49c3ad3dd151653d39c8 (patch)
tree88d2c99f09f107489f67250403aa7e9c1ccdb26f /apps/playback.c
parent6f9d2ad130701ec6b54ed90885c6972dbef79d27 (diff)
downloadrockbox-edfff8a5efb1bca75f8b49c3ad3dd151653d39c8.tar.gz
rockbox-edfff8a5efb1bca75f8b49c3ad3dd151653d39c8.zip
audio_peek_track should copy the struct mp3entry instead of pointing directly into the buffer. Despite the dire warning, caller does in fact yield/sleep and its usage is too nonlocalized to control that reliably.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29275 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 3a7faa3d8d..a99a22372e 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -628,8 +628,8 @@ struct mp3entry* audio_next_track(void)
return NULL;
}
-/* gets a pointer to the id3 data, Not thread safe!, DON'T yield()/sleep() */
-bool audio_peek_track(struct mp3entry** id3, int offset)
+/* gets a copy of the id3 data */
+bool audio_peek_track(struct mp3entry* id3, int offset)
{
int next_idx;
int new_offset = ci.new_track + wps_offset + offset;
@@ -640,8 +640,13 @@ bool audio_peek_track(struct mp3entry** id3, int offset)
if (tracks[next_idx].id3_hid >= 0)
{
- return bufgetdata(tracks[next_idx].id3_hid, 0, (void**)id3)
- == sizeof(struct mp3entry);
+ struct mp3entry *id3src;
+ if (bufgetdata(tracks[next_idx].id3_hid, 0, (void**)&id3src)
+ == sizeof(struct mp3entry))
+ {
+ copy_mp3entry(id3, id3src);
+ return true;
+ }
}
return false;
}