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@xxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html