summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/diagnostic.c25
-rw-r--r--gcc/diagnostic.h2
-rw-r--r--gcc/doc/invoke.texi5
-rw-r--r--gcc/fortran/ChangeLog11
-rw-r--r--gcc/fortran/error.c38
-rw-r--r--gcc/opts.c14
7 files changed, 50 insertions, 52 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2d0f06e3ff2..fae08cb7ace 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 28ef81c5dad..2c2477f2488 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -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)
/* 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;
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 3c4906a31f5..0c65deb947f 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -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
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 1579702e20a..eb9a64dc9ba 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -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
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index cce403611ae..8534a453ab1 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c
index a93c7f903fb..851ba90ab10 100644
--- a/gcc/fortran/error.c
+++ b/gcc/fortran/error.c
@@ -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);
diff --git a/gcc/opts.c b/gcc/opts.c
index 1b4f97e28d0..34a42a57ddd 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -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;
}