git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 05/19] mingw: prepare the TMPDIR environment variable for shell scripts

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jan 26, 2016, 08:38 UTC
Message-ID
<alpine.DEB.2.20.1601260934040.2964@virtualbox>
In-Reply-To
<CAPig+cTF0r1Z_4wre57pZHvPXT00TvhYTKmdHfDfTBZzMwdo+A@mail.gmail.com>
Hi Eric,
On Sun, 24 Jan 2016, Eric Sunshine wrote:
Show 37 quoted lines
> On Sun, Jan 24, 2016 at 10:43 AM, Johannes Schindelin
> <johannes.schindelin@gmx.de> wrote:
> > 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>
> > ---
> > diff --git a/compat/mingw.c b/compat/mingw.c
> > @@ -2042,13 +2042,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");
> > +               }
> > +       }
> 
> Let me see if I understand this...
> 
> In the original code, if TMPDIR was *not* set, it would assign the
> value of TMP or TEMP to TEMPDIR.
> 
> The new code, however, checks TMP and TEMP only if TMPDIR is *already*
> set. Am I reading this correctly? Is this revised behavior correct?

Gaaah! When copy-pasting, I culled the exclamation point... Will be fixed in v2 (see https://github.com/dscho/git/commit/909b0a413)

Show 14 quoted lines
> > +       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 = '/';
> 
> This transformation is performed on whatever memory was returned by
> getenv(). It is also performed after setenv(), so presumably setenv()
> isn't making a copy of the incoming string.
Actually, I made sure to re-getenv() after setenv():
	https://github.com/dscho/git/blob/909b0a413/compat/mingw.c#L2053

Thanks! Dscho

Previous: Eric SunshineNext: Johannes Schindelin
Message 11 of 113 in “Let Git's tests pass on Windows”
  1. 00/19 Let Git's tests pass on WindowsJohannes Schindelin, Jan 24, 2016
  2. 01/19 mingw: let's use gettext with MSYS2Johannes Schindelin, Jan 24, 2016
  3. Junio C HamanoJan 25, 2016
  4. Johannes SchindelinJan 25, 2016
  5. Junio C HamanoJan 25, 2016
  6. 02/19 mingw: do not trust MSYS2's MinGW gettext.shJohannes Schindelin, Jan 24, 2016
  7. 03/19 Git.pm: stop assuming that absolute paths start with a slashJohannes Schindelin, Jan 24, 2016
  8. 04/19 mingw: factor out Windows specific environment setupJohannes Schindelin, Jan 24, 2016
  9. 05/19 mingw: prepare the TMPDIR environment variable for shell scriptsJohannes Schindelin, Jan 24, 2016
  10. Eric SunshineJan 25, 2016
  11. Johannes SchindelinJan 26, 2016
  12. 06/19 mingw: try to delete target directory before renamingJohannes Schindelin, Jan 24, 2016
  13. Philip OakleyJan 24, 2016
  14. Johannes SchindelinJan 25, 2016
  15. Junio C HamanoJan 25, 2016
  16. Johannes SchindelinJan 26, 2016
  17. 07/19 mingw: let lstat() fail with errno == ENOTDIR when appropriateJohannes Schindelin, Jan 24, 2016
  18. 08/19 mingw: fix t5601-clone.shJohannes Schindelin, Jan 24, 2016
  19. 09/19 mingw: accomodate t0060-path-utils for MSYS2Johannes Schindelin, Jan 24, 2016
  20. Johannes SixtJan 24, 2016
  21. Johannes SchindelinJan 25, 2016
  22. 10/19 mingw: disable mkfifo-based testsJohannes Schindelin, Jan 24, 2016
  23. 11/19 tests: turn off git-daemon tests if FIFOs are not availableJohannes Schindelin, Jan 24, 2016
  24. 12/19 mingw: do not use symlinks with SVN in t9100Johannes Schindelin, Jan 24, 2016
  25. Junio C HamanoJan 25, 2016
  26. Johannes SchindelinJan 25, 2016
  27. 13/19 mingw: outsmart MSYS2's path substitution in t1508Johannes Schindelin, Jan 24, 2016
  28. Junio C HamanoJan 25, 2016
  29. Eric SunshineJan 25, 2016
  30. Junio C HamanoJan 25, 2016
  31. Johannes SchindelinJan 26, 2016
  32. Johannes SchindelinJan 25, 2016
  33. Johannes SchindelinJan 25, 2016
  34. 14/19 mingw: fix t9700's assumption about directory separatorsJohannes Schindelin, Jan 24, 2016
  35. 15/19 mingw: work around pwd issues in the testsJohannes Schindelin, Jan 24, 2016
  36. 16/19 mingw: avoid absolute path in t0008Johannes Schindelin, Jan 24, 2016
  37. Junio C HamanoJan 25, 2016
  38. Johannes SchindelinJan 25, 2016
  39. Ray DonnellyJan 25, 2016
  40. Junio C HamanoJan 25, 2016
  41. Johannes SchindelinJan 26, 2016
  42. 17/19 mingw: fix git-svn tests that expect chmod to workJohannes Schindelin, Jan 24, 2016
  43. Junio C HamanoJan 25, 2016
  44. Johannes SchindelinJan 26, 2016
  45. Junio C HamanoJan 26, 2016
  46. 18/19 mingw: skip a couple of git-svn tests that cannot pass on WindowsJohannes Schindelin, Jan 24, 2016
  47. Junio C HamanoJan 25, 2016
  48. Johannes SchindelinJan 26, 2016
  49. 19/19 mingw: do not bother to test funny file namesJohannes Schindelin, Jan 24, 2016
  50. Junio C HamanoJan 25, 2016
  51. Johannes SchindelinJan 25, 2016
  52. 00/19 Let Git's tests pass on WindowsJohannes Schindelin, Jan 26, 2016
  53. 01/19 mingw: let's use gettext with MSYS2Johannes Schindelin, Jan 26, 2016
  54. 02/19 mingw: do not trust MSYS2's MinGW gettext.shJohannes Schindelin, Jan 26, 2016
  55. 03/19 Git.pm: stop assuming that absolute paths start with a slashJohannes Schindelin, Jan 26, 2016
  56. 04/19 mingw: factor out Windows specific environment setupJohannes Schindelin, Jan 26, 2016
  57. 05/19 mingw: prepare the TMPDIR environment variable for shell scriptsJohannes Schindelin, Jan 26, 2016
  58. 06/19 mingw: try to delete target directory before renamingJohannes Schindelin, Jan 26, 2016
  59. 07/19 mingw: let lstat() fail with errno == ENOTDIR when appropriateJohannes Schindelin, Jan 26, 2016
  60. 08/19 mingw: fix t5601-clone.shJohannes Schindelin, Jan 26, 2016
  61. 09/19 mingw: accomodate t0060-path-utils for MSYS2Johannes Schindelin, Jan 26, 2016
  62. 10/19 mingw: disable mkfifo-based testsJohannes Schindelin, Jan 26, 2016
  63. 11/19 tests: turn off git-daemon tests if FIFOs are not availableJohannes Schindelin, Jan 26, 2016
  64. 12/19 mingw: skip test in t1508 that fails due to path conversionJohannes Schindelin, Jan 26, 2016
  65. Junio C HamanoJan 26, 2016
  66. Johannes SchindelinJan 27, 2016
  67. Junio C HamanoJan 27, 2016
  68. Johannes SchindelinJan 28, 2016
  69. 13/19 mingw: fix t9700's assumption about directory separatorsJohannes Schindelin, Jan 26, 2016
  70. 14/19 mingw: work around pwd issues in the testsJohannes Schindelin, Jan 26, 2016
  71. 15/19 Avoid absolute path in t0008Johannes Schindelin, Jan 26, 2016
  72. 16/19 mingw: mark t9100's test cases with appropriate prereqsJohannes Schindelin, Jan 26, 2016
  73. Junio C HamanoJan 26, 2016
  74. Johannes SchindelinJan 27, 2016
  75. 17/19 mingw: avoid illegal filename in t9118Johannes Schindelin, Jan 26, 2016
  76. 18/19 mingw: handle the missing POSIXPERM prereq in t9124Johannes Schindelin, Jan 26, 2016
  77. Junio C HamanoJan 26, 2016
  78. Johannes SchindelinJan 27, 2016
  79. 19/19 mingw: do not bother to test funny file namesJohannes Schindelin, Jan 26, 2016
  80. Eric SunshineJan 26, 2016
  81. Junio C HamanoJan 26, 2016
  82. Johannes SchindelinJan 27, 2016
  83. Junio C HamanoJan 26, 2016
  84. Johannes SchindelinJan 27, 2016
  85. Junio C HamanoJan 27, 2016
  86. 00/20 Let Git's tests pass on WindowsJohannes Schindelin, Jan 27, 2016
  87. 01/20 mingw: let's use gettext with MSYS2Johannes Schindelin, Jan 27, 2016
  88. 02/20 mingw: do not trust MSYS2's MinGW gettext.shJohannes Schindelin, Jan 27, 2016
  89. 03/20 Git.pm: stop assuming that absolute paths start with a slashJohannes Schindelin, Jan 27, 2016
  90. 04/20 mingw: factor out Windows specific environment setupJohannes Schindelin, Jan 27, 2016
  91. 05/20 mingw: prepare the TMPDIR environment variable for shell scriptsJohannes Schindelin, Jan 27, 2016
  92. 06/20 mingw: try to delete target directory before renamingJohannes Schindelin, Jan 27, 2016
  93. 07/20 mingw: let lstat() fail with errno == ENOTDIR when appropriateJohannes Schindelin, Jan 27, 2016
  94. 08/20 mingw: fix t5601-clone.shJohannes Schindelin, Jan 27, 2016
  95. 09/20 mingw: accomodate t0060-path-utils for MSYS2Johannes Schindelin, Jan 27, 2016
  96. 10/20 mingw: disable mkfifo-based testsJohannes Schindelin, Jan 27, 2016
  97. 11/20 tests: turn off git-daemon tests if FIFOs are not availableJohannes Schindelin, Jan 27, 2016
  98. Eric SunshineJan 28, 2016
  99. Johannes SchindelinJan 28, 2016
  100. Junio C HamanoJan 28, 2016
  101. 12/20 mingw: skip test in t1508 that fails due to path conversionJohannes Schindelin, Jan 27, 2016
  102. 13/20 mingw: fix t9700's assumption about directory separatorsJohannes Schindelin, Jan 27, 2016
  103. 14/20 mingw: work around pwd issues in the testsJohannes Schindelin, Jan 27, 2016
  104. 15/20 Avoid absolute path in t0008Johannes Schindelin, Jan 27, 2016
  105. 16/20 mingw: mark t9100's test cases with appropriate prereqsJohannes Schindelin, Jan 27, 2016
  106. Johannes SchindelinJan 27, 2016
  107. 17/20 mingw: avoid illegal filename in t9118Johannes Schindelin, Jan 27, 2016
  108. 18/20 mingw: handle the missing POSIXPERM prereq in t9124Johannes Schindelin, Jan 27, 2016
  109. 19/20 mingw: skip a test in t9130 that cannot pass on WindowsJohannes Schindelin, Jan 27, 2016
  110. 20/20 mingw: do not bother to test funny file namesJohannes Schindelin, Jan 27, 2016
  111. Eric SunshineJan 28, 2016
  112. Johannes SchindelinJan 28, 2016
  113. Junio C HamanoJan 28, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.