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

@@ -39,8 +39,8 @@ INCLUDES := include
#---------------------------------------------------------------------------------
ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft
CFLAGS := -g -Wall -Wextra -Wno-pointer-sign -O2 -mword-relocations \
-fomit-frame-pointer -ffunction-sections \
CFLAGS := -g -Wall -Wextra -Wno-pointer-sign -mword-relocations \
-ffunction-sections \
$(ARCH)
CFLAGS += $(INCLUDE) -DARM11 -D_3DS

View File

@@ -14,5 +14,7 @@ typedef struct {
} theme;
Result single_install(theme);
int scan_themes(theme **themes);
void parse_smdh(theme *entry, u16 *path);
#endif

View File

@@ -6,5 +6,6 @@
ssize_t strulen(u16*, ssize_t);
void struacat(u16 *input, const char *addition);
void printu(u16 *input);
u16 *strucat(u16 *destination, const u16 *source);
#endif

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

@@ -114,3 +114,21 @@ Result single_install(theme theme_to_install)
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

@@ -30,3 +30,13 @@ void printu(u16 *input)
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;
}