#ifndef __ZVFS_HOOK_STAT_H__
#define __ZVFS_HOOK_STAT_H__

#include <sys/stat.h>
#include <fcntl.h>

/*
 * stat 族 hook。
 *
 * 核心策略：
 *   对 zvfs 文件，透传 real_stat* 获取大部分字段
 *   （ino、dev、nlink、mode、uid、gid、blksize、blocks 等），
 *   只覆盖以下字段：
 *     st_size   ← inode->logical_size
 *     st_atime  ← inode->atime
 *     st_mtime  ← inode->mtime
 *
 *   st_blocks 保持真实文件的值（接近 0，因为真实文件只有 xattr）。
 *   上层（postgres/rocksdb）用 st_size 判断文件大小，这是关键字段。
 *
 * 对非 zvfs 文件：完全透传。
 */

int stat(const char *path, struct stat *buf);
int stat64(const char *path, struct stat64 *buf);
int fstat(int fd, struct stat *buf);
int fstat64(int fd, struct stat64 *buf);
int lstat(const char *path, struct stat *buf);
int lstat64(const char *path, struct stat64 *buf);
int fstatat(int dirfd, const char *path, struct stat *buf, int flags);
int fstatat64(int dirfd, const char *path, struct stat64 *buf, int flags);
int statx(int dirfd, const char *path, int flags,
          unsigned int mask, struct statx *buf);

#endif // __ZVFS_HOOK_STAT_H__