浏览代码

Fix read >= 64KB

(attention, untested)
main
Frank Bösing 7 年前
父节点
当前提交
b4f700fd08
共有 2 个文件被更改,包括 4 次插入4 次删除
  1. +1
    -1
      utility/SdFat.h
  2. +3
    -3
      utility/SdFile.cpp

+ 1
- 1
utility/SdFat.h 查看文件

@@ -238,7 +238,7 @@ class SdFile : public Print {
uint8_t b;
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);
static uint8_t remove(SdFile* dirFile, const char* fileName);
uint8_t remove(void);

+ 3
- 3
utility/SdFile.cpp 查看文件

@@ -657,7 +657,7 @@ void SdFile::printTwoDigits(uint8_t v) {
* read() called before a file has been opened, corrupt file system
* 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);
// error if not open or write only
@@ -667,7 +667,7 @@ int16_t SdFile::read(void* buf, uint16_t nbyte) {
if (nbyte > (fileSize_ - curPosition_)) nbyte = fileSize_ - curPosition_;
// amount left to read
uint16_t toRead = nbyte;
uint32_t toRead = nbyte;
while (toRead > 0) {
uint32_t block; // raw device block number
uint16_t offset = curPosition_ & 0X1FF; // offset in block
@@ -687,7 +687,7 @@ int16_t SdFile::read(void* buf, uint16_t nbyte) {
}
block = vol_->clusterStartBlock(curCluster_) + blockOfCluster;
}
uint16_t n = toRead;
int32_t n = toRead;
// amount to be read from current block
if (n > (512 - offset)) n = 512 - offset;

正在加载...
取消
保存