From: Junio C Hamano Date: Mon, 30 Sep 2019 04:19:26 +0000 (+0900) Subject: Merge branch 'ar/mingw-run-external-with-non-ascii-path' X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/6f21347f118f6c0c49d10485aa4bc1daaddee303?ds=inline;hp=-c Merge branch 'ar/mingw-run-external-with-non-ascii-path' Windows update. * ar/mingw-run-external-with-non-ascii-path: mingw: fix launching of externals from Unicode paths --- 6f21347f118f6c0c49d10485aa4bc1daaddee303 diff --combined compat/mingw.c index a3b1e9e3bb,a417a3b1ae..7a0d619fb6 --- a/compat/mingw.c +++ b/compat/mingw.c @@@ -1161,14 -1161,21 +1161,21 @@@ static char *lookup_prog(const char *di int isexe, int exe_only) { char path[MAX_PATH]; + wchar_t wpath[MAX_PATH]; snprintf(path, sizeof(path), "%.*s\\%s.exe", dirlen, dir, cmd); - if (!isexe && access(path, F_OK) == 0) + if (xutftowcs_path(wpath, path) < 0) + return NULL; + + if (!isexe && _waccess(wpath, F_OK) == 0) return xstrdup(path); - path[strlen(path)-4] = '\0'; - if ((!exe_only || isexe) && access(path, F_OK) == 0) - if (!(GetFileAttributes(path) & FILE_ATTRIBUTE_DIRECTORY)) + wpath[wcslen(wpath)-4] = '\0'; + if ((!exe_only || isexe) && _waccess(wpath, F_OK) == 0) { + if (!(GetFileAttributesW(wpath) & FILE_ATTRIBUTE_DIRECTORY)) { + path[strlen(path)-4] = '\0'; return xstrdup(path); + } + } return NULL; } @@@ -1265,7 -1272,7 +1272,7 @@@ static wchar_t *make_environment_block( } ALLOC_ARRAY(result, size); - memcpy(result, wenv, size * sizeof(*wenv)); + COPY_ARRAY(result, wenv, size); FreeEnvironmentStringsW(wenv); return result; } @@@ -1309,7 -1316,7 +1316,7 @@@ continue; size = wcslen(array[i]) + 1; - memcpy(p, array[i], size * sizeof(*p)); + COPY_ARRAY(p, array[i], size); p += size; } *p = L'\0';