RFA: Convert to add_setshow_cmd

Andrew Cagney ac131313@ges.redhat.com
Wed Jul 10 20:46:00 GMT 2002


> This patch changes gdb to use add_setshow_cmd everywhere it used to
> use add_show_from_set.  This patch actually consists of several
> different parts.  I couldn't think of a simple way to separate the
> parts that didn't involve a lot of redundant work on my part.  I've
> already done several passes over the source; the thought of more is
> unpalatable.  Though more are in my future :-(
> 
> * Add a new `print doc' argument to add_setshow_cmd.
>   This is used to format the `show foo' output
> 
> * Add a corresponding field to struct cmd_list_element
> 
> * Update test suite to reflect (minor) changes to gdb's output
> 
> * Removed set_verbose function.  It was easier to remove than to fix,
>   and anyway the joke is stale now.
> 
> * Added add_setshow_enum_cmd, updated all callers
> 
> * Added argument to add_setshow_auto_boolean_cmd and
>   add_setshow_boolean_cmd.  This is the `print doc' argument as with
>   add_setshow_cmd.  Updated all callers.
> 
> In some of the appended, all the strings in a given file are marked.
> I can try to back out that part of the patch if you'd prefer to review
> those changes separately.
> 
> This runs the gdb test suite on my box (x86 Red Hat Linux 7.3) with no
> regressions.  It also compiles with -Werror enabled.  I've only built
> the native configuration.
> 
> Once this goes in my plan is to remove add_show_from_set entirely.
> 
> Comments?  Critiques?  Questions?  Ok to commit?

I think it is too big for a single patch - I'm seeing a number of things 
that might need a comment/question and that is causing an internal 
overflow :-(

Looking at what was changed, I think this:

>> * Add a new `print doc' argument to add_setshow_cmd.
>>   This is used to format the `show foo' output

can be isolated and once that is done the rest becomes incremental. 
Looking at this specific change I see:

> Index: cli/cli-setshow.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/cli/cli-setshow.c,v
> retrieving revision 1.8
> diff -u -r1.8 cli-setshow.c
> --- cli/cli-setshow.c 15 Jun 2002 18:45:32 -0000 1.8
> +++ cli/cli-setshow.c 1 Jul 2002 18:24:47 -0000
> @@ -258,7 +258,8 @@
>      {
>        struct cleanup *old_chain;
>        struct ui_stream *stb;
> -      int quote;
> +      int quote, len;
> +      char *text, *ps, *tem;
>  
>        stb = ui_out_stream_new (uiout);
>        old_chain = make_cleanup_ui_out_stream_delete (stb);
> @@ -267,11 +268,23 @@
>        if (c->pre_show_hook)
>  	(c->pre_show_hook) (c);
>  
> -      /* Print doc minus "show" at start.  */
> -      print_doc_line (gdb_stdout, c->doc + 5);
> +      /* Translate and print the `show' string.  We deal with the `%s'
> +	 by hand to simplify some of the processing -- this way we
> +	 don't have to figure out how to allocate a temporary buffer.  */
> +      text = gettext (c->print_doc);
> +      ps = strstr (text, "%s");
> +      len = strlen (text);
> +      if (! ps)
> +	internal_error (__FILE__, __LINE__,
> +			"do_setshow_command: invalid translation");
> +      if (ps - text > len)
> +	len = ps - text;
> +      tem = xmalloc (len + 1);
> +      strncpy (tem, text, ps - text);
> +      tem[ps - text] = '\0';
> +
> +      ui_out_text (uiout, tem);
>  
> -      ui_out_text (uiout, " is ");
> -      ui_out_wrap_hint (uiout, "    ");
>        quote = 0;
>        switch (c->var_type)
>  	{
> @@ -339,7 +352,13 @@
>        ui_out_field_stream (uiout, "value", stb);
>        if (quote)
>  	ui_out_text (uiout, "\"");
> -      ui_out_text (uiout, ".\n");
> +
> +      strcpy (tem, ps + 2);
> +      ui_out_text (uiout, tem);
> +      xfree (tem);
> +
> +      ui_out_text (uiout, "\n");
> +
>        do_cleanups (old_chain);
>      }
>    else

Can this be written using:

	if (c->print_cmd != NULL)
	  new-code
	else
	  old-code

I think, that way, the need to convert everything to the new print_cmd 
in a single hit is eliminated.  It also ensures that anything missed 
still works.

Andrew





More information about the Gdb-patches mailing list