Main now answers null arguments of sceSaveDataMount with
SAVE_DATA_ERROR_PARAMETER instead of throwing (edf98688c8). Mount2 does
the same for a null mount or a null result, and guest_savedata_ps4
checks both.
AI-assisted: yes (Claude Code)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
ntamas94's second PS4 Pro run and harisibrar1's review:
- a directory name containing "_" returns 0x809f0000 in either case;
"surveytest" and "surveyTestAuto0" still mount;
- user IDs -1 and 0 return 0x809f0011;
- the 96-block minimum applies to CREATE only. CREATE2 was not
measured, and applying it there refused opening an existing save
with mode 0x22 and 0 blocks, which mount3 allows.
guest_savedata_ps4 checks each one, and the Mount2 debt entry records
what was measured and what was not.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A PS4 Pro (firmware 10.71) answers sceSaveDataMount2 differently from Mount3 in three
cases, measured by ntamas94 on #8285: before sceSaveDataInitialize3 it returns
NOT_INITIALIZED, a mount mode of 0 is PARAMETER, and creating a save (CREATE or CREATE2)
of fewer than 96 blocks is PARAMETER. Mount2 now checks these before it mounts through
Mount3, so a refused create makes no directory. guest_savedata_ps4 covers each case.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
NpTrophy reads the trophy count and icons from the title's trophy
package (names are encrypted and stay not implemented), PS4 v1 save data
calls wrap the native v2/v3 ones, and NpWebApi library contexts, handles
and push event filters work offline (service filters fail without a
signed-in user). libSceAjm is built from the libSceAjm.native sources
for PS4 titles. Limbo's (CUSA01664) remaining PS4 imports, including the
synchronous PS4 TUS calls and the Facebook dialog calls next to the
existing libraries, are exported as not implemented.
PS4 titles mount their save data with sceSaveDataMount2 (SDK 2.00 and later), whose
SceSaveDataMount2 is Mount3's parameters without the system blocks and the resource
field: user ID, directory name, blocks and mount mode. The function converts the
parameters and mounts through Mount3, so the result, the mount point and the error codes
are Mount3's.
inFAMOUS Second Son (CUSA00004) calls it to open its saves.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Rename the two unknown libSceSaveData.native stubs to
sceSaveDataTransferringMountPs4 (RjMlsR8EXrw) and
sceSaveDataDirNameSearchPs4 (X4MYzukPc3g). There is no PS4 save area:
the mount returns NOT_FOUND like sceSaveDataTransferringMount, and the
search reports zero hits.
Co-Authored-By: Claude <[email protected]>