From 8f4f1ae89c6b79016a1d6e931d4fd1168c5531ad Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Tue, 7 Jul 2015 15:45:37 -0500 Subject: [PATCH] ram_fs: treat symlinks as opaque data Fixes #1604 --- repos/os/src/server/ram_fs/symlink.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/repos/os/src/server/ram_fs/symlink.h b/repos/os/src/server/ram_fs/symlink.h index c632d8521e..93677accbb 100644 --- a/repos/os/src/server/ram_fs/symlink.h +++ b/repos/os/src/server/ram_fs/symlink.h @@ -16,16 +16,17 @@ namespace File_system { { private: - char _link_to[MAX_PATH_LEN]; + char _link_to[MAX_PATH_LEN]; + size_t _len; public: - Symlink(char const *name) { Node::name(name); } + Symlink(char const *name): _len(0) { Node::name(name); } size_t read(char *dst, size_t len, seek_off_t seek_offset) { - size_t count = min(len, sizeof(_link_to) + 1); - Genode::strncpy(dst, _link_to, count); + size_t count = min(len, _len-seek_offset); + Genode::memcpy(dst, _link_to+seek_offset, count); return count; } @@ -34,12 +35,12 @@ namespace File_system { /* Ideal symlink operations are atomic. */ if (seek_offset) return 0; - size_t count = min(len, sizeof(_link_to) + 1); - Genode::strncpy(_link_to, src, count); - return count; + _len = min(len, sizeof(_link_to)); + Genode::memcpy(_link_to, src, _len); + return _len; } - file_size_t length() const { return strlen(_link_to) + 1; } + file_size_t length() const { return _len; } }; }