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 + 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
|
||||||
|
|||||||
21
source/fs.c
21
source/fs.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user