# HG changeset patch # User Bram Moolenaar # Date 1377875493 -7200 # Node ID a7478f9f2551e95bff138cd658f7a86ced804ab1 # Parent cfffb8ed42ca91b89e9a6d077b81cd8565dc7d1e updated for version 7.4.015 Problem: MS-Windows: Detecting node type does not work for multi-byte characters. Solution: Use wide character function when needed. (Ken Takata) diff --git a/src/os_win32.c b/src/os_win32.c --- a/src/os_win32.c +++ b/src/os_win32.c @@ -3107,6 +3107,9 @@ mch_nodetype(char_u *name) { HANDLE hFile; int type; +#ifdef FEAT_MBYTE + WCHAR *wn = NULL; +#endif /* We can't open a file with a name "\\.\con" or "\\.\prn" and trying to * read from it later will cause Vim to hang. Thus return NODE_WRITABLE @@ -3114,14 +3117,41 @@ mch_nodetype(char_u *name) if (STRNCMP(name, "\\\\.\\", 4) == 0) return NODE_WRITABLE; - hFile = CreateFile(name, /* file name */ - GENERIC_WRITE, /* access mode */ - 0, /* share mode */ - NULL, /* security descriptor */ - OPEN_EXISTING, /* creation disposition */ - 0, /* file attributes */ - NULL); /* handle to template file */ - +#ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { + wn = enc_to_utf16(name, NULL); + if (wn != NULL) + { + hFile = CreateFileW(wn, /* file name */ + GENERIC_WRITE, /* access mode */ + 0, /* share mode */ + NULL, /* security descriptor */ + OPEN_EXISTING, /* creation disposition */ + 0, /* file attributes */ + NULL); /* handle to template file */ + if (hFile == INVALID_HANDLE_VALUE + && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) + { + /* Retry with non-wide function (for Windows 98). */ + vim_free(wn); + wn = NULL; + } + } + } + if (wn == NULL) +#endif + hFile = CreateFile(name, /* file name */ + GENERIC_WRITE, /* access mode */ + 0, /* share mode */ + NULL, /* security descriptor */ + OPEN_EXISTING, /* creation disposition */ + 0, /* file attributes */ + NULL); /* handle to template file */ + +#ifdef FEAT_MBYTE + vim_free(wn); +#endif if (hFile == INVALID_HANDLE_VALUE) return NODE_NORMAL; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 15, +/**/ 14, /**/ 13,