Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v2 5/5] Eliminate make_cleanup_ui_file_delete / make  ui_file a class hierarchy
Date: Tue, 24 Jan 2017 19:11:00 -0000	[thread overview]
Message-ID: <91ab941736dd82a711868ea56651c20d@polymtl.ca> (raw)
In-Reply-To: <558e1e55-23eb-716e-8117-c18d7bded7b8@redhat.com>

On 2017-01-23 18:18, Pedro Alves wrote:
> diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c
> index ea64220..cc14d9d 100644
> --- a/gdb/aix-thread.c
> +++ b/gdb/aix-thread.c
> @@ -1762,43 +1762,42 @@ aix_thread_extra_thread_info (struct target_ops 
> *self,
>    if (!PD_TID (thread->ptid))
>      return NULL;
> 
> -  buf = mem_fileopen ();
> +  string_file buf;

You did not remove the old declaration of buf.

> 
>    pdtid = thread->priv->pdtid;
>    tid = thread->priv->tid;
> 
>    if (tid != PTHDB_INVALID_TID)
>      /* i18n: Like "thread-identifier %d, [state] running, suspended" 
> */
> -    fprintf_unfiltered (buf, _("tid %d"), (int)tid);
> +    buf.printf (_("tid %d"), (int)tid);
> 
>    status = pthdb_pthread_state (pd_session, pdtid, &state);
>    if (status != PTHDB_SUCCESS)
>      state = PST_NOTSUP;
> -  fprintf_unfiltered (buf, ", %s", state2str (state));
> +  buf.printf (", %s", state2str (state));
> 
>    status = pthdb_pthread_suspendstate (pd_session, pdtid,
>  				       &suspendstate);
>    if (status == PTHDB_SUCCESS && suspendstate == PSS_SUSPENDED)
>      /* i18n: Like "Thread-Id %d, [state] running, suspended" */
> -    fprintf_unfiltered (buf, _(", suspended"));
> +    buf.printf (_(", suspended"));
> 
>    status = pthdb_pthread_detachstate (pd_session, pdtid,
>  				      &detachstate);
>    if (status == PTHDB_SUCCESS && detachstate == PDS_DETACHED)
>      /* i18n: Like "Thread-Id %d, [state] running, detached" */
> -    fprintf_unfiltered (buf, _(", detached"));
> +    buf.printf (_(", detached"));
> 
>    pthdb_pthread_cancelpend (pd_session, pdtid, &cancelpend);
>    if (status == PTHDB_SUCCESS && cancelpend)
>      /* i18n: Like "Thread-Id %d, [state] running, cancel pending" */
> -    fprintf_unfiltered (buf, _(", cancel pending"));
> +    buf.printf (_(", cancel pending"));
> 
> -  ui_file_write (buf, "", 1);
> +  buf.write ("", 1);
> 
>    xfree (ret);			/* Free old buffer.  */
> 
> -  ret = ui_file_xstrdup (buf, NULL);
> -  ui_file_delete (buf);
> +  ret = xstrdup (buf.string ());

Can xstrdup take an std::string?  Implicit conversions only go the other 
way I think.

It might be worth sending the series on the buildbot to test AIX.

> 
>    return ret;
>  }
> diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
> index 2bdfa57..bc170b1 100644
> --- a/gdb/arm-tdep.c
> +++ b/gdb/arm-tdep.c
> @@ -9573,7 +9573,6 @@ extern initialize_file_ftype
> _initialize_arm_tdep; /* -Wmissing-prototypes */
>  void
>  _initialize_arm_tdep (void)
>  {
> -  struct ui_file *stb;
>    long length;
>    const char *setname;
>    const char *setdesc;
> @@ -9645,13 +9644,12 @@ _initialize_arm_tdep (void)
>    valid_disassembly_styles[num_disassembly_options] = NULL;
> 
>    /* Create the help text.  */
> -  stb = mem_fileopen ();
> -  fprintf_unfiltered (stb, "%s%s%s",
> -		      _("The valid values are:\n"),
> -		      regdesc,
> -		      _("The default is \"std\"."));
> -  helptext = ui_file_as_string (stb);
> -  ui_file_delete (stb);
> +  string_file stb;
> +  stb.printf ("%s%s%s",
> +	      _("The valid values are:\n"),
> +	      regdesc,
> +	      _("The default is \"std\"."));
> +  helptext = std::move (stb.string ());

I think having that static helptext variable is useless here.  The help 
text is copied in add_setshow_enum_cmd, so we don't need to keep 
helptext for the whole lifetime of the program.  We could pass stb.c_str 
() directly to add_setshow_enum_cmd.

> +class string_file : public ui_file
> +{
> +public:
> +  string_file () {}
> +  ~string_file () override;
> 
> -/* Returns a std::string containing the entire contents of FILE (as
> -   determined by ui_file_put()).  */
> -extern std::string ui_file_as_string (struct ui_file *file);
> +  /* Override ui_file methods.  */
> 
> -/* Similar to ui_file_xstrdup, but return a new string allocated on
> -   OBSTACK.  */
> -extern char *ui_file_obsavestring (struct ui_file *file,
> -				   struct obstack *obstack, long *length);
> +  void write (const char *buf, long length_buf) override;
> 
> -extern long ui_file_read (struct ui_file *file, char *buf, long 
> length_buf);
> +  long read (char *buf, long length_buf) override
> +  { gdb_assert_not_reached ("a string_file is not readable"); }
> +
> +  /* string_file-specific public API.  */
> +
> +  /* Accesses the std::string containing the entire output collected
> +     so far.  Returns a non-const reference so that it's easy to move
> +     the string contents out of the string_file.  */

I didn't understand what you meant by "to move the string contents 
out..." until I saw this

   helptext = std::move (stb.string ());

If it had been "to std::move the string contents out..." it might have 
been a bit clearer, I'm not entirely sure.

> --- a/gdb/utils.c
> +++ b/gdb/utils.c
> @@ -187,18 +187,6 @@ make_cleanup_obstack_free (struct obstack 
> *obstack)
>    return make_cleanup (do_obstack_free, obstack);
>  }
> 
> -static void
> -do_ui_file_delete (void *arg)
> -{
> -  ui_file_delete ((struct ui_file *) arg);
> -}
> -
> -struct cleanup *
> -make_cleanup_ui_file_delete (struct ui_file *arg)
> -{
> -  return make_cleanup (do_ui_file_delete, arg);
> -}
> -

You can remove the declaration in utils.h for this.

That's all for me.

Thanks!

Simon


  parent reply	other threads:[~2017-01-24 19:11 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-17  1:39 [PATCH 0/5] Eliminate cleanups & make ui_file a C++ " Pedro Alves
2017-01-17  1:39 ` [PATCH 3/5] gdb/stack.c: Remove unused mem_fileopen Pedro Alves
2017-01-17  1:39 ` [PATCH 1/5] gdb: make_scoped_restore and types convertible to T Pedro Alves
2017-01-17  1:39 ` [PATCH 5/5] Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy Pedro Alves
2017-01-17 19:57   ` Simon Marchi
2017-01-17 19:58     ` Simon Marchi
2017-01-23 16:58     ` Pedro Alves
2017-01-23 17:17       ` Pedro Alves
2017-01-23 19:18       ` Simon Marchi
2017-01-23 23:19         ` [PATCH v2 " Pedro Alves
2017-01-24 18:29           ` Simon Marchi
2017-01-24 19:14             ` Simon Marchi
2017-01-25 18:37               ` Pedro Alves
2017-01-25 17:52             ` Pedro Alves
2017-01-25 19:31               ` Pedro Alves
2017-01-25 19:47                 ` [PATCH v3 " Pedro Alves
2017-02-01  0:31                   ` Pedro Alves
2017-01-25 18:27             ` [PATCH v2 " Pedro Alves
2017-01-24 19:11           ` Simon Marchi [this message]
2017-01-25 18:28             ` Pedro Alves
2017-01-25 18:39               ` Simon Marchi
2017-01-25 18:41                 ` Pedro Alves
2017-01-17  1:39 ` [PATCH 2/5] gdb/varobj.c: Fix leak Pedro Alves
2017-01-17  1:47 ` [PATCH 4/5] gdb/mi/mi-interp.c: Fix typos Pedro Alves

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=91ab941736dd82a711868ea56651c20d@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@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