Properly zero files, badge/set index (unused?)
This commit is contained in:
@@ -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 + 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++;
|
||||
|
||||
*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;
|
||||
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);
|
||||
|
||||
@@ -317,7 +317,6 @@ Result backup_badges(void)
|
||||
}
|
||||
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);
|
||||
zero_handle_memeasy(sdHandle);
|
||||
|
||||
DEBUG("loading existing badge mng file...\n");
|
||||
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);
|
||||
return res;
|
||||
}
|
||||
DEBUG("NNID found: 0x%08lx\n", nnidNum);
|
||||
|
||||
badgeMngBuffer = NULL;
|
||||
badgeDataHandle = 0;
|
||||
@@ -523,9 +523,9 @@ Result install_badges(void)
|
||||
{
|
||||
u16 name[0x8A/2] = {0};
|
||||
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);
|
||||
badgeMngBuffer[0xA028 + 0xC + default_index * 0x30] = 0x10; // bytes 13 and 14 are 0x2710
|
||||
|
||||
21
source/fs.c
21
source/fs.c
@@ -148,20 +148,27 @@ Result open_badge_extdata()
|
||||
{
|
||||
if (R_SUMMARY(res) == RS_NOTFOUND)
|
||||
{
|
||||
DEBUG("Extdata not found - creating\n");
|
||||
createExtSaveData(0x000014d1);
|
||||
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
|
||||
{
|
||||
DEBUG("Unknown extdata error\n");
|
||||
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)))
|
||||
{
|
||||
FILE *fp = fopen("romfs:/tp_set.png", "rb");
|
||||
@@ -500,7 +507,7 @@ Result zero_handle_memeasy(Handle handle)
|
||||
char *zero_buf = calloc(1, 0x10000);
|
||||
while (size > 0x10000)
|
||||
{
|
||||
FSFILE_Write(handle, NULL, cur, &zero_buf, 0x1000, 0);
|
||||
FSFILE_Write(handle, NULL, cur, &zero_buf, 0x10000, 0);
|
||||
cur += 0x10000;
|
||||
size -= 0x10000;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user