Add smdh parsing (errors out for some reason)

This commit is contained in:
2017-08-26 19:24:17 -04:00
parent 2654c1dfa7
commit 87b6bb11d1
6 changed files with 41 additions and 8 deletions

View File

@@ -37,17 +37,19 @@ int main(void)
consoleInit(GFX_TOP, NULL);
int theme_count = get_number_entries("/Themes");
theme *theme = calloc(1, sizeof(theme));
u16 path[262] = {0};
utf8_to_utf16(path, (u8*)"/Themes/Saber Lily", 262 * sizeof(u16));
memcpy(theme->path, path, 262 * sizeof(u16));
theme->is_zip = false;
while(aptMainLoop())
{
hidScanInput();
u32 kDown = hidKeysDown();
if (kDown & KEY_A) single_install(*theme);
if (kDown & KEY_A)
{
theme *theme = malloc(sizeof(theme));
u16 path[262] = {0};
struacat(path, "/Themes/Saber Lily");
parse_smdh(theme, path);
printu(theme->name);
}
if (kDown & KEY_START)
{
close_archives();

View File

@@ -113,4 +113,22 @@ Result single_install(theme theme_to_install)
printf("Done!\n");
return 0;
}
void parse_smdh(theme *entry, u16 *path)
{
u16 path_to_smdh[0x106] = {0};
printu(path);
strucat(path_to_smdh, path);
struacat(path_to_smdh, "/info.smdh");
printu(path_to_smdh);
char *info_buffer;
u64 size = file_to_buf(fsMakePath(PATH_UTF16, path_to_smdh), ArchiveSD, &info_buffer);
printf("Size: %llu\n", size);
memcpy(entry->name, info_buffer + 0x08, 0x80);
memcpy(entry->desc, info_buffer + 0x88, 0x100);
memcpy(entry->author, info_buffer + 0x188, 0x80);
memcpy(entry->icon_data, info_buffer + 0x2040, 0x1200);
free(info_buffer);
}

View File

@@ -29,4 +29,14 @@ void printu(u16 *input)
for (u16 i = 0; i < buf_len; i++) buf[i] = input[i];
printf("%ls\n", buf);
free(buf);
}
u16 *strucat(u16 *destination, const u16 *source)
{
ssize_t dest_len = strulen(destination, 0x106);
ssize_t source_len = strulen(source, 0x106);
memcpy(&destination[dest_len], source, source_len * sizeof(u16));
return destination;
}