/* Support for complaint handling during symbol reading in GDB.
- Copyright (C) 1990-2015 Free Software Foundation, Inc.
+ Copyright (C) 1990-2018 Free Software Foundation, Inc.
This file is part of GDB.
#include "command.h"
#include "gdbcmd.h"
-extern void _initialize_complaints (void);
-
/* 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
- that needs no explanation (the user already knows we have a problem
- so we can just state our piece). */
enum complaint_series {
/* Isolated self explanatory message. */
ISOLATED_MESSAGE,
+
/* First message of a series, includes an explanation. */
FIRST_MESSAGE,
+
/* First message of a series, but does not need to include any sort
of explanation. */
SHORT_FIRST_MESSAGE,
+
/* Subsequent message of a series that needs no explanation (the
user already knows we have a problem so we can just state our
piece). */
{
struct complain *root;
- /* Should each complaint be self explanatory, or should we assume
- that a series of complaints is being produced? case 0: Isolated
- self explanatory message. case 1: First message of a series that
- must start off with explanation. case 2: Subsequent message of a
- series that needs no explanation (the user already knows we have
- a problem so we can just state our piece). */
- int series;
+ enum complaint_series series;
/* The explanatory messages that should accompany the complaint.
NOTE: cagney/2002-08-14: In a desperate attempt at being vaguely
static struct complaints symfile_complaint_book = {
&complaint_sentinel,
- 0,
+ ISOLATED_MESSAGE,
symfile_explanations
};
struct complaints *symfile_complaints = &symfile_complaint_book;
before we stop whining about it? Default is no whining at all,
since so many systems have ill-constructed symbol files. */
-static int stop_whining = 0;
+int stop_whining = 0;
/* Print a complaint, and link the complaint block into a chain for
later handling. */
vwarning (fmt, args);
else
{
- char *msg;
- struct cleanup *cleanups;
- msg = xstrvprintf (fmt, args);
- cleanups = make_cleanup (xfree, msg);
+ std::string msg = string_vprintf (fmt, args);
wrap_here ("");
if (series != SUBSEQUENT_MESSAGE)
begin_line ();
/* XXX: i18n */
fprintf_filtered (gdb_stderr, "%s%s%s",
- complaints->explanation[series].prefix, msg,
+ complaints->explanation[series].prefix,
+ msg.c_str (),
complaints->explanation[series].postfix);
/* Force a line-break after any isolated message. For the
other cases, clear_complaints() takes care of any missing
fputs_filtered ("\n", gdb_stderr);
else
wrap_here ("");
- do_cleanups (cleanups);
}
}
}
void
-complaint (struct complaints **complaints, const char *fmt, ...)
+complaint_internal (struct complaints **complaints, const char *fmt, ...)
{
va_list args;