diagnostic.c (get_terminal_width): Renamed from
authorTobias Burnus <burnus@net-b.de>
Thu, 11 Dec 2014 08:20:24 +0000 (09:20 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Thu, 11 Dec 2014 08:20:24 +0000 (09:20 +0100)
2014-12-11  Tobias Burnus  <burnus@net-b.de>
            Manuel López-Ibáñez  <manu@gcc.gnu.org>

gcc/
        * diagnostic.c (get_terminal_width): Renamed from
        * getenv_columns,
        removed static, and additionally use ioctl to get width.
        (diagnostic_set_caret_max_width): Update call.
        * diagnostic.h (get_terminal_width): Add prototype.
        * opts.c (print_specific_help): Use it for x_help_columns.
        * doc/invoke.texi (fdiagnostics-show-caret): Document how the
        width is set.

gcc/fortran/
        * error.c (gfc_get_terminal_width): Renamed from
        get_terminal_width and use same-named common function.
        (gfc_error_init_1): Update call.

Co-Authored-By: Manuel López-Ibáñez <manu@gcc.gnu.org>
From-SVN: r218619

gcc/ChangeLog
gcc/diagnostic.c
gcc/diagnostic.h
gcc/doc/invoke.texi
gcc/fortran/ChangeLog
gcc/fortran/error.c
gcc/opts.c

index 2d0f06e3ff241c12d333ed8a4810f29329ccfff5..fae08cb7ace2669606c30f73a44a5931ed1228d4 100644 (file)
@@ -1,3 +1,10 @@
+2014-12-11  Tobias Burnus  <burnus@net-b.de>
+           Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       * error.c (gfc_get_terminal_width): Renamed from
+       get_terminal_width and use same-named common function.
+       (gfc_error_init_1): Update call.
+
 2014-12-10  Ulrich Drepper  <drepper@gmail.com>
 
        Minor interface cleanups of libgccjit
index 28ef81c5dad4071cf3dfd20e163f2f83530116b2..2c2477f2488575429a98c285a3fcb69d98953905 100644 (file)
@@ -33,6 +33,14 @@ along with GCC; see the file COPYING3.  If not see
 #include "diagnostic.h"
 #include "diagnostic-color.h"
 
+#ifdef HAVE_TERMIOS_H
+# include <termios.h>
+#endif
+
+#ifdef GWINSZ_IN_SYS_IOCTL
+# include <sys/ioctl.h>
+#endif
+
 #include <new>                     // For placement new.
 
 #define pedantic_warning_kind(DC)                      \
@@ -83,9 +91,10 @@ file_name_as_prefix (diagnostic_context *context, const char *f)
 
 \f
 /* Return the value of the getenv("COLUMNS") as an integer. If the
-   value is not set to a positive integer, then return INT_MAX.  */
-static int
-getenv_columns (void)
+   value is not set to a positive integer, use ioctl to get the
+   terminal width. If it fails, return INT_MAX.  */
+int
+get_terminal_width (void)
 {
   const char * s = getenv ("COLUMNS");
   if (s != NULL) {
@@ -93,6 +102,14 @@ getenv_columns (void)
     if (n > 0)
       return n;
   }
+
+#ifdef TIOCGWINSZ
+  struct winsize w;
+  w.ws_col = 0;
+  if (ioctl (0, TIOCGWINSZ, &w) == 0 && w.ws_col > 0)
+    return w.ws_col;
+#endif
+
   return INT_MAX;
 }
 
@@ -103,7 +120,7 @@ diagnostic_set_caret_max_width (diagnostic_context *context, int value)
   /* One minus to account for the leading empty space.  */
   value = value ? value - 1 
     : (isatty (fileno (pp_buffer (context->printer)->stream))
-       ? getenv_columns () - 1: INT_MAX);
+       ? get_terminal_width () - 1: INT_MAX);
   
   if (value <= 0) 
     value = INT_MAX;
index 3c4906a31f515886a3fa00df1ebc41aef8c4e379..0c65deb947f81ecc6cae2ddc081f6cbcf185391a 100644 (file)
@@ -297,6 +297,8 @@ void diagnostic_set_caret_max_width (diagnostic_context *context, int value);
 
 void diagnostic_file_cache_fini (void);
 
+int get_terminal_width (void);
+
 /* Expand the location of this diagnostic. Use this function for consistency. */
 
 static inline expanded_location
index 1579702e20a4ce9736b650483cc930a9075cabe0..eb9a64dc9baaaa3cc1554f89766dbc76305a15bd 100644 (file)
@@ -3188,7 +3188,10 @@ option is known to the diagnostic machinery).  Specifying the
 @opindex fdiagnostics-show-caret
 By default, each diagnostic emitted includes the original source line
 and a caret '^' indicating the column.  This option suppresses this
-information.
+information.  The source line is truncated to @var{n} characters, if
+the @option{-fmessage-length=n} is given.  When the output is done
+to the terminal, the width is limited to the width given by the
+@env{COLUMNS} environment variable or, if not set, to the terminal width.
 
 @end table
 
index cce403611ae4ccc1f52a9d05a0cb1082f0d76fbc..8534a453ab1122f29d4f96a7345bea6522659371 100644 (file)
@@ -1,3 +1,14 @@
+2014-12-11  Tobias Burnus  <burnus@net-b.de>
+           Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       * diagnostic.c (get_terminal_width): Renamed from getenv_columns,
+       removed static, and additionally use ioctl to get width.
+       (diagnostic_set_caret_max_width): Update call.
+       * diagnostic.h (get_terminal_width): Add prototype.
+       * opts.c (print_specific_help): Use it for x_help_columns.
+       * doc/invoke.texi (fdiagnostics-show-caret): Document how the
+       width is set.
+
 2014-12-10  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        PR fortran/60718
index a93c7f903fb8a79ff8247e5b9295825675a5b38f..851ba90ab107a7b9de90843cf26ed3e69bf3546e 100644 (file)
@@ -30,14 +30,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "flags.h"
 #include "gfortran.h"
 
-#ifdef HAVE_TERMIOS_H
-# include <termios.h>
-#endif
-
-#ifdef GWINSZ_IN_SYS_IOCTL
-# include <sys/ioctl.h>
-#endif
-
 #include "diagnostic.h"
 #include "diagnostic-color.h"
 #include "tree-diagnostic.h" /* tree_diagnostics_defaults */
@@ -83,33 +75,9 @@ gfc_pop_suppress_errors (void)
 /* Determine terminal width (for trimming source lines in output).  */
 
 static int
-get_terminal_width (void)
+gfc_get_terminal_width (void)
 {
-  /* Only limit the width if we're outputting to a terminal.  */
-#ifdef HAVE_UNISTD_H
-  if (!isatty (STDERR_FILENO))
-    return INT_MAX;
-#endif
-  
-  /* Method #1: Use ioctl (not available on all systems).  */
-#ifdef TIOCGWINSZ
-  struct winsize w;
-  w.ws_col = 0;
-  if (ioctl (0, TIOCGWINSZ, &w) == 0 && w.ws_col > 0)
-    return w.ws_col;
-#endif
-
-  /* Method #2: Query environment variable $COLUMNS.  */
-  const char *p = getenv ("COLUMNS");
-  if (p)
-    {
-      int value = atoi (p);
-      if (value > 0)
-       return value;
-    }
-
-  /* If both fail, use reasonable default.  */
-  return 80;
+  return isatty (STDERR_FILENO) ? get_terminal_width () : INT_MAX;
 }
 
 
@@ -118,7 +86,7 @@ get_terminal_width (void)
 void
 gfc_error_init_1 (void)
 {
-  terminal_width = get_terminal_width ();
+  terminal_width = gfc_get_terminal_width ();
   errors = 0;
   warnings = 0;
   gfc_buffer_error (false);
index 1b4f97e28d0d534524b91b18cf314d817fd548eb..34a42a57dddf4286ea6664724618093f8b3a3b59 100644 (file)
@@ -1231,18 +1231,8 @@ print_specific_help (unsigned int include_flags,
      the desired maximum width of the output.  */
   if (opts->x_help_columns == 0)
     {
-      const char *p;
-
-      p = getenv ("COLUMNS");
-      if (p != NULL)
-       {
-         int value = atoi (p);
-
-         if (value > 0)
-           opts->x_help_columns = value;
-       }
-
-      if (opts->x_help_columns == 0)
+      opts->x_help_columns = get_terminal_width ();
+      if (opts->x_help_columns == INT_MAX)
        /* Use a reasonable default.  */
        opts->x_help_columns = 80;
     }