mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 00:53:02 -05:00
Cloudberry Kingdom (PPSA23827, #3177) registers its first kevent change as a file watch: ident 3, EVFILT_VNODE, flags 0x25 (EV_ADD|EV_ENABLE|EV_CLEAR), fflags 0x37 (NOTE_DELETE|WRITE|EXTEND|LINK|RENAME). Palworld's Discord module (PPSA23126, #2648) imports sceKernelAddFileEvent and sceKernelDeleteFileEvent, which no library exported. EVFILT_VNODE watches the host file or directory behind the descriptor and turns host changes into FreeBSD 11 vnode hints, added whole when they share a bit with the requested fflags as filt_vfsvnode does (sys/kern/vfs_subr.c, release/11.0.1 34bd3475): a growing write is NOTE_WRITE|NOTE_EXTEND, a shrinking truncate or an attribute change NOTE_ATTRIB, a link count change NOTE_LINK or NOTE_DELETE, a pending delete NOTE_DELETE, a new path NOTE_RENAME, and in a directory a new, removed or renamed entry NOTE_WRITE (with NOTE_LINK for a subdirectory, as vop_mkdir_post/vop_rmdir_post). Windows uses FindFirstChangeNotification on the parent directory (and the watched directory) and compares handle snapshots every 50 ms, since a write through an open handle is not reported until it is flushed or closed (measured); Linux uses inotify. Closing the descriptor, deleting the event or the queue stops the watcher. sceKernelAddFileEvent(eq, fd, watch, udata) and sceKernelDeleteFileEvent(eq, fd) take the OpenOrbis 0a1aaf9d (libkernel.h:35,109) and SharpProspero 5dfdb4b0 (KernelEqueue.cs:164,168) signatures; NIDs cG3t15OK4Ow and UmXngHKB6is confirmed with tools/nid_names.py. The watch bits are the fflags and the event is added with EV_CLEAR, which is not confirmed on a title. Throws: NOTE_REVOKE, NOTE_OPEN, NOTE_CLOSE, NOTE_CLOSE_WRITE, NOTE_READ and unknown bits, NOTE_EXTEND on a directory on Windows (a move from another directory cannot be told from a creation) and descriptors that are not files, directories, pipes or sockets (pipes, sockets and kqueues fail with EINVAL as in FreeBSD). Recorded in TechnicalDebt. guest_kqueue adds a vnode watch that sees a write to a temporary file with Cloudberry's flags, fflags filtering, a re-registration, the sce pair on an equeue, EINVAL for sockets, pipes and the kqueue itself, the close of a watched descriptor and a directory watch. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>