File tree Expand file tree Collapse file tree 1 file changed +25
-1
lines changed Expand file tree Collapse file tree 1 file changed +25
-1
lines changed Original file line number Diff line number Diff line change 1313//  limitations under the License.
1414
1515#include  " vfs_api.h" 
16+ #include  < stdio_ext.h> 
1617
1718using  namespace  fs ; 
1819
20+ #define  READ_SIZE_SWITCH  128     // swithc to read func when read size > 128bytes
21+ 
1922FileImplPtr VFSImpl::open (const  char * fpath, const  char * mode, const  bool  create)
2023{
2124    if (!_mountpoint) {
@@ -374,7 +377,28 @@ size_t VFSFileImpl::read(uint8_t* buf, size_t size)
374377        return  0 ;
375378    }
376379
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+     }
378402}
379403
380404void  VFSFileImpl::flush ()
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments