Made read() return the number of bytes that were actually read, rather than
the number that was requested. A lot of our code obviously assumes this behaviour, and the MP3 file player depends on it because otherwise, when reaching the end of the file, it will think it read a full buffer, when in fact it only got part of it and the rest is the remains from the previous read. This would cause a brief note from earlier in the track at the end of the MI1 chapter one screen. Probably other cases as well. Of course, this may cause regressions but only - I think - if the code was buggy to begin with. svn-id: r8721
This commit is contained in:
parent
cd04361fb7
commit
7404d5662d
1 changed files with 5 additions and 3 deletions
|
@ -216,6 +216,7 @@ void File::seek(int32 offs, int whence) {
|
|||
|
||||
uint32 File::read(void *ptr, uint32 len) {
|
||||
byte *ptr2 = (byte *)ptr;
|
||||
uint32 real_len;
|
||||
|
||||
if (_handle == NULL) {
|
||||
error("File is not open!");
|
||||
|
@ -225,19 +226,20 @@ uint32 File::read(void *ptr, uint32 len) {
|
|||
if (len == 0)
|
||||
return 0;
|
||||
|
||||
if ((uint32)fread(ptr2, 1, len, _handle) != len) {
|
||||
real_len = fread(ptr2, 1, len, _handle);
|
||||
if (real_len < len) {
|
||||
clearerr(_handle);
|
||||
_ioFailed = true;
|
||||
}
|
||||
|
||||
if (_encbyte != 0) {
|
||||
uint32 t_size = len;
|
||||
uint32 t_size = real_len;
|
||||
do {
|
||||
*ptr2++ ^= _encbyte;
|
||||
} while (--t_size);
|
||||
}
|
||||
|
||||
return len;
|
||||
return real_len;
|
||||
}
|
||||
|
||||
byte File::readByte() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue