From: Tanay Abhra <tanayabh@gmail.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: Git List <git@vger.kernel.org>,
Ramkumar Ramachandra <artagnon@gmail.com>,
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Subject: Re: [RFC/PATCH] pager.c: replace git_config with git_config_get_string
Date: Thu, 26 Jun 2014 13:54:10 +0530 [thread overview]
Message-ID: <53ABD8AA.10909@gmail.com> (raw)
In-Reply-To: <CAPig+cTwBB8bmKDtdv8zPojR+6Kyu6fYB7Sw0-UJoSHFLQX+fQ@mail.gmail.com>
On 6/25/2014 9:29 AM, Eric Sunshine wrote:
> On Mon, Jun 23, 2014 at 6:41 AM, Tanay Abhra <tanayabh@gmail.com> wrote:
>> Use git_config_get_string instead of git_config to take advantage of
>> the config hash-table api which provides a cleaner control flow.
>>
>> Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
>> ---
>> pager.c | 44 +++++++++++++++-----------------------------
>> 1 file changed, 15 insertions(+), 29 deletions(-)
>>
>> diff --git a/pager.c b/pager.c
>> index 8b5cbc5..96abe6d 100644
>> --- a/pager.c
>> +++ b/pager.c
>> @@ -6,12 +6,6 @@
>> #define DEFAULT_PAGER "less"
>> #endif
>>
>> -struct pager_config {
>> - const char *cmd;
>> - int want;
>> - char *value;
>> -};
>> -
>> /*
>> * This is split up from the rest of git so that we can do
>> * something different on Windows.
>> @@ -155,30 +149,22 @@ int decimal_width(int number)
>> return width;
>> }
>>
>> -static int pager_command_config(const char *var, const char *value, void *data)
>> -{
>> - struct pager_config *c = data;
>> - if (starts_with(var, "pager.") && !strcmp(var + 6, c->cmd)) {
>> - int b = git_config_maybe_bool(var, value);
>> - if (b >= 0)
>> - c->want = b;
>> - else {
>> - c->want = 1;
>> - c->value = xstrdup(value);
>> - }
>> - }
>> - return 0;
>> -}
>> -
>> /* returns 0 for "no pager", 1 for "use pager", and -1 for "not specified" */
>> int check_pager_config(const char *cmd)
>> {
>> - struct pager_config c;
>> - c.cmd = cmd;
>> - c.want = -1;
>> - c.value = NULL;
>> - git_config(pager_command_config, &c);
>> - if (c.value)
>> - pager_program = c.value;
>> - return c.want;
>> + struct strbuf key = STRBUF_INIT;
>> + int want = -1;
>> + const char *value = NULL;
>> + strbuf_addf(&key, "pager.%s", cmd);
>> + if (!git_config_get_string(key.buf, &value)) {
>> + int b = git_config_maybe_bool(key.buf, value);
>> + if (b >= 0)
>> + want = b;
>> + else
>> + want = 1;
>> + }
>> + if (value)
>> + pager_program = value;
>
> Two issues:
>
> First, why is 'if(value)' standing by itself? Although this works, it
> seems to imply that 'value' might be able to become non-NULL by some
> mechanism other than the get_config_maybe_bool() call, which means
> that people reading this code have to spend extra time trying to
> understand the overall logic. If you follow the example of the
> original code, where 'value' is only ever set when 'b < 0', then it is
> obvious even to the most casual reader that 'pager_program' is
> assigned only for that one condition.
>
Noted.
> Second, don't you want to xstrdup(value) when assigning to
> 'pager_program'? If you don't, then 'pager_program' will become a
> dangling pointer when config_cache_free() is invoked.
>
Noted. Thanks.
>> + strbuf_release(&key);
>> + return want;
>> }
>> --
>> 1.9.0.GIT
>
next prev parent reply other threads:[~2014-06-26 8:24 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-23 10:41 [RFC/PATCH V2] alias.c: replace git_config with git_config_get_string Tanay Abhra
2014-06-23 10:41 ` [RFC/PATCH V2] branch.c: " Tanay Abhra
2014-06-25 4:45 ` Eric Sunshine
2014-06-26 8:09 ` Tanay Abhra
2014-06-29 11:06 ` Eric Sunshine
2014-06-23 10:41 ` [RFC/PATCH] imap-send.c: " Tanay Abhra
2014-06-25 7:09 ` Eric Sunshine
2014-06-26 8:14 ` Tanay Abhra
2014-06-26 16:50 ` Matthieu Moy
2014-06-26 23:57 ` Karsten Blees
2014-06-23 10:41 ` [RFC/PATCH] notes-util.c: " Tanay Abhra
2014-06-25 7:54 ` Eric Sunshine
2014-06-26 8:19 ` Tanay Abhra
2014-06-29 11:01 ` Eric Sunshine
2014-06-30 13:34 ` Karsten Blees
2014-06-30 14:32 ` Eric Sunshine
2014-06-30 14:54 ` Karsten Blees
2014-06-30 14:39 ` Tanay Abhra
2014-06-30 15:56 ` Karsten Blees
2014-06-30 16:21 ` Tanay Abhra
2014-06-30 17:52 ` Junio C Hamano
2014-07-01 8:36 ` Matthieu Moy
2014-06-23 10:41 ` [RFC/PATCH] notes.c: " Tanay Abhra
2014-06-25 8:06 ` Eric Sunshine
2014-06-26 8:20 ` Tanay Abhra
2014-06-23 10:41 ` [RFC/PATCH] pager.c: " Tanay Abhra
2014-06-25 3:59 ` Eric Sunshine
2014-06-26 8:24 ` Tanay Abhra [this message]
2014-06-26 18:46 ` Karsten Blees
2014-06-27 11:55 ` Matthieu Moy
2014-06-27 16:57 ` Karsten Blees
2014-06-27 19:19 ` Matthieu Moy
2014-06-28 5:20 ` Karsten Blees
2014-06-28 6:01 ` Matthieu Moy
2014-06-28 14:29 ` Karsten Blees
2014-06-29 12:04 ` Matthieu Moy
2014-06-23 22:38 ` [RFC/PATCH V2] alias.c: " Jonathan Nieder
2014-06-24 1:50 ` Tanay Abhra
2014-06-25 2:12 ` Eric Sunshine
2014-06-26 8:24 ` Tanay Abhra
2014-06-26 16:39 ` Matthieu Moy
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=53ABD8AA.10909@gmail.com \
--to=tanayabh@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=artagnon@gmail.com \
--cc=git@vger.kernel.org \
--cc=sunshine@sunshineco.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;
as well as URLs for NNTP newsgroup(s).