Index: /trunk/src/kmk/output.c
===================================================================
--- /trunk/src/kmk/output.c	(revision 3210)
+++ /trunk/src/kmk/output.c	(revision 3211)
@@ -93,4 +93,8 @@
          We want to keep this lock for as little time as possible.  */
       void *sem = acquire_semaphore ();
+# if defined (KBUILD_OS_WINDOWS) || defined (KBUILD_OS_OS2) || defined (KBUILD_OS_DOS)
+      int prev_mode_out = _setmode (fileno (stdout), _O_BINARY);
+      int prev_mode_err = _setmode (fileno (stderr), _O_BINARY);
+# endif
 
 # ifndef KMK /* this drives me bananas. */
@@ -161,4 +165,8 @@
 
       /* Exit the critical section.  */
+# if defined (KBUILD_OS_WINDOWS) || defined (KBUILD_OS_OS2) || defined (KBUILD_OS_DOS)
+      _setmode (fileno (stdout), prev_mode_out);
+      _setmode (fileno (stderr), prev_mode_err);
+# endif
       if (sem)
         release_semaphore (sem);
@@ -404,6 +412,6 @@
     {
       FILE *f = is_err ? stderr : stdout;
-# ifdef KBUILD_OS_WINDOWS
-      /* On windows we need to disable \n -> \r\n converts that is common on
+# if defined (KBUILD_OS_WINDOWS) || defined (KBUILD_OS_OS2) || defined (KBUILD_OS_DOS)
+      /* On DOS platforms we need to disable \n -> \r\n converts that is common on
          standard output/error.  Also optimize for console output. */
       int saved_errno;
@@ -692,5 +700,5 @@
 #endif
 
-#ifdef WINDOWS32
+# if defined (KBUILD_OS_WINDOWS) || defined (KBUILD_OS_OS2) || defined (KBUILD_OS_DOS)
   int prev_mode;
 
@@ -719,5 +727,5 @@
     }
 
-#ifdef WINDOWS32
+# if defined (KBUILD_OS_WINDOWS) || defined (KBUILD_OS_OS2) || defined (KBUILD_OS_DOS)
   /* Switch "to" back to its original mode, so that log messages by
      Make have the same EOL format as without --output-sync.  */
