TestTitleSecretObjects calls the deleting destructor through
reinterpret_cast<Destructor>(owned->vtable[1]). The vtable entry is a
const void*, and AppleClang rejects a reinterpret_cast that casts the
qualifier away. The other six vtable calls in this file go through
const_cast<void*> first; this one now does too.
TestHexAndCopies now copies a source whose first terminator comes after the length limit, and expects exactly the first four characters. On the previous copy helper the new check aborts; with the fix guest_np_common_runtime passes. Both results come from the archive build described in the PR body.
The NP condition wrappers were only tested without a waiter, and
sceNpCondWait, the SignalAll and SignalTo forms and every sceNpLwCond call
had no test. A new wake case parks real threads in sceNpCondWait and
sceNpLwCondWait and releases them with Signal, SignalAll and SignalTo,
then destroys the conditions. The runtime event flag test now masks bits
with sceNpClearEventFlag and sets a pattern with sceNpCancelEventFlag,
which reports no waiters.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
sceNpCalloutTermCtx called from a callout of the same context could not join the worker thread, destroyed the context's mutex and condition anyway, and returned. The worker then locked the destroyed mutex and the host crashed. The call now throws, and the gap is recorded in the library's technical debt.
The constructors, destructors, Clear, IsEmpty, Equals, Parse, Build and the
comparison operators of sce::np::NpCommId, and the C export
sceNpUtilParseTitleId they use, follow libSceNpCommon.sprx of firmware
13.60, checked against 26,501 firmware results.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The constructors, destructors, AddRef and Release of sce::np::RefObject
follow libSceNpCommon.sprx of firmware 13.60, checked against 7,200
firmware results.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Read, ReadAll, ReadData, SkipAll and SkipData on StreamReader, and Write,
WriteData and WriteFilledData on StreamWriter, with and without a StreamCtx,
follow libSceNpCommon.sprx of firmware 13.60, checked against 20,426
firmware results.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Firmware 13.42 keeps the type of the 16th nested container in the context
slot that also holds the saved parser state, so a call that ends inside a
16th-level object leaves the outermost object open. The parser here does
the same; the test pins it, and the debt file records it together with
where the parser's behaviour comes from.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
sceNpJsonParse, sceNpJsonParseBuf and sceNpJsonParseEx with their
Init calls, and the sceNpServerErrorJson exports, follow firmware
13.42: a resumable byte-by-byte parser that walks a rule table level
by level (member keys compared without case, array elements, keyless
wildcard entries until the first unmatched container, a descend flag)
and calls the caller's handler for each matched container, key and
value. The Buf form uses caller key and value buffers, and the Ex form
also reports the stream offset of each event, delivers long strings
and numbers in pieces and reports everything when no rules are given.
The server error calls read error.code (or a top-level code for the
Multi form) and fall back to the HTTP status.
Co-Authored-By: Claude Opus 5.5 <[email protected]>