msvc: define O_ACCMODE
commita822fb853a60c9a13438d6351622b62501de5a32
authorPhilip Oakley <philipoakley@iee.org>
Wed, 19 Jun 2019 21:06:02 +0000 (19 14:06 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 20 Jun 2019 21:03:05 +0000 (20 14:03 -0700)
treec8afd6a6073c82017dfa963e18e7ef222c218863
parent7ca46634bc086568b106e06b0637a0b643f2c78d
msvc: define O_ACCMODE

This constant is not defined in MSVC's headers.

In UCRT's fcntl.h, _O_RDONLY, _O_WRONLY and _O_RDWR are defined as 0, 1
and 2, respectively. Yes, that means that UCRT breaks with the tradition
that O_RDWR == O_RDONLY | O_WRONLY.

It is a perfectly legal way to define those constants, though, therefore
we need to take care of defining O_ACCMODE accordingly.

This is particularly important in order to keep our "open() can set
errno to EISDIR" emulation working: it tests that (flags & O_ACCMODE) is
not identical to O_RDONLY before going on to test specifically whether
the file for which open() reported EACCES is, in fact, a directory.

Signed-off-by: Philip Oakley <philipoakley@iee.org>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/msvc.h