AnyPS5/docs/dev/debt/libScePosixForWebKit.md

3.4 KiB

libScePosixForWebKit technical debt

Unknown function info

  • 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

Functional

  • 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.
  • arc4random (libScePosixForWebKit) 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. The console's generator and its reseeding are unknown; arc4random_uniform, arc4random_stir and arc4random_addrandom are not in the module's export set and are absent
  • 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