From 1333009e1c74db88ffb1481616a769ae4769446d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 26 May 2005 02:04:00 +0000 Subject: [PATCH] {rootfs|devfs}_read_link() did not report the correct link size on success (they just kept the passed in buffer size unchanged). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12821 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/fs/devfs.cpp | 8 +++++--- src/system/kernel/fs/rootfs.c | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/system/kernel/fs/devfs.cpp b/src/system/kernel/fs/devfs.cpp index fc31e70e84..9bc28b8c2c 100644 --- a/src/system/kernel/fs/devfs.cpp +++ b/src/system/kernel/fs/devfs.cpp @@ -1150,14 +1150,16 @@ static status_t devfs_read_link(fs_volume _fs, fs_vnode _link, char *buffer, size_t *_bufferSize) { struct devfs_vnode *link = (struct devfs_vnode *)_link; + size_t bufferSize = *_bufferSize; if (!S_ISLNK(link->stream.type)) return B_BAD_VALUE; - if (*_bufferSize <= link->stream.u.symlink.length) { - *_bufferSize = link->stream.u.symlink.length + 1; + *_bufferSize = link->stream.u.symlink.length + 1; + // we always need to return the number of bytes we intend to write! + + if (bufferSize <= link->stream.u.symlink.length) return B_BUFFER_OVERFLOW; - } memcpy(buffer, link->stream.u.symlink.path, link->stream.u.symlink.length + 1); return B_OK; diff --git a/src/system/kernel/fs/rootfs.c b/src/system/kernel/fs/rootfs.c index 4ecd4aa050..01bc923346 100644 --- a/src/system/kernel/fs/rootfs.c +++ b/src/system/kernel/fs/rootfs.c @@ -784,14 +784,16 @@ static status_t rootfs_read_link(fs_volume _fs, fs_vnode _link, char *buffer, size_t *_bufferSize) { struct rootfs_vnode *link = _link; + size_t bufferSize = *_bufferSize; if (!S_ISLNK(link->stream.type)) return B_BAD_VALUE; - if (*_bufferSize <= link->stream.symlink.length) { - *_bufferSize = link->stream.symlink.length + 1; + *_bufferSize = link->stream.symlink.length + 1; + // we always need to return the number of bytes we intend to write! + + if (bufferSize <= link->stream.symlink.length) return B_BUFFER_OVERFLOW; - } memcpy(buffer, link->stream.symlink.path, link->stream.symlink.length + 1); return B_OK;