Files
AnyPS5/docs/dev/debt/libScePosixForWebKit.md
T
Daniel HornandClaude Opus 5.5 6193262cfc feat(libScePosixForWebKit): implement gethostbyname_r
Follow FreeBSD 11.4: copy the entry into the caller's buffer with
__copy_hostent's layout, return ERANGE when it does not fit, and return
-1 with the error in h_errnop and a null result when the lookup fails.
Share the lookup with gethostbyname, each keeping its own storage, and
cut numeric names to MAXDNAME as fakeaddr does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-31 21:13:06 +00:00

8.6 KiB

libScePosixForWebKit technical debt

Unknown function info

  • opendir, closedir, readdir, readdir_r (libScePosixForWebKit) - whether the console implementation of directory enumeration functions in libScePosixForWebKit applies WebKit sandboxing, custom path rewriting, or internal directory filtering is unverified; the exports forward directly to libc directory operations (opendir, closedir, readdir, readdir_r). Names and NIDs (ay3uROQAc5A, XepdqehVYe4, lybyyKtP54c, J0kng1yac3M) appear in the PS5 3.20 export inventory.

  • gethostbyname (libScePosixForWebKit) - numeric IPv4 forms, trailing whitespace and 64-bit accumulation follow FreeBSD 11.4 inet_aton; clearing the resolver error on numeric success follows fakeaddr. Exact PS5 behavior is unverified; hostname lookup still uses the host resolver

  • clock_gettime_np, getenv_np, mmap_np, msetname, pthread_setschedparam_np, setenv_np, sysinfo (scePosixForWebKit_sysinfo) (libScePosixForWebKit) - names/NIDs appear in the PS5 3.20 export inventory and verified NID name database; credible prototypes are unknown. sysinfo uses a renamed helper. All are parameterless import stubs, not ABI claims; callers must not use them until signatures are verified.

  • gethostbyname_r (scePosixForWebKit_gethostbyname_r, NID dt8ermYp-Wc) - no console or WebKit caller was read. The signature, the __copy_hostent buffer layout, ERANGE with NETDB_INTERNAL for a short buffer, and -1 with *h_errnop set and *result null for a failed lookup follow FreeBSD 11.4 gethostnamadr.c. Hostnames use the host resolver and IPv4 only, and only numeric names clear h_errno, as in gethostbyname. FreeBSD retries a numeric name that does not fit through /etc/hosts and DNS; this returns ERANGE. Numeric names are cut to MAXDNAME (1025) bytes, also in gethostbyname. A null pointer FreeBSD would dereference throws. Closes when: compared with the console.

Functional

  • strcasestr (libScePosixForWebKit) - console locale behavior is unmeasured. It follows FreeBSD 11.4's strcasestr.c in the guest's supported C locale; other guest locales are not implemented.

  • mkstemp and isatty (libScePosixForWebKit) follow FreeBSD's temporary-file API and terminal check, without console verification. mkstemp replaces all trailing X characters, accepts a fixed name, and creates files through the guest path resolver with exclusive read/write access and mode 0600. Windows file permissions follow the existing kernel file implementation. isatty tests Windows console handles rather than all character devices; files, pipes and guest sockets return ENOTTY, closed descriptors return EBADF.

  • __wrap_fchown, __wrap_link, __wrap_readlink, __wrap_statvfs and __wrap_symlink (libScePosixForWebKit) - whether the console's wrappers add sandbox checks or path rewriting for WebKit is unknown. Each takes the signature of the function it is named after, as GNU ld's --wrap does, and calls it: libkernel_sys's fchown, link, readlink and symlink, and libSceLibcInternal's statvfs, with their gaps

  • arc4random, arc4random_uniform (libScePosixForWebKit) - arc4random returns four bytes of host OS entropy (getentropy, rand_s on Windows), as arc4random_buf does, uniform over the 32-bit range like FreeBSD 11.4's RC4 keystream in arc4random.c. arc4random_uniform(upper_bound) returns a uniformly distributed value in [0, upper_bound) via rejection sampling over arc4random, returning 0 for upper bounds of 0 and 1 without drawing entropy. The console's generator and its reseeding are unknown; arc4random_stir and arc4random_addrandom are not in the module's export set and are absent

  • pthread_setname_np (libScePosixForWebKit) stores the guest thread name in libkernel's thread object, so pthread_getname_np returns it, and follows libkernel's pthread_rename_np: EINVAL (22) for a null thread or name, ENAMETOOLONG (63) from 32 bytes on, 0 otherwise, with the name truncated to 31 bytes when read back. It does not apply the Windows thread description or the job affinity that scePthreadRename sets, because those helpers are private to libkernel; the console's exact error numbers for this module are unverified

  • fnmatch (libScePosixForWebKit) follows FreeBSD 11 fnmatch.c in the C locale: each byte is one character, FNM_CASEFOLD folds ASCII letters only, and bracket ranges compare byte values. [:class:] names are not character classes: as in FreeBSD 11 through 14, [[:digit:]] is the set of [, :, d, i, g, t followed by a literal ] (classes were added to fnmatch.c after 14). Multibyte characters and locale collation are not modelled. A null pattern or string throws

  • getservbyname (libScePosixForWebKit) searches a built-in copy of 37 lines of FreeBSD 11.4's etc/services (ftp-data, ftp, ssh, telnet, smtp, domain, tftp, http, pop3, ntp, imap, https, rtsp, submission, imaps, pop3s with their aliases and protocols, in file order) the way getservent.c searches the file: case-sensitive name or alias, a null protocol takes the first match, the port in network byte order, the result in per-thread storage. The console's /etc/services is unknown, so any other service returns null without setting errno, as for a name the file lacks. getaddrinfo still resolves service names through the host's service database

  • __wrap_access, __wrap_clock_gettime, __wrap_getcwd, __wrap_getenv, __wrap_lstat and __wrap_mmap (libScePosixForWebKit) assume, from the export names alone, the GNU ld --wrap convention (a reference to <name> resolves to __wrap_<name>): each takes its target's POSIX signature and forwards to libc's (access, getcwd, getenv) or libkernel's (clock_gettime, lstat, mmap) implementation, which sets errno. No PS5 module or WebKit call site was read to confirm that WebKit imports __wrap_<name> in place of <name> or that the console wrappers only forward. Any sandbox or path handling the console module adds is not modelled, and how the wrappers relate to getenv_np, setenv_np, mmap_np and clock_gettime_np (such as a separate environment that setenv_np fills) is unknown

  • getaddrinfo raw-socket hints follow FreeBSD 11.4's raw exploration entries and service rejection: an explicit raw type preserves any protocol number and forbids a non-null service. Address lookup uses the host's datagram resolver path with no service, then produces guest raw records with zero ports. PS5 execution is unverified; host DNS policy, address ordering, default-hint records and flag behavior can still differ from FreeBSD.