Properly zero files, badge/set index (unused?)

This commit is contained in:
2024-06-11 17:01:05 -04:00
parent bb18085413
commit 80dd00933b
2 changed files with 19 additions and 12 deletions

View File

@@ -150,7 +150,7 @@ int install_badge_generic(char *file_buf, u64 file_size, u16 *name, int *badge_c
memcpy(badgeMngBuffer + 0x3E8 + *badge_count*0x28 + 0x18, &shortcut, 8); memcpy(badgeMngBuffer + 0x3E8 + *badge_count*0x28 + 0x18, &shortcut, 8);
memcpy(badgeMngBuffer + 0x3E8 + *badge_count*0x28 + 0x20, &shortcut, 8); // u64 shortcut[2], not sure what second is for memcpy(badgeMngBuffer + 0x3E8 + *badge_count*0x28 + 0x20, &shortcut, 8); // u64 shortcut[2], not sure what second is for
badgeMngBuffer[0x358 + *badge_count/8] |= 0 << (*badge_count % 8); // enabled badges bitfield badgeMngBuffer[0x358 + *badge_count/8] |= 1 << (*badge_count % 8); // enabled badges bitfield
badges_installed++; badges_installed++;
*badge_count += 1; *badge_count += 1;
@@ -264,7 +264,7 @@ int install_badge_dir(FS_DirectoryEntry set_dir, int *badge_count, int set_id)
u32 total_count = 0xFFFF * badges_in_set; u32 total_count = 0xFFFF * badges_in_set;
for (int i = 0; i < 16; ++i) for (int i = 0; i < 16; ++i)
{ {
FSFILE_Write(badgeDataHandle, NULL, set_index * 0x8A0 + i * 0x8A, set_dir.name, 0x8A, 0); FSFILE_Write(badgeDataHandle, NULL, set_index * 0x8A0 + i * 0x8A, set_dir.name, strulen(set_dir.name, 0x8A) * 2, 0);
} }
badgeMngBuffer[0x3D8 + set_index/8] |= 0 << (set_index % 8); badgeMngBuffer[0x3D8 + set_index/8] |= 0 << (set_index % 8);
@@ -317,7 +317,6 @@ Result backup_badges(void)
} }
FSUSER_CreateFile(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeData.dat"), 0, BADGE_DATA_SIZE); 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); FSUSER_OpenFile(&sdHandle, ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/Anemone3DS/BadgeData.dat"), FS_OPEN_WRITE, 0);
zero_handle_memeasy(sdHandle);
DEBUG("loading existing badge mng file...\n"); DEBUG("loading existing badge mng file...\n");
u32 mngRead = file_to_buf(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, &badgeMng); u32 mngRead = file_to_buf(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, &badgeMng);
@@ -401,6 +400,7 @@ Result install_badges(void)
DEBUG("ACTU_GetAccountDataBlock failed! %08lx\n", res); DEBUG("ACTU_GetAccountDataBlock failed! %08lx\n", res);
return res; return res;
} }
DEBUG("NNID found: 0x%08lx\n", nnidNum);
badgeMngBuffer = NULL; badgeMngBuffer = NULL;
badgeDataHandle = 0; badgeDataHandle = 0;
@@ -523,9 +523,9 @@ Result install_badges(void)
{ {
u16 name[0x8A/2] = {0}; u16 name[0x8A/2] = {0};
utf8_to_utf16(name, (u8 *) "Other Badges", 0x8A); utf8_to_utf16(name, (u8 *) "Other Badges", 0x8A);
FSFILE_Write(badgeDataHandle, NULL, default_index * 0x8A0 + i * 0x8A, &name, 0x8A, 0); FSFILE_Write(badgeDataHandle, NULL, default_index * 0x8A0 + i * 0x8A, &name, strulen(name, 0x8A) * 2, 0);
} }
badgeMngBuffer[0x3D8 + default_index/8] |= 0 << (default_index % 8); badgeMngBuffer[0x3D8 + default_index/8] |= 1 << (default_index % 8);
memset(badgeMngBuffer + 0xA028 + default_index * 0x30, 0xFF, 8); memset(badgeMngBuffer + 0xA028 + default_index * 0x30, 0xFF, 8);
badgeMngBuffer[0xA028 + 0xC + default_index * 0x30] = 0x10; // bytes 13 and 14 are 0x2710 badgeMngBuffer[0xA028 + 0xC + default_index * 0x30] = 0x10; // bytes 13 and 14 are 0x2710

View File

@@ -148,20 +148,27 @@ Result open_badge_extdata()
{ {
if (R_SUMMARY(res) == RS_NOTFOUND) if (R_SUMMARY(res) == RS_NOTFOUND)
{ {
DEBUG("Extdata not found - creating\n");
createExtSaveData(0x000014d1); createExtSaveData(0x000014d1);
FSUSER_OpenArchive(&ArchiveBadgeExt, ARCHIVE_EXTDATA, badge); FSUSER_OpenArchive(&ArchiveBadgeExt, ARCHIVE_EXTDATA, badge);
remake_file(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, BADGE_MNG_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 } else
{ {
DEBUG("Unknown extdata error\n");
return res; return res;
} }
} }
if (R_FAILED(res = FSUSER_OpenFile(&test_handle, ArchiveBadgeExt, fsMakePath(PATH_ASCII, "BadgeData.dat"), FS_OPEN_READ, 0)))
{
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);
FSFILE_Flush(test_handle);
}
FSFILE_Close(test_handle);
if(R_FAILED(res = FSUSER_OpenFile(&test_handle, ArchiveBadgeExt, fsMakePath(PATH_ASCII, "BadgeMngFile.dat"), FS_OPEN_READ, 0)))
remake_file(fsMakePath(PATH_ASCII, "/BadgeMngFile.dat"), ArchiveBadgeExt, BADGE_MNG_SIZE);
if(R_FAILED(res = FSUSER_OpenFile(&test_handle, ArchiveSD, fsMakePath(PATH_ASCII, "/Badges/ThemePlaza Badges/_seticon.png"), FS_OPEN_READ, 0))) if(R_FAILED(res = FSUSER_OpenFile(&test_handle, ArchiveSD, fsMakePath(PATH_ASCII, "/Badges/ThemePlaza Badges/_seticon.png"), FS_OPEN_READ, 0)))
{ {
FILE *fp = fopen("romfs:/tp_set.png", "rb"); FILE *fp = fopen("romfs:/tp_set.png", "rb");
@@ -500,7 +507,7 @@ Result zero_handle_memeasy(Handle handle)
char *zero_buf = calloc(1, 0x10000); char *zero_buf = calloc(1, 0x10000);
while (size > 0x10000) while (size > 0x10000)
{ {
FSFILE_Write(handle, NULL, cur, &zero_buf, 0x1000, 0); FSFILE_Write(handle, NULL, cur, &zero_buf, 0x10000, 0);
cur += 0x10000; cur += 0x10000;
size -= 0x10000; size -= 0x10000;
} }