Browse Source

Fix read >= 64KB

(attention, untested)
main
Frank Bösing 7 years ago
parent
commit
b4f700fd08
2 changed files with 4 additions and 4 deletions
  1. +1
    -1
      utility/SdFat.h
  2. +3
    -3
      utility/SdFile.cpp

+ 1
- 1
utility/SdFat.h View File

uint8_t b; uint8_t b;
return read(&b, 1) == 1 ? b : -1; return read(&b, 1) == 1 ? b : -1;
} }
int16_t read(void* buf, uint16_t nbyte);
int32_t read(void* buf, size_t nbyte);
int8_t readDir(dir_t* dir); int8_t readDir(dir_t* dir);
static uint8_t remove(SdFile* dirFile, const char* fileName); static uint8_t remove(SdFile* dirFile, const char* fileName);
uint8_t remove(void); uint8_t remove(void);

+ 3
- 3
utility/SdFile.cpp View File

* read() called before a file has been opened, corrupt file system * read() called before a file has been opened, corrupt file system
* or an I/O error occurred. * or an I/O error occurred.
*/ */
int16_t SdFile::read(void* buf, uint16_t nbyte) {
int32_t SdFile::read(void* buf, size_t nbyte) {
uint8_t* dst = reinterpret_cast<uint8_t*>(buf); uint8_t* dst = reinterpret_cast<uint8_t*>(buf);
// error if not open or write only // error if not open or write only
if (nbyte > (fileSize_ - curPosition_)) nbyte = fileSize_ - curPosition_; if (nbyte > (fileSize_ - curPosition_)) nbyte = fileSize_ - curPosition_;
// amount left to read // amount left to read
uint16_t toRead = nbyte;
uint32_t toRead = nbyte;
while (toRead > 0) { while (toRead > 0) {
uint32_t block; // raw device block number uint32_t block; // raw device block number
uint16_t offset = curPosition_ & 0X1FF; // offset in block uint16_t offset = curPosition_ & 0X1FF; // offset in block
} }
block = vol_->clusterStartBlock(curCluster_) + blockOfCluster; block = vol_->clusterStartBlock(curCluster_) + blockOfCluster;
} }
uint16_t n = toRead;
int32_t n = toRead;
// amount to be read from current block // amount to be read from current block
if (n > (512 - offset)) n = 512 - offset; if (n > (512 - offset)) n = 512 - offset;

Loading…
Cancel
Save