forked from espressif/arduino-esp32
Edited VFSFileImpl::read to use both read/fread (#6456)
* Edited VFSFileImpl::read to use both read/fread * Added missing include
This commit is contained in:
@ -13,9 +13,12 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "vfs_api.h"
|
#include "vfs_api.h"
|
||||||
|
#include <stdio_ext.h>
|
||||||
|
|
||||||
using namespace fs;
|
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)
|
FileImplPtr VFSImpl::open(const char* fpath, const char* mode, const bool create)
|
||||||
{
|
{
|
||||||
if(!_mountpoint) {
|
if(!_mountpoint) {
|
||||||
@ -374,7 +377,28 @@ size_t VFSFileImpl::read(uint8_t* buf, size_t size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//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);
|
return fread(buf, 1, size, _f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VFSFileImpl::flush()
|
void VFSFileImpl::flush()
|
||||||
|
Reference in New Issue
Block a user