Mercurial > vim
changeset 5657:6b69d8dde19e v7.4.175
updated for version 7.4.175
Problem: When a wide library function fails, falling back to the non-wide
function may do the wrong thing.
Solution: Check the platform, when the wide function is supported don't fall
back to the non-wide function. (Ken Takata)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 11 Feb 2014 17:06:00 +0100 |
parents | 5a7b07e0e61e |
children | 71c900ce7632 |
files | src/os_mswin.c src/os_win32.c src/version.c |
diffstat | 3 files changed, 15 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -648,7 +648,7 @@ vim_stat(const char *name, struct stat * { n = wstat_symlink_aware(wp, (struct _stat *)stp); vim_free(wp); - if (n >= 0) + if (n >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT) return n; /* Retry with non-wide function (for Windows 98). Can't use * GetLastError() here and it's unclear what errno gets set to if @@ -815,8 +815,8 @@ mch_chdir(char *path) { n = _wchdir(p); vim_free(p); - if (n == 0) - return 0; + if (n == 0 || g_PlatformId == VER_PLATFORM_WIN32_NT) + return n; /* Retry with non-wide function (for Windows 98). */ } } @@ -1942,8 +1942,7 @@ mch_resolve_shortcut(char_u *fname) shortcut_errorw: vim_free(p); - if (hr == S_OK) - goto shortcut_end; + goto shortcut_end; } } /* Retry with non-wide function (for Windows 98). */
--- a/src/os_win32.c +++ b/src/os_win32.c @@ -2877,6 +2877,8 @@ mch_get_user_name( return OK; } } + else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) + return FAIL; /* Retry with non-wide function (for Windows 98). */ } #endif @@ -2917,6 +2919,8 @@ mch_get_host_name( return; } } + else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) + return; /* Retry with non-wide function (for Windows 98). */ } #endif @@ -2966,6 +2970,8 @@ mch_dirname( return OK; } } + else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) + return FAIL; /* Retry with non-wide function (for Windows 98). */ } #endif @@ -3006,7 +3012,7 @@ mch_setperm(char_u *name, long perm) { n = _wchmod(p, perm); vim_free(p); - if (n == -1 && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) + if (n == -1 && g_PlatformId == VER_PLATFORM_WIN32_NT) return FAIL; /* Retry with non-wide function (for Windows 98). */ } @@ -6048,7 +6054,7 @@ mch_open(char *name, int flags, int mode { f = _wopen(wn, flags, mode); vim_free(wn); - if (f >= 0) + if (f >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT) return f; /* Retry with non-wide function (for Windows 98). Can't use * GetLastError() here and it's unclear what errno gets set to if @@ -6099,7 +6105,7 @@ mch_fopen(char *name, char *mode) _set_fmode(oldMode); # endif - if (f != NULL) + if (f != NULL || g_PlatformId == VER_PLATFORM_WIN32_NT) return f; /* Retry with non-wide function (for Windows 98). Can't use * GetLastError() here and it's unclear what errno gets set to if