Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Bob Rossi <bob@brasko.net>
To: Andrew Cagney <ac131313@redhat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [patch, rfc] Delete "set prompt-escape-char" command
Date: Fri, 08 Aug 2003 01:01:00 -0000	[thread overview]
Message-ID: <20030808010142.GA22345@white> (raw)
In-Reply-To: <3F32DD86.90407@redhat.com>

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 @@
>  \f
>  /* 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\


  reply	other threads:[~2003-08-08  1:01 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-07 23:15 Andrew Cagney
2003-08-08  1:01 ` Bob Rossi [this message]
2003-08-16 18:39   ` Andrew Cagney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030808010142.GA22345@white \
    --to=bob@brasko.net \
    --cc=ac131313@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox