Avoid loading 15 MB files into RAM ever

This commit is contained in:
2024-06-10 10:48:34 -04:00
parent 7abf989de8
commit e40cd00754
4 changed files with 81 additions and 44 deletions

View File

@@ -151,7 +151,11 @@ Result open_badge_extdata()
createExtSaveData(0x000014d1);
FSUSER_OpenArchive(&ArchiveBadgeExt, ARCHIVE_EXTDATA, badge);
remake_file(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, BADGE_MNG_SIZE);
remake_file(fsMakePath(PATH_ASCII, "/BadgeData.dat"), ArchiveBadgeExt, BADGE_DATA_SIZE);
FSUSER_CreateFile(ArchiveBadgeExt, fsMakePath(PATH_ASCII, "/BadgeData.dat"), 0, BADGE_DATA_SIZE);
FSUSER_OpenFile(&test_handle, ArchiveBadgeExt, fsMakePath(PATH_ASCII, "/BadgeData.dat"), FS_OPEN_WRITE, 0);
zero_handle_memeasy(test_handle);
FSFILE_Flush(test_handle);
FSFILE_Close(test_handle);
} else
{
return res;
@@ -488,6 +492,23 @@ void remake_file(FS_Path path, FS_Archive archive, u32 size)
}
}
Result zero_handle_memeasy(Handle handle)
{
u64 size = 0;
u64 cur = 0;
FSFILE_GetSize(handle, &size);
char *zero_buf = calloc(1, 0x10000);
while (size > 0x10000)
{
FSFILE_Write(handle, NULL, cur, &zero_buf, 0x1000, 0);
cur += 0x10000;
size -= 0x10000;
}
FSFILE_Write(handle, NULL, cur, &zero_buf, size, 0);
free(zero_buf);
return 0;
}
static SwkbdCallbackResult fat32filter(void * user, const char ** ppMessage, const char * text, size_t textlen)
{
(void)textlen;