Add check for body_buf & properly free buffers

Also remove unused extdata dump method
This commit is contained in:
2024-06-13 18:28:04 -04:00
parent c3e09adcb2
commit 0420b23fbf
2 changed files with 8 additions and 61 deletions

View File

@@ -302,65 +302,6 @@ int install_badge_dir(FS_DirectoryEntry set_dir, int *badge_count, int set_id)
return badges_in_set;
}
Result backup_badges(void)
{
char *badgeMng = NULL;
DEBUG("writing badge data: making files...\n");
remake_file(fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeMngFile.dat"), ArchiveSD, BADGE_MNG_SIZE);
Handle dataHandle = 0;
Handle sdHandle = 0;
if (R_SUCCEEDED(FSUSER_OpenFile(&sdHandle, ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeData.dat"), FS_OPEN_READ, 0)))
{
FSFILE_Close(sdHandle);
FSUSER_DeleteFile(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeData.dat"));
}
FSUSER_CreateFile(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeData.dat"), 0, BADGE_DATA_SIZE);
FSUSER_OpenFile(&sdHandle, ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeData.dat"), FS_OPEN_WRITE, 0);
DEBUG("loading existing badge mng file...\n");
u32 mngRead = file_to_buf(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, &badgeMng);
DEBUG("loading existing badge data file\n");
Result res = FSUSER_OpenFile(&dataHandle, ArchiveBadgeExt, fsMakePath(PATH_ASCII, "/BadgeData.dat"), FS_OPEN_READ, 0);
if (mngRead != BADGE_MNG_SIZE || R_FAILED(res))
{
throw_error(language.badges.extdata_locked, ERROR_LEVEL_WARNING);
if (badgeMng) free(badgeMng);
if (dataHandle) FSFILE_Close(dataHandle);
FSFILE_Close(sdHandle);
return -1;
}
DEBUG("writing badge data: writing BadgeMngFile...\n");
res = buf_to_file(mngRead, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeMngFile.dat"), ArchiveSD, badgeMng);
if (R_FAILED(res))
{
DEBUG("Failed to write badgemngfile: 0x%08lx\n", res);
free(badgeMng);
FSFILE_Close(dataHandle);
FSFILE_Close(sdHandle);
return -1;
}
DEBUG("writing badge data: writing badgedata...\n");
char *buf = malloc(0x10000);
u64 size = BADGE_DATA_SIZE;
u64 cur = 0;
while (size > 0)
{
u32 read = 0;
res = FSFILE_Read(dataHandle, &read, cur, buf, min(0x10000, size));
res = FSFILE_Write(sdHandle, NULL, cur, buf, read, FS_WRITE_FLUSH);
size -= read;
cur += read;
}
free(badgeMng);
free(buf);
FSFILE_Close(dataHandle);
FSFILE_Close(sdHandle);
return 0;
}
typedef struct set_node_s {
u32 set_id;
u32 set_index;
@@ -435,7 +376,7 @@ SetNode * extract_sets(char *badgeMngBuffer, Handle backupDataHandle)
Result extract_badges(void)
{
DEBUG("Dumping installed badges...\n");
char *badgeMngBuffer = malloc(BADGE_MNG_SIZE);
char *badgeMngBuffer = NULL;
u32 size = file_to_buf(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, &badgeMngBuffer);
DEBUG("%lu bytes read\n", size);
@@ -452,12 +393,18 @@ Result extract_badges(void)
res = FSUSER_OpenFile(&backupDataHandle, ArchiveBadgeExt, fsMakePath(PATH_ASCII, "/BadgeData.dat"), FS_OPEN_READ, 0);
if (R_FAILED(res))
{
free(badgeMngBuffer);
free(badge_rgb_buf);
free(badge_alpha_buf);
throw_error(language.badges.extdata_locked, ERROR_LEVEL_WARNING);
DEBUG("backupDataHandle open failed\n");
return -1;
}
head = extract_sets(badgeMngBuffer, backupDataHandle);
} else {
free(badgeMngBuffer);
free(badge_rgb_buf);
free(badge_alpha_buf);
return 0;
}
for (u32 i = 0; i < badge_count; ++i)