mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 00:17:46 +00:00
Kernel: Modify the IOCTL API to return KResult
The kernel has been gradually moving towards KResult from just bare int's, this change migrates the IOCTL paths.
This commit is contained in:
parent
46c9b1d81c
commit
de9ff0af50
16 changed files with 151 additions and 151 deletions
|
@ -35,9 +35,9 @@ KResult File::close()
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
int File::ioctl(FileDescription&, unsigned, Userspace<void*>)
|
||||
KResult File::ioctl(FileDescription&, unsigned, Userspace<void*>)
|
||||
{
|
||||
return -ENOTTY;
|
||||
return ENOTTY;
|
||||
}
|
||||
|
||||
KResultOr<Region*> File::mmap(Process&, FileDescription&, const Range&, u64, int, bool)
|
||||
|
|
|
@ -87,7 +87,7 @@ public:
|
|||
virtual void did_seek(FileDescription&, off_t) { }
|
||||
virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) = 0;
|
||||
virtual KResultOr<size_t> write(FileDescription&, u64, const UserOrKernelBuffer&, size_t) = 0;
|
||||
virtual int ioctl(FileDescription&, unsigned request, Userspace<void*> arg);
|
||||
virtual KResult ioctl(FileDescription&, unsigned request, Userspace<void*> arg);
|
||||
virtual KResultOr<Region*> mmap(Process&, FileDescription&, const Range&, u64 offset, int prot, bool shared);
|
||||
virtual KResult stat(::stat&) const { return EBADF; }
|
||||
|
||||
|
|
|
@ -62,34 +62,34 @@ KResultOr<size_t> InodeFile::write(FileDescription& description, u64 offset, con
|
|||
return nwritten;
|
||||
}
|
||||
|
||||
int InodeFile::ioctl(FileDescription& description, unsigned request, Userspace<void*> arg)
|
||||
KResult InodeFile::ioctl(FileDescription& description, unsigned request, Userspace<void*> arg)
|
||||
{
|
||||
(void)description;
|
||||
|
||||
switch (request) {
|
||||
case FIBMAP: {
|
||||
if (!Process::current()->is_superuser())
|
||||
return -EPERM;
|
||||
return EPERM;
|
||||
|
||||
auto user_block_number = static_ptr_cast<int*>(arg);
|
||||
int block_number = 0;
|
||||
if (!copy_from_user(&block_number, user_block_number))
|
||||
return -EFAULT;
|
||||
return EFAULT;
|
||||
|
||||
if (block_number < 0)
|
||||
return -EINVAL;
|
||||
return EINVAL;
|
||||
|
||||
auto block_address = inode().get_block_address(block_number);
|
||||
if (block_address.is_error())
|
||||
return block_address.error();
|
||||
|
||||
if (!copy_to_user(user_block_number, &block_address.value()))
|
||||
return -EFAULT;
|
||||
return EFAULT;
|
||||
|
||||
return 0;
|
||||
return KSuccess;
|
||||
}
|
||||
default:
|
||||
return -EINVAL;
|
||||
return EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ public:
|
|||
|
||||
virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) override;
|
||||
virtual KResultOr<size_t> write(FileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
|
||||
virtual int ioctl(FileDescription&, unsigned request, Userspace<void*> arg) override;
|
||||
virtual KResult ioctl(FileDescription&, unsigned request, Userspace<void*> arg) override;
|
||||
virtual KResultOr<Region*> mmap(Process&, FileDescription&, const Range&, u64 offset, int prot, bool shared) override;
|
||||
virtual KResult stat(::stat& buffer) const override { return inode().metadata().stat(buffer); }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue