#include "gdb_select.h"
#include "gdbsupport/scope-exit.h"
#include "gdbarch.h"
+#include "gdbsupport/pathstuff.h"
/* readline include files. */
#include "readline/readline.h"
#define PREFIX(X) the_prompts.prompt_stack[the_prompts.top + X].prefix
#define SUFFIX(X) the_prompts.prompt_stack[the_prompts.top + X].suffix
-/* Default command line prompt. This is overriden in some configs. */
+/* Default command line prompt. This is overridden in some configs. */
#ifndef DEFAULT_PROMPT
#define DEFAULT_PROMPT "(gdb) "
#endif
-/* Generate a function that exports a pointer to a field of the
- current UI. */
+struct ui_file **
+current_ui_gdb_stdout_ptr ()
+{
+ return ¤t_ui->m_gdb_stdout;
+}
+
+struct ui_file **
+current_ui_gdb_stdin_ptr ()
+{
+ return ¤t_ui->m_gdb_stdin;
+}
-#define gen_ret_current_ui_field_ptr(type, name) \
-type * \
-current_ui_## name ## _ptr (void) \
-{ \
- return ¤t_ui->m_ ## name; \
+struct ui_file **
+current_ui_gdb_stderr_ptr ()
+{
+ return ¤t_ui->m_gdb_stderr;
}
-gen_ret_current_ui_field_ptr (struct ui_file *, gdb_stdout)
-gen_ret_current_ui_field_ptr (struct ui_file *, gdb_stdin)
-gen_ret_current_ui_field_ptr (struct ui_file *, gdb_stderr)
-gen_ret_current_ui_field_ptr (struct ui_file *, gdb_stdlog)
-gen_ret_current_ui_field_ptr (struct ui_out *, current_uiout)
+struct ui_file **
+current_ui_gdb_stdlog_ptr ()
+{
+ return ¤t_ui->m_gdb_stdlog;
+}
-int inhibit_gdbinit = 0;
+struct ui_out **
+current_ui_current_uiout_ptr ()
+{
+ return ¤t_ui->m_current_uiout;
+}
-extern char lang_frame_mismatch_warn[]; /* language.c */
+int inhibit_gdbinit = 0;
/* Flag for whether we want to confirm potentially dangerous
operations. Default is yes. */
-int confirm = 1;
+bool confirm = true;
static void
show_confirm (struct ui_file *file, int from_tty,
while (ui->instream != NULL && !feof (ui->instream))
{
- char *command;
+ const char *command;
/* Get a command-line. This calls the readline package. */
command = command_line_input (NULL, NULL);
&& flang != language_unknown
&& flang != current_language->la_language)
{
- printf_filtered ("%s\n", lang_frame_mismatch_warn);
+ printf_filtered ("%s\n", _(lang_frame_mismatch_warn));
warned = 1;
}
}
/* c->user_commands would be NULL in the case of a python command. */
if (c->theclass == class_user && c->user_commands)
execute_user_command (c, arg);
+ else if (c->theclass == class_user
+ && c->prefixlist && !c->allow_unknown)
+ /* If this is a user defined prefix that does not allow unknown
+ (in other words, C is a prefix command and not a command
+ that can be followed by its args), report the list of
+ subcommands. */
+ {
+ printf_unfiltered
+ ("\"%.*s\" must be followed by the name of a subcommand.\n",
+ (int) strlen (c->prefixname) - 1, c->prefixname);
+ help_list (*c->prefixlist, c->prefixname, all_commands, gdb_stdout);
+ }
else if (c->type == set_cmd)
do_set_command (arg, from_tty, c);
else if (c->type == show_cmd)
/* Variables which control command line editing and history
substitution. These variables are given default values at the end
of this file. */
-static int command_editing_p;
+static bool command_editing_p;
/* NOTE 1999-04-29: This variable will be static again, once we modify
gdb to use the event loop as the default command loop and we merge
event-top.c into this file, top.c. */
-/* static */ int history_expansion_p;
+/* static */ bool history_expansion_p;
-static int write_history_p;
+static bool write_history_p;
static void
show_write_history_p (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
This routine either uses fancy command line editing or simple input
as the user has requested. */
-char *
+const char *
command_line_input (const char *prompt_arg, const char *annotation_suffix)
{
static struct buffer cmd_line_buffer;
This GDB was configured as follows:\n\
configure --host=%s --target=%s\n\
"), host_name, target_name);
+
fprintf_filtered (stream, _("\
--with-auto-load-dir=%s\n\
--with-auto-load-safe-path=%s\n\
"), AUTO_LOAD_DIR, AUTO_LOAD_SAFE_PATH);
+
#if HAVE_LIBEXPAT
fprintf_filtered (stream, _("\
--with-expat\n\
--without-expat\n\
"));
#endif
+
if (GDB_DATADIR[0])
fprintf_filtered (stream, _("\
--with-gdb-datadir=%s%s\n\
"), GDB_DATADIR, GDB_DATADIR_RELOCATABLE ? " (relocatable)" : "");
+
#ifdef ICONV_BIN
fprintf_filtered (stream, _("\
--with-iconv-bin=%s%s\n\
"), ICONV_BIN, ICONV_BIN_RELOCATABLE ? " (relocatable)" : "");
#endif
+
if (JIT_READER_DIR[0])
fprintf_filtered (stream, _("\
--with-jit-reader-dir=%s%s\n\
"), JIT_READER_DIR, JIT_READER_DIR_RELOCATABLE ? " (relocatable)" : "");
+
#if HAVE_LIBUNWIND_IA64_H
fprintf_filtered (stream, _("\
--with-libunwind-ia64\n\
--without-libunwind-ia64\n\
"));
#endif
+
#if HAVE_LIBLZMA
fprintf_filtered (stream, _("\
--with-lzma\n\
--without-lzma\n\
"));
#endif
+
#if HAVE_LIBBABELTRACE
fprintf_filtered (stream, _("\
--with-babeltrace\n\
--without-babeltrace\n\
"));
#endif
+
#if HAVE_LIBIPT
fprintf_filtered (stream, _("\
--with-intel-pt\n\
--without-intel-pt\n\
"));
#endif
+
#if HAVE_LIBMPFR
fprintf_filtered (stream, _("\
--with-mpfr\n\
--without-mpfr\n\
"));
#endif
+
#ifdef WITH_PYTHON_PATH
fprintf_filtered (stream, _("\
--with-python=%s%s\n\
--without-python\n\
"));
#endif
+
#if HAVE_GUILE
fprintf_filtered (stream, _("\
--with-guile\n\
--without-guile\n\
"));
#endif
+
#if HAVE_SOURCE_HIGHLIGHT
fprintf_filtered (stream, _("\
--enable-source-highlight\n\
--disable-source-highlight\n\
"));
#endif
+
#ifdef RELOC_SRCDIR
fprintf_filtered (stream, _("\
--with-relocated-sources=%s\n\
"), RELOC_SRCDIR);
#endif
+
if (DEBUGDIR[0])
fprintf_filtered (stream, _("\
--with-separate-debug-dir=%s%s\n\
"), DEBUGDIR, DEBUGDIR_RELOCATABLE ? " (relocatable)" : "");
+
if (TARGET_SYSTEM_ROOT[0])
fprintf_filtered (stream, _("\
--with-sysroot=%s%s\n\
"), TARGET_SYSTEM_ROOT, TARGET_SYSTEM_ROOT_RELOCATABLE ? " (relocatable)" : "");
+
if (SYSTEM_GDBINIT[0])
fprintf_filtered (stream, _("\
--with-system-gdbinit=%s%s\n\
"), SYSTEM_GDBINIT, SYSTEM_GDBINIT_RELOCATABLE ? " (relocatable)" : "");
- /* We assume "relocatable" will be printed at least once, thus we always
- print this text. It's a reasonably safe assumption for now. */
- fprintf_filtered (stream, _("\n\
+
+ if (SYSTEM_GDBINIT_DIR[0])
+ fprintf_filtered (stream, _("\
+ --with-system-gdbinit-dir=%s%s\n\
+"), SYSTEM_GDBINIT_DIR, SYSTEM_GDBINIT_DIR_RELOCATABLE ? " (relocatable)" : "");
+
+ /* We assume "relocatable" will be printed at least once, thus we always
+ print this text. It's a reasonably safe assumption for now. */
+ fprintf_filtered (stream, _("\n\
(\"Relocatable\" means the directory can be moved with the GDB installation\n\
tree, and GDB will still find it.)\n\
"));
cmd_show_list (showhistlist, from_tty, "");
}
-int info_verbose = 0; /* Default verbose msgs off. */
+bool info_verbose = false; /* Default verbose msgs off. */
/* Called by do_set_command. An elaborate joke. */
void
that was read. */
#ifdef __MSDOS__
/* No leading dots in file names are allowed on MSDOS. */
- history_filename = concat (current_directory, "/_gdb_history",
- (char *)NULL);
+ const char *fname = "_gdb_history";
#else
- history_filename = concat (current_directory, "/.gdb_history",
- (char *)NULL);
+ const char *fname = ".gdb_history";
#endif
+
+ gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (fname));
+ history_filename = temp.release ();
}
read_history (history_filename);
}
struct cmd_list_element *c, const char *value)
{
fprintf_filtered (file, _("GDB's data directory is \"%s\".\n"),
- gdb_datadir);
+ gdb_datadir.c_str ());
}
static void
directories the file written will be the same as the one
that was read. */
if (!IS_ABSOLUTE_PATH (history_filename))
- history_filename = reconcat (history_filename, current_directory, "/",
- history_filename, (char *) NULL);
+ {
+ gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (history_filename));
+
+ xfree (history_filename);
+ history_filename = temp.release ();
+ }
}
static void
init_cmd_lists (); /* This needs to be done first. */
initialize_targets (); /* Setup target_terminal macros for utils.c. */
- initialize_utils (); /* Make errors and warnings possible. */
init_page_info ();