version 1.3.3
diff --git a/src/line_printer.h b/src/line_printer.h
index c292464..aea2817 100644
--- a/src/line_printer.h
+++ b/src/line_printer.h
@@ -20,8 +20,7 @@
 
 /// Prints lines of text, possibly overprinting previously printed lines
 /// if the terminal supports it.
-class LinePrinter {
- public:
+struct LinePrinter {
   LinePrinter();
 
   bool is_smart_terminal() const { return smart_terminal_; }
diff --git a/src/msvc_helper_main-win32.cc b/src/msvc_helper_main-win32.cc
index 647bb86..8a0479c 100644
--- a/src/msvc_helper_main-win32.cc
+++ b/src/msvc_helper_main-win32.cc
@@ -14,6 +14,8 @@
 
 #include "msvc_helper.h"
 
+#include <fcntl.h>
+#include <io.h>
 #include <stdio.h>
 #include <windows.h>
 
@@ -123,6 +125,10 @@
     output = parser.Parse(output);
     WriteDepFileOrDie(output_filename, parser);
   }
+
+  // CLWrapper's output already as \r\n line endings, make sure the C runtime
+  // doesn't expand this to \r\r\n.
+  _setmode(_fileno(stdout), _O_BINARY);
   printf("%s", output.c_str());
 
   return exit_code;
diff --git a/src/ninja_test.cc b/src/ninja_test.cc
index 31754f2..989ea5c 100644
--- a/src/ninja_test.cc
+++ b/src/ninja_test.cc
@@ -31,8 +31,7 @@
 }
 
 /// A test result printer that's less wordy than gtest's default.
-class LaconicPrinter : public testing::EmptyTestEventListener {
- public:
+struct LaconicPrinter : public testing::EmptyTestEventListener {
   LaconicPrinter() : tests_started_(0), test_count_(0), iteration_(0) {}
   virtual void OnTestProgramStart(const testing::UnitTest& unit_test) {
     test_count_ = unit_test.test_to_run_count();
diff --git a/src/version.cc b/src/version.cc
index a970537..54818a0 100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -18,7 +18,7 @@
 
 #include "util.h"
 
-const char* kNinjaVersion = "1.3.2";
+const char* kNinjaVersion = "1.3.3";
 
 void ParseVersion(const string& version, int* major, int* minor) {
   size_t end = version.find('.');