All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tanay Abhra <tanayabh@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Ramkumar Ramachandra <artagnon@gmail.com>,
	Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Subject: Re: [PATCH 0/7] Rewrite `git_config()` using config-set API
Date: Thu, 24 Jul 2014 20:34:24 +0530	[thread overview]
Message-ID: <53D12078.2070004@gmail.com> (raw)
In-Reply-To: <xmqqiomnda1y.fsf@gitster.dls.corp.google.com>

> 
> Are you done with the original series, or do you still want to fix
> the const-ness issue with the string pointer before working on
> follow-up topics like this one?
>

I am attaching the v12 with two new functions git_configset_get_string() &
git_configset_get_string_const().

Diff between v11 and v12 is appended below for easy review.

-- 8< --
diff --git a/Documentation/technical/api-config.txt b/Documentation/technical/api-config.txt
index 8a86e45..815c1ee 100644
--- a/Documentation/technical/api-config.txt
+++ b/Documentation/technical/api-config.txt
@@ -138,13 +138,18 @@ as well as retrieval for the queried variable, including:
 	Similar to `git_config_get_bool`, except that it returns -1 on error
 	rather than dying.

-`int git_config_get_string(const char *key, const char **dest)`::
+`int git_config_get_string_const(const char *key, const char **dest)`::

 	Allocates and copies the retrieved string into the `dest` parameter for
 	the configuration variable `key`; if NULL string is given, prints an
 	error message and returns -1. When the configuration variable `key` is
 	not found, returns 1 without touching `dest`.

+`int git_config_get_string(const char *key, char **dest)`::
+
+	Similar to `git_config_get_string_const`, except that retrieved value
+	copied into the `dest` parameter is a mutable string.
+
 `int git_config_get_pathname(const char *key, const char **dest)`::

 	Similar to `git_config_get_string`, but expands `~` or `~user` into
diff --git a/cache.h b/cache.h
index 2f63fd1..7292aef 100644
--- a/cache.h
+++ b/cache.h
@@ -1361,7 +1361,8 @@ extern int git_configset_add_file(struct config_set *cs, const char *filename);
 extern int git_configset_get_value(struct config_set *cs, const char *key, const char **value);
 extern const struct string_list *git_configset_get_value_multi(struct config_set *cs, const char *key);
 extern void git_configset_clear(struct config_set *cs);
-extern int git_configset_get_string(struct config_set *cs, const char *key, const char **dest);
+extern int git_configset_get_string_const(struct config_set *cs, const char *key, const char **dest);
+extern int git_configset_get_string(struct config_set *cs, const char *key, char **dest);
 extern int git_configset_get_int(struct config_set *cs, const char *key, int *dest);
 extern int git_configset_get_ulong(struct config_set *cs, const char *key, unsigned long *dest);
 extern int git_configset_get_bool(struct config_set *cs, const char *key, int *dest);
@@ -1373,7 +1374,8 @@ extern int git_config_get_value(const char *key, const char **value);
 extern const struct string_list *git_config_get_value_multi(const char *key);
 extern void git_config_clear(void);
 extern void git_config_iter(config_fn_t fn, void *data);
-extern int git_config_get_string(const char *key, const char **dest);
+extern int git_config_get_string_const(const char *key, const char **dest);
+extern int git_config_get_string(const char *key, char **dest);
 extern int git_config_get_int(const char *key, int *dest);
 extern int git_config_get_ulong(const char *key, unsigned long *dest);
 extern int git_config_get_bool(const char *key, int *dest);
diff --git a/config.c b/config.c
index 22971e9..0d799e0 100644
--- a/config.c
+++ b/config.c
@@ -1332,7 +1332,7 @@ const struct string_list *git_configset_get_value_multi(struct config_set *cs, c
 	return e ? &e->value_list : NULL;
 }

-int git_configset_get_string(struct config_set *cs, const char *key, const char **dest)
+int git_configset_get_string_const(struct config_set *cs, const char *key, const char **dest)
 {
 	const char *value;
 	if (!git_configset_get_value(cs, key, &value))
@@ -1341,6 +1341,19 @@ int git_configset_get_string(struct config_set *cs, const char *key, const char
 		return 1;
 }

+int git_configset_get_string(struct config_set *cs, const char *key, char **dest)
+{
+	const char *value;
+	if (!git_configset_get_value(cs, key, &value)) {
+		if (!value)
+			return config_error_nonbool(key);
+		*dest = xstrdup(value);
+		return 0;
+	}
+	else
+		return 1;
+}
+
 int git_configset_get_int(struct config_set *cs, const char *key, int *dest)
 {
 	const char *value;
@@ -1430,7 +1443,13 @@ const struct string_list *git_config_get_value_multi(const char *key)
 	return git_configset_get_value_multi(&the_config_set, key);
 }

-int git_config_get_string(const char *key, const char **dest)
+int git_config_get_string_const(const char *key, const char **dest)
+{
+	git_config_check_init();
+	return git_configset_get_string_const(&the_config_set, key, dest);
+}
+
+int git_config_get_string(const char *key, char **dest)
 {
 	git_config_check_init();
 	return git_configset_get_string(&the_config_set, key, dest);
-- 8< --

  reply	other threads:[~2014-07-24 15:04 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-23 18:42 [PATCH 0/7] Rewrite `git_config()` using config-set API Tanay Abhra
2014-07-23 18:42 ` [PATCH 1/7] config.c: fix accuracy of line number in errors Tanay Abhra
2014-07-23 21:49   ` Junio C Hamano
2014-07-24 13:33     ` Tanay Abhra
2014-07-24 18:31       ` Junio C Hamano
2014-07-24 18:40         ` Tanay Abhra
2014-07-24 18:49           ` Matthieu Moy
2014-07-23 18:42 ` [PATCH 2/7] rewrite git_config() to use the config-set API Tanay Abhra
2014-07-23 19:55   ` Matthieu Moy
2014-07-23 19:58   ` Matthieu Moy
2014-07-23 21:58   ` Junio C Hamano
2014-07-24  6:43     ` Matthieu Moy
2014-07-23 18:42 ` [PATCH 3/7] add a test for semantic errors in config files Tanay Abhra
2014-07-23 19:55   ` Matthieu Moy
2014-07-23 22:11     ` Junio C Hamano
2014-07-24 13:56       ` Tanay Abhra
2014-07-24 14:05         ` Matthieu Moy
2014-07-24 16:41           ` Junio C Hamano
2014-07-23 18:42 ` [PATCH 4/7] add line number and file name info to `config_set` Tanay Abhra
2014-07-23 22:24   ` Junio C Hamano
2014-07-23 18:42 ` [PATCH 5/7] enforce `xfuncname` precedence over `funcname` Tanay Abhra
2014-07-23 20:05   ` Matthieu Moy
2014-07-23 21:04   ` Eric Sunshine
2014-07-23 22:34   ` Junio C Hamano
2014-07-24  6:39     ` Matthieu Moy
2014-07-24 17:09       ` Junio C Hamano
2014-07-24 18:33         ` Tanay Abhra
2014-07-24 18:47           ` Matthieu Moy
2014-07-24 19:04             ` John Keeping
2014-07-24 19:20             ` Junio C Hamano
2014-07-24 19:29               ` Tanay Abhra
2014-07-24 19:54                 ` Junio C Hamano
2014-07-24 21:22                   ` Ramsay Jones
2014-07-25  3:16                     ` Tanay Abhra
2014-07-25  6:54                       ` Matthieu Moy
2014-07-25 17:09                         ` Junio C Hamano
2014-07-25 17:45                           ` Matthieu Moy
2014-07-25 18:55                             ` Junio C Hamano
2014-07-23 18:42 ` [PATCH 6/7] config: add `git_die_config()` to the config-set API Tanay Abhra
2014-07-23 18:42 ` [PATCH 7/7] Add tests for `git_config_get_string()` Tanay Abhra
2014-07-23 20:08   ` Matthieu Moy
2014-07-23 19:38 ` [PATCH 0/7] Rewrite `git_config()` using config-set API Matthieu Moy
2014-07-23 21:44 ` Junio C Hamano
2014-07-24 15:04   ` Tanay Abhra [this message]
2014-07-24 15:39     ` Matthieu Moy
2014-07-24 15:59       ` Tanay Abhra
2014-07-24 16:17         ` Matthieu Moy
2014-07-24 20:03           ` Junio C Hamano
2014-07-24 15:06   ` [PATCH v12 1/2] add `config_set` API for caching config-like files Tanay Abhra
2014-07-24 18:41     ` Junio C Hamano
2014-07-24 15:09   ` [PATCH v12 2/2] test-config: add tests for the config_set API Tanay Abhra

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=53D12078.2070004@gmail.com \
    --to=tanayabh@gmail.com \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=artagnon@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.