From 11113bbc07c365a1b7c685c83fb740d225a45393 Mon Sep 17 00:00:00 2001 From: Alex Taber Date: Mon, 17 Jun 2024 14:10:14 -0400 Subject: [PATCH] Remove illegal fat32 chars in badge dump --- include/config.h | 2 +- include/unicode.h | 1 + source/badges.c | 3 +++ source/unicode.c | 11 +++++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/config.h b/include/config.h index 8c9748e..1d35a01 100644 --- a/include/config.h +++ b/include/config.h @@ -32,7 +32,7 @@ #include typedef struct { - u32 background_color; + u32 background_color; u32 accent_color; u32 red_color; u32 yellow_color; diff --git a/include/unicode.h b/include/unicode.h index 104dd4d..f060142 100644 --- a/include/unicode.h +++ b/include/unicode.h @@ -29,6 +29,7 @@ #include "common.h" +void replace_chars(u16 *input, char *remove, u16 with); size_t strulen(const u16 *, ssize_t); void struacat(u16 * input, const char * addition); void printu(u16 * input); diff --git a/source/badges.c b/source/badges.c index 41a3d39..2a6a8f4 100644 --- a/source/badges.c +++ b/source/badges.c @@ -353,6 +353,7 @@ SetNode * extract_sets(char *badgeMngBuffer, Handle backupDataHandle) DEBUG("Processing icon for set %lu at index %lu\n", cursor->set_id, cursor->set_index); u16 utf16SetName[0x46] = {0}; FSFILE_Read(backupDataHandle, NULL, cursor->set_index * 16 * 0x8A, utf16SetName, 0x8A); + replace_chars(utf16SetName, ILLEGAL_CHARS, u'-'); u16 set_path[256] = {0}; struacat(set_path, "/3ds/" APP_TITLE "/BadgeBackups/"); size_t set_name_len = strucat(set_path, utf16SetName); @@ -431,6 +432,7 @@ Result extract_badges(void) u16 utf16Name[0x46] = {0}; FSFILE_Read(backupDataHandle, NULL, 0x35E80 + i * 16 * 0x8A, utf16Name, 0x8A); + replace_chars(utf16Name, ILLEGAL_CHARS, u'-'); char utf8Name[256] = {0}; res = utf16_to_utf8((u8 *) utf8Name, utf16Name, 256); @@ -444,6 +446,7 @@ Result extract_badges(void) { u16 utf16SetName[0x46] = {0}; FSFILE_Read(backupDataHandle, NULL, set_index * 16 * 0x8A, utf16SetName, 0x8A); + replace_chars(utf16SetName, ILLEGAL_CHARS, u'-'); char utf8SetName[128] = {0}; res = utf16_to_utf8((u8 *) utf8SetName, utf16SetName, 128); if (!res) diff --git a/source/unicode.c b/source/unicode.c index f5d38e6..07263c5 100644 --- a/source/unicode.c +++ b/source/unicode.c @@ -26,6 +26,17 @@ #include "unicode.h" +void replace_chars(u16 *input, char *remove, u16 with) +{ + for (u16 *cursor = input; *cursor != '\0'; cursor++) + { + if (strchr(remove, (char) (*cursor & 0xFF))) + { + *cursor = with; + } + } +} + size_t strulen(const u16 * input, ssize_t max_len) { for (int i = 0; i < max_len; i++) if (input[i] == 0) return i;