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]
Other format: [Raw text]

Re: [patch, rfc] Delete "set prompt-escape-char" command


Geez, I would hope that the NEWS would mention it.

(gdb) apropos prompt
end -- Ends a list of commands or actions
set prompt -- Set gdb's prompt
set prompt-escape-char -- Set escape character for formatting of gdb's prompt
show prompt -- Show gdb's prompt
show prompt-escape-char -- Show escape character for formatting of gdb's prompt

I was tempted to use that feature for my front end, but decided not too.

Bob Rossi


On Thu, Aug 07, 2003 at 07:15:18PM -0400, Andrew Cagney wrote:
> Hello,
> 
> Following up the thread: set prompt-escape-character
> http://sources.redhat.com/ml/gdb/2003-08/msg00051.html
> 
> this deletes the never documented "set prompt-escape-char" command and 
> associated prompt ``feature''.  Comments?  Objections?  Should the NEWS 
> file even mention this?
> 
> Andrew (hopeing this will quietly go away :-)

> 2003-08-07  Andrew Cagney  <cagney@redhat.com>
> 
> 	* top.c (get_prompt_1): Delete function.
> 	(gdb_prompt_escape):
> 	(init_main): Do not clear "gdb_prompt_escape".  Delete "set
> 	prompt-escape-char" command.
> 	(MAX_PROMPT_SIZE): Delete macro.
> 	(get_prompt): Simplify, do not call get_prompt_1.
> 
> Index: top.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/top.c,v
> retrieving revision 1.74
> diff -u -r1.74 top.c
> --- top.c	4 Aug 2003 17:08:23 -0000	1.74
> +++ top.c	7 Aug 2003 22:50:36 -0000
> @@ -1388,267 +1388,13 @@
>  
>  /* get_prompt: access method for the GDB prompt string.  */
>  
> -#define MAX_PROMPT_SIZE 256
> -
> -/*
> - * int get_prompt_1 (char * buf);
> - *
> - * Work-horse for get_prompt (called via catch_errors).
> - * Argument is buffer to hold the formatted prompt.
> - *
> - * Returns: 1 for success (use formatted prompt)
> - *          0 for failure (use gdb_prompt_string).
> - */
> -
> -static int gdb_prompt_escape;
> -
> -static int
> -get_prompt_1 (void *data)
> -{
> -  char *formatted_prompt = data;
> -  char *local_prompt;
> -
> -  if (event_loop_p)
> -    local_prompt = PROMPT (0);
> -  else
> -    local_prompt = gdb_prompt_string;
> -
> -
> -  if (gdb_prompt_escape == 0)
> -    {
> -      return 0;			/* do no formatting */
> -    }
> -  else
> -    /* formatted prompt */
> -    {
> -      char fmt[40], *promptp, *outp, *tmp;
> -      struct value *arg_val;
> -      DOUBLEST doubleval;
> -      LONGEST longval;
> -      CORE_ADDR addrval;
> -
> -      int i, len;
> -      struct type *arg_type, *elt_type;
> -
> -      promptp = local_prompt;
> -      outp = formatted_prompt;
> -
> -      while (*promptp != '\0')
> -	{
> -	  int available = MAX_PROMPT_SIZE - (outp - formatted_prompt) - 1;
> -
> -	  if (*promptp != gdb_prompt_escape)
> -	    {
> -	      if (available >= 1)	/* overflow protect */
> -		*outp++ = *promptp++;
> -	    }
> -	  else
> -	    {
> -	      /* GDB prompt string contains escape char.  Parse for arg.
> -	         Two consecutive escape chars followed by arg followed by
> -	         a comma means to insert the arg using a default format.
> -	         Otherwise a printf format string may be included between
> -	         the two escape chars.  eg:
> -	         %%foo, insert foo using default format
> -	         %2.2f%foo,     insert foo using "%2.2f" format
> -	         A mismatch between the format string and the data type
> -	         of "foo" is an error (which we don't know how to protect
> -	         against).  */
> -
> -	      fmt[0] = '\0';	/* assume null format string */
> -	      if (promptp[1] == gdb_prompt_escape)	/* double esc char */
> -		{
> -		  promptp += 2;	/* skip past two escape chars. */
> -		}
> -	      else
> -		{
> -		  /* extract format string from between two esc chars */
> -		  i = 0;
> -		  do
> -		    {
> -		      fmt[i++] = *promptp++;	/* copy format string */
> -		    }
> -		  while (i < sizeof (fmt) - 1 &&
> -			 *promptp != gdb_prompt_escape &&
> -			 *promptp != '\0');
> -
> -		  if (*promptp != gdb_prompt_escape)
> -		    error ("Syntax error at prompt position %d",
> -			   (int) (promptp - local_prompt));
> -		  else
> -		    {
> -		      promptp++;	/* skip second escape char */
> -		      fmt[i++] = '\0';	/* terminate the format string */
> -		    }
> -		}
> -
> -	      arg_val = parse_to_comma_and_eval (&promptp);
> -	      if (*promptp == ',')
> -		promptp++;	/* skip past the comma */
> -	      arg_type = check_typedef (VALUE_TYPE (arg_val));
> -	      switch (TYPE_CODE (arg_type))
> -		{
> -		case TYPE_CODE_ARRAY:
> -		  elt_type = check_typedef (TYPE_TARGET_TYPE (arg_type));
> -		  if (TYPE_LENGTH (arg_type) > 0 &&
> -		      TYPE_LENGTH (elt_type) == 1 &&
> -		      TYPE_CODE (elt_type) == TYPE_CODE_INT)
> -		    {
> -		      int len = TYPE_LENGTH (arg_type);
> -
> -		      if (VALUE_LAZY (arg_val))
> -			value_fetch_lazy (arg_val);
> -		      tmp = VALUE_CONTENTS (arg_val);
> -
> -		      if (len > available)
> -			len = available;	/* overflow protect */
> -
> -		      /* FIXME: how to protect GDB from crashing
> -		         from bad user-supplied format string? */
> -		      if (fmt[0] != 0)
> -			sprintf (outp, fmt, tmp);
> -		      else
> -			strncpy (outp, tmp, len);
> -		      outp[len] = '\0';
> -		    }
> -		  break;
> -		case TYPE_CODE_PTR:
> -		  elt_type = check_typedef (TYPE_TARGET_TYPE (arg_type));
> -		  addrval = value_as_address (arg_val);
> -
> -		  if (TYPE_LENGTH (elt_type) == 1 &&
> -		      TYPE_CODE (elt_type) == TYPE_CODE_INT &&
> -		      addrval != 0)
> -		    {
> -		      /* display it as a string */
> -		      char *default_fmt = "%s";
> -		      char *tmp;
> -		      int err = 0;
> -
> -		      /* Limiting the number of bytes that the following call
> -		         will read protects us from sprintf overflow later. */
> -		      i = target_read_string (addrval,	/* src */
> -					      &tmp,	/* dest */
> -					      available,	/* len */
> -					      &err);
> -		      if (err)	/* read failed */
> -			error ("%s on target_read", safe_strerror (err));
> -
> -		      tmp[i] = '\0';	/* force-terminate string */
> -		      /* FIXME: how to protect GDB from crashing
> -		         from bad user-supplied format string? */
> -		      sprintf (outp, fmt[0] == 0 ? default_fmt : fmt,
> -			       tmp);
> -		      xfree (tmp);
> -		    }
> -		  else
> -		    {
> -		      /* display it as a pointer */
> -		      char *default_fmt = "0x%x";
> -
> -		      /* FIXME: how to protect GDB from crashing
> -		         from bad user-supplied format string? */
> -		      if (available >= 16 /*? */ )	/* overflow protect */
> -			sprintf (outp, fmt[0] == 0 ? default_fmt : fmt,
> -				 (long) addrval);
> -		    }
> -		  break;
> -		case TYPE_CODE_FLT:
> -		  {
> -		    char *default_fmt = "%g";
> -
> -		    doubleval = value_as_double (arg_val);
> -		    /* FIXME: how to protect GDB from crashing
> -		       from bad user-supplied format string? */
> -		    if (available >= 16 /*? */ )	/* overflow protect */
> -		      sprintf (outp, fmt[0] == 0 ? default_fmt : fmt,
> -			       (double) doubleval);
> -		    break;
> -		  }
> -		case TYPE_CODE_INT:
> -		  {
> -		    char *default_fmt = "%d";
> -
> -		    longval = value_as_long (arg_val);
> -		    /* FIXME: how to protect GDB from crashing
> -		       from bad user-supplied format string? */
> -		    if (available >= 16 /*? */ )	/* overflow protect */
> -		      sprintf (outp, fmt[0] == 0 ? default_fmt : fmt,
> -			       (long) longval);
> -		    break;
> -		  }
> -		case TYPE_CODE_BOOL:
> -		  {
> -		    /* no default format for bool */
> -		    longval = value_as_long (arg_val);
> -		    if (available >= 8 /*? */ )		/* overflow protect */
> -		      {
> -			if (longval)
> -			  strcpy (outp, "<true>");
> -			else
> -			  strcpy (outp, "<false>");
> -		      }
> -		    break;
> -		  }
> -		case TYPE_CODE_ENUM:
> -		  {
> -		    /* no default format for enum */
> -		    longval = value_as_long (arg_val);
> -		    len = TYPE_NFIELDS (arg_type);
> -		    /* find enum name if possible */
> -		    for (i = 0; i < len; i++)
> -		      if (TYPE_FIELD_BITPOS (arg_type, i) == longval)
> -			break;	/* match -- end loop */
> -
> -		    if (i < len)	/* enum name found */
> -		      {
> -			char *name = TYPE_FIELD_NAME (arg_type, i);
> -
> -			strncpy (outp, name, available);
> -			/* in casel available < strlen (name), */
> -			outp[available] = '\0';
> -		      }
> -		    else
> -		      {
> -			if (available >= 16 /*? */ )	/* overflow protect */
> -			  sprintf (outp, "%ld", (long) longval);
> -		      }
> -		    break;
> -		  }
> -		case TYPE_CODE_VOID:
> -		  *outp = '\0';
> -		  break;	/* void type -- no output */
> -		default:
> -		  error ("bad data type at prompt position %d",
> -			 (int) (promptp - local_prompt));
> -		  break;
> -		}
> -	      outp += strlen (outp);
> -	    }
> -	}
> -      *outp++ = '\0';		/* terminate prompt string */
> -      return 1;
> -    }
> -}
> -
>  char *
>  get_prompt (void)
>  {
> -  static char buf[MAX_PROMPT_SIZE];
> -
> -  if (catch_errors (get_prompt_1, buf, "bad formatted prompt: ",
> -		    RETURN_MASK_ALL))
> -    {
> -      return &buf[0];		/* successful formatted prompt */
> -    }
> +  if (event_loop_p)
> +    return PROMPT (0);
>    else
> -    {
> -      /* Prompt could not be formatted.  */
> -      if (event_loop_p)
> -	return PROMPT (0);
> -      else
> -	return gdb_prompt_string;
> -    }
> +    return gdb_prompt_string;
>  }
>  
>  void
> @@ -1946,7 +1692,6 @@
>        if (annotation_level > 1)
>          set_async_annotation_level (NULL, 0, NULL);
>      }
> -  gdb_prompt_escape = 0;	/* default to none.  */
>  
>    /* Set the important stuff up for command editing.  */
>    command_editing_p = 1;
> @@ -1985,13 +1730,6 @@
>        add_show_from_set (c, &showlist);
>        set_cmd_sfunc (c, set_async_prompt);
>      }
> -
> -  add_show_from_set
> -    (add_set_cmd ("prompt-escape-char", class_support, var_zinteger,
> -		  (char *) &gdb_prompt_escape,
> -		  "Set escape character for formatting of gdb's prompt",
> -		  &setlist),
> -     &showlist);
>  
>    add_com ("dont-repeat", class_support, dont_repeat_command, "Don't repeat this command.\n\
>  Primarily used inside of user-defined commands that should not be repeated when\n\


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