This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH 1 of 2] readline rl_prompt corruption fix


This is part 1 of 2 patches to fix readline rl_prompt string corruption
problem.  This patch is for the readline library that readline will
store a copy of the passed in prompt string.  The next patch is for
gdb/event-top.c to plug a mem leak due to this change.

- Jimmy

Fri Jul 28 09:58:55	Jimmy Guo	<guo@cup.hp.com>

	* readline.c: Initalize globals rl_initialized rl_prompt.
	(readline): Use a copy of prompt instead of itself when
	assigning to rl_prompt in readline ().

	* callback.c (rl_callback_handler_install): Use a copy of
	prompt instead of itself when assigning to rl_prompt.
	
	* display.c: Initialize local_prompt and local_prompt_prefix.

Index: readline.c
/usr/local/bin/diff -c -w -L readline.c readline.c@@/main/cygnus/6 readline.c
*** readline.c
--- readline.c	Fri Jul 28 09:57:29 2000
***************
*** 119,125 ****
  int rl_arg_sign = 1;
  
  /* Non-zero means we have been called at least once before. */
! static int rl_initialized;
  
  /* If non-zero, this program is running in an EMACS buffer. */
  static int running_in_emacs;
--- 119,125 ----
  int rl_arg_sign = 1;
  
  /* Non-zero means we have been called at least once before. */
! static int rl_initialized = 0;
  
  /* If non-zero, this program is running in an EMACS buffer. */
  static int running_in_emacs;
***************
*** 153,159 ****
  int readline_echoing_p = 1;
  
  /* Current prompt. */
! char *rl_prompt;
  int rl_visible_prompt_length = 0;
  
  /* Set to non-zero by calling application if it has already printed rl_prompt
--- 153,159 ----
  int readline_echoing_p = 1;
  
  /* Current prompt. */
! char *rl_prompt = NULL;
  int rl_visible_prompt_length = 0;
  
  /* Set to non-zero by calling application if it has already printed rl_prompt
***************
*** 251,257 ****
  {
    char *value;
  
!   rl_prompt = prompt;
  
    /* If we are at EOF return a NULL string. */
    if (rl_pending_input == EOF)
--- 251,259 ----
  {
    char *value;
  
!   if (rl_prompt)
!     free (rl_prompt);
!   rl_prompt = prompt ? strdup (prompt) : 0;
  
    /* If we are at EOF return a NULL string. */
    if (rl_pending_input == EOF)
***************
*** 260,266 ****
        return ((char *)NULL);
      }
  
!   rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
  
    rl_initialize ();
    (*rl_prep_term_function) (_rl_meta_flag);
--- 262,269 ----
        return ((char *)NULL);
      }
  
!   rl_visible_prompt_length = (rl_prompt && *rl_prompt) ?
!                              rl_expand_prompt (rl_prompt) : 0;
  
    rl_initialize ();
    (*rl_prep_term_function) (_rl_meta_flag);
Index: callback.c
/usr/local/bin/diff -c -w -L callback.c callback.c@@/main/cygnus/2 callback.c
*** callback.c
--- callback.c	Fri Jul 28 09:55:11 2000
***************
*** 81,88 ****
       char *prompt;
       VFunction *linefunc;
  {
!   rl_prompt = prompt;
!   rl_visible_prompt_length = rl_prompt ? rl_expand_prompt (rl_prompt) : 0;
    rl_linefunc = linefunc;
    _rl_callback_newline ();
  }
--- 81,91 ----
       char *prompt;
       VFunction *linefunc;
  {
!   if (rl_prompt)
!     free (rl_prompt);
!   rl_prompt = prompt ? strdup (prompt) : 0;
!   rl_visible_prompt_length = (rl_prompt && *rl_prompt) ?
!                              rl_expand_prompt (rl_prompt) : 0;
    rl_linefunc = linefunc;
    _rl_callback_newline ();
  }
Index: display.c
/usr/local/bin/diff -c -w -L display.c display.c@@/main/cygnus/7 display.c
*** display.c
--- display.c	Fri Jul 28 09:56:05 2000
***************
*** 146,152 ****
  /* Default and initial buffer size.  Can grow. */
  static int line_size = 1024;
  
! static char *local_prompt, *local_prompt_prefix;
  static int visible_length, prefix_length;
  
  /* The number of invisible characters in the line currently being
--- 146,152 ----
  /* Default and initial buffer size.  Can grow. */
  static int line_size = 1024;
  
! static char *local_prompt = NULL, *local_prompt_prefix = NULL;
  static int visible_length, prefix_length;
  
  /* The number of invisible characters in the line currently being


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]