diff options
| author | Carlos Martín Nieto <cmn@elego.de> | 2011-05-17 14:18:42 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <cmn@elego.de> | 2011-05-17 14:31:57 +0200 |
| commit | 32234541f6d1576149960aa272ccb7219b68ff01 (patch) | |
| tree | b5786a71e5a75b95499a9a978bafa735fe6f55a1 /src/config.c | |
| parent | c9662061f25ea51f39018a278b98c9a9b4410e84 (diff) | |
| download | libgit2-32234541f6d1576149960aa272ccb7219b68ff01.tar.gz | |
Implement git_config_open_global
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
Diffstat (limited to 'src/config.c')
| -rw-r--r-- | src/config.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c index cd0a73ccd..0ade5cf97 100644 --- a/src/config.c +++ b/src/config.c @@ -70,6 +70,40 @@ int git_config_open_bare(git_config **out, const char *path) return error; } +int git_config_open_global(git_config **out) +{ + char *home = NULL, *filename = NULL; + const char *gitconfig = ".gitconfig"; + int filename_len, ret, error; + + home = git__strdup(getenv("HOME")); + if (home == NULL) + return GIT_ENOMEM; + + filename_len = strlen(home) + strlen(gitconfig) + 1; + filename = git__malloc(filename_len + 1); + if (filename == NULL) { + error = GIT_ENOMEM; + goto out; + } + + ret = snprintf(filename, filename_len, "%s/%s", home, gitconfig); + if (ret < 0) { + error = git__throw(GIT_EOSERR, "Failed to build global filename. OS err: %s", strerror(errno)); + goto out; + } else if (ret >= filename_len) { + error = git__throw(GIT_ERROR, "Failed to build global filename. Length calulation wrong"); + goto out; + } + + error = git_config_open_bare(out, filename); + + out: + free(home); + free(filename); + return error; +} + void git_config_free(git_config *cfg) { unsigned int i; |
