⛏️ index : haiku.git

author Augustin Cavalier <waddlesplash@gmail.com> 2025-09-03 18:57:02.0 -04:00:00
committer Augustin Cavalier <waddlesplash@gmail.com> 2025-09-03 18:57:02.0 -04:00:00
commit
64322ea7d086a42e9771c021c2131e055ae71ceb [patch]
tree
706f33a6635ef49ee473e65bc7fbdc9c6675b048
parent
f7c3fa972cdfb6dbc96c3b4840cdf5d880880751
download
64322ea7d086a42e9771c021c2131e055ae71ceb.tar.gz

ramfs: Remove open-mode checks in read and write hooks.

The VFS already does this for us, other filesystems don't
check this either.

Diff

 src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp | 34 +++++++++++-----------------------
 1 file changed, 11 insertions(+), 23 deletions(-)

diff --git a/src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp
index 0d3cadc..aca05ae 100644
--- a/src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp
+++ b/src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp
@@ -1036,7 +1036,6 @@
//	FUNCTION_START();
	Volume* volume = (Volume*)_volume->private_volume;
	Node* node = (Node*)_node->private_node;
	FileCookie *cookie = (FileCookie*)_cookie;

//	FUNCTION(("((%lu, %lu), %lld, %p, %lu)\n", node->GetDirID(),
//			  node->GetObjectID(), pos, buffer, *bufferSize));
@@ -1050,11 +1049,6 @@
	if (!node->IsFile())
		SET_ERROR(error, B_BAD_VALUE);

	// check, if reading is allowed
	int rwMode = cookie->GetOpenMode() & O_RWMASK;
	if (error == B_OK && rwMode != O_RDONLY && rwMode != O_RDWR)
		SET_ERROR(error, B_FILE_ERROR);

	// read
	if (error == B_OK) {
		if (File *file = dynamic_cast<File*>(node)) {
@@ -1091,23 +1085,17 @@
	if (!node->IsFile())
		SET_ERROR(error, B_BAD_VALUE);
	if (error == B_OK) {
		// check, if reading is allowed
		int rwMode = cookie->GetOpenMode() & O_RWMASK;
		if (error == B_OK && rwMode != O_WRONLY && rwMode != O_RDWR)
			SET_ERROR(error, B_FILE_ERROR);
		if (error == B_OK) {
			// reset the position, if opened in append mode
			if (cookie->GetOpenMode() & O_APPEND)
				pos = node->GetSize();
			// write
			if (File *file = dynamic_cast<File*>(node)) {
				error = file->WriteAt(pos, buffer, *bufferSize,
					bufferSize);
			} else {
				FATAL("Node %" B_PRIdINO " pretends to be a File, but isn't!\n",
					node->GetID());
				error = B_BAD_VALUE;
			}
		// reset the position, if opened in append mode
		if (cookie->GetOpenMode() & O_APPEND)
			pos = node->GetSize();
		// write
		if (File *file = dynamic_cast<File*>(node)) {
			error = file->WriteAt(pos, buffer, *bufferSize,
				bufferSize);
		} else {
			FATAL("Node %" B_PRIdINO " pretends to be a File, but isn't!\n",
				node->GetID());
			error = B_BAD_VALUE;
		}
	}
	// notify listeners