On a PS4 Pro with firmware 10.71 a successful sceJpegEncEncode returns the
size of the JPEG it wrote, the same value it stores in the output info,
and it does so when the output info pointer is null too. AnyPS5 returned
0, so a title that takes the size from the return value got an empty
image. The guest test now checks the returned size against the output
info.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Narrowing the vector window (30fab0777e) puts every slot the bound analysis
did not reach into its own variable. Each relative access that is not a
constant index then emits a switch over all of those variables, whether or not
the analysis could bound its index. A shader with many relative accesses grew
by one switch per access: a mesh shader of PPSA31371 came out at 4.2 MB of
SPIR-V, and the NVIDIA driver spent minutes compiling it while the game
waited at frame 23.
IndexedWindowSlots now counts the dynamic accesses and keeps the whole window
in the array when the switches would pass 4096 cases in all (accesses times
slots outside the array times lanes). Shaders with a few relative accesses
are narrowed as before.
The vector window tests recompile a 32-register window with 2 and with 300
relative reads from a user data index, and check the narrowed shape and the
switch case count.
The initial user reported keyboard type 0, which the converter maps to IME type 0
and then rejects, so a title reading the layout still could not use it. Report 20
for sceUserServiceGetKeyboardType, which the owner's table maps to IME keyboard
type 4 (English, US); the Japanese and Traditional Chinese input variants stay 0.
Tests and both debt entries updated.
On macOS, shutdown(SHUT_RD) on a UDP socket that was never bound does not
wake a thread blocked in recv on it, so sceNetShutdown left the receiver
hanging. Use the receive wait that Windows already has: block on the
socket table until the socket gets a local port or is shut, then poll.
On macOS an unbound socket reports port 0 from getsockname, so the check
looks at the port instead of the Winsock error.
Ported from #8658.
Co-authored-by: Himansh Raj <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
All four exports threw. The ownership calls follow fchown: owner and
group 0 and the unchanged value are accepted and any other value
throws. The path is looked up first with stat, lstat or fstatat, as
FreeBSD 11's kern_fchownat does, so a lookup error is returned before
the owner is checked. fchownat rejects flags other than
AT_SYMLINK_NOFOLLOW with EINVAL. linkat passes AT_FDCWD and absolute
paths to link and rejects flags other than AT_SYMLINK_FOLLOW with
EINVAL; a relative path with a directory descriptor and a symbolic
link source without AT_SYMLINK_FOLLOW throw. On Windows a symbolic
link source is detected with the file attributes, since libstdc++
there reports it as a regular file.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>