MinGW set the _CRT_fmode to set both the default fmode and _O_BINARY on stdin/stdout/stderr. Rather use the main() define in mingw.h to set this for both MinGW and MSVC. This will ensure that a MinGW and MSVC build will handle input and output identically. Alexey Borzenkov: Include git-compat-util.h from the test-genrandom.c so that the application also will use the main() define, and thus the stdout mode is set correctly and generated data stays the same. Johannes Sixt: Before, since the test-genrandom application would link against libgit.a, the MinGW process initialization code would pick up the definition of _CRT_fmode from mingw.c that is initialized to _O_BINARY. After this patch, however, the _CRT_fmode symbol is no longer present in libgit.a, so MinGWs process initialization code will not set the correct std(in|out|err) mode. So, the include is needed to override main() and explicitly set the mode. Signed-off-by: Marius Storm-Olsen <mstormo@xxxxxxxxx> --- compat/mingw.c | 2 -- compat/mingw.h | 5 +++++ test-genrandom.c | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/compat/mingw.c b/compat/mingw.c index 5478b74..5a8fae8 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -3,8 +3,6 @@ #include <conio.h> #include "../strbuf.h" -unsigned int _CRT_fmode = _O_BINARY; - static int err_win_to_posix(DWORD winerr) { int error = ENOSYS; diff --git a/compat/mingw.h b/compat/mingw.h index c43917c..bcd23b0 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -227,12 +227,17 @@ void free_environ(char **env); /* * A replacement of main() that ensures that argv[0] has a path + * and that default fmode and std(in|out|err) are in binary mode */ #define main(c,v) dummy_decl_mingw_main(); \ static int mingw_main(); \ int main(int argc, const char **argv) \ { \ + _fmode = _O_BINARY; \ + _setmode(_fileno(stdin), _O_BINARY); \ + _setmode(_fileno(stdout), _O_BINARY); \ + _setmode(_fileno(stderr), _O_BINARY); \ argv[0] = xstrdup(_pgmptr); \ return mingw_main(argc, argv); \ } \ diff --git a/test-genrandom.c b/test-genrandom.c index 8ad276d..5849599 100644 --- a/test-genrandom.c +++ b/test-genrandom.c @@ -6,6 +6,7 @@ #include <stdio.h> #include <stdlib.h> +#include "git-compat-util.h" int main(int argc, char *argv[]) { -- 1.6.2.1.418.g33d56.dirty -- 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