From 5b467ff82a7f546b0750e10af02146640943eeac Mon Sep 17 00:00:00 2001 From: Survanium90 Date: Fri, 3 Oct 2014 17:39:34 +0400 Subject: [PATCH 1/5] Added initialization checks in SceNpClans module --- rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp | 235 ++++++++++++++++++++-- 1 file changed, 219 insertions(+), 16 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp index 0494fb9d37..b6712524bd 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -8,243 +8,446 @@ Module *sceNpClans = nullptr; -int sceNpClansInit() +struct sceNpClansInternal { - UNIMPLEMENTED_FUNC(sceNpClans); + bool m_bSceNpClansInitialized; + + sceNpClansInternal() + : m_bSceNpClansInitialized(false) + { + } +}; + +sceNpClansInternal sceNpClansInstance; + +int sceNpClansInit(vm::ptr commId, vm::ptr passphrase, vm::ptr pool, vm::ptr poolSize, u32 flags) +{ + sceNpClans->Warning("sceNpClansInit(commId_addr=0x%x, passphrase_addr=0x%x, pool_addr=0x%x,poolSize_addr=0x%x, flags=%d)", commId.addr(), passphrase.addr(), pool.addr(), poolSize.addr(), flags); + + if (sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_ALREADY_INITIALIZED; + + if (flags != 0) + return SCE_NP_CLANS_ERROR_NOT_SUPPORTED; + + sceNpClansInstance.m_bSceNpClansInitialized = true; + return CELL_OK; } int sceNpClansTerm() { - UNIMPLEMENTED_FUNC(sceNpClans); + sceNpClans->Warning("sceNpClansTerm()"); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + sceNpClansInstance.m_bSceNpClansInitialized = false; + return CELL_OK; } -int sceNpClansCreateRequest() +int sceNpClansCreateRequest(vm::ptr handle,u64 flags) { - UNIMPLEMENTED_FUNC(sceNpClans); + sceNpClans->Todo("sceNpClansInit(handle_addr=0x%x, flags=%d)", handle.addr(), flags); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (flags != 0) + return SCE_NP_CLANS_ERROR_NOT_SUPPORTED; + return CELL_OK; } -int sceNpClansDestroyRequest() +int sceNpClansDestroyRequest(vm::ptr handle) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansAbortRequest() +int sceNpClansAbortRequest(vm::ptr handle) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansCreateClan() +int sceNpClansCreateClan(vm::ptr handle, vm::ptr name, vm::ptr tag, vm::ptr clanId) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if ((*name > SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH) || (*tag > SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH)) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } -int sceNpClansDisbandClan() +int sceNpClansDisbandClan(vm::ptr handle, u32 clanId) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansGetClanList() +int sceNpClansGetClanList(vm::ptr handle, vm::ptr paging, vm::ptr clanList, vm::ptr pageResult) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetClanListByNpId() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansSearchByProfile() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansSearchByName() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetClanInfo() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansUpdateClanInfo() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetMemberList() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetMemberInfo() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansUpdateMemberInfo() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansChangeMemberRole() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetAutoAcceptStatus() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansUpdateAutoAcceptStatus() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansJoinClan() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansLeaveClan() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansKickMember() +int sceNpClansKickMember(vm::ptr handle, u32 clanId,vm::ptr npid, vm::ptr message) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } -int sceNpClansSendInvitation() +int sceNpClansSendInvitation(vm::ptr handle, u32 clanId, vm::ptr npid, vm::ptr message) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } int sceNpClansCancelInvitation() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansSendInvitationResponse() +int sceNpClansSendInvitationResponse(vm::ptr handle, u32 clanId, vm::ptr message, bool accept) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } -int sceNpClansSendMembershipRequest() +int sceNpClansSendMembershipRequest(vm::ptr handle, u32 clanId, vm::ptr message) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } int sceNpClansCancelMembershipRequest() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansSendMembershipResponse() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetBlacklist() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansAddBlacklistEntry() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRemoveBlacklistEntry() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRetrieveAnnouncements() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansPostAnnouncement() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRemoveAnnouncement() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansPostChallenge() +int sceNpClansPostChallenge(vm::ptr handle, u32 clanId, u32 targetClan, vm::ptr message, vm::ptr data, u32 duration, vm::ptr mId) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (data != 0) + return SCE_NP_CLANS_ERROR_NOT_SUPPORTED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + + //todo + return CELL_OK; } int sceNpClansRetrievePostedChallenges() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + //todo + return CELL_OK; } int sceNpClansRemovePostedChallenge() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRetrieveChallenges() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRemoveChallenge() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } void sceNpClans_unload() { - // TODO: Unload Clans module + sceNpClansInstance.m_bSceNpClansInitialized = false; } void sceNpClans_init(Module *pxThis) From 18d40102f736c61cb59b85442f75e8bbe4e13a1f Mon Sep 17 00:00:00 2001 From: Survanium90 Date: Fri, 3 Oct 2014 23:07:05 +0400 Subject: [PATCH 2/5] Fix for "Added initialization checks in SceNpClans module" --- rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp | 36 +++++++++++++++-------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp index b6712524bd..314b9ba339 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -20,7 +20,7 @@ struct sceNpClansInternal sceNpClansInternal sceNpClansInstance; -int sceNpClansInit(vm::ptr commId, vm::ptr passphrase, vm::ptr pool, vm::ptr poolSize, u32 flags) +int sceNpClansInit(vm::ptr commId, vm::ptr passphrase, vm::ptr pool, vm::ptr poolSize, u32 flags) { sceNpClans->Warning("sceNpClansInit(commId_addr=0x%x, passphrase_addr=0x%x, pool_addr=0x%x,poolSize_addr=0x%x, flags=%d)", commId.addr(), passphrase.addr(), pool.addr(), poolSize.addr(), flags); @@ -49,7 +49,7 @@ int sceNpClansTerm() int sceNpClansCreateRequest(vm::ptr handle,u64 flags) { - sceNpClans->Todo("sceNpClansInit(handle_addr=0x%x, flags=%d)", handle.addr(), flags); + sceNpClans->Todo("sceNpClansCreateRequest(handle_addr=0x%x, flags=0x%llx)", handle.addr(), flags); if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; @@ -87,7 +87,7 @@ int sceNpClansCreateClan(vm::ptr handle, vm::ptr SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH) || (*tag > SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH)) + if ((strlen(name.get_ptr()) > SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH) || (strlen(tag.get_ptr()) > SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH)) return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; return CELL_OK; @@ -243,15 +243,17 @@ int sceNpClansLeaveClan() return CELL_OK; } -int sceNpClansKickMember(vm::ptr handle, u32 clanId,vm::ptr npid, vm::ptr message) +int sceNpClansKickMember(vm::ptr handle, u32 clanId, vm::ptr npid, vm::ptr message) { UNIMPLEMENTED_FUNC(sceNpClans); if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; - if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + /* + if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + */ return CELL_OK; } @@ -263,8 +265,10 @@ int sceNpClansSendInvitation(vm::ptr handle, u32 clanId if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; - if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + /* + if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + */ return CELL_OK; } @@ -286,8 +290,10 @@ int sceNpClansSendInvitationResponse(vm::ptr handle, u3 if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; - if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + /* + if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + */ return CELL_OK; } @@ -299,8 +305,10 @@ int sceNpClansSendMembershipRequest(vm::ptr handle, u32 if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; - if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + /* + if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + */ return CELL_OK; } @@ -395,8 +403,10 @@ int sceNpClansPostChallenge(vm::ptr handle, u32 clanId, if (data != 0) return SCE_NP_CLANS_ERROR_NOT_SUPPORTED; - if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + /* + if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + */ //todo From aed76b2a0ac0f73e5e1bd7a2dbd71c1d03261310 Mon Sep 17 00:00:00 2001 From: Survanium90 Date: Sat, 4 Oct 2014 01:09:40 +0400 Subject: [PATCH 3/5] Fix 2 for "Added initialization checks in SceNpClans module" --- rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp | 28 ----------------------- 1 file changed, 28 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp index 314b9ba339..0c761ee2cc 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -87,9 +87,6 @@ int sceNpClansCreateClan(vm::ptr handle, vm::ptr SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH) || (strlen(tag.get_ptr()) > SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH)) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; - return CELL_OK; } @@ -250,11 +247,6 @@ int sceNpClansKickMember(vm::ptr handle, u32 clanId, vm if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; - /* - if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; - */ - return CELL_OK; } @@ -265,11 +257,6 @@ int sceNpClansSendInvitation(vm::ptr handle, u32 clanId if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; - /* - if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; - */ - return CELL_OK; } @@ -290,11 +277,6 @@ int sceNpClansSendInvitationResponse(vm::ptr handle, u3 if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; - /* - if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; - */ - return CELL_OK; } @@ -305,11 +287,6 @@ int sceNpClansSendMembershipRequest(vm::ptr handle, u32 if (!sceNpClansInstance.m_bSceNpClansInitialized) return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; - /* - if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; - */ - return CELL_OK; } @@ -403,11 +380,6 @@ int sceNpClansPostChallenge(vm::ptr handle, u32 clanId, if (data != 0) return SCE_NP_CLANS_ERROR_NOT_SUPPORTED; - /* - if (*(message->body) > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) - return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; - */ - //todo return CELL_OK; From 70e5068e37b1647806c4fb0b5c8195be36f0418b Mon Sep 17 00:00:00 2001 From: Survanium90 Date: Sat, 4 Oct 2014 11:31:27 +0400 Subject: [PATCH 4/5] Added more initializations in cellCamera --- rpcs3/Emu/SysCalls/Modules/cellCamera.cpp | 71 +++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp index 7fcec39666..c0fe253842 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp @@ -53,18 +53,30 @@ int cellCameraOpen() int cellCameraOpenEx() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraClose() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraGetDeviceGUID() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } @@ -72,6 +84,9 @@ int cellCameraGetType(s32 dev_num, vm::ptr type) { cellCamera->Warning("cellCameraGetType(dev_num=%d, type_addr=0x%x)", dev_num, type); + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + switch (Ini.CameraType.GetValue()) { case 1: *type = CELL_CAMERA_EYETOY; break; @@ -110,18 +125,30 @@ int cellCameraIsStarted() int cellCameraGetAttribute() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraSetAttribute() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraGetBufferSize() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } @@ -134,6 +161,10 @@ int cellCameraGetBufferInfo() int cellCameraGetBufferInfoEx() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } @@ -164,60 +195,100 @@ int cellCameraSetExtensionUnit() int cellCameraReset() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraStart() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraRead() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraReadEx() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraReadComplete() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraStop() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraSetNotifyEventQueue() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraRemoveNotifyEventQueue() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraSetNotifyEventQueue2() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } int cellCameraRemoveNotifyEventQueue2() { UNIMPLEMENTED_FUNC(cellCamera); + + if (!cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_NOT_INIT; + return CELL_OK; } From b02225dd80ef36a7bbfa3532a10adc3c102eccc7 Mon Sep 17 00:00:00 2001 From: Survanium90 Date: Sat, 4 Oct 2014 11:38:38 +0400 Subject: [PATCH 5/5] Added initialization and termination for SceNpTus Module Also added initialization checks --- rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp | 238 +++++++++++++++++++++++- 1 file changed, 235 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp index 50a5af0d2c..59c7dfe5fe 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp @@ -7,333 +7,565 @@ Module *sceNpTus = nullptr; +struct sceNpTusInternal +{ + bool m_bSceNpTusInitialized; + + sceNpTusInternal() + : m_bSceNpTusInitialized(false) + { + } +}; + +sceNpTusInternal sceNpTusInstance; + int sceNpTusInit() { - UNIMPLEMENTED_FUNC(sceNpTus); + sceNpTus->Warning("sceNpTusInit()"); + + if (sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_ALREADY_INITIALIZED; + + sceNpTusInstance.m_bSceNpTusInitialized = true; + return CELL_OK; } int sceNpTusTerm() { - UNIMPLEMENTED_FUNC(sceNpTus); + sceNpTus->Warning("sceNpTusTerm()"); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + + sceNpTusInstance.m_bSceNpTusInitialized = false; + return CELL_OK; } int sceNpTusCreateTitleCtx() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDestroyTitleCtx() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusCreateTransactionCtx() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDestroyTransactionCtx() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetTimeout() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusAbortTransaction() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusWaitAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusPollAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetMultiSlotVariable() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetMultiSlotVariableVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetMultiSlotVariableAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetMultiSlotVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiSlotVariable() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiSlotVariableVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiSlotVariableAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiSlotVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiUserVariable() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiUserVariableVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiUserVariableAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiUserVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusAddAndGetVariable() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusAddAndGetVariableVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusAddAndGetVariableAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusAddAndGetVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusTryAndSetVariable() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusTryAndSetVariableVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusTryAndSetVariableAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusTryAndSetVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDeleteMultiSlotVariable() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDeleteMultiSlotVariableVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDeleteMultiSlotVariableAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDeleteMultiSlotVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetData() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetDataVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetDataAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusSetDataVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetData() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetDataVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetDataAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetDataVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiSlotDataStatus() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiSlotDataStatusVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiSlotDataStatusAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiSlotDataStatusVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiUserDataStatus() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiUserDataStatusVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiUserDataStatusAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusGetMultiUserDataStatusVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDeleteMultiSlotData() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDeleteMultiSlotDataVUser() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDeleteMultiSlotDataAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpTusDeleteMultiSlotDataVUserAsync() { UNIMPLEMENTED_FUNC(sceNpTus); + + if (!sceNpTusInstance.m_bSceNpTusInitialized) + return SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED; + return CELL_OK; } void sceNpTus_unload() { - // TODO: Unload Tus module + sceNpTusInstance.m_bSceNpTusInitialized = false; } void sceNpTus_init(Module *pxThis)