From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 39470 invoked by alias); 28 Sep 2017 09:57:14 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 39460 invoked by uid 89); 28 Sep 2017 09:57:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=pretend X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 28 Sep 2017 09:57:12 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8118E641F9; Thu, 28 Sep 2017 09:57:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8118E641F9 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=palves@redhat.com Received: from [127.0.0.1] (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id D6253177CD; Thu, 28 Sep 2017 09:57:10 +0000 (UTC) Subject: Re: [RFA 08/11] Use string and unique_xmalloc_ptr in mi-main.c To: Tom Tromey , gdb-patches@sourceware.org References: <20170912185736.20436-1-tom@tromey.com> <20170912185736.20436-9-tom@tromey.com> From: Pedro Alves Message-ID: <106d764a-be15-161a-355e-323e7e28a036@redhat.com> Date: Thu, 28 Sep 2017 09:57:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <20170912185736.20436-9-tom@tromey.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2017-09/txt/msg00858.txt.bz2 On 09/12/2017 07:57 PM, Tom Tromey wrote: > Change a couple of spots in mi-main.c to use std::string or > unique_xmalloc_ptr. unique_xmalloc_ptr is used here where the string > is writeable; I generally prefer to pretend that string is read-only, > perhaps not for a good resaon. Yes, I think not for a good reason. :-) You can pass &str[0] to execute_command get access to the underlying modifiable raw string. See b064640146bb for example. > diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c > index c8c4a97..0147fb9 100644 > --- a/gdb/mi/mi-main.c > +++ b/gdb/mi/mi-main.c > @@ -2264,41 +2264,31 @@ mi_execute_cli_command (const char *cmd, int args_p, const char *args) > { > if (cmd != 0) > { > - struct cleanup *old_cleanups; > - char *run; > + gdb::unique_xmalloc_ptr run; > > if (args_p) > - run = xstrprintf ("%s %s", cmd, args); > + run.reset (xstrprintf ("%s %s", cmd, args)); > else > - run = xstrdup (cmd); > + run.reset (xstrdup (cmd)); > if (mi_debug_p) > /* FIXME: gdb_???? */ > fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n", > - cmd, run); > - old_cleanups = make_cleanup (xfree, run); > - execute_command (run, 0 /* from_tty */ ); > - do_cleanups (old_cleanups); > - return; > + cmd, run.get ()); > + execute_command (run.get (), 0 /* from_tty */ ); > } > } > > void > mi_execute_async_cli_command (const char *cli_command, char **argv, int argc) > { > - struct cleanup *old_cleanups; > - char *run; > + gdb::unique_xmalloc_ptr run; > > if (mi_async_p ()) > - run = xstrprintf ("%s %s&", cli_command, argc ? *argv : ""); > + run.reset (xstrprintf ("%s %s&", cli_command, argc ? *argv : "")); > else > - run = xstrprintf ("%s %s", cli_command, argc ? *argv : ""); > - old_cleanups = make_cleanup (xfree, run); > - > - execute_command (run, 0 /* from_tty */ ); > + run.reset (xstrprintf ("%s %s", cli_command, argc ? *argv : "")); > > - /* Do this before doing any printing. It would appear that some > - print code leaves garbage around in the buffer. */ > - do_cleanups (old_cleanups); > + execute_command (run.get (), 0 /* from_tty */ ); > } > I think the above would look better with std::string + string_printf. > struct trace_state_variable *tsv; > @@ -2822,10 +2808,8 @@ mi_cmd_trace_frame_collected (const char *command, char **argv, int argc) > > if (tsv != NULL) > { > - tsvname = (char *) xrealloc (tsvname, strlen (tsv->name) + 2); > - tsvname[0] = '$'; > - strcpy (tsvname + 1, tsv->name); > - uiout->field_string ("name", tsvname); > + std::string tsvname = std::string ("$") + tsv->name; > + uiout->field_string ("name", tsvname.c_str ()); How about replacing this string building + field_string with a single call to: uiout->field_fmt ("name", "$%s", tsv->name); Thanks, Pedro Alves