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)28static 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);