From 348d9ece4b9b9f57c5ee0201106bfb19d7efa758 Mon Sep 17 00:00:00 2001 From: Brandon Low Date: Fri, 14 Apr 2006 17:00:22 +0000 Subject: [PATCH] Fix some unlikely buffer problems. Doesn't fix any reported bugs, but fixes some possible ones. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9663 a1c6a512-1295-4272-9138-f99709370657 --- apps/playback.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/playback.c b/apps/playback.c index 90b04aec1a..d9a9673e2b 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -1371,7 +1371,7 @@ static bool loadcodec(bool start_play) size = filesize(fd); /* Never load a partial codec */ - if (filebuflen - filebufused < size + AUDIO_REBUFFER_GUESS_SIZE) { + if (filebuflen - filebufused < size) { logf("Not enough space"); fill_bytesleft = 0; close(fd); @@ -1466,6 +1466,7 @@ static bool audio_load_track(int offset, bool start_play) if (current_fd >= 0) { + logf("Nonzero fd in alt"); close(current_fd); current_fd = -1; } @@ -1533,6 +1534,19 @@ static bool audio_load_track(int offset, bool start_play) /* Load the codec. */ tracks[track_widx].codecbuf = &filebuf[buf_widx]; if (!loadcodec(start_play)) { + + if (tracks[track_widx].codecsize) + { + /* Must undo the buffer write of the partial codec */ + logf("Partial codec loaded"); + fill_bytesleft += tracks[track_widx].codecsize; + filebufused -= tracks[track_widx].codecsize; + if (buf_widx < tracks[track_widx].codecsize) + buf_widx += filebuflen; + buf_widx -= tracks[track_widx].codecsize; + tracks[track_widx].codecsize = 0; + } + /* Set filesize to zero to indicate no file was loaded. */ tracks[track_widx].filesize = 0; tracks[track_widx].filerem = 0;