From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 116601 invoked by alias); 31 Jul 2017 20:26:17 -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 116589 invoked by uid 89); 31 Jul 2017 20:26:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: smtp.polymtl.ca Received: from smtp.polymtl.ca (HELO smtp.polymtl.ca) (132.207.4.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 31 Jul 2017 20:26:15 +0000 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id v6VKQ8qi005800 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 31 Jul 2017 16:26:13 -0400 Received: by simark.ca (Postfix, from userid 112) id BBFEE1EA01; Mon, 31 Jul 2017 16:26:08 -0400 (EDT) Received: from simark.ca (localhost [127.0.0.1]) by simark.ca (Postfix) with ESMTP id 747321E043; Mon, 31 Jul 2017 16:25:58 -0400 (EDT) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Mon, 31 Jul 2017 20:26:00 -0000 From: Simon Marchi To: Tom Tromey Cc: gdb-patches@sourceware.org Subject: Re: [RFA v2 23/24] Use gdb_argv in Python In-Reply-To: <20170725172107.9799-24-tom@tromey.com> References: <20170725172107.9799-1-tom@tromey.com> <20170725172107.9799-24-tom@tromey.com> Message-ID: <41562b374981ad8a150107c5ed1dfcb1@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.3.0 X-Poly-FromMTA: (simark.ca [158.69.221.121]) at Mon, 31 Jul 2017 20:26:08 +0000 X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg00458.txt.bz2 On 2017-07-25 19:21, Tom Tromey wrote: > This changes one spot in the Python code to use gdb_argv. This > removes the last cleanup from the Python layer. > > ChangeLog > 2017-07-25 Tom Tromey > > * python/py-param.c (compute_enum_values): Use gdb_argv. > --- > gdb/ChangeLog | 4 ++++ > gdb/python/py-param.c | 24 +++++++----------------- > 2 files changed, 11 insertions(+), 17 deletions(-) > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index 7dcc95e..4168f39 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,5 +1,9 @@ > 2017-07-25 Tom Tromey > > + * python/py-param.c (compute_enum_values): Use gdb_argv. > + > +2017-07-25 Tom Tromey > + > * utils.h (struct gdb_argv_deleter): New. > (gdb_argv): New class. > * utils.c (gdb_argv::reset): New method. > diff --git a/gdb/python/py-param.c b/gdb/python/py-param.c > index f0d3423..455c99e 100644 > --- a/gdb/python/py-param.c > +++ b/gdb/python/py-param.c > @@ -555,7 +555,6 @@ static int > compute_enum_values (parmpy_object *self, PyObject *enum_values) > { > Py_ssize_t size, i; > - struct cleanup *back_to; > > if (! enum_values) > { > @@ -581,36 +580,27 @@ compute_enum_values (parmpy_object *self, > PyObject *enum_values) > return 0; > } > > - self->enumeration = XCNEWVEC (const char *, size + 1); > - back_to = make_cleanup (free_current_contents, &self->enumeration); > + gdb_argv holder (XCNEWVEC (char *, size + 1)); > + char **enumeration = holder.get (); > > for (i = 0; i < size; ++i) > { > gdbpy_ref<> item (PySequence_GetItem (enum_values, i)); > > if (item == NULL) > - { > - do_cleanups (back_to); > - return 0; > - } > + return 0; > if (! gdbpy_is_string (item.get ())) > { > - do_cleanups (back_to); > PyErr_SetString (PyExc_RuntimeError, > _("The enumeration item not a string.")); > return 0; > } > - self->enumeration[i] > - = python_string_to_host_string (item.get ()).release (); > - if (self->enumeration[i] == NULL) > - { > - do_cleanups (back_to); > - return 0; > - } > - make_cleanup (xfree, (char *) self->enumeration[i]); > + enumeration[i] = python_string_to_host_string (item.get > ()).release (); > + if (enumeration[i] == NULL) > + return 0; > } > > - discard_cleanups (back_to); > + self->enumeration = const_cast (holder.release ()); > return 1; > } LGTM.