Skip to content

Commit

Permalink
Edited VFSFileImpl::read to use both read/fread (espressif#6456)
Browse files Browse the repository at this point in the history
* Edited VFSFileImpl::read to use both read/fread

* Added missing include
  • Loading branch information
P-R-O-C-H-Y authored Mar 28, 2022
1 parent 905f8f2 commit 7b89b39
Showing 1 changed file with 25 additions and 1 deletion.
26 changes: 25 additions & 1 deletion libraries/FS/src/vfs_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@
// limitations under the License.

#include "vfs_api.h"
#include <stdio_ext.h>

using namespace fs;

#define READ_SIZE_SWITCH 128 //swithc to read func when read size > 128bytes

FileImplPtr VFSImpl::open(const char* fpath, const char* mode, const bool create)
{
if(!_mountpoint) {
Expand Down Expand Up @@ -374,7 +377,28 @@ size_t VFSFileImpl::read(uint8_t* buf, size_t size)
return 0;
}

return fread(buf, 1, size, _f);
//ERASE BYTEBUFFER and use read when size > READ_SIZE_SWITCH always
if(size > READ_SIZE_SWITCH)
{
//check some data in buffer exists –> clear buffer and move pointer to deleted data
size_t bytesinbuf = __fpending(_f);
if (bytesinbuf && (bytesinbuf != 128)) //buffer lenght is 128 bytes
{
fpurge(_f);
lseek(fileno(_f),(-128+bytesinbuf),SEEK_CUR);
}

int res = ::read(fileno(_f), buf, size);
if (res < 0) {
// an error occurred
return 0;
}
return res;
}
else
{
return fread(buf, 1, size, _f);
}
}

void VFSFileImpl::flush()
Expand Down

0 comments on commit 7b89b39

Please sign in to comment.