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

[PATCH 04/14] Set _O_BINARY as default fmode for both MinGW and MSVC

From
Marius Storm-Olsen <mstormo@gmail.com>
Date
Sep 15, 2009, 13:44 UTC
Message-ID
<badc5d24387c28c752a45f75e8aec6bce64f81fe.1253021728.git.mstormo@gmail.com>
In-Reply-To
<6e6345fb3fbc19b1a2467e33e1633fe9025e547b.1253021728.git.mstormo@gmail.com>

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.

Signed-off-by: Marius Storm-Olsen <mstormo@gmail.com>
---
 compat/mingw.c |    2 --
 compat/mingw.h |    8 ++++++++
 2 files changed, 8 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..384b667 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -229,10 +229,18 @@ void free_environ(char **env);
  * A replacement of main() that ensures that argv[0] has a path
  */
 
+extern int _fmode;
 #define main(c,v) dummy_decl_mingw_main(); \
 static int mingw_main(); \
 int main(int argc, const char **argv) \
 { \
+	_fmode = _O_BINARY; \
+	if (stdin) \
+		_setmode(_fileno(stdin), _O_BINARY); \
+	if (stdout) \
+		_setmode(_fileno(stdout), _O_BINARY); \
+	if (stderr) \
+		_setmode(_fileno(stderr), _O_BINARY); \
 	argv[0] = xstrdup(_pgmptr); \
 	return mingw_main(argc, argv); \
 } \
-- 
1.6.2.1.418.g33d56.dirty
Previous: Marius Storm-OlsenNext: Marius Storm-Olsen
Message 5 of 21 in “Build Git with MSVC”
  1. 00/14 Build Git with MSVCMarius Storm-Olsen, Sep 15, 2009
  2. 01/14 Avoid declaration after statementMarius Storm-Olsen, Sep 15, 2009
  3. 02/14 Add define guards to compat/win32.hMarius Storm-Olsen, Sep 15, 2009
  4. 03/14 Change regerror() declaration from K&R style to ANSI C (C89)Marius Storm-Olsen, Sep 15, 2009
  5. 04/14 Set _O_BINARY as default fmode for both MinGW and MSVCMarius Storm-Olsen, Sep 15, 2009
  6. 05/14 Fix __stdcall placement and function prototypeMarius Storm-Olsen, Sep 15, 2009
  7. 06/14 Test for WIN32 instead of __MINGW32_Marius Storm-Olsen, Sep 15, 2009
  8. 07/14 Add empty header files for MSVC portMarius Storm-Olsen, Sep 15, 2009
  9. 08/14 Add MinGW header files to build git with MSVCMarius Storm-Olsen, Sep 15, 2009
  10. 09/14 Add platform files for MSVC portingMarius Storm-Olsen, Sep 15, 2009
  11. 10/14 Make usage of windows.h lean and meanMarius Storm-Olsen, Sep 15, 2009
  12. 11/14 Define strncasecmp and ftruncate for MSVCMarius Storm-Olsen, Sep 15, 2009
  13. 12/14 Add MSVC to MakefileMarius Storm-Olsen, Sep 15, 2009
  14. 13/14 Add README for MSVC buildMarius Storm-Olsen, Sep 15, 2009
  15. 14/14 Add scripts to generate projects for other buildsystems (MSVC vcproj, QMake)Marius Storm-Olsen, Sep 15, 2009
  16. Thiago FarinaSep 16, 2009
  17. Marius Storm-OlsenSep 16, 2009
  18. Alexey BorzenkovSep 15, 2009
  19. Alexey BorzenkovSep 15, 2009
  20. Alexey BorzenkovSep 15, 2009
  21. Marius Storm-OlsenSep 15, 2009

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.