mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-29 14:44:17 +01:00
30535c6f5d
formatted the code to make it easier to read. no functional changes at all. i didn't put anything from the libwiigui folder or banner folder in the beautifier. my automated .bat seems to have done a good job. the only places i see it fucked up was on (GXColor){blablabla}. it treated the brackets in the color like all the other brackets and put the color on a new line and indented it. i think i fixed most of them. not sure if it messed up anywhere else. also not sure about how it handled different linebreaks. it looks fine on windows. if it looks messed up on linux, it can be reverted. the code still compiles and runs fine.
145 lines
3.1 KiB
C
145 lines
3.1 KiB
C
#include <gccore.h>
|
|
#include <ogcsys.h>
|
|
#include <malloc.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <ogc/machine/processor.h>
|
|
#include <wiiuse/wpad.h>
|
|
|
|
#include "fatmounter.h"
|
|
#include "dolloader.h"
|
|
#include "elfloader.h"
|
|
|
|
void *innetbuffer = NULL;
|
|
|
|
int AllocHomebrewMemory(u32 filesize) {
|
|
|
|
innetbuffer = malloc(filesize);
|
|
|
|
if (!innetbuffer)
|
|
return -1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
void FreeHomebrewBuffer() {
|
|
free(innetbuffer);
|
|
innetbuffer = NULL;
|
|
}
|
|
|
|
void CopyHomebrewMemory(u32 read, u8 *temp, u32 len) {
|
|
|
|
memcpy(((u8 *) innetbuffer)+read, temp, len);
|
|
|
|
}
|
|
|
|
int BootHomebrew(char * path) {
|
|
void *buffer = NULL;
|
|
u32 filesize = 0;
|
|
entrypoint entry;
|
|
u32 cpu_isr;
|
|
|
|
FILE * file = fopen(path, "rb");
|
|
if (!file) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
|
|
|
fseek (file, 0, SEEK_END);
|
|
filesize = ftell(file);
|
|
rewind(file);
|
|
|
|
buffer = malloc(filesize);
|
|
|
|
if (fread (buffer, 1, filesize, file) != filesize) {
|
|
fclose (file);
|
|
free(buffer);
|
|
SDCard_deInit();
|
|
USBDevice_deInit();
|
|
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
|
}
|
|
fclose (file);
|
|
|
|
struct __argv args;
|
|
bzero(&args, sizeof(args));
|
|
args.argvMagic = ARGV_MAGIC;
|
|
args.length = strlen(path) + 2;
|
|
args.commandLine = (char*)malloc(args.length);
|
|
if (!args.commandLine) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
|
strcpy(args.commandLine, path);
|
|
args.commandLine[args.length - 1] = '\0';
|
|
args.argc = 1;
|
|
args.argv = &args.commandLine;
|
|
args.endARGV = args.argv + 1;
|
|
|
|
int ret = valid_elf_image(buffer);
|
|
if (ret == 1)
|
|
entry = (entrypoint) load_elf_image(buffer);
|
|
else
|
|
entry = (entrypoint) load_dol(buffer, &args);
|
|
|
|
free(buffer);
|
|
|
|
if (!entry) {
|
|
SDCard_deInit();
|
|
USBDevice_deInit();
|
|
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
|
}
|
|
|
|
SDCard_deInit();
|
|
USBDevice_deInit();
|
|
|
|
WPAD_Flush(0);
|
|
WPAD_Disconnect(0);
|
|
WPAD_Shutdown();
|
|
|
|
SYS_ResetSystem(SYS_SHUTDOWN, 0, 0);
|
|
_CPU_ISR_Disable (cpu_isr);
|
|
__exception_closeall();
|
|
entry();
|
|
_CPU_ISR_Restore (cpu_isr);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int BootHomebrewFromMem() {
|
|
entrypoint entry;
|
|
u32 cpu_isr;
|
|
|
|
if (!innetbuffer) {
|
|
SDCard_deInit();
|
|
USBDevice_deInit();
|
|
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
|
}
|
|
|
|
struct __argv args;
|
|
|
|
int ret = valid_elf_image(innetbuffer);
|
|
if (ret == 1)
|
|
entry = (entrypoint) load_elf_image(innetbuffer);
|
|
else
|
|
entry = (entrypoint) load_dol(innetbuffer, &args);
|
|
|
|
free(innetbuffer);
|
|
|
|
if (!entry) {
|
|
SDCard_deInit();
|
|
USBDevice_deInit();
|
|
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
|
}
|
|
|
|
SDCard_deInit();
|
|
USBDevice_deInit();
|
|
|
|
WPAD_Flush(0);
|
|
WPAD_Disconnect(0);
|
|
WPAD_Shutdown();
|
|
|
|
SYS_ResetSystem(SYS_SHUTDOWN, 0, 0);
|
|
_CPU_ISR_Disable (cpu_isr);
|
|
__exception_closeall();
|
|
entry();
|
|
_CPU_ISR_Restore (cpu_isr);
|
|
|
|
return 0;
|
|
}
|