#ifndef __ZVFS_HOOK_FCNTL_H__
#define __ZVFS_HOOK_FCNTL_H__

/*
 * fcntl cmd 处理策略：
 *
 *  F_GETFL          → 返回 of->flags
 *  F_SETFL          → 更新 of->flags（只允许改 O_APPEND / O_NONBLOCK）
 *  F_GETFD          → 返回 of->fd_flags
 *  F_SETFD          → 更新 of->fd_flags（FD_CLOEXEC）
 *  F_DUPFD          → 等价于 dup，分配 >= arg 的最小可用 fd，走 dup 路径
 *  F_DUPFD_CLOEXEC  → 同上，同时设 FD_CLOEXEC
 *  F_GETLK          → 不实现文件锁，返回 l_type = F_UNLCK（假装没有锁）
 *  F_SETLK          → 直接返回 0（假装成功）
 *  F_SETLKW         → 直接返回 0（假装成功，不阻塞）
 *  其他 cmd         → 透传给 real_fcntl（同时透传给内核，保持真实 fd 状态同步）
 *
 * ioctl cmd 处理策略：
 *  FIONREAD         → 返回 logical_size - cur_offset（可读字节数）
 *  其他             → 透传，或对 zvfs fd 返回 ENOTTY
 */

int fcntl(int fd, int cmd, ...);
int fcntl64(int fd, int cmd, ...);
int ioctl(int fd, unsigned long request, ...);

#endif // __ZVFS_HOOK_FCNTL_H__