mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 08:33:12 -05:00
ioctl() on a file, directory, pipe or character device threw "request 0x20006601 ... is not implemented" for FIOCLEX, and the same for FIONCLEX, although the close-on-exec flag they change is already kept for these descriptors and reported by fcntl(F_GETFD). FreeBSD 11.4 handles both requests in kern_ioctl() for every descriptor, before the request reaches the file's own ioctl, by changing the flag F_GETFD reads. sys/kern/sys_generic.c, kern_ioctl(): case FIONCLEX: fdp->fd_ofiles[fd].fde_flags &= ~UF_EXCLOSE; goto out; case FIOCLEX: fdp->fd_ofiles[fd].fde_flags |= UF_EXCLOSE; goto out; sys/kern/kern_descrip.c, kern_fcntl(): case F_GETFD: ... td->td_retval[0] = (fde->fde_flags & UF_EXCLOSE) ? FD_CLOEXEC : 0; Both requests now set or clear that flag and return 0. libuv before 1.44 sets close-on-exec this way on FreeBSD (uv__cloexec_ioctl). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>