File tree 1 file changed +25
-1
lines changed
1 file changed +25
-1
lines changed Original file line number Diff line number Diff line change 13
13
// limitations under the License.
14
14
15
15
#include " vfs_api.h"
16
+ #include < stdio_ext.h>
16
17
17
18
using namespace fs ;
18
19
20
+ #define READ_SIZE_SWITCH 128 // swithc to read func when read size > 128bytes
21
+
19
22
FileImplPtr VFSImpl::open (const char * fpath, const char * mode, const bool create)
20
23
{
21
24
if (!_mountpoint) {
@@ -374,7 +377,28 @@ size_t VFSFileImpl::read(uint8_t* buf, size_t size)
374
377
return 0 ;
375
378
}
376
379
377
- return fread (buf, 1 , size, _f);
380
+ // ERASE BYTEBUFFER and use read when size > READ_SIZE_SWITCH always
381
+ if (size > READ_SIZE_SWITCH)
382
+ {
383
+ // check some data in buffer exists –> clear buffer and move pointer to deleted data
384
+ size_t bytesinbuf = __fpending (_f);
385
+ if (bytesinbuf && (bytesinbuf != 128 )) // buffer lenght is 128 bytes
386
+ {
387
+ fpurge (_f);
388
+ lseek (fileno (_f),(-128 +bytesinbuf),SEEK_CUR);
389
+ }
390
+
391
+ int res = ::read (fileno (_f), buf, size);
392
+ if (res < 0 ) {
393
+ // an error occurred
394
+ return 0 ;
395
+ }
396
+ return res;
397
+ }
398
+ else
399
+ {
400
+ return fread (buf, 1 , size, _f);
401
+ }
378
402
}
379
403
380
404
void VFSFileImpl::flush ()
You can’t perform that action at this time.
0 commit comments