| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.013 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.4.013 |
| Problem: File name buffer too small for utf-8. |
| Solution: Use character count instead of byte count. (Ken Takata) |
| Files: src/os_mswin.c |
| |
| |
| |
| |
| |
| *** 456,462 **** |
| --- 456,469 ---- |
| int |
| mch_isFullName(char_u *fname) |
| { |
| + #ifdef FEAT_MBYTE |
| + /* WinNT and later can use _MAX_PATH wide characters for a pathname, which |
| + * means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is |
| + * UTF-8. */ |
| + char szName[_MAX_PATH * 3 + 1]; |
| + #else |
| char szName[_MAX_PATH + 1]; |
| + #endif |
| |
| /* A name like "d:/foo" and "//server/share" is absolute */ |
| if ((fname[0] && fname[1] == ':' && (fname[2] == '/' || fname[2] == '\\')) |
| |
| *** 464,470 **** |
| return TRUE; |
| |
| /* A name that can't be made absolute probably isn't absolute. */ |
| ! if (mch_FullName(fname, szName, _MAX_PATH, FALSE) == FAIL) |
| return FALSE; |
| |
| return pathcmp(fname, szName, -1) == 0; |
| --- 471,477 ---- |
| return TRUE; |
| |
| /* A name that can't be made absolute probably isn't absolute. */ |
| ! if (mch_FullName(fname, szName, sizeof(szName) - 1, FALSE) == FAIL) |
| return FALSE; |
| |
| return pathcmp(fname, szName, -1) == 0; |
| |
| *** 498,507 **** |
| int |
| vim_stat(const char *name, struct stat *stp) |
| { |
| char buf[_MAX_PATH + 1]; |
| char *p; |
| |
| ! vim_strncpy((char_u *)buf, (char_u *)name, _MAX_PATH); |
| p = buf + strlen(buf); |
| if (p > buf) |
| mb_ptr_back(buf, p); |
| --- 505,521 ---- |
| int |
| vim_stat(const char *name, struct stat *stp) |
| { |
| + #ifdef FEAT_MBYTE |
| + /* WinNT and later can use _MAX_PATH wide characters for a pathname, which |
| + * means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is |
| + * UTF-8. */ |
| + char buf[_MAX_PATH * 3 + 1]; |
| + #else |
| char buf[_MAX_PATH + 1]; |
| + #endif |
| char *p; |
| |
| ! vim_strncpy((char_u *)buf, (char_u *)name, sizeof(buf) - 1); |
| p = buf + strlen(buf); |
| if (p > buf) |
| mb_ptr_back(buf, p); |
| |
| |
| |
| *** 740,741 **** |
| --- 740,743 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 13, |
| /**/ |
| |
| -- |
| hundred-and-one symptoms of being an internet addict: |
| 143. You dream in pallettes of 216 websafe colors. |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |