]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.015 v7.4.015
authorBram Moolenaar <Bram@vim.org>
Fri, 30 Aug 2013 15:11:33 +0000 (17:11 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 30 Aug 2013 15:11:33 +0000 (17:11 +0200)
Problem:    MS-Windows: Detecting node type does not work for multi-byte
            characters.
Solution:   Use wide character function when needed. (Ken Takata)

src/os_win32.c
src/version.c

index 4013353cf3b74d6d75e11de2d58330abcd5d4c70..33a72565aac712784ebf443dc1f8b09cd4f2dd89 100644 (file)
@@ -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;
 
index e8b935966a8bfb3456c9a138efc5d5bb1c4d9a14..fb145933106d30577f5a267b1849d997c39f3415 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    15,
 /**/
     14,
 /**/