X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fevent-top.c;h=b472694a347720be95078bbb8cc1afe6b85dd341;hb=a8cdafbd4e8dbf81a28d98de6a046bd9bc5cc097;hp=f37ff7577ae9e2efb77a609f891f297ce88c9482;hpb=701f97654020d6993bd4a0a15749c6ae1bf86f2a;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/event-top.c b/gdb/event-top.c index f37ff7577a..b472694a34 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -1,5 +1,5 @@ /* Top level stuff for GDB, the GNU debugger. - Copyright 1999 Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Written by Elena Zannoni of Cygnus Solutions. This file is part of GDB. @@ -24,9 +24,9 @@ #include "inferior.h" #include "target.h" #include "terminal.h" /* for job_control */ -#include "signals.h" #include "event-loop.h" #include "event-top.h" +#include /* For dont_repeat() */ #include "gdbcmd.h" @@ -35,8 +35,6 @@ #include #include -#include - /* readline defines this. */ #undef savestring @@ -155,6 +153,10 @@ struct readline_input_state char *linebuffer_ptr; } readline_input_state; + +/* This hook is called by rl_callback_read_char_wrapper after each + character is processed. */ +void (*after_char_processing_hook) (); /* Wrapper function for calling into the readline library. The event @@ -164,6 +166,8 @@ static void rl_callback_read_char_wrapper (gdb_client_data client_data) { rl_callback_read_char (); + if (after_char_processing_hook) + (*after_char_processing_hook) (); } /* Initialize all the necessary variables, start the event loop, @@ -246,12 +250,10 @@ display_gdb_prompt (char *new_prompt) int prompt_length = 0; char *gdb_prompt = get_prompt (); -#ifdef UI_OUT /* When an alternative interpreter has been installed, do not display the comand prompt. */ if (interpreter_p) return; -#endif if (target_executing && sync_execution) { @@ -303,12 +305,6 @@ display_gdb_prompt (char *new_prompt) character position to be off, since the newline we read from the user is not accounted for. */ fputs_unfiltered (new_prompt, gdb_stdout); - -#ifdef MPW - /* Move to a new line so the entered line doesn't have a prompt - on the front of it. */ - fputs_unfiltered ("\n", gdb_stdout); -#endif /* MPW */ gdb_flush (gdb_stdout); } } @@ -393,13 +389,13 @@ pop_prompt (void) in effect, until the user does another 'set prompt'. */ if (strcmp (PROMPT (0), PROMPT (-1))) { - free (PROMPT (-1)); + xfree (PROMPT (-1)); PROMPT (-1) = savestring (PROMPT (0), strlen (PROMPT (0))); } - free (PREFIX (0)); - free (PROMPT (0)); - free (SUFFIX (0)); + xfree (PREFIX (0)); + xfree (PROMPT (0)); + xfree (SUFFIX (0)); the_prompts.top--; } @@ -480,18 +476,11 @@ command_handler (char *command) extern int display_time; extern int display_space; -#if defined(TUI) - extern int insert_mode; -#endif - quit_flag = 0; if (instream == stdin && stdin_is_tty) reinitialize_more_filter (); old_chain = make_cleanup (null_cleanup, 0); -#if defined(TUI) - insert_mode = 0; -#endif /* If readline returned a NULL command, it means that the connection with the terminal is gone. This happens at the end of a testsuite run, after Expect has hung up @@ -643,7 +632,7 @@ command_line_handler (char *rl) { strcpy (linebuffer, readline_input_state.linebuffer); p = readline_input_state.linebuffer_ptr; - free (readline_input_state.linebuffer); + xfree (readline_input_state.linebuffer); more_to_come = 0; pop_prompt (); } @@ -690,26 +679,23 @@ command_line_handler (char *rl) while (*p1) *p++ = *p1++; - free (rl); /* Allocated in readline. */ + xfree (rl); /* Allocated in readline. */ if (*(p - 1) == '\\') { p--; /* Put on top of '\'. */ - if (*p == '\\') - { - readline_input_state.linebuffer = savestring (linebuffer, - strlen (linebuffer)); - readline_input_state.linebuffer_ptr = p; - - /* We will not invoke a execute_command if there is more - input expected to complete the command. So, we need to - print an empty prompt here. */ - more_to_come = 1; - push_prompt ("", "", ""); - display_gdb_prompt (0); - return; - } + readline_input_state.linebuffer = savestring (linebuffer, + strlen (linebuffer)); + readline_input_state.linebuffer_ptr = p; + + /* We will not invoke a execute_command if there is more + input expected to complete the command. So, we need to + print an empty prompt here. */ + more_to_come = 1; + push_prompt ("", "", ""); + display_gdb_prompt (0); + return; } #ifdef STOP_SIGNAL @@ -749,7 +735,7 @@ command_line_handler (char *rl) /* If there was an error, call this function again. */ if (expanded < 0) { - free (history_value); + xfree (history_value); return; } if (strlen (history_value) > linelength) @@ -759,7 +745,7 @@ command_line_handler (char *rl) } strcpy (linebuffer, history_value); p = linebuffer + strlen (linebuffer); - free (history_value); + xfree (history_value); } } @@ -868,7 +854,7 @@ gdb_readline2 (gdb_client_data client_data) if we are called again fgetc will still return EOF and we'll return NULL then. */ break; - free (result); + xfree (result); (*input_handler) (0); } @@ -1051,10 +1037,11 @@ async_stop_sig (gdb_client_data arg) #if HAVE_SIGPROCMASK { sigset_t zero; + sigemptyset (&zero); sigprocmask (SIG_SETMASK, &zero, 0); } -#else +#elif HAVE_SIGSETMASK sigsetmask (0); #endif kill (getpid (), SIGTSTP);