diff options
| author | Carlos Martín Nieto <cmn@elego.de> | 2012-11-13 14:43:23 -0800 |
|---|---|---|
| committer | Carlos Martín Nieto <cmn@elego.de> | 2012-11-13 14:49:16 -0800 |
| commit | 0da81d2b39290fe4d444953acb6d68795ed1ef42 (patch) | |
| tree | 70f00cde763374e35bf214bcd50e5a39b3b098c7 /src/config.c | |
| parent | 47db054df053fb09c8c92edaa0238af2a2605e65 (diff) | |
| download | libgit2-0da81d2b39290fe4d444953acb6d68795ed1ef42.tar.gz | |
config: return an emtpy string when there is no value
Returning NULL for the string when we haven't signaled an error
condition is counter-intuitive and causes unnecessary edge
cases. Return an empty string when asking for a string value for a
configuration variable such as '[section] var' to avoid these edge
cases.
If the distinction between no value and an empty value is needed, this
can be retrieved from the entry directly. As a side-effect, this
change stops the int parsing functions from segfaulting on such a
variable.
Diffstat (limited to 'src/config.c')
| -rw-r--r-- | src/config.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/config.c b/src/config.c index ed9901bd2..4fb161169 100644 --- a/src/config.c +++ b/src/config.c @@ -393,24 +393,11 @@ int git_config_get_int32(int32_t *out, git_config *cfg, const char *name) return git_config_parse_int32(out, value); } -int git_config_get_bool(int *out, git_config *cfg, const char *name) -{ - const char *value; - int ret; - - if ((ret = git_config_get_string(&value, cfg, name)) < 0) - return ret; - - return git_config_parse_bool(out, value); -} - static int get_string_at_file(const char **out, git_config_file *file, const char *name) { const git_config_entry *entry; int res; - *out = NULL; - res = file->get(file, name, &entry); if (!res) *out = entry->value; @@ -418,7 +405,7 @@ static int get_string_at_file(const char **out, git_config_file *file, const cha return res; } -int git_config_get_string(const char **out, git_config *cfg, const char *name) +static int get_string(const char **out, git_config *cfg, const char *name) { file_internal *internal; unsigned int i; @@ -435,6 +422,29 @@ int git_config_get_string(const char **out, git_config *cfg, const char *name) return GIT_ENOTFOUND; } +int git_config_get_bool(int *out, git_config *cfg, const char *name) +{ + const char *value; + int ret; + + if ((ret = get_string(&value, cfg, name)) < 0) + return ret; + + return git_config_parse_bool(out, value); +} + +int git_config_get_string(const char **out, git_config *cfg, const char *name) +{ + int ret; + const char *str; + + if ((ret = get_string(&str, cfg, name)) < 0) + return ret; + + *out = str == NULL ? "" : str; + return 0; +} + int git_config_get_entry(const git_config_entry **out, git_config *cfg, const char *name) { file_internal *internal; |
