mirror of
https://github.com/wiiu-env/wiiload_plugin.git
synced 2024-11-22 10:39:16 +01:00
Various fixes and clean up, reload application via _SYSLaunchTitleWithStdArgsInNoSplash when loading a plugin
This commit is contained in:
parent
d350fa801c
commit
6c1607b097
21
src/main.cpp
21
src/main.cpp
@ -12,34 +12,23 @@ WUPS_PLUGIN_LICENSE("GPL");
|
||||
|
||||
WUPS_USE_WUT_CRT()
|
||||
|
||||
TcpReceiver *thread = NULL;
|
||||
TcpReceiver *thread = nullptr;
|
||||
|
||||
/* Entry point */
|
||||
ON_APPLICATION_START(args) {
|
||||
WHBLogUdpInit();
|
||||
DEBUG_FUNCTION_LINE("Started wiiload thread");
|
||||
DEBUG_FUNCTION_LINE("Start wiiload thread");
|
||||
thread = new TcpReceiver(4299);
|
||||
}
|
||||
|
||||
void stopThread() {
|
||||
if (thread != NULL) {
|
||||
if (thread != nullptr) {
|
||||
delete thread;
|
||||
thread = NULL;
|
||||
thread = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
ON_APPLICATION_END() {
|
||||
DEBUG_FUNCTION_LINE("Kill thread");
|
||||
DEBUG_FUNCTION_LINE("Kill wiiload thread");
|
||||
stopThread();
|
||||
}
|
||||
|
||||
bool gDoRelaunch __attribute__((section(".data"))) = 0;
|
||||
|
||||
ON_VYSNC() {
|
||||
// On each frame check if we want to exit.
|
||||
if(gDoRelaunch){
|
||||
SYSRelaunchTitle(0, NULL);
|
||||
gDoRelaunch = 0;
|
||||
DCFlushRange(&gDoRelaunch, sizeof(gDoRelaunch));
|
||||
}
|
||||
}
|
||||
|
19
src/main.h
19
src/main.h
@ -1,5 +1,4 @@
|
||||
#ifndef _MAIN_H_
|
||||
#define _MAIN_H_
|
||||
#pragma once
|
||||
|
||||
/* Main */
|
||||
#ifdef __cplusplus
|
||||
@ -8,22 +7,6 @@ extern "C" {
|
||||
#include <stdint.h>
|
||||
#include <nsysnet/socket.h>
|
||||
|
||||
#define MAXPATHLEN 256
|
||||
|
||||
#define WIIU_EAGAIN EWOULDBLOCK
|
||||
#define ENODATA 1
|
||||
#define EISCONN 3
|
||||
#define EWOULDBLOCK 6
|
||||
#define EALREADY 10
|
||||
#define EAGAIN EWOULDBLOCK
|
||||
#define EINVAL 11
|
||||
#define ENOMEM 18
|
||||
#define EINPROGRESS 22
|
||||
|
||||
#define wiiu_geterrno() (socketlasterr())
|
||||
|
||||
//! C wrapper for our C++ functions
|
||||
int Menu_Main(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <sysapp/launch.h>
|
||||
|
||||
#include <coreinit/dynload.h>
|
||||
#include <coreinit/title.h>
|
||||
|
||||
#include <coreinit/messagequeue.h>
|
||||
#include <coreinit/ios.h>
|
||||
@ -99,13 +100,6 @@ void TcpReceiver::executeThread() {
|
||||
socketclose(serverSocket);
|
||||
}
|
||||
|
||||
typedef struct __attribute((packed)) {
|
||||
uint32_t command;
|
||||
uint32_t target;
|
||||
uint32_t filesize;
|
||||
uint32_t fileoffset;
|
||||
char path[256];
|
||||
} LOAD_REQUEST;
|
||||
|
||||
extern bool gDoRelaunch;
|
||||
int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
||||
@ -251,8 +245,8 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
||||
|
||||
finalList.push_back(newContainer.value());
|
||||
for (auto &plugin : oldPlugins) {
|
||||
if (plugin.metaInformation.getName().compare(newContainer->metaInformation.getName()) == 0 &&
|
||||
plugin.metaInformation.getAuthor().compare(newContainer->metaInformation.getAuthor()) == 0
|
||||
if (plugin.metaInformation.getName() == newContainer->metaInformation.getName() &&
|
||||
plugin.metaInformation.getAuthor() == newContainer->metaInformation.getAuthor()
|
||||
) {
|
||||
DEBUG_FUNCTION_LINE("Skipping duplicate");
|
||||
PluginUtils::destroyPluginContainer(plugin);
|
||||
@ -270,16 +264,17 @@ int32_t TcpReceiver::loadToMemory(int32_t clientSocket, uint32_t ipAddress) {
|
||||
}
|
||||
|
||||
if (PluginUtils::LoadAndLinkOnRestart(finalList) != 0) {
|
||||
DEBUG_FUNCTION_LINE("Failed to load& link");
|
||||
PluginUtils::destroyPluginContainer(finalList);
|
||||
DEBUG_FUNCTION_LINE("Failed to load & link");
|
||||
} else {
|
||||
PluginUtils::destroyPluginContainer(finalList);
|
||||
gDoRelaunch = 1;
|
||||
DCFlushRange(&gDoRelaunch, sizeof(gDoRelaunch));
|
||||
//gDoRelaunch = true;
|
||||
//DCFlushRange(&gDoRelaunch, sizeof(gDoRelaunch));
|
||||
}
|
||||
PluginUtils::destroyPluginContainer(finalList);
|
||||
|
||||
free(loadAddress);
|
||||
free(inflatedData);
|
||||
|
||||
_SYSLaunchTitleWithStdArgsInNoSplash(OSGetTitleID(), 0);
|
||||
return fileSize;
|
||||
} else {
|
||||
DEBUG_FUNCTION_LINE("Failed to parse plugin");
|
||||
|
Loading…
Reference in New Issue
Block a user