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

[PATCH 1/2] MSVC: Do not close stdout to prevent a crash

From
Vincent van Ravesteijn <vfr@lyx.org>
Date
Nov 19, 2011, 13:45 UTC
Message-ID
<1321710345-2299-1-git-send-email-vfr@lyx.org>

When compiled with MSVC, git crashes on Windows when calling fstat(stdout) when stdout is closed. fstat is being called at the end of run_builtin and this will thus be a problem for builtin command that close stdout. This happens for 'format-patch' which closes stdout after a call to freopen which directs stdout to the format patch file.

To prevent the crash and to prevent git from writing cruft into the patch file, we do not close stdout, but redirect it to "nul" instead.

Signed-off-by: Vincent van Ravesteijn <vfr@lyx.org>
---
 compat/mingw.c |    8 ++++++++
 compat/mingw.h |    3 +++
 2 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/compat/mingw.c b/compat/mingw.c
index efdc703..8943df5 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -319,6 +319,14 @@ ssize_t mingw_write(int fd, const void *buf, size_t count)
 	return write(fd, buf, min(count, 31 * 1024 * 1024));
 }
 
+#undef fclose
+int mingw_fclose (FILE *stream)
+{
+	if (fileno(stream) == 1 && freopen("nul", "w", stream))
+		return 0;
+	return fclose(stream);
+}
+
 #undef fopen
 FILE *mingw_fopen (const char *filename, const char *otype)
 {
diff --git a/compat/mingw.h b/compat/mingw.h
index ff18401..80a6015 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -179,6 +179,9 @@ int mingw_open (const char *filename, int oflags, ...);
 ssize_t mingw_write(int fd, const void *buf, size_t count);
 #define write mingw_write
 
+int mingw_fclose(FILE *stream);
+#define fclose mingw_fclose
+
 FILE *mingw_fopen (const char *filename, const char *otype);
 #define fopen mingw_fopen
 
-- 
1.7.4.1
Next: Vincent van Ravesteijn
Message 1 of 14 in “MSVC: Do not close stdout to prevent a crash”
  1. 1/2 MSVC: Do not close stdout to prevent a crashVincent van Ravesteijn, Nov 19, 2011
  2. 2/2 MSVC: Use _putenv instead of putenv to prevent a crashVincent van Ravesteijn, Nov 19, 2011
  3. Andreas SchwabNov 19, 2011
  4. Junio C HamanoNov 19, 2011
  5. Andreas SchwabNov 19, 2011
  6. Junio C HamanoNov 20, 2011
  7. Andreas SchwabNov 20, 2011
  8. Johannes SixtNov 20, 2011
  9. Junio C HamanoNov 20, 2011
  10. Vincent van RavesteijnNov 19, 2011
  11. Johannes SixtNov 19, 2011
  12. Vincent van RavesteijnNov 22, 2011
  13. Johannes SixtNov 22, 2011
  14. Vincent van RavesteijnNov 22, 2011

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.