Files
git/compat/msvc.h
Philip Oakley a2074789f1 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>
2018-08-28 16:18:12 -04:00

34 lines
707 B
C

#ifndef __MSVC__HEAD
#define __MSVC__HEAD
#include <direct.h>
#include <process.h>
#include <malloc.h>
#include <io.h>
/* porting function */
#define inline __inline
#define __inline__ __inline
#define __attribute__(x)
#define strncasecmp _strnicmp
#define ftruncate _chsize
#define strtoull _strtoui64
#define strtoll _strtoi64
static __inline int strcasecmp (const char *s1, const char *s2)
{
int size1 = strlen(s1);
int sisz2 = strlen(s2);
return _strnicmp(s1, s2, sisz2 > size1 ? sisz2 : size1);
}
#undef ERROR
typedef int sigset_t;
/* open for reading, writing, or both (not in fcntl.h) */
#define O_ACCMODE (_O_RDONLY | _O_WRONLY | _O_RDWR)
#include "compat/mingw.h"
#endif