bool RebootApp(void) { // be sure to use current settings as arguments editMetaArguments(); #ifdef FULLCHANNEL ExitApp(); WII_Initialize(); return !(WII_LaunchTitle(TITLE_ID(0x00010001, 0x554c4e52)) < 0); #else // Load meta.xml arguments char filepath[255]; HomebrewXML MetaXML; snprintf(filepath, sizeof(filepath), "%s/meta.xml", Settings.update_path); MetaXML.LoadHomebrewXMLData(filepath); u8 *buffer = NULL; u32 filesize = 0; snprintf(filepath, sizeof(filepath), "%s/boot.dol", Settings.update_path); LoadFileToMem(filepath, &buffer, &filesize); if(!buffer) { return false; } FreeHomebrewBuffer(); CopyHomebrewMemory(buffer, 0, filesize); AddBootArgument(filepath); for(u32 i = 0; i < MetaXML.GetArguments().size(); ++i) { AddBootArgument(MetaXML.GetArguments().at(i).c_str()); } return !(BootHomebrewFromMem() <0); #endif }
int HomebrewReceiver::ReceiveFile() { char filesizetxt[50]; char temp[50]; u32 filesize = 0; if (infilesize < MB_SIZE) snprintf(filesizetxt, sizeof(filesizetxt), tr( "Incoming file %0.2fKB" ), infilesize / KB_SIZE); else snprintf(filesizetxt, sizeof(filesizetxt), tr( "Incoming file %0.2fMB" ), infilesize / MB_SIZE); snprintf(temp, sizeof(temp), tr( "Load file from: %s ?" ), GetIncommingIP()); int choice = WindowPrompt(filesizetxt, temp, tr( "Load" ), tr( "Cancel" )); if (choice == 0) return 0; u32 read = 0; int len = NET_BLOCKSIZE; filesize = infilesize; u8 * buffer = (u8 *) malloc(infilesize); if(!buffer) { CloseConnection(); WindowPrompt(tr( "Not enough memory." ), 0, tr( "OK" )); return 0; } bool error = false; while (read < infilesize) { ShowProgress(tr( "Receiving file from:" ), GetIncommingIP(), NULL, read, infilesize, true); if (infilesize - read < (u32) len) len = infilesize - read; else len = NET_BLOCKSIZE; int result = network_read(connection, buffer+read, len); if (result < 0) { CloseConnection(); ProgressStop(); WindowPrompt(tr( "Error while transfering data." ), 0, tr( "OK" )); free(buffer); return 0; } if (!result) { break; } read += result; } char filename[101]; memset(filename, 0, sizeof(filename)); network_read(connection, (u8*) filename, 100); //! Uncompress Wiiload if (wiiloadVersion[0] > 0 || wiiloadVersion[1] > 4) { u8 *unc = (u8 *) malloc(uncfilesize); if(!unc) { free(buffer); CloseConnection(); ProgressStop(); WindowPrompt(tr( "Not enough memory." ), 0, tr( "OK" )); return 0; } uLongf f = uncfilesize; error = uncompress(unc, &f, buffer, infilesize) != Z_OK; uncfilesize = f; filesize = uncfilesize; free(buffer); buffer = unc; free(unc); } CopyHomebrewMemory(buffer, 0, filesize); ProgressStop(); if (error || read != infilesize) { WindowPrompt(tr( "Error:" ), tr( "No data could be read." ), tr( "OK" )); FreeHomebrewBuffer(); return 0; } CloseConnection(); AddBootArgument(filename); return BootHomebrewFromMem(); }