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