From 979059c804a5279d37593ce13ee0b756ddd833f1 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 6 Nov 2025 17:21:36 +0200 Subject: [PATCH] Kernel: Implement ext2 symlinks with >= 60 byte target --- kernel/kernel/FS/Ext2/Inode.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/kernel/kernel/FS/Ext2/Inode.cpp b/kernel/kernel/FS/Ext2/Inode.cpp index 20d040fb..f7084c49 100644 --- a/kernel/kernel/FS/Ext2/Inode.cpp +++ b/kernel/kernel/FS/Ext2/Inode.cpp @@ -114,8 +114,11 @@ namespace Kernel TRY(result.append(BAN::StringView(reinterpret_cast(m_inode.block), m_inode.size))); return result; } - dwarnln("TODO: ext2 get symlink target from {} byte inode", m_inode.size); - return BAN::Error::from_errno(ENOTSUP); + + BAN::String result; + TRY(result.resize(m_inode.size)); + TRY(read_impl(0, { reinterpret_cast(result.data()), result.size() })); + return BAN::move(result); } BAN::ErrorOr Ext2Inode::set_link_target_impl(BAN::StringView target) @@ -129,8 +132,10 @@ namespace Kernel TRY(sync()); return {}; } - dwarnln("TODO: ext2 set symlink target to {} bytes from {} byte inode", target.size(), m_inode.size); - return BAN::Error::from_errno(ENOTSUP); + + TRY(truncate_impl(target.size())); + TRY(write_impl(0, { reinterpret_cast(target.data()), target.size() })); + return {}; } BAN::ErrorOr Ext2Inode::read_impl(off_t offset, BAN::ByteSpan buffer)