When 'encoding' is changed from default codepage, mkdir() doesn't work
for multi-byte name.

  :set encoding=utf-8
  :call mkdir("\u00a1")
  :echo isdirectory("\u00a1")
  0
  (directory with broken name was created)

Please check the following patch.  Changed to use _wmkdir().


diff -r 987cd9455925 src/os_win32.c
--- a/src/os_win32.c    Mon Apr 11 21:35:11 2011 +0200
+++ b/src/os_win32.c    Fri Apr 22 22:41:33 2011 +0900
@@ -2639,6 +2639,26 @@
     return (f & FILE_ATTRIBUTE_DIRECTORY) != 0;
 }

+    int
+mch_mkdir(char_u *name)
+{
+#ifdef FEAT_MBYTE
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
+       WCHAR   *p;
+       int     retval;
+
+       p = enc_to_utf16(name, NULL);
+       if (p == NULL)
+           return -1;
+       retval = _wmkdir(p);
+       vim_free(p);
+       return retval;
+    }
+#endif
+    return _mkdir(name);
+}
+
 /*
  * Return TRUE if file "fname" has more than one link.
  */
diff -r 987cd9455925 src/os_win32.h
--- a/src/os_win32.h    Mon Apr 11 21:35:11 2011 +0200
+++ b/src/os_win32.h    Fri Apr 22 22:41:33 2011 +0900
@@ -188,8 +188,4 @@

 #define mch_setenv(name, val, x) setenv(name, val, x)
 #define mch_getenv(x) (char_u *)getenv((char *)(x))
-#ifdef __BORLANDC__
-# define vim_mkdir(x, y) mkdir(x)
-#else
-# define vim_mkdir(x, y) _mkdir(x)
-#endif
+#define vim_mkdir(x, y) mch_mkdir(x)
diff -r 987cd9455925 src/proto/os_win32.pro
--- a/src/proto/os_win32.pro    Mon Apr 11 21:35:11 2011 +0200
+++ b/src/proto/os_win32.pro    Fri Apr 22 22:41:33 2011 +0900
@@ -20,6 +20,7 @@
 int mch_setperm __ARGS((char_u *name, long perm));
 void mch_hide __ARGS((char_u *name));
 int mch_isdir __ARGS((char_u *name));
+int mch_mkdir __ARGS((char_u *name));
 int mch_is_linked __ARGS((char_u *fname));
 int mch_writable __ARGS((char_u *name));
 int mch_can_exe __ARGS((char_u *name));


--
Yukihiro Nakadaira - [email protected]

--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui