Переглянути джерело

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;

Завантаження…
Відмінити
Зберегти