add missing fsync
This commit is contained in:
@@ -15,7 +15,7 @@ static u32 file_based_base_path_len;
|
|||||||
static int _emummc_storage_file_based_read_write_single(u32 sector, u32 num_sectors, void *buf, bool is_write){
|
static int _emummc_storage_file_based_read_write_single(u32 sector, u32 num_sectors, void *buf, bool is_write){
|
||||||
#if FF_FS_READONLY == 1
|
#if FF_FS_READONLY == 1
|
||||||
if(is_write){
|
if(is_write){
|
||||||
return 0;
|
return FR_WRITE_PROTECTED;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -51,7 +51,6 @@ static int _emummc_storage_file_based_change_file(const char *name, s32 idx){
|
|||||||
|
|
||||||
strcpy(file_based_base_path + file_based_base_path_len, name);
|
strcpy(file_based_base_path + file_based_base_path_len, name);
|
||||||
|
|
||||||
gfx_printf("new f %s \n", file_based_base_path);
|
|
||||||
|
|
||||||
#if FF_FS_READONLY == 1
|
#if FF_FS_READONLY == 1
|
||||||
res = f_open(&active_file, file_based_base_path, FA_READ);
|
res = f_open(&active_file, file_based_base_path, FA_READ);
|
||||||
@@ -86,21 +85,30 @@ static int _emummc_storage_file_based_read_write(u32 sector, u32 num_sectors, vo
|
|||||||
if(res != FR_OK){
|
if(res != FR_OK){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return _emummc_storage_file_based_read_write_single(sector, num_sectors, buf, is_write) == FR_OK;
|
res = _emummc_storage_file_based_read_write_single(sector, num_sectors, buf, is_write);
|
||||||
|
if(res != FR_OK){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
f_sync(&active_file);
|
||||||
|
return 1;
|
||||||
}else if(active_part == 2){
|
}else if(active_part == 2){
|
||||||
// boot1
|
// boot1
|
||||||
res = _emummc_storage_file_based_change_file("BOOT1", -2);
|
res = _emummc_storage_file_based_change_file("BOOT1", -2);
|
||||||
if(res != FR_OK){
|
if(res != FR_OK){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return _emummc_storage_file_based_read_write_single(sector, num_sectors, buf, is_write) == FR_OK;
|
res = _emummc_storage_file_based_read_write_single(sector, num_sectors, buf, is_write) == FR_OK;
|
||||||
|
if(res != FR_OK){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
f_sync(&active_file);
|
||||||
|
return 1;
|
||||||
}else if(active_part == 0){
|
}else if(active_part == 0){
|
||||||
// GPP
|
// GPP
|
||||||
if(file_part_sz_sct == 0){
|
if(file_part_sz_sct == 0){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx_printf("emu w %x %x \n", sector, num_sectors);
|
|
||||||
|
|
||||||
u32 scts_left = num_sectors;
|
u32 scts_left = num_sectors;
|
||||||
u32 cur_sct = sector;
|
u32 cur_sct = sector;
|
||||||
@@ -113,20 +121,16 @@ static int _emummc_storage_file_based_read_write(u32 sector, u32 num_sectors, vo
|
|||||||
|
|
||||||
u32 file_idx = cur_sct / file_part_sz_sct;
|
u32 file_idx = cur_sct / file_part_sz_sct;
|
||||||
|
|
||||||
gfx_printf("idx %d cnt %x off %x \n", file_idx, sct_cnt, offset);
|
|
||||||
if((s32)file_idx != active_file_idx){
|
if((s32)file_idx != active_file_idx){
|
||||||
gfx_printf("active idx %d \n", active_file_idx);
|
|
||||||
char name[3] = "";
|
char name[3] = "";
|
||||||
if(file_idx < 10){
|
if(file_idx < 10){
|
||||||
strcpy(name, "0");
|
strcpy(name, "0");
|
||||||
}
|
}
|
||||||
itoa(file_idx, name + strlen(name), 10);
|
itoa(file_idx, name + strlen(name), 10);
|
||||||
|
|
||||||
gfx_printf("new name %s \n", name);
|
|
||||||
|
|
||||||
res = _emummc_storage_file_based_change_file(name, file_idx);
|
res = _emummc_storage_file_based_change_file(name, file_idx);
|
||||||
if(res != FR_OK){
|
if(res != FR_OK){
|
||||||
gfx_printf("fail change file \n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,13 +138,16 @@ static int _emummc_storage_file_based_read_write(u32 sector, u32 num_sectors, vo
|
|||||||
res = _emummc_storage_file_based_read_write_single(offset, sct_cnt, buf + ((u64)(num_sectors - scts_left) << 9), is_write);
|
res = _emummc_storage_file_based_read_write_single(offset, sct_cnt, buf + ((u64)(num_sectors - scts_left) << 9), is_write);
|
||||||
|
|
||||||
if(res != FR_OK){
|
if(res != FR_OK){
|
||||||
gfx_printf("rw single fail %d \n", res);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_sct += sct_cnt;
|
cur_sct += sct_cnt;
|
||||||
scts_left -= sct_cnt;
|
scts_left -= sct_cnt;
|
||||||
}
|
}
|
||||||
|
if(res != FR_OK){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
f_sync(&active_file);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -152,7 +159,6 @@ int emummc_storage_file_base_set_partition(u32 partition){
|
|||||||
}
|
}
|
||||||
|
|
||||||
int emummc_storage_file_based_init(const char *path){
|
int emummc_storage_file_based_init(const char *path){
|
||||||
gfx_printf("emu init %s \n", path);
|
|
||||||
strcpy(file_based_base_path, path);
|
strcpy(file_based_base_path, path);
|
||||||
file_based_base_path_len = strlen(file_based_base_path);
|
file_based_base_path_len = strlen(file_based_base_path);
|
||||||
strcat(file_based_base_path + file_based_base_path_len, "00");
|
strcat(file_based_base_path + file_based_base_path_len, "00");
|
||||||
@@ -161,7 +167,6 @@ int emummc_storage_file_based_init(const char *path){
|
|||||||
|
|
||||||
FILINFO fi;
|
FILINFO fi;
|
||||||
if(f_stat(file_based_base_path, &fi) != FR_OK){
|
if(f_stat(file_based_base_path, &fi) != FR_OK){
|
||||||
gfx_printf("emu init fstat failed %s \n", path);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user