summaryrefslogtreecommitdiff
path: root/src/config.c
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@elego.de>2011-05-17 14:18:42 +0200
committerCarlos Martín Nieto <cmn@elego.de>2011-05-17 14:31:57 +0200
commit32234541f6d1576149960aa272ccb7219b68ff01 (patch)
treeb5786a71e5a75b95499a9a978bafa735fe6f55a1 /src/config.c
parentc9662061f25ea51f39018a278b98c9a9b4410e84 (diff)
downloadlibgit2-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.c34
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;