Commit cfef5fb7 by Vicent Marti

config: `foreach` now returns variable values too

parent 7376ad99
...@@ -48,7 +48,7 @@ struct git_config_file { ...@@ -48,7 +48,7 @@ struct git_config_file {
int (*open)(struct git_config_file *); int (*open)(struct git_config_file *);
int (*get)(struct git_config_file *, const char *key, const char **value); int (*get)(struct git_config_file *, const char *key, const char **value);
int (*set)(struct git_config_file *, const char *key, const char *value); int (*set)(struct git_config_file *, const char *key, const char *value);
int (*foreach)(struct git_config_file *, int (*fn)(const char *, void *), void *data); int (*foreach)(struct git_config_file *, int (*fn)(const char *, const char *, void *), void *data);
void (*free)(struct git_config_file *); void (*free)(struct git_config_file *);
}; };
...@@ -254,19 +254,22 @@ GIT_EXTERN(int) git_config_set_bool(git_config *cfg, const char *name, int value ...@@ -254,19 +254,22 @@ GIT_EXTERN(int) git_config_set_bool(git_config *cfg, const char *name, int value
GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const char *value); GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const char *value);
/** /**
* Perform an operation on each config variable. * Perform an operation on each config variable
* *
* The callback is passed a pointer to a config variable name and the * The callback receives the normalized name and value of each variable
* data pointer passed to this function. As soon as one of the * in the config backend, and the data pointer passed to this function.
* callback functions returns something other than 0, this function * As soon as one of the callback functions returns something other than 0,
* returns that value. * this function returns that value.
* *
* @param cfg where to get the variables from * @param cfg where to get the variables from
* @param callback the function to call on each variable * @param callback the function to call on each variable
* @param data the data to pass to the callback * @param data the data to pass to the callback
* @return GIT_SUCCESS or the return value of the callback which didn't return 0 * @return GIT_SUCCESS or the return value of the callback which didn't return 0
*/ */
GIT_EXTERN(int) git_config_foreach(git_config *cfg, int (*callback)(const char *, void *data), void *data); GIT_EXTERN(int) git_config_foreach(
git_config *cfg,
int (*callback)(const char *var_name, const char *value, void *payload),
void *payload);
/** @} */ /** @} */
GIT_END_DECL GIT_END_DECL
......
...@@ -151,7 +151,7 @@ int git_config_add_file(git_config *cfg, git_config_file *file, int priority) ...@@ -151,7 +151,7 @@ int git_config_add_file(git_config *cfg, git_config_file *file, int priority)
* Loop over all the variables * Loop over all the variables
*/ */
int git_config_foreach(git_config *cfg, int (*fn)(const char *, void *), void *data) int git_config_foreach(git_config *cfg, int (*fn)(const char *, const char *, void *), void *data)
{ {
int ret = GIT_SUCCESS; int ret = GIT_SUCCESS;
unsigned int i; unsigned int i;
......
...@@ -310,7 +310,7 @@ static void backend_free(git_config_file *_backend) ...@@ -310,7 +310,7 @@ static void backend_free(git_config_file *_backend)
free(backend); free(backend);
} }
static int file_foreach(git_config_file *backend, int (*fn)(const char *, void *), void *data) static int file_foreach(git_config_file *backend, int (*fn)(const char *, const char *, void *), void *data)
{ {
int ret = GIT_SUCCESS; int ret = GIT_SUCCESS;
cvar_t *var; cvar_t *var;
...@@ -323,7 +323,7 @@ static int file_foreach(git_config_file *backend, int (*fn)(const char *, void * ...@@ -323,7 +323,7 @@ static int file_foreach(git_config_file *backend, int (*fn)(const char *, void *
if (ret < GIT_SUCCESS) if (ret < GIT_SUCCESS)
return ret; return ret;
ret = fn(normalized, data); ret = fn(normalized, var->value, data);
free(normalized); free(normalized);
if (ret) if (ret)
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment