c* str_replace(): New function. Generic replace command. * str_replace_home(): New funtion. Substitute $HOME and tilde(~) in string. * git_default_config(): Pass core.excludesfile to str_replace_home(). Signed-off-by: Jari Aalto <jari.aalto AT cante.net> --- From ac6941f5055b2acdded59627d228bbf03ba0d9fc config.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 43 insertions(+), 1 deletions(-) diff --git a/config.c b/config.c index 526a3f4..7c91689 100644 --- a/config.c +++ b/config.c @@ -309,6 +309,46 @@ int git_config_bool(const char *name, const char *value) return git_config_int(name, value) != 0; } +char *str_replace(const char *str, const char *find, const char *replace) +{ + int maxlen = strlen(str) + strlen(replace) + 1; + char *start = strstr(str, find); + char *ptr = (char *)malloc(maxlen); + int len = strlen(find); + int llen, rlen; /* left, right portion length */ + + if (start == (char *)NULL) { + strcpy( ptr, str); + } + else{ + rlen = strlen(start) - strlen(find); + llen = strlen(str) - strlen(start); + strncpy( ptr, str, llen); + strcat( ptr, replace); + strncat( ptr, start + len, rlen); /* Does not add '\0' */ + strcat( ptr, ""); /* Terminate with null string */ + } + + return ptr; +} + +char *str_replace_home(const char *str) +{ + char *ret = xstrdup(str); + char *home = getenv("HOME"); + + if (home != (char *)NULL ) { + if (strstr(str, "~") != NULL) { + ret = str_replace(str, "~", home); + } + else if (strstr(str, "$HOME") != NULL) { + ret = str_replace(str, "$HOME", home); + } + } + + return ret; +} + int git_default_config(const char *var, const char *value) { /* This needs a better name */ @@ -447,7 +487,9 @@ int git_default_config(const char *var, const char *value) if (!value) die("core.excludesfile without value"); excludes_file = xstrdup(value); - return 0; + /* expand $HOME and tilde(~) */ + excludes_file = str_replace_home(excludes_file); + return 0; } if (!strcmp(var, "core.whitespace")) { -- 1.5.4-rc3.GIT - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html