# HG changeset patch # User Bram Moolenaar # Date 1392134760 -3600 # Node ID 6b69d8dde19e32909f4ee3a6337e6a2ecfbb6f72 # Parent 5a7b07e0e61e8dbf77ad529ce3942bde847123d0 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) diff --git a/src/os_mswin.c b/src/os_mswin.c --- 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). */ diff --git a/src/os_win32.c b/src/os_win32.c --- 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 175, +/**/ 174, /**/ 173,