Commit Graph
138 Commits
Author SHA1 Message Date
Dean cb0f84e398 Merge pull request #10674 from MarcZX10/marc/signatures-libscesavedata
feat(libSceSaveData): declare sceSaveDataGetProgress with its known signature
2026-11-02 23:23:40 +13:00
Dean d94fad17de Merge pull request #8285 from DealPotato/feat/savedata-mount2
feat(savedata): add sceSaveDataMount2
2026-11-02 03:22:25 +13:00
MarcZX10 c480d90bd8 feat(libSceSaveData): declare sceSaveDataGetProgress with its known signature
It still throws through NotImplemented_nid_no_patch; the parameter is the
float* of the OpenOrbis headers and shadPS4.
2026-10-31 22:27:14 +00:00
MarcZX10 5b7ba8484a Merge remote-tracking branch 'upstream/main' into feat/host-free-space
# Conflicts:
#	core/libs/prx/libSceSaveData.native/Export.cpp
2026-10-31 00:26:47 +00:00
Adrià 6472c708ae Merge pull request #13324 from JJenkx/fix/savedata-mount-host-failure
fix(savedata): keep failed host mounts unpublished
2026-10-30 21:46:41 +01:00
MarcZX10 10fe6196e2 feat(libSceSaveData.native): bound a save's free blocks by the host volume
With ANYPS5_FREE_SPACE=host, sceSaveDataGetMountInfo and the directory-name
search report a save's free blocks as the smaller of its own free blocks and
the 64 KiB blocks the save's volume still has. A full volume reports none
free, so a title that checks for room sees the same answer the create check
gives. Unset, the free blocks stay the save's own.
2026-10-30 18:48:57 +00:00
MarcZX10 4385554953 feat(libSceSaveData.native): refuse a new save the host volume cannot hold
With ANYPS5_FREE_SPACE=host, creating a save first checks the free space of
the save directory's volume against the save's size, 16384 blocks when the
title passes none. A save that does not fit fails with NO_SPACE_FS and
reports the blocks missing in required_blocks, and no directory is made.
If the volume cannot be queried, the create keeps today's behaviour and one
line goes to stderr. Opening an existing save and the default fixed mode are
unchanged.
2026-10-30 18:48:56 +00:00
MarcZX10 0a27bb9dd9 feat(libSceSaveData.native): validate ANYPS5_FREE_SPACE at every save mount
Every sceSaveDataMount3 call reads ANYPS5_FREE_SPACE and stops the title with
an error naming the variable when it is not fixed or host. Unset keeps
today's behaviour, so no save is created differently by default.
2026-10-30 18:48:56 +00:00
JJenkx 2606c33532 fix(savedata): report host mount errors without unwinding 2026-10-30 14:08:25 -04:00
Adrià f91137142e Merge pull request #13027 from Celegans12/feat/savedata-inventory-exports-20261030
feat(savedata): add missing cloud and sync inventory exports
2026-10-30 13:45:45 +01:00
JJenkx 0c110bdf8e fix(savedata): keep failed host mounts unpublished 2026-10-30 08:12:24 -04:00
Adrià 0d62a3e0db Merge pull request #12699 from SnekPolylepis/feat/savedata-mounted-count-and-lifecycle
feat(libSceSaveData): add provisional abort and clear progress stubs
2026-10-30 05:51:21 +01:00
Adrià f67988f8e8 Merge pull request #12644 from slopgobblercobbler/fix/savedata-backup-dir-name-validation
fix(libSceSaveData.native): validate directory name in sceSaveDataBackup
2026-10-30 02:52:13 +01:00
Codex 2299b471cb feat(savedata): retain seven inventory exports within reviewed scope 2026-10-30 03:22:06 +02:00
Codex d058e59ffd feat(savedata): add missing cloud and sync inventory exports 2026-10-30 00:20:59 +02:00
SnekPolylepis e64a9b14ef Merge main into SaveData lifecycle branch 2026-10-29 09:54:32 -05:00
SnekPolylepis 8436d54350 fix(savedata): leave mounted count unimplemented 2026-10-29 09:52:50 -05:00
Adrià 5a88858805 Merge pull request #11720 from ionut27001/fix/savedata-cancel-not-initialized
fix(libSceSaveData.native): answer sceSaveDataCancel before initialization as measured in a PS5 payload
2026-10-29 12:57:24 +01:00
Adrià 50b6ea0dc5 Merge pull request #12444 from BunnyFl/fix/savedata-memory-host-write
fix(libSceSaveData): hold a host write over save memory reads into guest buffers
2026-10-29 12:56:55 +01:00
slopgobblercobbler 43dc8a75c7 fix(libSceSaveData.native): validate directory name in sceSaveDataBackup 2026-10-29 11:34:09 +01:00
Zain 7016a894f7 feat(libSceSaveData): implement sceSaveDataGetMountedSaveDataCount, sceSaveDataAbort, and sceSaveDataClearProgress 2026-10-28 21:39:18 -05:00
JJenkxandClaude Opus 5.5 1f8b81f3cd fix(libSceSaveData): read a save directory's time natively on Windows
When a save has no stored mtime, its parameters fall back to the save
directory's modification time. On Windows std::filesystem reads that
through the UCRT stat call, which converts through local time using TZ,
so with a TZ other than the Windows zone, including one libc applies
from the guest environment, the reported time was off by the
difference between the zones. The fallback now reads the time with
GetFileAttributesExW. guest_savedata_search checks it under TZ values
12 hours either side of UTC.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 21:12:20 -04:00
ionut27001 a21f985dcf fix(libSceSaveData.native): answer sceSaveDataCancel before initialization as measured in a PS5 payload 2026-10-28 15:37:18 +01:00
BunnyFlandClaude Opus 5.5 ff2e92939f fix(libSceSaveData): hold a host write over save memory reads into guest buffers
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 14:23:10 +01:00
DealPotatoandClaude Opus 5.5 c03058cb2a fix(savedata): return PARAMETER for null Mount2 arguments
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]>
2026-10-28 12:06:26 +03:00
DealPotato e3022ccacb Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into feat/savedata-mount2
# Conflicts:
#	docs/dev/debt/libSceSaveData.native.md
2026-10-28 11:47:37 +03:00
Dean 1068cd6b76 Merge pull request #7780 from savvaniss/fix/savedata-ps4-modules
fix(savedata): build libSceSaveData and libSceSaveDataDialog from the native sources
2026-10-28 13:48:05 +13:00
slopgobblercobbler 5bb4711bb8 fix(libSceSaveData.native): return SAVE_DATA_ERROR_PARAMETER on null argument in sceSaveDataConvert 2026-10-27 08:57:14 +01:00
slopgobblercobbler edf98688c8 fix(libSceSaveData.native): validate null arguments in sceSaveDataDirNameSearchPs4 and sceSaveDataMount 2026-10-26 18:21:39 +01:00
Dean a0ca5bdc71 Merge pull request #10295 from al3w0f205/test/savedata-convert-null-struct-validation
test(libSceSaveData.native): cover null convert struct and directory name validation
2026-10-26 19:59:27 +13:00
DealPotatoandClaude Opus 5.5 7c3ba85c1f fix(savedata): follow the PS4 rows for Mount2 names and users, CREATE only
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]>
2026-10-26 02:12:56 +03:00
DealPotato bd36686417 Merge #7780's head 7394d6254 into feat/savedata-mount2
# Conflicts:
#	core/libs/tests/GuestSaveDataPs4.cpp
2026-10-26 02:11:23 +03:00
Savvanis SpyrosandClaude Opus 5.5 7394d62549 Merge branch 'main' into fix/savedata-ps4-modules
main's canonical-header refactor (f38d29fd08) edited the old libSceSaveData and libSceSaveDataDialog sources this branch removes, and made EventFlag.cpp, libSceNpCommon's Runtime.cpp and GuestKernelErrors.cpp include the old SaveDataCore.hpp. Those three use nothing from it and build without it, so the include is dropped. SaveDataWriteReplacement.cpp takes main's canonical header and keeps only the native path.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 23:06:41 +02:00
slopggobblercobbler81 9c232b38fe fix(savedata): validate null arguments in delete, search, and mount3 2026-10-25 20:07:59 +01:00
Dean 74dfabae2c Merge pull request #10294 from al3w0f205/test/savedata-delete-null-struct-validation
test(libSceSaveData.native): cover null delete struct and directory name validation
2026-10-26 05:36:42 +13:00
Dean Galvin f30a7444a8 test(savedata): unwind the null-input throw on Windows
guest_savedata_convert catches the runtime_error that the PRX raises for null arguments, so the target needs configure_windows_unwind like the other savedata targets that catch; without it the throw terminates the process on MinGW.
2026-10-26 03:24:03 +13:00
Dean Galvin f66b095ada test(savedata): unwind the null-input throw on Windows
guest_savedata_delete catches the runtime_error that the PRX raises for null arguments, so the target needs configure_windows_unwind like the other savedata targets that catch; without it the throw terminates the process on MinGW.
2026-10-26 03:24:02 +13:00
boykopovar f38d29fd08 refactor(sdk): add canonical headers for remaining libraries 2026-10-24 23:17:42 +03:00
Savvanis SpyrosandClaude Opus 5.5 797e2b9733 Merge branch 'main' into fix/savedata-ps4-modules
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 16:33:37 +03:00
DealPotatoandClaude Opus 5.5 29c972ae68 fix(savedata): answer sceSaveDataMount2's PS4 parameter errors
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]>
2026-10-24 02:43:54 +03:00
DealPotatoandClaude Opus 5.5 35bb723b64 Merge #7780's head ad5516e2d into feat/savedata-mount2
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:25:14 +03:00
Dean 7c9d3a005e Merge pull request #8990 from voidlakhan/fix/savedata-null-argument-parameter-error
fix(savedata): validate backup and event result arguments
2026-10-24 01:29:00 +13:00
Dean dd7a2c964d Merge pull request #6313 from mazen320/fix/savedata-convert-completion-event
fix(savedata): queue conversion completion events
2026-10-23 19:28:07 +13:00
Dean da54c652e3 Merge pull request #9433 from Get-fix/ps4/limbo-libs
feat: PS4 NpTrophy, save data v1, NpWebApi offline and Limbo's other imports
2026-10-22 18:00:00 +13:00
Get-fix f04d16d702 feat: PS4 NpTrophy, save data v1, NpWebApi offline and Limbo's other imports
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.
2026-10-22 00:35:09 +03:00
boykopovar 07a181649c fix(savedata): restore cancellation and transfer preparation arguments 2026-10-21 21:53:23 +03:00
Maz f638400709 fix(savedata): queue conversion completion events 2026-10-21 18:07:54 +04:00
Savvanis Spyros 5a1ffa01b3 Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into fix/savedata-ps4-modules
# Conflicts:
#	core/libs/prx/libSceSaveData/Export.cpp
#	docs/dev/debt/libSceSaveData.md
2026-10-21 13:08:27 +03:00
lakhantheboss 2b1eb36139 fix(savedata): validate backup and event result arguments 2026-10-21 14:06:38 +05:30
Dean 1bcaa14234 Merge pull request #8307 from hypermoist/fix/libs-console-results-part2
fix(libs): return what the firmware returns from 31 more calls it does not implement
2026-10-21 20:57:00 +13:00