Commit 8adbf2ed12b7067660a4012f54d76650663edee1

Vicent Marti 2011-05-20T02:58:33

Rewrite `git_config_open_global` We have a lot of utility methods that make path building trivial. Use them!

diff --git a/src/config.c b/src/config.c
index 0ade5cf..3b6c23b 100644
--- a/src/config.c
+++ b/src/config.c
@@ -72,36 +72,16 @@ int git_config_open_bare(git_config **out, const char *path)
 
 int git_config_open_global(git_config **out)
 {
-	char *home = NULL, *filename = NULL;
-	const char *gitconfig = ".gitconfig";
-	int filename_len, ret, error;
+	char full_path[GIT_PATH_MAX];
+	const char *home;
 
-	home = git__strdup(getenv("HOME"));
+	home = 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;
-	}
+		return git__throw(GIT_EOSERR, "Failed to find $HOME variable");
 
-	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);
+	git__joinpath(full_path, home, GIT_CONFIG_FILENAME);
 
- out:
-	free(home);
-	free(filename);
-	return error;
+	return git_config_open_bare(out, filename);
 }
 
 void git_config_free(git_config *cfg)
diff --git a/src/config.h b/src/config.h
index a811fd8..104e016 100644
--- a/src/config.h
+++ b/src/config.h
@@ -5,6 +5,8 @@
 #include "git2/config.h"
 #include "vector.h"
 
+#define GIT_CONFIG_FILENAME ".gitconfig"
+
 struct git_config {
 	git_vector backends;
 };