Improve error message to cope with pr 17147.
[deliverable/binutils-gdb.git] / gdb / complaints.c
index 3f9be14bfa882ee4b91dce189fe6fb394be8a5e7..92a3ef6bdef40772af12156e85d25ab1baf01ca8 100644 (file)
@@ -1,13 +1,12 @@
 /* Support for complaint handling during symbol reading in GDB.
 
-   Copyright 1990, 1991, 1992, 1993, 1995, 1998, 1999, 2000, 2002,
-   2004 Free Software Foundation, Inc.
+   Copyright (C) 1990-2014 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,9 +15,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 #include "complaints.h"
@@ -28,8 +25,8 @@
 
 extern void _initialize_complaints (void);
 
-/* Should each complaint message be self explanatory, or should we assume that
-   a series of complaints is being produced?  */
+/* Should each complaint message be self explanatory, or should we
+   assume that a series of complaints is being produced?  */
 
 /* case 1: First message of a series that must
    start off with explanation.  case 2: Subsequent message of a series
@@ -115,14 +112,14 @@ get_complaints (struct complaints **c)
 {
   if ((*c) != NULL)
     return (*c);
-  (*c) = XMALLOC (struct complaints);
+  (*c) = XNEW (struct complaints);
   (*c)->root = &complaint_sentinel;
   (*c)->series = ISOLATED_MESSAGE;
   (*c)->explanation = NULL;
   return (*c);
 }
 
-static struct complain *
+static struct complain * ATTRIBUTE_PRINTF (4, 0)
 find_complaint (struct complaints *complaints, const char *file,
                int line, const char *fmt)
 {
@@ -143,7 +140,7 @@ find_complaint (struct complaints *complaints, const char *file,
     }
 
   /* Oops not seen before, fill in a new complaint.  */
-  complaint = XMALLOC (struct complain);
+  complaint = XNEW (struct complain);
   complaint->fmt = fmt;
   complaint->file = file;
   complaint->line = line;
@@ -161,18 +158,21 @@ find_complaint (struct complaints *complaints, const char *file,
    before we stop whining about it?  Default is no whining at all,
    since so many systems have ill-constructed symbol files.  */
 
-static unsigned int stop_whining = 0;
+static int stop_whining = 0;
 
 /* Print a complaint, and link the complaint block into a chain for
    later handling.  */
 
-static void
-vcomplaint (struct complaints **c, const char *file, int line, const char *fmt,
+static void ATTRIBUTE_PRINTF (4, 0)
+vcomplaint (struct complaints **c, const char *file, 
+           int line, const char *fmt,
            va_list args)
 {
   struct complaints *complaints = get_complaints (c);
-  struct complain *complaint = find_complaint (complaints, file, line, fmt);
+  struct complain *complaint = find_complaint (complaints, file, 
+                                              line, fmt);
   enum complaint_series series;
+
   gdb_assert (complaints != NULL);
 
   complaint->counter++;
@@ -185,7 +185,8 @@ vcomplaint (struct complaints **c, const char *file, int line, const char *fmt,
     series = complaints->series;
 
   if (complaint->file != NULL)
-    internal_vwarning (complaint->file, complaint->line, complaint->fmt, args);
+    internal_vwarning (complaint->file, complaint->line, 
+                      complaint->fmt, args);
   else if (deprecated_warning_hook)
     (*deprecated_warning_hook) (complaint->fmt, args);
   else
@@ -245,6 +246,7 @@ void
 complaint (struct complaints **complaints, const char *fmt, ...)
 {
   va_list args;
+
   va_start (args, fmt);
   vcomplaint (complaints, NULL/*file*/, 0/*line*/, fmt, args);
   va_end (args);
@@ -294,7 +296,8 @@ clear_complaints (struct complaints **c, int less_verbose, int noisy)
     case SUBSEQUENT_MESSAGE:
       /* It would be really nice to use begin_line() here.
          Unfortunately that function doesn't track GDB_STDERR and
-         consequently will sometimes supress a line when it shouldn't.  */
+         consequently will sometimes supress a line when it
+         shouldn't.  */
       fputs_unfiltered ("\n", gdb_stderr);
       break;
     default:
@@ -309,14 +312,22 @@ clear_complaints (struct complaints **c, int less_verbose, int noisy)
     complaints->series = SHORT_FIRST_MESSAGE;
 }
 
+static void
+complaints_show_value (struct ui_file *file, int from_tty,
+                      struct cmd_list_element *cmd, const char *value)
+{
+  fprintf_filtered (file, _("Max number of complaints about incorrect"
+                           " symbols is %s.\n"),
+                   value);
+}
+
 void
 _initialize_complaints (void)
 {
-  add_setshow_zinteger_cmd ("complaints", class_support, &stop_whining, _("\
+  add_setshow_zinteger_cmd ("complaints", class_support, 
+                           &stop_whining, _("\
 Set max number of complaints about incorrect symbols."), _("\
-Show max number of complaints about incorrect symbols."), NULL, _("\
-Max number of complaints about incorrect symbols is %s."),
-                           NULL, NULL,
+Show max number of complaints about incorrect symbols."), NULL,
+                           NULL, complaints_show_value,
                            &setlist, &showlist);
-
 }
This page took 0.029677 seconds and 4 git commands to generate.