Kernel: Implement chown to ext2 and tmpfs
This commit is contained in:
parent
f2eaab6e43
commit
ebf2b16d09
|
@ -46,6 +46,7 @@ namespace Kernel
|
||||||
virtual BAN::ErrorOr<size_t> write_impl(off_t, BAN::ConstByteSpan) override;
|
virtual BAN::ErrorOr<size_t> write_impl(off_t, BAN::ConstByteSpan) override;
|
||||||
virtual BAN::ErrorOr<void> truncate_impl(size_t) override;
|
virtual BAN::ErrorOr<void> truncate_impl(size_t) override;
|
||||||
virtual BAN::ErrorOr<void> chmod_impl(mode_t) override;
|
virtual BAN::ErrorOr<void> chmod_impl(mode_t) override;
|
||||||
|
virtual BAN::ErrorOr<void> chown_impl(uid_t, gid_t) override;
|
||||||
virtual BAN::ErrorOr<void> utimens_impl(const timespec[2]) override;
|
virtual BAN::ErrorOr<void> utimens_impl(const timespec[2]) override;
|
||||||
virtual BAN::ErrorOr<void> fsync_impl() override;
|
virtual BAN::ErrorOr<void> fsync_impl() override;
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ namespace Kernel
|
||||||
TmpInode(TmpFileSystem&, ino_t, const TmpInodeInfo&);
|
TmpInode(TmpFileSystem&, ino_t, const TmpInodeInfo&);
|
||||||
|
|
||||||
virtual BAN::ErrorOr<void> chmod_impl(mode_t) override;
|
virtual BAN::ErrorOr<void> chmod_impl(mode_t) override;
|
||||||
|
virtual BAN::ErrorOr<void> chown_impl(uid_t, gid_t) override;
|
||||||
virtual BAN::ErrorOr<void> utimens_impl(const timespec[2]) override;
|
virtual BAN::ErrorOr<void> utimens_impl(const timespec[2]) override;
|
||||||
virtual BAN::ErrorOr<void> fsync_impl() override { return {}; }
|
virtual BAN::ErrorOr<void> fsync_impl() override { return {}; }
|
||||||
|
|
||||||
|
|
|
@ -289,6 +289,26 @@ namespace Kernel
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BAN::ErrorOr<void> Ext2Inode::chown_impl(uid_t uid, gid_t gid)
|
||||||
|
{
|
||||||
|
if (m_inode.uid == uid && m_inode.gid == gid)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
const auto old_uid = m_inode.uid;
|
||||||
|
const auto old_gid = m_inode.gid;
|
||||||
|
|
||||||
|
m_inode.uid = uid;
|
||||||
|
m_inode.gid = gid;
|
||||||
|
if (auto ret = sync(); ret.is_error())
|
||||||
|
{
|
||||||
|
m_inode.uid = old_uid;
|
||||||
|
m_inode.gid = old_gid;
|
||||||
|
return ret.release_error();
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<void> Ext2Inode::utimens_impl(const timespec times[2])
|
BAN::ErrorOr<void> Ext2Inode::utimens_impl(const timespec times[2])
|
||||||
{
|
{
|
||||||
const uint32_t old_times[2] {
|
const uint32_t old_times[2] {
|
||||||
|
|
|
@ -100,6 +100,13 @@ namespace Kernel
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BAN::ErrorOr<void> TmpInode::chown_impl(uid_t new_uid, gid_t new_gid)
|
||||||
|
{
|
||||||
|
m_inode_info.uid = new_uid;
|
||||||
|
m_inode_info.gid = new_gid;
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<void> TmpInode::utimens_impl(const timespec times[2])
|
BAN::ErrorOr<void> TmpInode::utimens_impl(const timespec times[2])
|
||||||
{
|
{
|
||||||
if (times[0].tv_nsec != UTIME_OMIT)
|
if (times[0].tv_nsec != UTIME_OMIT)
|
||||||
|
|
Loading…
Reference in New Issue