From e08f7fd12b9a85a6e5d5613979f499c485197d09 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 27 May 2024 20:40:19 -0400 Subject: [PATCH] kernel/vfs: Slight refactor to F_SETFL to reduce duplication. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No functional change intended. Change-Id: Ida1dd3b1629836d3d48598bb98bc2c56cdcf869f Reviewed-on: https://review.haiku-os.org/c/haiku/+/7696 Reviewed-by: Jérôme Duval Tested-by: Commit checker robot Reviewed-by: waddlesplash --- src/system/kernel/fs/vfs.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index fd338094a8..515578023d 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -6202,10 +6202,13 @@ common_fcntl(int fd, int op, size_t argument, bool kernel) } case F_SETFL: + { // Set file descriptor open mode - // we only accept changes to O_APPEND and O_NONBLOCK - argument &= O_APPEND | O_NONBLOCK; + // we only accept changes to certain flags + const int32 modifiableFlags = O_APPEND | O_NONBLOCK; + argument &= modifiableFlags; + if (descriptor->ops->fd_set_flags != NULL) { status = descriptor->ops->fd_set_flags(descriptor.Get(), argument); } else if (vnode != NULL && HAS_FS_CALL(vnode, set_flags)) { @@ -6217,10 +6220,11 @@ common_fcntl(int fd, int op, size_t argument, bool kernel) if (status == B_OK) { // update this descriptor's open_mode field descriptor->open_mode = (descriptor->open_mode - & ~(O_APPEND | O_NONBLOCK)) | argument; + & ~modifiableFlags) | argument; } break; + } case F_GETFL: // Get file descriptor open mode