Merge pull request #8321 from MarrasFederico/feat/netctl-get-result-v6

feat(libSceNetCtl): report no error for IPv6 events in sceNetCtlGetResultV6
This commit is contained in:
Dean authored and GitHub committed 2026-10-21 17:54:21 +13:00
commit 16c7e76761
3 files changed
+19 -3

No files matched your search

+6 -2
View File
@@ -672,8 +672,12 @@ int APS5_VABI sceNetCtlUnregisterCallbackV6IpcInt(void) {
return 0;
}
int APS5_VABI sceNetCtlGetResultV6(void) {
NotImplemented_nid_no_patch(__func__);
int APS5_VABI sceNetCtlGetResultV6(int event_type, int* error_code) {
if (!error_code) return SCE_NET_CTL_ERROR_INVALID_ADDR;
if (event_type < NET_CTL_EVENT_DISCONNECTED || event_type > NET_CTL_EVENT_IPOBTAINED) {
throw std::runtime_error("sceNetCtlGetResultV6: event type " + std::to_string(event_type) + " is not implemented");
}
*error_code = 0;
return 0;
}
+12
View File
@@ -39,6 +39,7 @@ int APS5_VABI sceNetCtlGetState(int*);
int APS5_VABI sceNetCtlGetStateV6(int*);
int APS5_VABI sceNetCtlGetInfoV6(int, void*);
int APS5_VABI sceNetCtlGetResult(int, int*);
int APS5_VABI sceNetCtlGetResultV6(int, int*);
#ifdef __APPLE__
std::size_t NetCtlDefaultRoutes_nid_no_patch(const char*, std::size_t, NetCtlDefaultRoute*, std::size_t);
#endif
@@ -271,6 +272,17 @@ int main() {
Require(sceNetCtlGetResult(0, nullptr) == kErrInvalidAddr);
int errorCode = -1;
Require(sceNetCtlGetResult(0, &errorCode) == 0 && errorCode == 0);
Require(sceNetCtlGetResultV6(kEventIpObtained, nullptr) == kErrInvalidAddr);
for (const int eventType : {kEventDisconnected, 2, kEventIpObtained}) {
int errorCodeV6 = -1;
Require(sceNetCtlGetResultV6(eventType, &errorCodeV6) == 0 && errorCodeV6 == 0);
}
for (const int eventType : {0, 4, -1}) {
int errorCodeV6 = -1;
bool threw = false;
try { sceNetCtlGetResultV6(eventType, &errorCodeV6); } catch (const std::runtime_error&) { threw = true; }
Require(threw && errorCodeV6 == -1);
}
NetCtlInfo info{};
Require(sceNetCtlGetInfo(0, &info) == kErrInvalidCode);
Require(sceNetCtlGetInfo(22, &info) == kErrInvalidCode);
+1 -1
View File
@@ -38,7 +38,7 @@
- [sceNetCtlSetErrorNotificationEnabledIpcInt](../../../core/libs/prx/libSceNetCtl/Export.cpp) (libSceNetCtl) - unknown signature
- [sceNetCtlRegisterCallbackV6IpcInt](../../../core/libs/prx/libSceNetCtl/Export.cpp) (libSceNetCtl) - unknown signature
- [sceNetCtlUnregisterCallbackV6IpcInt](../../../core/libs/prx/libSceNetCtl/Export.cpp) (libSceNetCtl) - unknown signature
- [sceNetCtlGetResultV6](../../../core/libs/prx/libSceNetCtl/Export.cpp) (libSceNetCtl) - unknown signature
- [sceNetCtlGetResultV6](../../../core/libs/prx/libSceNetCtl/Export.cpp) (libSceNetCtl, NID `H5yARg37U5g`) - `(int eventType, int* errorCode)` comes only from [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/5dfdb4b0b166e83dc9ae275001afb695f12c7174/src/SharpProspero/Interop/Net/NetCtl.cs#L246-L251), whose source is unknown; shadPS4 only stubs it. Callbacks registered with `sceNetCtlRegisterCallbackV6` receive no event, so event types 1-3 write 0 to `errorCode`; what a console writes before the first event is unmeasured. A null `errorCode` answers `INVALID_ADDR`, as `sceNetCtlGetResult` does, and other event types throw, as their error code on a console is unknown
- [sceNetCtlGetResultV6IpcInt](../../../core/libs/prx/libSceNetCtl/Export.cpp) (libSceNetCtl) - unknown signature
- [sceNetCtlGetStateV6IpcInt](../../../core/libs/prx/libSceNetCtl/Export.cpp) (libSceNetCtl) - unknown signature
- [sceNetCtlGetInfoV6IpcInt](../../../core/libs/prx/libSceNetCtl/Export.cpp) (libSceNetCtl) - unknown signature