[VFS] Fixed opening files with incompatible access flags on posix
This commit is contained in:
@@ -191,10 +191,7 @@ std::unique_ptr<FileHandle> FileHandle::OpenExisting(
|
|||||||
open_access |= O_WRONLY;
|
open_access |= O_WRONLY;
|
||||||
}
|
}
|
||||||
if (desired_access & FileAccess::kGenericExecute) {
|
if (desired_access & FileAccess::kGenericExecute) {
|
||||||
open_access |= O_RDONLY;
|
// Unsupported
|
||||||
}
|
|
||||||
if (desired_access & FileAccess::kGenericAll) {
|
|
||||||
open_access |= O_RDWR;
|
|
||||||
}
|
}
|
||||||
if (desired_access & FileAccess::kFileReadData) {
|
if (desired_access & FileAccess::kFileReadData) {
|
||||||
open_access |= O_RDONLY;
|
open_access |= O_RDONLY;
|
||||||
@@ -202,6 +199,17 @@ std::unique_ptr<FileHandle> FileHandle::OpenExisting(
|
|||||||
if (desired_access & FileAccess::kFileWriteData) {
|
if (desired_access & FileAccess::kFileWriteData) {
|
||||||
open_access |= O_WRONLY;
|
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) {
|
if (desired_access & FileAccess::kFileAppendData) {
|
||||||
open_access |= O_APPEND;
|
open_access |= O_APPEND;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ void UserProfile::WriteProfileIcon(XTileType tile_type,
|
|||||||
|
|
||||||
const X_STATUS result = kernel_state()->file_system()->OpenFile(
|
const X_STATUS result = kernel_state()->file_system()->OpenFile(
|
||||||
nullptr, path, vfs::FileDisposition::kOverwriteIf,
|
nullptr, path, vfs::FileDisposition::kOverwriteIf,
|
||||||
vfs::FileAccess::kGenericAll, false, true, &file, &action);
|
vfs::FileAccess::kGenericWrite, false, true, &file, &action);
|
||||||
|
|
||||||
if (result != X_STATUS_SUCCESS) {
|
if (result != X_STATUS_SUCCESS) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user