/* C preprocessor macro expansion commands for GDB.
- Copyright (C) 2002-2019 Free Software Foundation, Inc.
+ Copyright (C) 2002-2020 Free Software Foundation, Inc.
Contributed by Red Hat, Inc.
This file is part of GDB.
#include "macrotab.h"
#include "macroexp.h"
#include "macroscope.h"
+#include "cli/cli-style.h"
#include "cli/cli-utils.h"
#include "command.h"
#include "gdbcmd.h"
struct macro_source_file *file,
int line)
{
- char *fullname;
-
- fullname = macro_source_fullname (file);
- fprintf_filtered (stream, "%s:%d\n", fullname, line);
- xfree (fullname);
+ std::string fullname = macro_source_fullname (file);
+ fprintf_filtered (stream, "%ps:%d\n",
+ styled_string (file_name_style.style (),
+ fullname.c_str ()),
+ line);
while (file->included_by)
{
fullname = macro_source_fullname (file->included_by);
- fprintf_filtered (gdb_stdout, " included at %s:%d\n", fullname,
- file->included_at_line);
- xfree (fullname);
+ fputs_filtered (_(" included at "), stream);
+ fputs_styled (fullname.c_str (), file_name_style.style (), stream);
+ fprintf_filtered (stream, ":%d\n", file->included_at_line);
file = file->included_by;
}
}
function will also allow "..." forms as used in varargs macro
parameters. */
-static char *
+static gdb::unique_xmalloc_ptr<char>
extract_identifier (const char **expp, int is_parameter)
{
char *result;
memcpy (result, *expp, len);
result[len] = '\0';
*expp += len;
- return result;
+ return gdb::unique_xmalloc_ptr<char> (result);
}
struct temporary_macro_definition : public macro_definition
macro_define_command (const char *exp, int from_tty)
{
temporary_macro_definition new_macro;
- char *name = NULL;
if (!exp)
error (_("usage: macro define NAME[(ARGUMENT-LIST)] [REPLACEMENT-LIST]"));
skip_ws (&exp);
- name = extract_identifier (&exp, 0);
- if (! name)
+ gdb::unique_xmalloc_ptr<char> name = extract_identifier (&exp, 0);
+ if (name == NULL)
error (_("Invalid macro name."));
if (*exp == '(')
{
/* Must update new_macro as well... */
new_macro.argv = (const char * const *) argv;
}
- argv[new_macro.argc] = extract_identifier (&exp, 1);
+ argv[new_macro.argc] = extract_identifier (&exp, 1).release ();
if (! argv[new_macro.argc])
error (_("Macro is missing an argument."));
++new_macro.argc;
++exp;
skip_ws (&exp);
- macro_define_function (macro_main (macro_user_macros), -1, name,
+ macro_define_function (macro_main (macro_user_macros), -1, name.get (),
new_macro.argc, (const char **) new_macro.argv,
exp);
}
else
{
skip_ws (&exp);
- macro_define_object (macro_main (macro_user_macros), -1, name, exp);
+ macro_define_object (macro_main (macro_user_macros), -1, name.get (),
+ exp);
}
}
static void
macro_undef_command (const char *exp, int from_tty)
{
- char *name;
-
if (!exp)
error (_("usage: macro undef NAME"));
skip_ws (&exp);
- name = extract_identifier (&exp, 0);
- if (! name)
+ gdb::unique_xmalloc_ptr<char> name = extract_identifier (&exp, 0);
+ if (name == nullptr)
error (_("Invalid macro name."));
- macro_undef (macro_main (macro_user_macros), -1, name);
- xfree (name);
+ macro_undef (macro_main (macro_user_macros), -1, name.get ());
}