diff --git a/source/badges.c b/source/badges.c index 9b0073b..d6b82fa 100644 --- a/source/badges.c +++ b/source/badges.c @@ -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) diff --git a/source/themes.c b/source/themes.c index a2cd25b..01b3f6b 100644 --- a/source/themes.c +++ b/source/themes.c @@ -216,7 +216,7 @@ static Result install_theme_internal(const Entry_List_s * themes, int installmod char * body_buf = NULL; 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; body_buf[5] = 1;