#ifndef __ZVFS_HOOK_REENTRANT_H__
#define __ZVFS_HOOK_REENTRANT_H__

/*
 * 线程局部重入深度计数。
 *
 * 进入任何 hook 函数时 ZVFS_HOOK_ENTER()，离开时 ZVFS_HOOK_LEAVE()。
 * 当深度 > 1 时，说明当前调用是 hook 内部发起的（例如 hook 内调用了
 * real_fstat，而 fstat 本身也被 hook），此时直接走 real_* 绕过 zvfs 逻辑。
 *
 * 典型骨架：
 *
 *   int fstat(int fd, struct stat *buf)
 *   {
 *       ZVFS_HOOK_ENTER();
 *       int ret;
 *       if (ZVFS_IN_HOOK() || !zvfs_is_zvfs_fd(fd))
 *           ret = real_fstat(fd, buf);
 *       else
 *           ret = zvfs_fstat_impl(fd, buf);
 *       ZVFS_HOOK_LEAVE();
 *       return ret;
 *   }
 */

extern __thread int _zvfs_hook_depth;

#define ZVFS_HOOK_ENTER()   (++_zvfs_hook_depth)
#define ZVFS_HOOK_LEAVE()   (--_zvfs_hook_depth)
#define ZVFS_IN_HOOK()      (_zvfs_hook_depth > 1)

#endif // __ZVFS_HOOK_REENTRANT_H__