From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 67549 invoked by alias); 19 Jun 2017 16:46:07 -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 52592 invoked by uid 89); 19 Jun 2017 16:45:55 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=BAYES_00,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 spammy=emphasis 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; Mon, 19 Jun 2017 16:45:40 +0000 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5056680B20; Mon, 19 Jun 2017 16:45:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5056680B20 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=sergiodj@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5056680B20 Received: from localhost (unused-10-15-17-193.yyz.redhat.com [10.15.17.193]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2777181A9E; Mon, 19 Jun 2017 16:45:34 +0000 (UTC) From: Sergio Durigan Junior To: Pedro Alves Cc: GDB Patches , Simon Marchi Subject: Re: [PATCH v6] C++ify gdb/common/environ.c References: <20170413040455.23996-1-sergiodj@redhat.com> <20170619043531.32394-1-sergiodj@redhat.com> <87bmpkx8fb.fsf@redhat.com> <566ca0fa-e9ed-bc57-82d1-3152acc3dab2@redhat.com> Date: Mon, 19 Jun 2017 16:46:00 -0000 In-Reply-To: <566ca0fa-e9ed-bc57-82d1-3152acc3dab2@redhat.com> (Pedro Alves's message of "Mon, 19 Jun 2017 17:38:10 +0100") Message-ID: <87zid4vscy.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg00528.txt.bz2 On Monday, June 19 2017, Pedro Alves wrote: > On 06/19/2017 05:13 PM, Sergio Durigan Junior wrote: >> On Monday, June 19 2017, Pedro Alves wrote: > >>>> + >>>> + gdb_environ env; >>>> + >>>> + SELF_CHECK (env.envp ()[0] == NULL); >>>> + >>>> + SELF_CHECK (env.get ("PWD") == NULL); >>>> + env.set ("PWD", "test"); >>>> + env.unset ("PWD"); >>>> + >>> >>> Please add another >>> >>> SELF_CHECK (env.envp ()[0] == NULL); >>> >>> after the unset. I didn't spot any check making sure >>> that invariant holds after an unset. >> >> This invariant is not supposed to hold after every unset, only after a >> clear or after an unset that removes the only variable in the vector. > > ... which is exactly the case above. And for unsets where there are > still elements, the invariant is that the last element is NULL > [which is of course the same invariant]. So maybe we should have a > little function like this (could reuse countargv too): Yes, I know, I was just correcting the last part of your sentence: I didn't spot any check making sure that invariant holds after *an* unset. (emphasis mine) > static size_t > countenvp (const gdb_environ &env) > { > char **envp = env.envp (); > size_t count = 0; > while (envp[count] != NULL) > count++; > return count; > } > > Used instead of the NULL SELF_CHECKs, like: > > gdb_environ env; > > /* This makes sure that env.envp() is NULL terminated. */ > SELF_CHECK (countenvp (env) == 0); > > /* ENV is empty, so we shouldn't be able to find any var. */ > SELF_CHECK (env.get ("PWD") == NULL); > > /* Set a var, and make sure that env.envp() is still NULL > terminated. */ > env.set ("PWD", "test"); > SELF_CHECK (countenvp (env) == 1); > > /* Clear the var and make sure that env.envp() is left NULL > terminated when we remove the last element. */ > env.unset ("PWD"); > SELF_CHECK (countenvp (env) == 0); > > etc. > > I find that adding guiding comments like above helps, btw. Right, I'll add guiding comments. Thanks, -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible http://sergiodj.net/