if perm&S_IWRITE == 0 {
attrs = FILE_ATTRIBUTE_READONLY
}
- if createmode == OPEN_EXISTING && access == GENERIC_READ {
- // Necessary for opening directory handles.
+ if flag&O_WRONLY == 0 && flag&O_RDWR == 0 {
+ // We might be opening or creating a directory.
+ // CreateFile requires FILE_FLAG_BACKUP_SEMANTICS
+ // to work with directories.
attrs |= FILE_FLAG_BACKUP_SEMANTICS
}
if flag&O_SYNC != 0 {
err error
}{
{syscall.O_RDONLY, nil},
- {syscall.O_CREAT, syscall.ERROR_ACCESS_DENIED}, // TODO(qmuntal): should be allowed.
- {syscall.O_RDONLY | syscall.O_CREAT, syscall.ERROR_ACCESS_DENIED}, // TODO(qmuntal): should be allowed.
+ {syscall.O_CREAT, nil},
+ {syscall.O_RDONLY | syscall.O_CREAT, nil},
{syscall.O_RDONLY | syscall.O_TRUNC, syscall.ERROR_ACCESS_DENIED},
{syscall.O_WRONLY | syscall.O_RDWR, syscall.EISDIR},
{syscall.O_WRONLY, syscall.EISDIR},