Merge branch 'ar/mingw-run-external-with-non-ascii-path'
authorJunio C Hamano <gitster@pobox.com>
Mon, 30 Sep 2019 04:19:26 +0000 (13:19 +0900)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Sep 2019 04:19:26 +0000 (13:19 +0900)
Windows update.

* ar/mingw-run-external-with-non-ascii-path:
mingw: fix launching of externals from Unicode paths

1  2 
compat/mingw.c
diff --combined compat/mingw.c
index a3b1e9e3bb099ef1b38e03177a11c9270e123800,a417a3b1ae09397ec702f8b56d13655c2c75a6d3..7a0d619fb6b59641191d819d2c43d4ced8b93df2
@@@ -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;
        }
                        continue;
  
                size = wcslen(array[i]) + 1;
 -              memcpy(p, array[i], size * sizeof(*p));
 +              COPY_ARRAY(p, array[i], size);
                p += size;
        }
        *p = L'\0';