Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [patch, rfc] Delete "set prompt-escape-char" command
@ 2003-08-07 23:15 Andrew Cagney
  2003-08-08  1:01 ` Bob Rossi
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Cagney @ 2003-08-07 23:15 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 333 bytes --]

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 :-)

[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 8730 bytes --]

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\

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [patch, rfc] Delete "set prompt-escape-char" command
  2003-08-07 23:15 [patch, rfc] Delete "set prompt-escape-char" command Andrew Cagney
@ 2003-08-08  1:01 ` Bob Rossi
  2003-08-16 18:39   ` Andrew Cagney
  0 siblings, 1 reply; 3+ messages in thread
From: Bob Rossi @ 2003-08-08  1:01 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: gdb-patches

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\


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [patch, rfc] Delete "set prompt-escape-char" command
  2003-08-08  1:01 ` Bob Rossi
@ 2003-08-16 18:39   ` Andrew Cagney
  0 siblings, 0 replies; 3+ messages in thread
From: Andrew Cagney @ 2003-08-16 18:39 UTC (permalink / raw)
  To: Bob Rossi; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 695 bytes --]

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

Good point, the attached, which I've committed, includes a NEWS entry.

> (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.

I'd like to know how :-)  It isn't documented and its behavior, without 
very careful study of the source, is impossible to decipher and pretty 
much guarenteed to be non-portable :-(

Andrew


[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 9374 bytes --]

2003-08-16  Andrew Cagney  <cagney@redhat.com>

	* NEWS: Mention that "set prompt-escape-char" was deleted.
	* 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: NEWS
===================================================================
RCS file: /cvs/src/src/gdb/NEWS,v
retrieving revision 1.116
diff -u -r1.116 NEWS
--- NEWS	8 Aug 2003 22:26:37 -0000	1.116
+++ NEWS	16 Aug 2003 18:37:04 -0000
@@ -3,6 +3,12 @@
 
 *** Changes since GDB 6.0:
 
+* "set prompt-escape-char" command deleted.
+
+The command "set prompt-escape-char" has been deleted.  This command,
+and its very obscure effet on GDB's prompt, was never documented,
+tested, nor mentioned in the NEWS file.
+
 *** Changes in GDB 6.0:
 
 * GDB supports logging output to a file
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	16 Aug 2003 18:37:04 -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\

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-08-16 18:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-07 23:15 [patch, rfc] Delete "set prompt-escape-char" command Andrew Cagney
2003-08-08  1:01 ` Bob Rossi
2003-08-16 18:39   ` Andrew Cagney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox