OF_CREATE should force write access in OpenFile.
diff --git a/dlls/kernel/file.c b/dlls/kernel/file.c
index 1d76e4d..5cc868d 100644
--- a/dlls/kernel/file.c
+++ b/dlls/kernel/file.c
@@ -74,17 +74,27 @@
*
* Wrapper for CreateFile that takes OF_* mode flags.
*/
-static HANDLE create_file_OF( LPCSTR path, INT mode, DWORD creation )
+static HANDLE create_file_OF( LPCSTR path, INT mode )
{
- DWORD access, sharing;
+ DWORD access, sharing, creation;
- switch(mode & 0x03)
+ if (mode & OF_CREATE)
{
- case OF_READ: access = GENERIC_READ; break;
- case OF_WRITE: access = GENERIC_WRITE; break;
- case OF_READWRITE: access = GENERIC_READ | GENERIC_WRITE; break;
- default: access = 0; break;
+ creation = CREATE_ALWAYS;
+ access = GENERIC_READ | GENERIC_WRITE;
}
+ else
+ {
+ creation = OPEN_EXISTING;
+ switch(mode & 0x03)
+ {
+ case OF_READ: access = GENERIC_READ; break;
+ case OF_WRITE: access = GENERIC_WRITE; break;
+ case OF_READWRITE: access = GENERIC_READ | GENERIC_WRITE; break;
+ default: access = 0; break;
+ }
+ }
+
switch(mode & 0x70)
{
case OF_SHARE_EXCLUSIVE: sharing = 0; break;
@@ -539,7 +549,7 @@
HFILE WINAPI _lopen( LPCSTR path, INT mode )
{
TRACE("(%s,%04x)\n", debugstr_a(path), mode );
- return (HFILE)create_file_OF( path, mode, OPEN_EXISTING );
+ return (HFILE)create_file_OF( path, mode & ~OF_CREATE );
}
@@ -1944,7 +1954,7 @@
if (mode & OF_CREATE)
{
- if ((handle = create_file_OF( name, mode, CREATE_ALWAYS )) == INVALID_HANDLE_VALUE)
+ if ((handle = create_file_OF( name, mode )) == INVALID_HANDLE_VALUE)
goto error;
}
else