undefined8 FUN_00012538(longlong param_1,ulonglong param_2)
{
undefined8 uVar1;
undefined8 uVar2;
int iVar3;
char *pcVar4;
char *__s1;
char *__s;
undefined *puVar5;
undefined4 local_520;
undefined4 local_51c;
undefined4 local_518;
undefined4 local_514;
undefined4 local_510;
undefined4 local_50c;
undefined auStack1288 [32];
undefined auStack1256 [1064];
undefined local_c0;
undefined auStack191 [31];
undefined8 local_a0;
if (*(char *)(param_1 + 0xc70) != '\0') {
FUN_000124c0("CPs3ContentPathInfo is being initialized twice!\n");
}
uVar1 = cellSysmoduleLoadModule(0x16);
if ((int)uVar1 == 0) {
local_a0 = cellSysmoduleIsLoaded(0x3e);
if ((int)local_a0 == 0) {
FUN_000124c0(
"The SYSUTIL_GAME module is already loaded -- revist load order logic in CPs3ContentPathInfo::Init()\n"
);
}
else {
uVar1 = cellSysmoduleLoadModule(0x3e);
if ((int)uVar1 != 0) {
uVar2 = FUN_00012398(uVar1,0xa0000);
FUN_000124c0("Failed to load sysutil_game: %s\n",uVar2);
return uVar1;
}
}
local_520 = 0;
local_51c = 0;
local_518 = 0;
local_c0 = 0;
sys_libc_0xA7E9EA47(auStack191,0,0x1f);
uVar1 = cellGameBootCheck(param_1 + 0xc64,param_1 + 0xc68,&local_520,&local_c0);
if ((int)uVar1 == 0) {
*(undefined *)(param_1 + 0xc70) = 1;
*(undefined4 *)(param_1 + 0xc6c) = local_520;
__s1 = (char *)(param_1 + 0x1a4);
pcVar4 = (char *)(param_1 + 0xa4);
if ((param_2 & 1) == 0) {
uVar1 = cellGameGetParamString(0,param_1,0x80);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamString(100,param_1 + 0x80,10);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE_ID )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamString(0x6a,param_1 + 0x8a,6);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_APP_VER )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x66,param_1 + 0x98);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_PARENTAL_LEVEL )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x67,param_1 + 0x9c);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_RESOLUTION )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x68,param_1 + 0xa0);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_SOUND_FORMAT )",uVar2);
return uVar1;
}
uVar1 = cellGameContentPermit(pcVar4,__s1);
if (((*(uint *)(param_1 + 0xc68) & 4) != 0) &&
(iVar3 = strncmp(__s1,"/app_home",9), iVar3 == 0)) {
snprintf(pcVar4,0x7f,"/app_home/PS3_GAME");
snprintf(__s1,0x7f,"/app_home/PS3_GAME/USRDIR");
}
}
else {
if (*(int *)(param_1 + 0xc64) != 2) {
FUN_000124c0("Unsupported boot in RETAIL mode! (bootmode=%d)\n",*(int *)(param_1 + 0xc64))
;
return 0xffffffffffffffff;
}
uVar1 = cellGameGetParamString(0,param_1,0x80);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamString(100,param_1 + 0x80,10);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE_ID )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamString(0x6a,param_1 + 0x8a,6);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_APP_VER )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x66,param_1 + 0x98);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_PARENTAL_LEVEL )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x67,param_1 + 0x9c);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_RESOLUTION )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x68,param_1 + 0xa0);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_SOUND_FORMAT )",uVar2);
return uVar1;
}
uVar1 = cellGameContentPermit(pcVar4,__s1);
if ((int)uVar1 != 0) {
uVar2 = FUN_00012398(uVar1,0xa0000);
FUN_000124c0("cellGameContentPermit failed (line %d, code %d): %s\n",0xe0,uVar1,uVar2);
return uVar1;
}
iVar3 = *(int *)(param_1 + 0xc64);
if (iVar3 != 2) {
puVar5 = (undefined *)0x0;
if (iVar3 == 2) {
puVar5 = &local_c0;
}
uVar1 = cellGameDataCheck(iVar3,puVar5,&local_520);
if ((int)uVar1 != 0) {
uVar2 = FUN_00012398(uVar1,0xa0000);
FUN_000124c0("cellGameDataCheck failed (line %d, code %d): %s\n",0xfb,uVar1,uVar2);
return uVar1;
}
uVar1 = cellGameGetParamString(0,param_1,0x80);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamString(100,param_1 + 0x80,10);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE_ID )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamString(0x6a,param_1 + 0x8a,6);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_APP_VER )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x66,param_1 + 0x98);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_PARENTAL_LEVEL )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x67,param_1 + 0x9c);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_RESOLUTION )",uVar2);
return uVar1;
}
uVar1 = cellGameGetParamInt(0x68,param_1 + 0xa0);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1);
FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_SOUND_FORMAT )",uVar2);
return uVar1;
}
uVar1 = cellGameContentPermit(pcVar4,__s1);
}
}
if ((*(uint *)(param_1 + 0xc68) & 1) != 0) {
local_514 = 0;
local_510 = 0;
local_50c = 0;
uVar1 = cellGamePatchCheck(&local_514,0);
if ((int)uVar1 != 0) {
uVar2 = FUN_00012398(uVar1,0xa0000);
FUN_000124c0("cellGamePatchCheck failed (line %d, code %d): %s\n",0x113,uVar1,uVar2);
return uVar1;
}
uVar1 = cellGameGetParamString(0x6a,param_1 + 0x90,6);
if ((int)uVar1 < 0) {
uVar2 = FUN_00012398(uVar1,0xa0000);
FUN_000124c0("%s: %s\n","PARAM.SFO PATCH getParam( CELL_GAME_PARAMID_APP_VER )",uVar2);
return uVar1;
}
uVar1 = cellGameContentPermit(param_1 + 0x124,param_1 + 0x224);
}
__s = (char *)(param_1 + 0x324);
pcVar4 = __s1;
if (*(int *)(param_1 + 0xc64) != 2) {
pcVar4 = "/hddpath/invalid";
}
snprintf(__s,0x80,pcVar4);
if (-1 < (int)uVar1) {
sys_libc_0xA7E9EA47(auStack1288,0,0x444);
memcpy(auStack1288,"NPUB30589",10);
uVar1 = cellSysCacheMount(auStack1288);
if ((-1 < (int)uVar1) &&
(memcpy((void *)(param_1 + 0x424),auStack1256,0x41f), (param_2 & 0x80) != 0)) {
cellSysCacheClear();
}
}
pcVar4 = (char *)(param_1 + 0x3a4);
snprintf(pcVar4,0x80,__s1);
if ((param_2 & 8) == 0) {
if ((param_2 & 4) == 0) {
if ((param_2 & 2) != 0) {
snprintf(pcVar4,0x80,"/dev_bdvd/PS3_GAME/USRDIR");
}
}
else {
snprintf(pcVar4,0x80,__s);
}
}
else {
snprintf(pcVar4,0x80,"/app_home/PS3_GAME/USRDIR");
}
pcVar4 = (char *)(param_1 + 0x2a4);
snprintf(pcVar4,0x80,"%s/bin",__s1);
if ((param_2 & 0x40) == 0) {
if ((param_2 & 0x20) == 0) {
if ((param_2 & 0x10) != 0) {
snprintf(pcVar4,0x80,"/dev_bdvd/PS3_GAME/USRDIR/bin");
}
}
else {
snprintf(pcVar4,0x80,"%s/bin",__s);
}
}
else {
snprintf(pcVar4,0x80,"/app_home/PS3_GAME/USRDIR/bin");
}
sys_libc_0xBDA4DCF0((char *)(param_1 + 0x843),param_1 + 0x424,0x41f);
strncat((char *)(param_1 + 0x843),"/tempsave/",0x41f);
if ((int)local_a0 != 0) {
cellSysmoduleUnloadModule(0x3e);
}
}
else {
uVar2 = FUN_00012398(uVar1,0xa0000);
FUN_000124c0("cellGameBootCheck failed (line %d, code %d): %s\n",0x8b,uVar1,uVar2);
}
}
else {
uVar2 = FUN_00012398(uVar1,0xa0000);
FUN_000124c0("Failed to load sysutil_np: %s\n",uVar2);
}
return uVar1;
}