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