From 1e7c1f6773b2eee245de3975c8736308c96b7298 Mon Sep 17 00:00:00 2001 From: Adrian <78108584+AdrianCassar@users.noreply.github.com> Date: Mon, 22 Jun 2026 15:20:39 +0100 Subject: [PATCH] [VFS] Fixed opening files with incompatible access flags on posix --- src/xenia/base/filesystem_posix.cc | 16 ++++++++++++---- src/xenia/kernel/xam/user_profile.cc | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/xenia/base/filesystem_posix.cc b/src/xenia/base/filesystem_posix.cc index 0a759f1f4..f3edca236 100644 --- a/src/xenia/base/filesystem_posix.cc +++ b/src/xenia/base/filesystem_posix.cc @@ -191,10 +191,7 @@ std::unique_ptr FileHandle::OpenExisting( open_access |= O_WRONLY; } if (desired_access & FileAccess::kGenericExecute) { - open_access |= O_RDONLY; - } - if (desired_access & FileAccess::kGenericAll) { - open_access |= O_RDWR; + // Unsupported } if (desired_access & FileAccess::kFileReadData) { open_access |= O_RDONLY; @@ -202,6 +199,17 @@ std::unique_ptr FileHandle::OpenExisting( if (desired_access & FileAccess::kFileWriteData) { open_access |= O_WRONLY; } + if (desired_access & FileAccess::kGenericRead && + desired_access & FileAccess::kGenericWrite) { + open_access = O_RDWR; + } + if (desired_access & FileAccess::kFileReadData && + desired_access & FileAccess::kFileWriteData) { + open_access = O_RDWR; + } + if (desired_access & FileAccess::kGenericAll) { + open_access = O_RDWR; + } if (desired_access & FileAccess::kFileAppendData) { open_access |= O_APPEND; } diff --git a/src/xenia/kernel/xam/user_profile.cc b/src/xenia/kernel/xam/user_profile.cc index 1ca5d3d84..605cb7cf1 100644 --- a/src/xenia/kernel/xam/user_profile.cc +++ b/src/xenia/kernel/xam/user_profile.cc @@ -104,7 +104,7 @@ void UserProfile::WriteProfileIcon(XTileType tile_type, const X_STATUS result = kernel_state()->file_system()->OpenFile( nullptr, path, vfs::FileDisposition::kOverwriteIf, - vfs::FileAccess::kGenericAll, false, true, &file, &action); + vfs::FileAccess::kGenericWrite, false, true, &file, &action); if (result != X_STATUS_SUCCESS) { return;