| 128 | } |
| 129 | |
| 130 | error_code cellCrossControllerInitialize(vm::cptr<CellCrossControllerParam> pParam, vm::cptr<CellCrossControllerPackageInfo> pPkgInfo, vm::ptr<CellCrossControllerCallback> cb, vm::ptr<void> userdata) // LittleBigPlanet 2 and 3 |
| 131 | { |
| 132 | cellCrossController.todo("cellCrossControllerInitialize(pParam=*0x%x, pPkgInfo=*0x%x, cb=*0x%x, userdata=*0x%x)", pParam, pPkgInfo, cb, userdata); |
| 133 | |
| 134 | if (pParam) |
| 135 | { |
| 136 | cellCrossController.notice("cellCrossControllerInitialize: pParam: pPackageFileName=%s, pSignatureFileName=%s, pIconFileName=%s", pParam->pPackageFileName, pParam->pSignatureFileName, pParam->pIconFileName); |
| 137 | } |
| 138 | |
| 139 | if (pPkgInfo) |
| 140 | { |
| 141 | cellCrossController.notice("cellCrossControllerInitialize: pPkgInfo: pTitle=%s, pTitleId=%s, pAppVer=%s", pPkgInfo->pTitle, pPkgInfo->pTitleId, pPkgInfo->pAppVer); |
| 142 | } |
| 143 | |
| 144 | cross_controller& cc = g_fxo->get<cross_controller>(); |
| 145 | |
| 146 | if (cc.status == CELL_CROSS_CONTROLLER_STATUS_INITIALIZED) // TODO: confirm this logic |
| 147 | { |
| 148 | return CELL_CROSS_CONTROLLER_ERROR_INVALID_STATE; |
| 149 | } |
| 150 | |
| 151 | if (!pParam || !pPkgInfo) |
| 152 | { |
| 153 | return CELL_CROSS_CONTROLLER_ERROR_INVALID_VALUE; |
| 154 | } |
| 155 | |
| 156 | // Check if the strings exceed the allowed size (not counting null terminators) |
| 157 | |
| 158 | if (!pParam->pPackageFileName || !memchr(pParam->pPackageFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1)) |
| 159 | { |
| 160 | return CELL_CROSS_CONTROLLER_ERROR_INVALID_PKG_FILENAME; |
| 161 | } |
| 162 | |
| 163 | if (!pParam->pSignatureFileName || !memchr(pParam->pSignatureFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1)) |
| 164 | { |
| 165 | return CELL_CROSS_CONTROLLER_ERROR_INVALID_SIG_FILENAME; |
| 166 | } |
| 167 | |
| 168 | if (!pParam->pIconFileName || !memchr(pParam->pIconFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1)) |
| 169 | { |
| 170 | return CELL_CROSS_CONTROLLER_ERROR_INVALID_ICON_FILENAME; |
| 171 | } |
| 172 | |
| 173 | if (!pPkgInfo->pAppVer || !memchr(pPkgInfo->pAppVer.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_APP_VER_LEN + 1) || |
| 174 | !pPkgInfo->pTitleId || !memchr(pPkgInfo->pTitleId.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_TITLE_ID_LEN + 1) || |
| 175 | !pPkgInfo->pTitle || !memchr(pPkgInfo->pTitle.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_TITLE_LEN + 1) || |
| 176 | !cb) |
| 177 | { |
| 178 | return CELL_CROSS_CONTROLLER_ERROR_INVALID_VALUE; |
| 179 | } |
| 180 | |
| 181 | cc.callback = cb; |
| 182 | cc.userdata = userdata; |
| 183 | cc.run_thread(pPkgInfo); |
| 184 | |
| 185 | return CELL_OK; |
| 186 | } |
| 187 |
nothing calls this directly
no test coverage detected