[Lldb-commits] [lldb] r346174 - Set stdout/stdin to binary mode on Windows

Nathan Lanza via lldb-commits lldb-commits at lists.llvm.org
Mon Nov 5 14:25:00 PST 2018

Author: lanza
Date: Mon Nov  5 14:25:00 2018
New Revision: 346174

URL: http://llvm.org/viewvc/llvm-project?rev=346174&view=rev
Set stdout/stdin to binary mode on Windows

A file opened in text mode on Windows will have `\n` automatically changed to `13,10` while Darwin and Linux leave it as `10`.

Set the file to binary mode to avoid this automatic conversion so that Darwin, Linux and Windows have equivalent treatment of `\r`.

Reviewers: clayborg, xiaobai

Reviewed By: clayborg

Subscribers: emaste, ki.stfu, mgorny, eraman, JDevlieghere, mgrang

Differential Revision: https://reviews.llvm.org/D52672


Modified: lldb/trunk/tools/lldb-vscode/VSCode.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-vscode/VSCode.cpp?rev=346174&r1=346173&r2=346174&view=diff
--- lldb/trunk/tools/lldb-vscode/VSCode.cpp (original)
+++ lldb/trunk/tools/lldb-vscode/VSCode.cpp Mon Nov  5 14:25:00 2018
@@ -14,6 +14,11 @@
 #include "VSCode.h"
 #include "LLDBUtils.h"
+#if defined(_WIN32)
+#include <io.h>
+#include <fcntl.h>
 using namespace lldb_vscode;
 namespace {
@@ -39,6 +44,13 @@ VSCode::VSCode()
       focus_tid(LLDB_INVALID_THREAD_ID), sent_terminated_event(false),
       stop_at_entry(false) {
   const char *log_file_path = getenv("LLDBVSCODE_LOG");
+#if defined(_WIN32)
+// Windows opens stdout and stdin in text mode which converts \n to 13,10
+// while the value is just 10 on Darwin/Linux. Setting the file mode to binary
+// fixes this.
+  assert(_setmode(fileno(stdout), _O_BINARY));
+  assert(_setmode(fileno(stdin), _O_BINARY));
   if (log_file_path)
     log.reset(new std::ofstream(log_file_path));

More information about the lldb-commits mailing list