Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Sergio Durigan Junior <sergiodj@redhat.com>
Cc: GDB Patches <gdb-patches@sourceware.org>,
	Simon Marchi <simon.marchi@polymtl.ca>
Subject: Re: [PATCH v6] C++ify gdb/common/environ.c
Date: Mon, 19 Jun 2017 16:38:00 -0000	[thread overview]
Message-ID: <566ca0fa-e9ed-bc57-82d1-3152acc3dab2@redhat.com> (raw)
In-Reply-To: <87bmpkx8fb.fsf@redhat.com>


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):

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.

Thanks,
Pedro Alves


  reply	other threads:[~2017-06-19 16:38 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-13  4:05 [PATCH] " Sergio Durigan Junior
2017-04-15 18:51 ` [PATCH v2] " Sergio Durigan Junior
2017-04-15 21:22   ` Simon Marchi
2017-04-18  2:49     ` Sergio Durigan Junior
2017-04-16  5:09   ` Simon Marchi
2017-04-16 17:32     ` Sergio Durigan Junior
2017-04-18  3:03 ` [PATCH v3] " Sergio Durigan Junior
2017-04-19  4:56   ` Simon Marchi
2017-04-19 16:30     ` Pedro Alves
2017-04-19 18:14   ` Pedro Alves
2017-05-01  2:22     ` Sergio Durigan Junior
2017-05-04 15:30       ` Pedro Alves
2017-06-14 19:22 ` [PATCH v4] " Sergio Durigan Junior
2017-06-16 15:45   ` Pedro Alves
2017-06-16 18:01     ` Sergio Durigan Junior
2017-06-16 18:23       ` Pedro Alves
2017-06-16 21:59         ` Sergio Durigan Junior
2017-06-16 22:23 ` [PATCH v5] " Sergio Durigan Junior
2017-06-17  8:54   ` Simon Marchi
2017-06-19  4:19     ` Sergio Durigan Junior
2017-06-19 13:40       ` Pedro Alves
2017-06-19 16:19         ` Sergio Durigan Junior
2017-06-19 12:13     ` Pedro Alves
2017-06-20 14:02       ` Pedro Alves
2017-06-19  4:36 ` [PATCH v6] " Sergio Durigan Junior
2017-06-19  4:51   ` Sergio Durigan Junior
2017-06-19  7:18     ` Simon Marchi
2017-06-19 14:26       ` Pedro Alves
2017-06-19 15:30         ` Simon Marchi
2017-06-19 15:44           ` Pedro Alves
2017-06-19 15:47             ` Pedro Alves
2017-06-19 16:26             ` Simon Marchi
2017-06-19 16:55               ` Pedro Alves
2017-06-19 17:59                 ` Sergio Durigan Junior
2017-06-19 18:09                   ` Pedro Alves
2017-06-19 18:23                     ` Sergio Durigan Junior
2017-06-19 18:36                       ` Pedro Alves
2017-06-19 18:38                         ` Pedro Alves
2017-06-19 14:26   ` Pedro Alves
2017-06-19 16:13     ` Sergio Durigan Junior
2017-06-19 16:38       ` Pedro Alves [this message]
2017-06-19 16:46         ` Sergio Durigan Junior
2017-06-19 18:27 ` [PATCH v7] " Sergio Durigan Junior
2017-06-20  3:27 ` [PATCH v8] " Sergio Durigan Junior
2017-06-20 12:13   ` Pedro Alves
2017-06-20 12:46   ` Simon Marchi
2017-06-20 13:00     ` Sergio Durigan Junior

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=566ca0fa-e9ed-bc57-82d1-3152acc3dab2@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=sergiodj@redhat.com \
    --cc=simon.marchi@polymtl.ca \
    /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