mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
Kernel: Annotate VirtualFileSystem::rmdir() errors with spec comments
This commit is contained in:
parent
8619f2c6f3
commit
47b9e8e651
Notes:
sideshowbarker
2024-07-17 04:32:07 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/47b9e8e651 Pull-request: https://github.com/SerenityOS/serenity/pull/16594 Reviewed-by: https://github.com/FalseHonesty Reviewed-by: https://github.com/krkk Reviewed-by: https://github.com/supercomputer7 ✅ Reviewed-by: https://github.com/xZise
1 changed files with 11 additions and 0 deletions
|
@ -835,6 +835,7 @@ ErrorOr<void> VirtualFileSystem::symlink(Credentials const& credentials, StringV
|
|||
return {};
|
||||
}
|
||||
|
||||
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/rmdir.html
|
||||
ErrorOr<void> VirtualFileSystem::rmdir(Credentials const& credentials, StringView path, Custody& base)
|
||||
{
|
||||
RefPtr<Custody> parent_custody;
|
||||
|
@ -847,15 +848,22 @@ ErrorOr<void> VirtualFileSystem::rmdir(Credentials const& credentials, StringVie
|
|||
if (last_component == "."sv)
|
||||
return EINVAL;
|
||||
|
||||
// [ENOTDIR] A component of path names an existing file that is neither a directory
|
||||
// nor a symbolic link to a directory.
|
||||
if (!inode.is_directory())
|
||||
return ENOTDIR;
|
||||
|
||||
// [EBUSY] The directory to be removed is currently in use by the system or some process
|
||||
// and the implementation considers this to be an error.
|
||||
// NOTE: If there is no parent, that means we're trying to rmdir the root directory!
|
||||
if (!parent_custody)
|
||||
return EBUSY;
|
||||
|
||||
auto& parent_inode = parent_custody->inode();
|
||||
auto parent_metadata = parent_inode.metadata();
|
||||
|
||||
// [EACCES] Search permission is denied on a component of the path prefix,
|
||||
// or write permission is denied on the parent directory of the directory to be removed.
|
||||
if (!parent_metadata.may_write(credentials))
|
||||
return EACCES;
|
||||
|
||||
|
@ -870,9 +878,12 @@ ErrorOr<void> VirtualFileSystem::rmdir(Credentials const& credentials, StringVie
|
|||
return {};
|
||||
}));
|
||||
|
||||
// [ENOTEMPTY] The path argument names a directory that is not an empty directory,
|
||||
// or there are hard links to the directory other than dot or a single entry in dot-dot.
|
||||
if (child_count != 2)
|
||||
return ENOTEMPTY;
|
||||
|
||||
// [EROFS] The directory entry to be removed resides on a read-only file system.
|
||||
if (custody->is_readonly())
|
||||
return EROFS;
|
||||
|
||||
|
|
Loading…
Reference in a new issue