| vfs_may_delete#(INO, ISRENAME, USER, DIRS, FILES, ASYNCED; INODE, DENT, DENT_INODE, ISDIR, ERR) {afs_iget#(INO, DIRS, FILES, ASYNCED; INODE, ERR); if ERR = ESUCCESS then if ¬ INODE.directory then ERR := ENOTDIR else if ¬ px(USER, INODE.meta) ∨ ¬ pw(USER, INODE.meta) then ERR := EACCESS else {afs_lookup#(INO, DIRS, FILES, ASYNCED; DENT, ERR); if ERR = ESUCCESS then {afs_iget#(DENT.ino, DIRS, FILES, ASYNCED; DENT_INODE, ERR); if ERR = ESUCCESS then {ISDIR := DENT_INODE.directory; if ISDIR then if DENT_INODE.ino = ROOT_INO then ERR := EACCESS else if ISRENAME ∧ ¬ pw(USER, DENT_INODE.meta) then ERR := EACCESS else if ¬ ISRENAME ∧ DENT_INODE.size ≠ 0 then ERR := ENOTEMPTY}}} } |