diff --git a/installer/send.c b/installer/send.c index 758bb57..f0c20ef 100644 --- a/installer/send.c +++ b/installer/send.c @@ -13,6 +13,7 @@ #include #ifdef INSTALLER_PS4 #include +#include #endif #define SEND_CHUNK (64u*1024u) @@ -23,8 +24,9 @@ int net_init(void){ static int done = 0; int probe; if(done) return 0; - /* Best-effort: the stack may already be up (re-init calls then fail - * harmlessly). Ground truth is a probe socket, not return codes. */ + /* Internal NET module (Payload Guest boot pattern) + best-effort + * stack init. Ground truth is a probe socket, not return codes. */ + (void)sceSysmoduleLoadModuleInternal(ORBIS_SYSMODULE_INTERNAL_NET); (void)sceNetInit(); (void)sceNetPoolCreate("orbisrpc", 64*1024, 0); probe = socket(AF_INET, SOCK_STREAM, 0); diff --git a/installer/ui.c b/installer/ui.c index a7f9ae1..b9d5e9c 100644 --- a/installer/ui.c +++ b/installer/ui.c @@ -35,6 +35,11 @@ int ui_init(void){ up.priority = ORBIS_KERNEL_PRIO_FIFO_LOWEST; (void)sceUserServiceInitialize(&up); } + /* Internal service modules first (Payload Guest boot pattern): + * dialogs and system calls misbehave when these aren't up. */ + if(sceSysmoduleLoadModuleInternal(ORBIS_SYSMODULE_INTERNAL_SYSTEM_SERVICE) != 0) return -1; + if(sceSysmoduleLoadModuleInternal(ORBIS_SYSMODULE_INTERNAL_USER_SERVICE) != 0) return -1; + if(sceSysmoduleLoadModuleInternal(ORBIS_SYSMODULE_INTERNAL_COMMON_DIALOG) != 0) return -1; if(sceSysmoduleLoadModule(ORBIS_SYSMODULE_MESSAGE_DIALOG) < 0) return -1; if(sceSysmoduleLoadModule(ORBIS_SYSMODULE_IME_DIALOG) < 0){ sceSysmoduleUnloadModule(ORBIS_SYSMODULE_MESSAGE_DIALOG);