summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler.cc')
-rw-r--r--winsup/cygwin/fhandler.cc17
1 files changed, 13 insertions, 4 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 00e987587..672b434e5 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -620,13 +620,22 @@ fhandler_base::open (int flags, mode_t mode)
create_options = FILE_OPEN_FOR_BACKUP_INTENT | FILE_OPEN_FOR_RECOVERY;
break;
default:
- create_options = 0;
if ((flags & O_ACCMODE) == O_RDONLY)
- access = GENERIC_READ;
+ {
+ access = GENERIC_READ;
+ create_options = FILE_OPEN_FOR_BACKUP_INTENT;
+ }
else if ((flags & O_ACCMODE) == O_WRONLY)
- access = GENERIC_WRITE | FILE_READ_ATTRIBUTES;
+ {
+ access = GENERIC_WRITE | FILE_READ_ATTRIBUTES;
+ create_options = FILE_OPEN_FOR_RECOVERY;
+ }
else
- access = GENERIC_READ | GENERIC_WRITE;
+ {
+ access = GENERIC_READ | GENERIC_WRITE;
+ create_options = FILE_OPEN_FOR_BACKUP_INTENT
+ | FILE_OPEN_FOR_RECOVERY;
+ }
if (flags & O_SYNC)
create_options |= FILE_WRITE_THROUGH;
if (flags & O_DIRECT)