Add check for body_buf & properly free buffers
Also remove unused extdata dump method
This commit is contained in:
@@ -302,65 +302,6 @@ int install_badge_dir(FS_DirectoryEntry set_dir, int *badge_count, int set_id)
|
|||||||
return badges_in_set;
|
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 {
|
typedef struct set_node_s {
|
||||||
u32 set_id;
|
u32 set_id;
|
||||||
u32 set_index;
|
u32 set_index;
|
||||||
@@ -435,7 +376,7 @@ SetNode * extract_sets(char *badgeMngBuffer, Handle backupDataHandle)
|
|||||||
Result extract_badges(void)
|
Result extract_badges(void)
|
||||||
{
|
{
|
||||||
DEBUG("Dumping installed badges...\n");
|
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);
|
u32 size = file_to_buf(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, &badgeMngBuffer);
|
||||||
DEBUG("%lu bytes read\n", size);
|
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);
|
res = FSUSER_OpenFile(&backupDataHandle, ArchiveBadgeExt, fsMakePath(PATH_ASCII, "/BadgeData.dat"), FS_OPEN_READ, 0);
|
||||||
if (R_FAILED(res))
|
if (R_FAILED(res))
|
||||||
{
|
{
|
||||||
|
free(badgeMngBuffer);
|
||||||
|
free(badge_rgb_buf);
|
||||||
|
free(badge_alpha_buf);
|
||||||
throw_error(language.badges.extdata_locked, ERROR_LEVEL_WARNING);
|
throw_error(language.badges.extdata_locked, ERROR_LEVEL_WARNING);
|
||||||
DEBUG("backupDataHandle open failed\n");
|
DEBUG("backupDataHandle open failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
head = extract_sets(badgeMngBuffer, backupDataHandle);
|
head = extract_sets(badgeMngBuffer, backupDataHandle);
|
||||||
} else {
|
} else {
|
||||||
|
free(badgeMngBuffer);
|
||||||
|
free(badge_rgb_buf);
|
||||||
|
free(badge_alpha_buf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
for (u32 i = 0; i < badge_count; ++i)
|
for (u32 i = 0; i < badge_count; ++i)
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ static Result install_theme_internal(const Entry_List_s * themes, int installmod
|
|||||||
|
|
||||||
char * body_buf = NULL;
|
char * body_buf = NULL;
|
||||||
u32 uncompressed_size = decompress_lz_file(fsMakePath(PATH_ASCII, "/BodyCache.bin"), ArchiveThemeExt, &body_buf);
|
u32 uncompressed_size = decompress_lz_file(fsMakePath(PATH_ASCII, "/BodyCache.bin"), ArchiveThemeExt, &body_buf);
|
||||||
if (body_buf[5] != 1)
|
if (body_buf != NULL && body_buf[5] != 1)
|
||||||
{
|
{
|
||||||
installmode |= THEME_INSTALL_BODY;
|
installmode |= THEME_INSTALL_BODY;
|
||||||
body_buf[5] = 1;
|
body_buf[5] = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user