From 4bde8982f146f9866b4b78f7be5945c82c19d403 Mon Sep 17 00:00:00 2001 From: Brandon Low Date: Thu, 25 Oct 2007 18:58:44 +0000 Subject: Fix a fixme in flac and make the usage of the read_filebuf codec api more consistent with its actual contract. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15303 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/flac.c | 12 ++++-------- apps/codecs/sid.c | 16 +++++----------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/apps/codecs/flac.c b/apps/codecs/flac.c index 2eb0deb9f5..d1c52833a6 100644 --- a/apps/codecs/flac.c +++ b/apps/codecs/flac.c @@ -77,8 +77,7 @@ static bool flac_init(FLACContext* fc, int first_frame_offset) uint32_t offset_hi,offset_lo; uint16_t blocksize; int endofmetadata=0; - int blocklength; - int n; + uint32_t blocklength; ci->memset(fc,0,sizeof(FLACContext)); nseekpoints=0; @@ -113,9 +112,7 @@ static bool flac_init(FLACContext* fc, int first_frame_offset) if ((buf[0] & 0x7f) == 0) /* 0 is the STREAMINFO block */ { - /* FIXME: Don't trust the value of blocklength, use actual return - * value in bytes instead */ - ci->read_filebuf(buf, blocklength); + if (ci->read_filebuf(buf, blocklength) < blocklength) return false; fc->filesize = ci->filesize; fc->min_blocksize = (buf[0] << 8) | buf[1]; @@ -140,9 +137,8 @@ static bool flac_init(FLACContext* fc, int first_frame_offset) } else if ((buf[0] & 0x7f) == 3) { /* 3 is the SEEKTABLE block */ while ((nseekpoints < MAX_SUPPORTED_SEEKTABLE_SIZE) && (blocklength >= 18)) { - n=ci->read_filebuf(buf,18); - if (n < 18) return false; - blocklength-=n; + if (ci->read_filebuf(buf,18) < 18) return false; + blocklength-=18; seekpoint_hi=(buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; diff --git a/apps/codecs/sid.c b/apps/codecs/sid.c index 1c98714357..c6d3c43170 100644 --- a/apps/codecs/sid.c +++ b/apps/codecs/sid.c @@ -1204,8 +1204,6 @@ unsigned short LoadSIDFromMemory(void *pSidData, unsigned short *load_addr, enum codec_status codec_main(void) { - size_t n, bytesfree; - unsigned char *p; unsigned int filesize; unsigned short load_addr, init_addr, play_addr; @@ -1229,20 +1227,16 @@ next_track: codec_set_replaygain(ci->id3); - /* Load SID file */ - p = sidfile; - bytesfree=sizeof(sidfile); - while ((n = ci->read_filebuf(p, bytesfree)) > 0) { - p += n; - bytesfree -= n; - } - filesize = p-sidfile; + /* Load SID file the read_filebuf callback will return the full requested + * size if at all possible, so there is no need to loop */ + filesize = ci->read_filebuf(sidfile, sizeof(sidfile)); if (filesize == 0) return CODEC_ERROR; c64Init(44100); - LoadSIDFromMemory(sidfile, &load_addr, &init_addr, &play_addr, &subSongsMax, &subSong, &song_speed, filesize); + LoadSIDFromMemory(sidfile, &load_addr, &init_addr, &play_addr, + &subSongsMax, &subSong, &song_speed, filesize); sidPoke(24, 15); /* Turn on full volume */ cpuJSR(init_addr, subSong); /* Start the song initialize */ -- cgit v1.2.3