Skip to content

feat(libSceAppContent): implement sceAppContentGetAddcontDownloadProgress - #6020

Merged
adriadam10 merged 1 commit into
boykopovar:mainfrom
KernelPanicNT:feat/libsceappcontent-addcont-download-progress
Oct 17, 2026
Merged

adriadam10 merged 1 commit into
boykopovar:mainfrom
KernelPanicNT:feat/libsceappcontent-addcont-download-progress

Conversation

@KernelPanicNT

@KernelPanicNT KernelPanicNT commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

What

Implements sceAppContentGetAddcontDownloadProgress, declared as a throwing stub by #3244, under the existing model in which no additional content is ever installed.

Source of the behaviour. No console measurement is involved.

Changes:

  • sceAppContentGetAddcontDownloadProgress(service_label, entitlement_label, progress) returns SCE_APP_CONTENT_ERROR_PARAMETER (0x80D90002) when the label or the progress pointer is null, and SCE_APP_CONTENT_ERROR_NOT_FOUND (0x80D90005) otherwise. The progress is never written, so its layout is not needed: SharpProspero declares it as 16 bytes, DataSize and DownloadedSize, and the parameter is declared void*.
  • dlc_emu's label check also rejects a label with nonzero padding. That check is left out, as feat(libSceAppContent): implement sceAppContentAddcontEnqueueDownload #5204 did for the same reason: the sibling calls do not check it and no console source confirms it. Such a label answers NOT_FOUND here.
  • guest_app_content: NOT_FOUND for service labels 0 and 7, PARAMETER for a null label and for a null progress, and the 64-byte progress buffer unchanged after all four calls.
  • docs/dev/debt/libSceAppContent.md: the "Unknown function info" entry from feat(libSceAppContent): implement sceAppContentGetAddcontDownloadProgress #3244 is removed and the call is added to the existing "Additional content" entry under Functional. That entry's remaining SharpProspero link is pinned to the same commit, and its last sentence now says that the sceAppContentAddcontEnqueueDownload and sceAppContentGetAddcontDownloadProgress signatures follow SharpProspero, that the sceAppContentAddcontDelete signature follows dlc_emu, and that dlc_emu is not a console measurement.

Nothing stays throwing in this function. The console's own error codes for these cases remain unverified, as the existing entry already says for the sibling calls.

Progress: libSceAppContent 14/15 → 15/15 (tools/progress.py, measured on e27ff7c54 and on this branch).

Tested

Head 7d42db40a3ff8cadf8a6ade7594ae7928a8eee9f, base e27ff7c545cb5ac669612567d853956ffa02ebe6.

  • Linux (Ubuntu 24.04, GCC 14.2.0, Ninja, Release, BUILD_TESTING=ON, AMD EPYC 7763 (GitHub Codespaces), tests run natively): guest_appcontent_tests passes in 5 of 5 runs, the test executable being run directly five times.
  • Negative control: keep the tests and replace only core/libs/prx/libSceAppContent/Export.cpp with the base version: guest_appcontent_tests fails with sceAppContentGetAddcontDownloadProgress not implemented. Restoring the PR source and rebuilding, guest_appcontent_tests passes in 5 of 5 runs again.
  • Windows, full Build workflow on my fork (run 38618151303), this head built together with the other queued branches and merged into the fork's main at 2b7e3ce69fd889deceb6b52ac1fbf13e7c0d1084, WinLibs MinGW-w64 GCC 15.2.0, Release, BUILD_TESTING=ON: 1212/1212 tests pass; the relinker (Linux, Windows, macOS), register-context and write-watch jobs of the same run also pass.
  • Conventions checker and git diff --check pass. The Linux job of the Build workflow now targets the project's self-hosted runner, so it was not run on the fork; no title was run.

Duplicate and overlap check

Checklist

  • Based on e27ff7c54; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Unblocks: none
  • GPUs tested: n/a
  • AI-assisted: yes (Claude)

🤖 Generated with Claude Code

…ress

The signature (uint32_t service label, const NpUnifiedEntitlementLabel*,
progress*) follows SharpProspero Interop/AppContent/AppContent.cs.
dlc_emu dlc_content.cpp (fcf69b16) answers PARAMETER for a null label or
progress and NOT_FOUND for a label that is not installed additional
content. No additional content is ever installed here, as
sceAppContentAddcontMount, sceAppContentAddcontEnqueueDownload and
sceAppContentAddcontDelete already model, so every other call answers
NOT_FOUND and the progress, whose 16-byte layout SharpProspero gives,
is never written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Progress report (19fc5a8 → 7d42db4)

📈 System libraries: 88.72% (+0.03%, +1 implemented functions)

✅ 1 implemented
Library Name
libSceAppContent sceAppContentGetAddcontDownloadProgress

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 6447 sceAppContentGetAddcontDownloadProgress

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 6044 core/libs/tests/GuestAppContent.cpp
PR 6447 core/libs/prx/libSceAppContent/Export.cpp
docs/dev/debt/libSceAppContent.md

@adriadam10

Copy link
Copy Markdown
Collaborator

Checked: guest_appcontent passes on the PR merged onto main and fails without the Export.cpp change; the dlc_emu check order (PARAMETER for a null label or progress, NOT_FOUND otherwise, progress never written) matches the cited commit, and the debt entry moved to "Functional" accurately. Merging once the full Build is green.

@adriadam10
adriadam10 merged commit 2083bc7 into boykopovar:main Oct 17, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants