path: root/config.c
diff options
authorMatthieu Moy <>2009-11-17 17:24:25 (GMT)
committerJunio C Hamano <>2009-11-18 05:53:11 (GMT)
commit395de250d9d9762b8ac1ce98b297d60d0b5bd643 (patch)
tree6cd72d671e9ec56fdc87fa0c21484881b5a2ab00 /config.c
parent78d553b7d7b269bb22ebd8b1198657c37484a3a0 (diff)
Expand ~ and ~user in core.excludesfile, commit.template
These config variables are parsed to substitute ~ and ~user with getpw entries. user_path() refactored into new function expand_user_path(), to allow dynamically allocating the return buffer. Original patch by Karl Chen, modified by Matthieu Moy, and further amended by Junio C Hamano. Signed-off-by: Karl Chen <> Signed-off-by: Matthieu Moy <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'config.c')
1 files changed, 11 insertions, 1 deletions
diff --git a/config.c b/config.c
index c644061..b3d1ff4 100644
--- a/config.c
+++ b/config.c
@@ -351,6 +351,16 @@ int git_config_string(const char **dest, const char *var, const char *value)
return 0;
+int git_config_pathname(const char **dest, const char *var, const char *value)
+ if (!value)
+ return config_error_nonbool(var);
+ *dest = expand_user_path(value);
+ if (!*dest)
+ die("Failed to expand user dir in: '%s'", value);
+ return 0;
static int git_default_core_config(const char *var, const char *value)
/* This needs a better name */
@@ -474,7 +484,7 @@ static int git_default_core_config(const char *var, const char *value)
return git_config_string(&editor_program, var, value);
if (!strcmp(var, "core.excludesfile"))
- return git_config_string(&excludes_file, var, value);
+ return git_config_pathname(&excludes_file, var, value);
if (!strcmp(var, "core.whitespace")) {
if (!value)