Add fast seek support to file objects

This commit is contained in:
Scott Shawcroft 2019-02-03 13:41:20 -08:00
parent 3d07571029
commit a393a6e0c5
No known key found for this signature in database
GPG Key ID: FD0EDC4B6C53CA59
2 changed files with 18 additions and 1 deletions

View File

@ -197,6 +197,23 @@ STATIC mp_obj_t file_open(fs_user_mount_t *vfs, const mp_obj_type_t *type, mp_ar
m_del_obj(pyb_file_obj_t, o);
mp_raise_OSError(fresult_to_errno_table[res]);
}
// If we're reading, turn on fast seek.
if (mode == FA_READ) {
// one call to determine how much space we need.
DWORD temp_table[2];
temp_table[0] = 2;
o->fp.cltbl = temp_table;
f_lseek(&o->fp, CREATE_LINKMAP);
DWORD size = (temp_table[0] + 1) * 2;
o->fp.cltbl = m_malloc_maybe(size, false);
if (o->fp.cltbl != NULL) {
o->fp.cltbl[0] = size;
res = f_lseek(&o->fp, CREATE_LINKMAP);
if (res != FR_OK) {
o->fp.cltbl = NULL;
}
}
}
// for 'a' mode, we must begin at the end of the file
if ((mode & FA_OPEN_ALWAYS) != 0) {

View File

@ -74,7 +74,7 @@
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
#define _USE_FASTSEEK 0
#define _USE_FASTSEEK 1
/* This option switches fast seek function. (0:Disable or 1:Enable) */