The num_put facet's eight do_put overloads build the console's printf format from the stream flags, format through snprintf and lay out the result as the SDK libc.prx does: thousands separators from the stream locale's numpunct, its decimal point, fill and width with left, right and internal adjustment, true and false names under boolalpha, and the console's prefix and infinity rules for floating point.
The time_put facet's do_put formats % with the modifier and conversion through strftime and writes the result through the output iterator's stream buffer, following the SDK libc.prx: it stores into the put area while room remains, calls overflow otherwise, and marks the iterator failed when overflow returns eof or the buffer is null.
FreeBSD's F_SETFL may change O_FSYNC (FCNTLFLAGS), and vn_write then
writes with IO_SYNC. The flag now lives in the status table, and the
write entry points sync a regular file after the write while it is set.
A requested directory such as C:/Windows or C:Windows carries a root name
on Windows, so appending it to the volume root replaced the root and the
map checked a directory outside the device. Join the validated names one
by one and refuse a name with a root path. The fake sysfs of the test no
longer uses colons, so its device cases can run on Windows too.
AppKit, which SDL uses for windows, Metal surfaces, event pumping and game
controllers, works only on the main thread, and a guest never hands its
thread back. The macOS relinker emits a call to Aps5StartGuest as the
entry of a relinked executable; no library provided it.
- Aps5StartGuest runs the guest entry on a new thread with the stack size
of the main thread (at least 8 MiB) and serves the main dispatch queue
from the run loop of the main thread. The guest ends the process with
exit; a guest entry that returns aborts.
- Aps5RunOnMainThread runs a function on the main thread and waits for it,
or in place where the main thread is the caller or Aps5StartGuest was
never called.
- libSceVideoOut sends its SDL calls through OnMainThread, which carries
the exceptions back to the caller: the initialisation and shutdown of the
video and game controller subsystems, the window, its Vulkan surface and
drawable size, the event polling and the pad, mouse and keyboard input,
which are created and destroyed there. On the other platforms the
functions run in place.
- The flip test starts its tests through Aps5StartGuest on macOS, as a
relinked guest does.
Co-authored-by: mugurc <[email protected]>
List the FAT and exFAT volumes the host has mounted from USB mass-storage
devices (Linux mountinfo and sysfs, Windows volume IOCTLs and SetupAPI),
map each to /mnt/usb<id> and report mounts and unmounts to the registered
callbacks from a service thread that rescans the host once a second.
Device info, map requests and getdents scans follow the recovered records
of SharpProspero and shadPS4; unknown answers keep throwing.
On PS5 firmware 13.60 a second sceAudioOut2Initialize returns 0x80268004,
also after sceAudioOutInit, and a second sceAudioOutInit returns
0x8026000e. sceAudioOutInit after sceAudioOut2Initialize still returns 0.
sceAudioOut2InitializeEx and sceAudioOut2LoInit keep returning 0; their
repeats were not measured.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
On PS5 firmware 13.60 sceKernelGetEventError returns 0x80020000 plus the
event's fflags in 32 bits for every non-zero fflags, including values
above 0xFFFF, where it used to throw.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Console libSceLibcInternal exports o4kt51-uO48 as a 104-byte STT_OBJECT;
titles that resolve the symbol as data need a zeroed 13-slot vtable like the
other facet vtables, not a missing import.
On PS5 firmware 13.60 sceKernelGetProsperoSystemSwVersion and
sceKernelGetSystemSwVersion return 0 for every value in the leading size
field, keep it, write the string and the packed version, and return 0
without writing for a null block.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
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.
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]>