Compare commits

..

3 Commits

Author SHA1 Message Date
Aurora
d7bdf3fc19 Finally fix GW downgraded NANDs (thanks GW for the easily recognizable junk) 2016-09-18 13:29:23 +02:00
Aurora
c4e5f4410c Minor stuff 2016-09-17 14:52:50 +02:00
Aurora
f5039dca56 Fix UTF-8 BOM (Windows Notepad seems to like it) being parsed as a regular character 2016-09-17 00:12:09 +02:00
2 changed files with 11 additions and 8 deletions

View File

@@ -77,31 +77,34 @@ static void loadCustomVerString(u16 *out, u32 *verStringSize)
{ {
u64 fileSize; u64 fileSize;
if(R_SUCCEEDED(IFile_GetSize(&file, &fileSize)) && fileSize <= 57) if(R_SUCCEEDED(IFile_GetSize(&file, &fileSize)) && fileSize <= 60)
{ {
u8 buf[57]; u8 buf[fileSize];
u64 total; u64 total;
if(R_SUCCEEDED(IFile_Read(&file, &total, buf, fileSize))) if(R_SUCCEEDED(IFile_Read(&file, &total, buf, fileSize)))
{ {
static const u8 bom[] = {0xEF, 0xBB, 0xBF};
u32 finalSize = 0; u32 finalSize = 0;
for(u32 i = 0, fileSizeTmp = (u32)fileSize, increase; i < fileSizeTmp && finalSize <= 18; i += increase) //Convert from UTF-8 to UTF-16 (Nintendo doesn't support 4-byte UTF-16, so 4-byte UTF-8 is unsupported)
for(u32 increase, fileSizeTmp = (u32)fileSize, i = (fileSizeTmp > 2 && memcmp(buf, bom, 3) == 0) ? 3 : 0;
i < fileSizeTmp && finalSize < 19; i += increase, finalSize++)
{ {
if((buf[i] & 0x80) == 0) if((buf[i] & 0x80) == 0)
{ {
increase = 1; increase = 1;
out[finalSize++] = (u16)buf[i]; out[finalSize] = (u16)buf[i];
} }
else if((buf[i] & 0xE0) == 0xC0 && i + 1 < fileSizeTmp && (buf[i + 1] & 0xC0) == 0x80) else if((buf[i] & 0xE0) == 0xC0 && i + 1 < fileSizeTmp && (buf[i + 1] & 0xC0) == 0x80)
{ {
increase = 2; increase = 2;
out[finalSize++] = (u16)(((buf[i] & 0x1F) << 6) | (buf[i + 1] & 0x3F)); out[finalSize] = (u16)(((buf[i] & 0x1F) << 6) | (buf[i + 1] & 0x3F));
} }
else if((buf[i] & 0xF0) == 0xE0 && i + 2 < fileSizeTmp && (buf[i + 1] & 0xC0) == 0x80 && (buf[i + 2] & 0xC0) == 0x80) else if((buf[i] & 0xF0) == 0xE0 && i + 2 < fileSizeTmp && (buf[i + 1] & 0xC0) == 0x80 && (buf[i + 2] & 0xC0) == 0x80)
{ {
increase = 3; increase = 3;
out[finalSize++] = (u16)(((buf[i] & 0xF) << 12) | ((buf[i + 1] & 0x3F) << 6) | (buf[i + 2] & 0x3F)); out[finalSize] = (u16)(((buf[i] & 0xF) << 12) | ((buf[i + 1] & 0x3F) << 6) | (buf[i + 2] & 0x3F));
} }
else break; else break;
} }
@@ -169,7 +172,7 @@ static void loadTitleLocaleConfig(u64 progId, u8 *regionId, u8 *languageId)
break; break;
} }
} }
for(u32 i = 0; i < 12; i++) for(u32 i = 0; i < 12; i++)
{ {
static const char *languages[] = {"JP", "EN", "FR", "DE", "IT", "ES", "ZH", "KO", "NL", "PT", "RU", "TW"}; static const char *languages[] = {"JP", "EN", "FR", "DE", "IT", "ES", "ZH", "KO", "NL", "PT", "RU", "TW"};

View File

@@ -169,7 +169,7 @@ u32 firmRead(void *dest, u32 firmType)
while(f_readdir(&dir, &info) == FR_OK && info.fname[0]) while(f_readdir(&dir, &info) == FR_OK && info.fname[0])
{ {
//Not a cxi //Not a cxi
if(info.altname[9] != 'A') continue; if(info.fname[9] != 'a') continue;
//Convert the .app name to an integer //Convert the .app name to an integer
u32 tempVersion = 0; u32 tempVersion = 0;