internal.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include "VFS.h"
  3. #include "mount.h"
  4. /**
  5. * @brief 判断是否可以删除指定的dentry
  6. *
  7. * 1、我们不能删除一个只读的dentry
  8. * 2、我们应当对这个dentry拥有写、执行权限(暂时还没有实现权限)
  9. * 3、如果dentry指向的是文件夹,而isdir为false,则不能删除
  10. * 3、如果dentry指向的是文件,而isdir为true,则不能删除
  11. * @param dentry 将要被删除的dentry
  12. * @param isdir 是否要删除文件夹
  13. * @return int 错误码
  14. */
  15. int vfs_may_delete(struct vfs_dir_entry_t *dentry, bool isdir);
  16. #define D_ISDIR(dentry) ((dentry)->dir_inode->attribute & VFS_IF_DIR)
  17. // 判断是否为根目录
  18. #define IS_ROOT(x) ((x) == (x)->parent)
  19. /**
  20. * @brief 判断当前dentry是否为挂载点
  21. *
  22. * @param dentry
  23. */
  24. static inline bool is_local_mountpoint(struct vfs_dir_entry_t *dentry)
  25. {
  26. if (D_MOUNTED(dentry))
  27. return true;
  28. else
  29. return false;
  30. }
  31. /**
  32. * @brief 释放dentry
  33. *
  34. * @param dentry 目标dentry
  35. */
  36. void vfs_dentry_put(struct vfs_dir_entry_t * dentry);
  37. /**
  38. * @brief 释放inode
  39. *
  40. * @param inode 待释放的inode
  41. * @return int 错误码
  42. */
  43. int vfs_free_inode(struct vfs_index_node_t * inode);