Permalink
Browse files

patch 8.0.1798: MS-Windows: file considered read-only too often

Problem:    MS-Windows: file considered read-only when another program has
            opened it.
Solution:   Pass file sharing flag to CreateFile(). (Linwei, closes #2860)
  • Loading branch information...
brammool committed May 6, 2018
1 parent 6eddadf commit 5aa9896b2e3330e32dc42a54731cc44ec904acca
Showing with 12 additions and 5 deletions.
  1. +10 −5 src/os_win32.c
  2. +2 −0 src/version.c
@@ -6847,7 +6847,6 @@ default_shell(void)
mch_access(char *n, int p)
{
HANDLE hFile;
DWORD am;
int retval = -1; /* default: fail */
#ifdef FEAT_MBYTE
WCHAR *wn = NULL;
@@ -6931,16 +6930,22 @@ mch_access(char *n, int p)
}
else
{
// Don't consider a file read-only if another process has opened it.
DWORD share_mode = FILE_SHARE_READ | FILE_SHARE_WRITE;
/* Trying to open the file for the required access does ACL, read-only
* network share, and file attribute checks. */
am = ((p & W_OK) ? GENERIC_WRITE : 0)
| ((p & R_OK) ? GENERIC_READ : 0);
DWORD access_mode = ((p & W_OK) ? GENERIC_WRITE : 0)
| ((p & R_OK) ? GENERIC_READ : 0);
#ifdef FEAT_MBYTE
if (wn != NULL)
hFile = CreateFileW(wn, am, 0, NULL, OPEN_EXISTING, 0, NULL);
hFile = CreateFileW(wn, access_mode, share_mode,
NULL, OPEN_EXISTING, 0, NULL);
else
#endif
hFile = CreateFile(n, am, 0, NULL, OPEN_EXISTING, 0, NULL);
hFile = CreateFile(n, access_mode, share_mode,
NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
goto getout;
CloseHandle(hFile);
@@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1798,
/**/
1797,
/**/

0 comments on commit 5aa9896

Please sign in to comment.