Introduce a decimal itoa, fixed findDumpFile not working properly with more than 100 dumps
This commit is contained in:
parent
858efa604e
commit
e00ef893d0
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include "crypto.h"
|
#include "crypto.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "strings.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "fatfs/sdmmc/sdmmc.h"
|
#include "fatfs/sdmmc/sdmmc.h"
|
||||||
|
|
||||||
@ -502,15 +503,9 @@ void kernel9Loader(Arm9Bin *arm9Section)
|
|||||||
u8 __attribute__((aligned(4))) arm9BinCtr[AES_BLOCK_SIZE];
|
u8 __attribute__((aligned(4))) arm9BinCtr[AES_BLOCK_SIZE];
|
||||||
memcpy(arm9BinCtr, arm9Section->ctr, sizeof(arm9BinCtr));
|
memcpy(arm9BinCtr, arm9Section->ctr, sizeof(arm9BinCtr));
|
||||||
|
|
||||||
//Calculate the size of the ARM9 binary
|
|
||||||
u32 arm9BinSize = 0;
|
|
||||||
//http://stackoverflow.com/questions/12791077/atoi-implementation-in-c
|
|
||||||
for(char *tmp = arm9Section->size; *tmp != 0; tmp++)
|
|
||||||
arm9BinSize = (arm9BinSize << 3) + (arm9BinSize << 1) + *tmp - '0';
|
|
||||||
|
|
||||||
//Decrypt ARM9 binary
|
//Decrypt ARM9 binary
|
||||||
aes_use_keyslot(arm9BinSlot);
|
aes_use_keyslot(arm9BinSlot);
|
||||||
aes(startOfArm9Bin, startOfArm9Bin, arm9BinSize / AES_BLOCK_SIZE, arm9BinCtr, AES_CTR_MODE, AES_INPUT_BE | AES_INPUT_NORMAL);
|
aes(startOfArm9Bin, startOfArm9Bin, decAtoi(arm9Section->size) / AES_BLOCK_SIZE, arm9BinCtr, AES_CTR_MODE, AES_INPUT_BE | AES_INPUT_NORMAL);
|
||||||
|
|
||||||
if(*startOfArm9Bin != 0x47704770 && *startOfArm9Bin != 0xB0862000) error("Failed to decrypt the ARM9 binary.");
|
if(*startOfArm9Bin != 0x47704770 && *startOfArm9Bin != 0xB0862000) error("Failed to decrypt the ARM9 binary.");
|
||||||
}
|
}
|
||||||
|
11
source/fs.c
11
source/fs.c
@ -242,16 +242,9 @@ void findDumpFile(const char *path, char *fileName)
|
|||||||
{
|
{
|
||||||
result = f_findfirst(&dir, &info, path, fileName);
|
result = f_findfirst(&dir, &info, path, fileName);
|
||||||
|
|
||||||
if(result != FR_OK || !info.fname[0]) break;
|
if(result != FR_OK || !info.fname[0] || n == 99999999) break;
|
||||||
|
|
||||||
u32 i = 18,
|
decItoa(++n, fileName + 11, 8);
|
||||||
tmp = ++n;
|
|
||||||
|
|
||||||
while(tmp > 0)
|
|
||||||
{
|
|
||||||
fileName[i--] = '0' + (tmp % 10);
|
|
||||||
tmp /= 10;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(result == FR_OK) f_closedir(&dir);
|
if(result == FR_OK) f_closedir(&dir);
|
||||||
|
@ -253,7 +253,7 @@ void main(void)
|
|||||||
if(res != 0)
|
if(res != 0)
|
||||||
{
|
{
|
||||||
char patchesError[] = "Failed to apply FIRM patch(es).";
|
char patchesError[] = "Failed to apply FIRM patch(es).";
|
||||||
hexItoa(res, patchesError + 16, 2, false);
|
decItoa(res, patchesError + 16, 2);
|
||||||
error(patchesError);
|
error(patchesError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,3 +53,38 @@ void hexItoa(u32 number, char *out, u32 digits, bool fillString)
|
|||||||
|
|
||||||
if(fillString) while(i < digits) out[digits - 1 - i++] = '0';
|
if(fillString) while(i < digits) out[digits - 1 - i++] = '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void decItoa(u32 number, char *out, u32 digits)
|
||||||
|
{
|
||||||
|
while(number >= 10)
|
||||||
|
{
|
||||||
|
u32 i,
|
||||||
|
tmp;
|
||||||
|
|
||||||
|
for(i = 0, tmp = number; tmp >= 10; tmp /= 10, i++);
|
||||||
|
|
||||||
|
out[digits - 1 - i] = '0' + tmp;
|
||||||
|
|
||||||
|
u32 tmp2 = 10;
|
||||||
|
|
||||||
|
while(i > 1)
|
||||||
|
{
|
||||||
|
tmp2 *= 10;
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
|
||||||
|
number -= tmp * tmp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
out[digits - 1] = '0' + number;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 decAtoi(const char *in)
|
||||||
|
{
|
||||||
|
u32 res = 0;
|
||||||
|
|
||||||
|
for(char *tmp = (char *)in; *tmp != 0; tmp++)
|
||||||
|
res = *tmp - '0' + res * 10;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
@ -27,3 +27,5 @@
|
|||||||
u32 strlen(const char *string);
|
u32 strlen(const char *string);
|
||||||
void concatenateStrings(char *destination, const char *source);
|
void concatenateStrings(char *destination, const char *source);
|
||||||
void hexItoa(u32 number, char *out, u32 digits, bool fillString);
|
void hexItoa(u32 number, char *out, u32 digits, bool fillString);
|
||||||
|
void decItoa(u32 number, char *out, u32 digits);
|
||||||
|
u32 decAtoi(const char *in);
|
Reference in New Issue
Block a user