Commit 32234541 by Carlos Martín Nieto

Implement git_config_open_global

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
parent c9662061
......@@ -51,6 +51,13 @@ GIT_EXTERN(int) git_config_new(git_config **out);
GIT_EXTERN(int) git_config_open_bare(git_config **cfg_out, const char *path);
/**
* Open the global configuration file at $HOME/.gitconfig
*
* @param cfg pointer to the configuration
*/
GIT_EXTERN(int) git_config_open_global(git_config **cfg);
/**
*
*/
GIT_EXTERN(int) git_config_add_backend(git_config *cfg, git_config_backend *backend, int priority);
......
......@@ -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;
......
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