mingw: prepare the TMPDIR environment variable for shell scripts
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Tue, 26 Jan 2016 14:34:43 +0000 (15:34 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 26 Jan 2016 21:42:59 +0000 (13:42 -0800)
When shell scripts access a $TMPDIR variable containing backslashes,
they will be mistaken for escape characters. Let's not let that happen
by converting them to forward slashes.

This partially fixes t7800 with MSYS2.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/mingw.c
index b592000f58f2426a4cdea6922479b4363a2a4ec9..717931e35920c3546df9f68148cbe20050d3f004 100644 (file)
@@ -2046,13 +2046,28 @@ int xwcstoutf(char *utf, const wchar_t *wcs, size_t utflen)
 
 static void setup_windows_environment()
 {
+       char *tmp = getenv("TMPDIR");
+
        /* on Windows it is TMP and TEMP */
-       if (!getenv("TMPDIR")) {
-               const char *tmp = getenv("TMP");
-               if (!tmp)
+       if (!tmp) {
+               if (!(tmp = getenv("TMP")))
                        tmp = getenv("TEMP");
-               if (tmp)
+               if (tmp) {
                        setenv("TMPDIR", tmp, 1);
+                       tmp = getenv("TMPDIR");
+               }
+       }
+
+       if (tmp) {
+               /*
+                * Convert all dir separators to forward slashes,
+                * to help shell commands called from the Git
+                * executable (by not mistaking the dir separators
+                * for escape characters).
+                */
+               for (; *tmp; tmp++)
+                       if (*tmp == '\\')
+                               *tmp = '/';
        }
 
        /* simulate TERM to enable auto-color (see color.c) */