]> granicus.if.org Git - clang/commitdiff
Respect the COLUMNS environment variable for word-wrapping (so we get
authorDouglas Gregor <dgregor@apple.com>
Sun, 3 May 2009 03:52:38 +0000 (03:52 +0000)
committerDouglas Gregor <dgregor@apple.com>
Sun, 3 May 2009 03:52:38 +0000 (03:52 +0000)
word-wrapping by default in Emacs; yay!). Thanks, Daniel.

Use LLVM's System layer rather than calling isatty() directly.

Fix a thinko in printing the indentation string that was causing some
weird output.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70654 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/TextDiagnosticPrinter.cpp
tools/clang-cc/clang-cc.cpp

index 017ead43e4562daf62e1828d6fca509c68c848b1..b8c10b536baba4fccde247291089c304bd4bcc3b 100644 (file)
@@ -570,7 +570,8 @@ static bool PrintWordWrapped(llvm::raw_ostream &OS,
 
     // This word does not fit on the current line, so wrap to the next
     // line.
-    OS << '\n' << IndentStr.begin();
+    OS << '\n';
+    OS.write(&IndentStr[0], Indentation);
     OS.write(&Str[WordStart], WordLength);
     Column = Indentation + WordLength;
     Wrapped = true;
index e26a1d9b3f33d90b28b3c3882105a7089a4262f3..2ef1087e5cdd03b431f30332023761bed60bbdd7 100644 (file)
 #include "llvm/Support/Timer.h"
 #include "llvm/System/Host.h"
 #include "llvm/System/Path.h"
+#include "llvm/System/Process.h"
 #include "llvm/System/Signals.h"
 #include <cstdlib>
-#if HAVE_UNISTD_H
-#  include <unistd.h>
-#  include <sys/ioctl.h>
+#if HAVE_SYS_TYPES_H
 #  include <sys/types.h>
+#  include <sys/ioctl.h>
 #endif
 
 using namespace clang;
@@ -1876,11 +1876,18 @@ InputFilenames(llvm::cl::Positional, llvm::cl::desc("<input files>"));
 /// \returns the width of the terminal (in characters), if there is a
 /// terminal. If there is no terminal, returns 0.
 static unsigned getTerminalWidth() {
-#if HAVE_UNISTD_H
+  // If COLUMNS is defined in the environment, wrap to that many columns.
+  if (const char *ColumnsStr = std::getenv("COLUMNS")) {
+    int Columns = atoi(ColumnsStr);
+    if (Columns > 0)
+      return Columns;
+  }
+
   // Is this a terminal? If not, don't wrap by default.
-  if (!isatty(/* Standard Error=*/2))
+  if (!llvm::sys::Process::StandardErrIsDisplayed())
     return 0;
 
+#if HAVE_SYS_TYPES_H
   // Try to determine the width of the terminal.
   struct winsize ws;
   unsigned Columns = 80; // A guess, in case the ioctl fails.