Main's #10706 removes the local declarations at the top of libSceNet's
Export.cpp, where this branch had added __inet_pton and __inet_ntop.
libkernel's Api.hpp, which Export.cpp includes, now declares both, so the
merge takes main's side there.
Main's #10706 moves the declarations of exported functions and their types
into the libraries' public headers, and gives WaitForPendingInSet a
KernelTimespec timeout. The merge keeps this branch's DeliverUnblockedPending
and ChangeBlockedMask with main's KernelTimespec. It takes main's side of
the declarations in GuestSignalSets.cpp, whose setjmp and longjmp this
branch had added and libc's Api.hpp now declares. GuestSignalHandlerMask.cpp
includes the libkernel and libc public headers in place of its own
declarations and GuestSignalSet and GuestSigaction types, as the
public_headers audit requires.
%G, %g and %V no longer throw for a negative tm_yday, a tm_yday past the year or a tm_wday below -6. They follow the year and week rule of the SDK libc.prx, read from its disassembly and checked by running it, with its leap-year test and 32-bit arithmetic. %U and %W also wrap in 32 bits as that module does.
Takes #9533's two merges of main since this branch last took it: #10375's
CheckDepthAttachmentAlias and #9186's host-only flag for guard(). No
conflict here.
FreeBSD 11.4's kern_settimeofday rejects a timeval with a microsecond
field outside 0 to 999999 or a negative second field with EINVAL before
changing anything, sets the clock from a valid timeval, and then stores
the timezone, which gettimeofday reports. settimeofday now checks the
timeval the same way and throws for a valid one, as clock_settime does,
because the host clock is not changed. A timezone given without a
timeval is stored and gettimeofday reports it instead of 0 and 0.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Firmware 13.42's module checks a null result first (0x80550704) and
refuses a synchronous request in the lookup poll and wait with
0x80550307; the word filter keeps INVALID_ID. The debt entry records the
measurement and that IDs here do not carry the console's service bits.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
progress.py skips every definition whose name ends in _nid_no_patch or
_nid_no_patch_cut, which are meant to be internal helpers. Some libraries
export such functions with APS5_EXPORT under an explicit NID or name:
libSceAgcVsh (150), libSceNKWebKit (150) and libSceJson2's inventory
(66), all of them calling NotImplemented_nid_no_patch. None of the 366
was counted, so those three libraries showed 151 of 151 functions where
they declare 517, and import_audit, which takes its stub list from the
same scan, reported imports of them as implemented.
A _nid_no_patch definition is now skipped only when no APS5_EXPORT in its
library exports it. The library totals go from 6104 of 12305 to 6104 of
12671 on main.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
CRYPTO_num_locks, CRYPTO_set_locking_callback, CRYPTO_set_add_lock_callback,
CRYPTO_THREADID_set_callback and CRYPTO_THREADID_set_numeric threw. They
now follow LibreSSL 2.5.4's cryptlib.c, the version identified in the
firmware 13.40 measurements: CRYPTO_num_locks returns 41, the setters
store their callbacks, CRYPTO_THREADID_set_callback keeps the first
non-null one and returns 0 once one is set, and
CRYPTO_THREADID_set_numeric clears the {ptr, val} structure and stores a
64-bit value. The callbacks are never called, because the module exports
none of CRYPTO_lock, CRYPTO_add_lock or CRYPTO_THREADID_current; the debt
entry records it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
OutputInfo had no member at offset 0xb, so sceVideodec2Decode and
sceVideodec2Flush never wrote that byte, and a returned picture carried
whatever the caller had left there. Name it isDiscardedFrame, as
SharpProspero and KytyPS5 do, and set it to 0 when a picture is
returned; a result without a picture leaves it as the caller set it.
Co-Authored-By: Claude <[email protected]>
Past their initialization and argument errors, sceContentSearchOpenMetadata, sceContentSearchOpenMetadataByContentId, sceContentSearchGetMetadataFieldInfo and sceContentSearchGetMetadataValue threw a bare logic_error for every valid call, so progress.py counted them as done. The host content library is empty and the console's errors for missing content and unopened metadata ids are unknown, so the four now go through NotImplemented_nid_no_patch. ThrowUnknownMetadataId had no other caller and goes.
For a live session, sceContentExportGetProgress and sceContentExportFromDataWithThumbnail threw a bare runtime_error, so progress.py counted them as done. An idle session's progress depends on the caller's SDK compatibility mode, and the host has no media library to export into, so both now go through NotImplemented_nid_no_patch. RequireSession's not-initialized and unknown-session throws, which other calls share, are unchanged.
After its handle and argument errors, sceAudioPropagationSourceCalculateAudioPaths threw a bare runtime_error for every valid call, so progress.py counted it as done. Propagation is not implemented, so the valid call now goes through NotImplemented_nid_no_patch. The early errors are unchanged.
Take the 16-bit segment size Vita3K and RPCS3 declare. As in Vita3K,
the call answers NOT_INITIALIZED before sceRudpInit and NOT_ACCEPTABLE
while any context exists, and otherwise stores the size.
sceRudpGetMaxSegmentSize keeps the 1410 measured on a PS5: Vita3K leaves
the getter unimplemented, so no source says it reports a stored size.
BunnyFl measured firmware 13.42 libSceNpManager.sprx for the eleven
NpManagerInt getters. They now take the measured arguments and refuse
as measured: user id -1 or a null required pointer gives
INVALID_ARGUMENT, the authorization calls also refuse their value and
mode ranges (0x80550004 for the mode), and the PSNO URI form refuses
its size (0x80550011) and a URI of 0x2000 bytes or more (0x80550005).
Past the checks they keep main's offline signed-out answer for any
request id, and the tests take their request ids from the NpManagerInt
request table.