diff --git a/arm9/source/common/hid.h b/arm9/source/common/hid.h index 818635d..e5bca19 100644 --- a/arm9/source/common/hid.h +++ b/arm9/source/common/hid.h @@ -9,29 +9,29 @@ #define SD_STATE ((*(volatile u16*)0x1000601C) & (0x1<<5)) -#define BUTTON_A (1 << 0) -#define BUTTON_B (1 << 1) -#define BUTTON_SELECT (1 << 2) -#define BUTTON_START (1 << 3) -#define BUTTON_RIGHT (1 << 4) -#define BUTTON_LEFT (1 << 5) -#define BUTTON_UP (1 << 6) -#define BUTTON_DOWN (1 << 7) -#define BUTTON_R1 (1 << 8) -#define BUTTON_L1 (1 << 9) -#define BUTTON_X (1 << 10) -#define BUTTON_Y (1 << 11) +#define BUTTON_A ((u32)1 << 0) +#define BUTTON_B ((u32)1 << 1) +#define BUTTON_SELECT ((u32)1 << 2) +#define BUTTON_START ((u32)1 << 3) +#define BUTTON_RIGHT ((u32)1 << 4) +#define BUTTON_LEFT ((u32)1 << 5) +#define BUTTON_UP ((u32)1 << 6) +#define BUTTON_DOWN ((u32)1 << 7) +#define BUTTON_R1 ((u32)1 << 8) +#define BUTTON_L1 ((u32)1 << 9) +#define BUTTON_X ((u32)1 << 10) +#define BUTTON_Y ((u32)1 << 11) #define BUTTON_ANY 0x00000FFF #define BUTTON_ARROW (BUTTON_RIGHT|BUTTON_LEFT|BUTTON_UP|BUTTON_DOWN) // special buttons / cart / sd -#define BUTTON_POWER (1 << 12) -#define BUTTON_HOME (1 << 13) -#define CART_INSERT (1 << 14) -#define CART_EJECT (1 << 15) -#define SD_INSERT (1 << 16) -#define SD_EJECT (1 << 17) -#define TIMEOUT_HID (1 << 31) +#define BUTTON_POWER ((u32)1 << 12) +#define BUTTON_HOME ((u32)1 << 13) +#define CART_INSERT ((u32)1 << 14) +#define CART_EJECT ((u32)1 << 15) +#define SD_INSERT ((u32)1 << 16) +#define SD_EJECT ((u32)1 << 17) +#define TIMEOUT_HID ((u32)1 << 31) // strings for button conversion #define BUTTON_STRINGS "A", "B", "SELECT", "START", "RIGHT", "LEFT", "UP", "DOWN", "R", "L", "X", "Y" diff --git a/arm9/source/crypto/crc32.c b/arm9/source/crypto/crc32.c index 622406b..b73b7a6 100644 --- a/arm9/source/crypto/crc32.c +++ b/arm9/source/crypto/crc32.c @@ -67,7 +67,10 @@ u32 crc32_calculate_from_file(const char* fileName, u32 offset, u32 length) { u32 bufsiz = min(STD_BUFFER_SIZE, length); u8* buffer = (u8*) malloc(bufsiz); if (!buffer) return false; - if (fvx_open(&inputFile, fileName, FA_READ) != FR_OK) return crc32; + if (fvx_open(&inputFile, fileName, FA_READ) != FR_OK) { + free(buffer); + return crc32; + } fvx_lseek(&inputFile, offset); bool ret = true; diff --git a/arm9/source/system/bps.c b/arm9/source/system/bps.c index 1b8c5d2..ff2f509 100644 --- a/arm9/source/system/bps.c +++ b/arm9/source/system/bps.c @@ -257,9 +257,9 @@ u32 beatReadChecksum() { bool beatReadString(u32 length, char text[]) { char strBuf[256]; - for(u32 i = 0; i < length; i++) { strBuf[min(i, 256)] = beatRead(); } - strBuf[length] = '\0'; - snprintf(text, 256, "%s", strBuf); + for(u32 i = 0; i < length; i++) { strBuf[min(i, 255)] = beatRead(); } + strBuf[min(length, 255)] = '\0'; + snprintf(text, length+1, "%s", strBuf); return true; } @@ -276,7 +276,7 @@ int ApplyBeatPatch(const char* targetName) { patch->relOffset = 0; if(bpsSize < 19) return fatalError(BEAT_PATCH_TOO_SMALL); - char header[4]; + char header[5]; beatReadString(4, header); if (strcmp(header, "BPS1") != 0) return fatalError(BEAT_PATCH_INVALID_HEADER); @@ -427,7 +427,7 @@ int ApplyBPMPatch(const char* patchName, const char* sourcePath, const char* tar ((fvx_stat(targetPath, NULL) != FR_OK) && (fvx_mkdir(targetPath) != FR_OK))) return fatalError(BEAT_INVALID_FILE_PATH); - char header[4]; + char header[5]; beatReadString(4, header); if (strcmp(header, "BPM1") != 0) return fatalError(BEAT_PATCH_INVALID_HEADER); u64 metadataLength = beatReadNumber();