]> git.cworth.org Git - apitrace/commitdiff
Ensure stdin/stdout is in binary mode on windows when pickling.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 27 Jan 2012 14:28:06 +0000 (14:28 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 27 Jan 2012 14:28:06 +0000 (14:28 +0000)
cli/cli_pickle.cpp
scripts/unpickle.py

index 460a3c3c516dac018bbac8893cd41ed7060e4048..f435e2072316b8e459e94cba948cb4fe6bba6c7a 100644 (file)
 
 #include <string.h>
 
+#ifdef _WIN32
+#include <fcntl.h>
+#include <io.h>
+#endif
+
 #include "pickle.hpp"
 
 #include "cli.hpp"
@@ -183,7 +188,15 @@ command(int argc, char *argv[])
             return 1;
         }
     }
-        
+
+#ifdef _WIN32
+    // Set stdout in binary mode
+    fflush(stdout);
+    int mode = _setmode(_fileno(stdout), _O_BINARY);
+    if (mode == -1) {
+        std::cerr << "warning: failed to set stdout in binary mode\n";
+    }
+#endif
 
     for (; i < argc; ++i) {
         trace::Parser parser;
@@ -205,6 +218,14 @@ command(int argc, char *argv[])
         }
     }
 
+#ifdef _WIN32
+    std::cout.flush();
+    fflush(stdout);
+    if (mode != -1) {
+        _setmode(_fileno(stdout), mode);
+    }
+#endif
+
     return 0;
 }
 
index efb860804389ad7e5ccfae0a89171673c7bc1798..a3c274c8f593e34750be07905031bc6628fba7f9 100755 (executable)
@@ -52,6 +52,15 @@ def main():
     if args:
         optparser.error('unexpected arguments')
 
+    # Change stdin to binary mode
+    try:
+        import msvcrt
+    except ImportError:
+        pass
+    else:
+        import os
+        msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
+
     calls = 0
     startTime = time.time()
     while True: