summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPhil Muldoon <pmuldoon@redhat.com>2011-07-22 09:22:50 +0000
committerPhil Muldoon <pmuldoon@redhat.com>2011-07-22 09:22:50 +0000
commit95298e7219e23ca184786a3192df7ab3767ce25a (patch)
tree9a6cab41de43472730cff069d4ed959c3835b6d5 /gdb
parent14d153035333735c0c62c7ee2e92f2b0e65953f8 (diff)
downloadbinutils-gdb-95298e7219e23ca184786a3192df7ab3767ce25a.tar.gz
2011-07-22 Phil Muldoon <pmuldoon@redhat.com>
* event-top.c (cli_command_loop): Use get_prompt, get_suffix, get_prefix. (display_gdb_prompt): Likewise. (change_annotation_level): Likewise. (push_prompt): Likewise. (pop_prompt): Likewise. (handle_stop_sig): Use get_prompt with a level. * top.c (command_loop): Use get_prompt with a level. (set_async_annotation_level): Use set_prompt with a level. (get_prefix): New function. (set_prefix): Ditto. (set_suffix): Ditto. (get_suffix): Ditto. (get_prompt): Accept a level argument. (set_prompt): Accept a level argument. Free old prompts. Set new_async_prompt if level is 0. (init_main): Use set_prompt with a level. Do not set new_async_prompt. * event-top.h (PROMPT, SUFFIX, PREFIX): Move to top.c * top.h: Declare set_suffix, get_suffix, set_prefix, get_prefix. Modify set_prompt, get_prompt to account for levels. * tui/tui-interp.c (tui_command_loop): Use get_prompt with a level * python/python.c (before_prompt_hook): Use set_prompt.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog27
-rw-r--r--gdb/event-top.c61
-rw-r--r--gdb/event-top.h3
-rw-r--r--gdb/python/python.c2
-rw-r--r--gdb/top.c106
-rw-r--r--gdb/top.h20
-rw-r--r--gdb/tui/tui-interp.c10
7 files changed, 170 insertions, 59 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 14e2a7f8f7a..614fca4ac21 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,30 @@
+2011-07-22 Phil Muldoon <pmuldoon@redhat.com>
+
+ * event-top.c (cli_command_loop): Use get_prompt, get_suffix,
+ get_prefix.
+ (display_gdb_prompt): Likewise.
+ (change_annotation_level): Likewise.
+ (push_prompt): Likewise.
+ (pop_prompt): Likewise.
+ (handle_stop_sig): Use get_prompt with a level.
+ * top.c (command_loop): Use get_prompt with a level.
+ (set_async_annotation_level): Use set_prompt with a level.
+ (get_prefix): New function.
+ (set_prefix): Ditto.
+ (set_suffix): Ditto.
+ (get_suffix): Ditto.
+ (get_prompt): Accept a level argument.
+ (set_prompt): Accept a level argument. Free old prompts. Set
+ new_async_prompt if level is 0.
+ (init_main): Use set_prompt with a level. Do not set
+ new_async_prompt.
+ * event-top.h (PROMPT, SUFFIX, PREFIX): Move to top.c
+ * top.h: Declare set_suffix, get_suffix, set_prefix, get_prefix.
+ Modify set_prompt, get_prompt to account for levels.
+ * tui/tui-interp.c (tui_command_loop): Use get_prompt with a
+ level.
+ * python/python.c (before_prompt_hook): Use set_prompt.
+
2011-07-22 Kwok Cheung Yeung <kcy@codesourcery.com>
* defs.h: Add guard against inclusion in gdbserver.
diff --git a/gdb/event-top.c b/gdb/event-top.c
index 22f94409acf..378827282fa 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -191,17 +191,17 @@ cli_command_loop (void)
{
int length;
char *a_prompt;
- char *gdb_prompt = get_prompt ();
+ char *gdb_prompt = get_prompt (0);
/* Tell readline what the prompt to display is and what function
it will need to call after a whole line is read. This also
displays the first prompt. */
- length = strlen (PREFIX (0))
- + strlen (gdb_prompt) + strlen (SUFFIX (0)) + 1;
+ length = strlen (get_prefix (0))
+ + strlen (gdb_prompt) + strlen (get_suffix(0)) + 1;
a_prompt = (char *) alloca (length);
- strcpy (a_prompt, PREFIX (0));
+ strcpy (a_prompt, get_prefix (0));
strcat (a_prompt, gdb_prompt);
- strcat (a_prompt, SUFFIX (0));
+ strcat (a_prompt, get_suffix (0));
rl_callback_handler_install (a_prompt, input_handler);
}
else
@@ -276,10 +276,10 @@ display_gdb_prompt (char *new_prompt)
if (! new_prompt)
{
char *post_gdb_prompt = NULL;
- char *pre_gdb_prompt = xstrdup (get_prompt ());
+ char *pre_gdb_prompt = xstrdup (get_prompt (0));
observer_notify_before_prompt (pre_gdb_prompt);
- post_gdb_prompt = get_prompt ();
+ post_gdb_prompt = get_prompt (0);
/* If the observer changed the prompt, use that prompt. */
if (strcmp (pre_gdb_prompt, post_gdb_prompt) != 0)
@@ -317,18 +317,18 @@ display_gdb_prompt (char *new_prompt)
if (! new_prompt)
{
/* Just use the top of the prompt stack. */
- prompt_length = strlen (PREFIX (0)) +
- strlen (SUFFIX (0)) +
- strlen (get_prompt()) + 1;
+ prompt_length = strlen (get_prefix (0)) +
+ strlen (get_suffix (0)) +
+ strlen (get_prompt (0)) + 1;
actual_gdb_prompt = (char *) alloca (prompt_length);
/* Prefix needs to have new line at end. */
- strcpy (actual_gdb_prompt, PREFIX (0));
- strcat (actual_gdb_prompt, get_prompt());
+ strcpy (actual_gdb_prompt, get_prefix (0));
+ strcat (actual_gdb_prompt, get_prompt (0));
/* Suffix needs to have a new line at end and \032 \032 at
beginning. */
- strcat (actual_gdb_prompt, SUFFIX (0));
+ strcat (actual_gdb_prompt, get_suffix (0));
}
else
actual_gdb_prompt = new_prompt;;
@@ -361,7 +361,7 @@ change_annotation_level (void)
{
char *prefix, *suffix;
- if (!PREFIX (0) || !PROMPT (0) || !SUFFIX (0))
+ if (!get_prefix (0) || !get_prompt (0) || !get_suffix (0))
{
/* The prompt stack has not been initialized to "", we are
using gdb w/o the --async switch. */
@@ -371,7 +371,7 @@ change_annotation_level (void)
if (annotation_level > 1)
{
- if (!strcmp (PREFIX (0), "") && !strcmp (SUFFIX (0), ""))
+ if (!strcmp (get_prefix (0), "") && !strcmp (get_suffix (0), ""))
{
/* Push a new prompt if the previous annotation_level was not >1. */
prefix = (char *) alloca (strlen (async_annotation_suffix) + 10);
@@ -389,7 +389,7 @@ change_annotation_level (void)
}
else
{
- if (strcmp (PREFIX (0), "") && strcmp (SUFFIX (0), ""))
+ if (strcmp (get_prefix (0), "") && strcmp (get_suffix (0), ""))
{
/* Pop the top of the stack, we are going back to annotation < 1. */
pop_prompt ();
@@ -405,17 +405,17 @@ void
push_prompt (char *prefix, char *prompt, char *suffix)
{
the_prompts.top++;
- PREFIX (0) = xstrdup (prefix);
+ set_prefix (prefix, 0);
/* Note that this function is used by the set annotate 2
command. This is why we take care of saving the old prompt
in case a new one is not specified. */
if (prompt)
- PROMPT (0) = xstrdup (prompt);
+ set_prompt (prompt, 0);
else
- PROMPT (0) = xstrdup (PROMPT (-1));
+ set_prompt (get_prompt (-1), 0);
- SUFFIX (0) = xstrdup (suffix);
+ set_suffix (suffix, 0);
}
/* Pops the top of the prompt stack, and frees the memory allocated
@@ -425,20 +425,17 @@ pop_prompt (void)
{
/* If we are not during a 'synchronous' execution command, in which
case, the top prompt would be empty. */
- if (strcmp (PROMPT (0), ""))
+ if (strcmp (get_prompt (0), ""))
/* This is for the case in which the prompt is set while the
annotation level is 2. The top prompt will be changed, but when
we return to annotation level < 2, we want that new prompt to be
in effect, until the user does another 'set prompt'. */
- if (strcmp (PROMPT (0), PROMPT (-1)))
- {
- xfree (PROMPT (-1));
- PROMPT (-1) = xstrdup (PROMPT (0));
- }
-
- xfree (PREFIX (0));
- xfree (PROMPT (0));
- xfree (SUFFIX (0));
+ if (strcmp (get_prompt (0), get_prompt (-1)))
+ set_prompt (get_prompt (0), -1);
+
+ set_prefix (NULL, 0);
+ set_prompt (NULL, 0);
+ set_suffix (NULL, 0);
the_prompts.top--;
}
@@ -983,7 +980,7 @@ handle_stop_sig (int sig)
static void
async_stop_sig (gdb_client_data arg)
{
- char *prompt = get_prompt ();
+ char *prompt = get_prompt (0);
#if STOP_SIGNAL == SIGTSTP
signal (SIGTSTP, SIG_DFL);
@@ -1061,7 +1058,7 @@ set_async_annotation_level (char *args, int from_tty,
void
set_async_prompt (char *args, int from_tty, struct cmd_list_element *c)
{
- PROMPT (0) = xstrdup (new_async_prompt);
+ set_prompt (new_async_prompt, 0);
}
/* Set things up for readline to be invoked via the alternate
diff --git a/gdb/event-top.h b/gdb/event-top.h
index 85501644235..952abdb39bd 100644
--- a/gdb/event-top.h
+++ b/gdb/event-top.h
@@ -69,9 +69,6 @@ struct prompts
int top;
};
-#define PROMPT(X) the_prompts.prompt_stack[the_prompts.top + X].prompt
-#define PREFIX(X) the_prompts.prompt_stack[the_prompts.top + X].prefix
-#define SUFFIX(X) the_prompts.prompt_stack[the_prompts.top + X].suffix
/* Exported functions from event-top.c.
FIXME: these should really go into top.h. */
diff --git a/gdb/python/python.c b/gdb/python/python.c
index e3a8d195e45..16c0a6e27b4 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -745,7 +745,7 @@ before_prompt_hook (const char *current_gdb_prompt)
/* If a prompt has been set, PROMPT will not be NULL. If it is
NULL, do not set the prompt. */
if (prompt != NULL)
- set_prompt (prompt);
+ set_prompt (prompt, 0);
do_cleanups (cleanup);
return;
diff --git a/gdb/top.c b/gdb/top.c
index 3ffd0002575..8dba0e086b3 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -65,6 +65,10 @@
#include "ui-out.h"
#include "cli-out.h"
+#define PROMPT(X) the_prompts.prompt_stack[the_prompts.top + X].prompt
+#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. */
#ifndef DEFAULT_PROMPT
@@ -533,7 +537,7 @@ command_loop (void)
while (instream && !feof (instream))
{
if (window_hook && instream == stdin)
- (*window_hook) (instream, get_prompt ());
+ (*window_hook) (instream, get_prompt (0));
quit_flag = 0;
if (instream == stdin && stdin_is_tty)
@@ -542,7 +546,7 @@ command_loop (void)
/* Get a command-line. This calls the readline package. */
command = command_line_input (instream == stdin ?
- get_prompt () : (char *) NULL,
+ get_prompt (0) : (char *) NULL,
instream == stdin, "prompt");
if (command == 0)
{
@@ -1124,26 +1128,98 @@ and \"show warranty\" for details.\n");
}
}
-/* get_prompt: access method for the GDB prompt string. */
+
+/* get_prefix: access method for the GDB prefix string. */
char *
-get_prompt (void)
+get_prefix (int level)
{
- return PROMPT (0);
+ return PREFIX (level);
}
+/* set_prefix: set method for the GDB prefix string. */
+
void
-set_prompt (const char *s)
+set_prefix (const char *s, int level)
+{
+ /* If S is NULL, just free the PREFIX at level LEVEL and set to
+ NULL. */
+ if (s == NULL)
+ {
+ xfree (PREFIX (level));
+ PREFIX (level) = NULL;
+ }
+ else
+ {
+ char *p = xstrdup (s);
+
+ xfree (PREFIX (level));
+ PREFIX (level) = p;
+ }
+}
+
+/* get_suffix: access method for the GDB suffix string. */
+
+char *
+get_suffix (int level)
{
- char *p = xstrdup (s);
+ return SUFFIX (level);
+}
- xfree (PROMPT (0));
- PROMPT (0) = p;
+/* set_suffix: set method for the GDB suffix string. */
- /* Also, free and set new_async_prompt so prompt changes sync up
- with set/show prompt. */
- xfree (new_async_prompt);
- new_async_prompt = xstrdup (PROMPT (0));
+void
+set_suffix (const char *s, int level)
+{
+ /* If S is NULL, just free the SUFFIX at level LEVEL and set to
+ NULL. */
+ if (s == NULL)
+ {
+ xfree (SUFFIX (level));
+ SUFFIX (level) = NULL;
+ }
+ else
+ {
+ char *p = xstrdup (s);
+
+ xfree (SUFFIX (level));
+ SUFFIX (level) = p;
+ }
+}
+
+ /* get_prompt: access method for the GDB prompt string. */
+
+char *
+get_prompt (int level)
+{
+ return PROMPT (level);
+}
+
+void
+set_prompt (const char *s, int level)
+{
+ /* If S is NULL, just free the PROMPT at level LEVEL and set to
+ NULL. */
+ if (s == NULL)
+ {
+ xfree (PROMPT (level));
+ PROMPT (level) = NULL;
+ }
+ else
+ {
+ char *p = xstrdup (s);
+
+ xfree (PROMPT (0));
+ PROMPT (0) = p;
+
+ if (level == 0)
+ {
+ /* Also, free and set new_async_prompt so prompt changes sync up
+ with set/show prompt. */
+ xfree (new_async_prompt);
+ new_async_prompt = xstrdup (PROMPT (0));
+ }
+ }
}
@@ -1534,13 +1610,11 @@ init_main (void)
whatever the DEFAULT_PROMPT is. */
the_prompts.top = 0;
PREFIX (0) = "";
- PROMPT (0) = xstrdup (DEFAULT_PROMPT);
+ set_prompt (DEFAULT_PROMPT, 0);
SUFFIX (0) = "";
/* Set things up for annotation_level > 1, if the user ever decides
to use it. */
async_annotation_suffix = "prompt";
- /* Set the variable associated with the setshow prompt command. */
- new_async_prompt = xstrdup (PROMPT (0));
/* If gdb was started with --annotate=2, this is equivalent to the
user entering the command 'set annotate 2' at the gdb prompt, so
diff --git a/gdb/top.h b/gdb/top.h
index 24ec2f20c51..3c1ec1493de 100644
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -51,11 +51,27 @@ extern struct cleanup *prepare_execute_command (void);
/* This function returns a pointer to the string that is used
by gdb for its command prompt. */
-extern char *get_prompt (void);
+extern char *get_prompt (int);
/* This function copies the specified string into the string that
is used by gdb for its command prompt. */
-extern void set_prompt (const char *);
+extern void set_prompt (const char *, int level);
+
+/* This function returns a pointer to the string that is used
+ by gdb for its command prompt prefix. */
+extern char *get_prefix (int);
+
+/* This function copies the specified string into the string that
+ is used by gdb for its command prompt prefix. */
+extern void set_prefix (const char *, int);
+
+/* This function returns a pointer to the string that is used
+ by gdb for its command prompt suffix. */
+extern char *get_suffix (int);
+
+/* This function copies the specified string into the string that
+ is used by gdb for its command prompt suffix. */
+extern void set_suffix (const char *, int);
/* From random places. */
extern int readnow_symbol_files;
diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c
index d79de2bf990..919d1ac4ba3 100644
--- a/gdb/tui/tui-interp.c
+++ b/gdb/tui/tui-interp.c
@@ -145,17 +145,17 @@ tui_command_loop (void *data)
{
int length;
char *a_prompt;
- char *gdb_prompt = get_prompt ();
+ char *gdb_prompt = get_prompt (0);
/* Tell readline what the prompt to display is and what function
it will need to call after a whole line is read. This also
displays the first prompt. */
- length = strlen (PREFIX (0))
- + strlen (gdb_prompt) + strlen (SUFFIX (0)) + 1;
+ length = strlen (get_prefix (0))
+ + strlen (gdb_prompt) + strlen (get_suffix (0)) + 1;
a_prompt = (char *) alloca (length);
- strcpy (a_prompt, PREFIX (0));
+ strcpy (a_prompt, get_prefix (0));
strcat (a_prompt, gdb_prompt);
- strcat (a_prompt, SUFFIX (0));
+ strcat (a_prompt, get_suffix (0));
rl_callback_handler_install (a_prompt, input_handler);
}
else