From: Johannes Schindelin <johannes.schindelin@xxxxxx> Date: Wed, 2 Jun 2010 00:41:33 +0200 If HOME is not set, use $HOMEDRIVE/$HOMEPATH Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> Signed-off-by: Stepan Kasal <kasal@xxxxxx> --- Hi, this patch is present in msysGit for 4 years. Stepan compat/mingw.c | 18 ++++++++++++++++++ compat/mingw.h | 3 +++ git-compat-util.h | 4 ++++ path.c | 4 ++-- shell.c | 2 +- 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/compat/mingw.c b/compat/mingw.c index a0e13bc..8eb21dc 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -1847,3 +1847,21 @@ int mingw_offset_1st_component(const char *path) return offset + is_dir_sep(path[offset]); } + +const char *get_windows_home_directory(void) +{ + static const char *home_directory = NULL; + struct strbuf buf = STRBUF_INIT; + + if (home_directory) + return home_directory; + + home_directory = getenv("HOME"); + if (home_directory && *home_directory) + return home_directory; + + strbuf_addf(&buf, "%s/%s", getenv("HOMEDRIVE"), getenv("HOMEPATH")); + home_directory = strbuf_detach(&buf, NULL); + + return home_directory; +} diff --git a/compat/mingw.h b/compat/mingw.h index 3eaf822..a88a7ab 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -386,3 +386,6 @@ static int mingw_main(c,v) * Used by Pthread API implementation for Windows */ extern int err_win_to_posix(DWORD winerr); + +extern const char *get_windows_home_directory(); +#define get_home_directory() get_windows_home_directory() diff --git a/git-compat-util.h b/git-compat-util.h index b6f03b3..409e644 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -740,4 +740,8 @@ struct tm *git_gmtime_r(const time_t *, struct tm *); #define gmtime_r git_gmtime_r #endif +#ifndef get_home_directory +#define get_home_directory() getenv("HOME") +#endif + #endif diff --git a/path.c b/path.c index bc804a3..09b362c 100644 --- a/path.c +++ b/path.c @@ -133,7 +133,7 @@ char *git_path(const char *fmt, ...) void home_config_paths(char **global, char **xdg, char *file) { char *xdg_home = getenv("XDG_CONFIG_HOME"); - char *home = getenv("HOME"); + const char *home = get_home_directory(); char *to_free = NULL; if (!home) { @@ -274,7 +274,7 @@ char *expand_user_path(const char *path) const char *username = path + 1; size_t username_len = first_slash - username; if (username_len == 0) { - const char *home = getenv("HOME"); + const char *home = get_home_directory(); if (!home) goto return_null; strbuf_add(&user_path, home, strlen(home)); diff --git a/shell.c b/shell.c index 5c0d47a..edd8c3a 100644 --- a/shell.c +++ b/shell.c @@ -55,7 +55,7 @@ static char *make_cmd(const char *prog) static void cd_to_homedir(void) { - const char *home = getenv("HOME"); + const char *home = get_home_directory(); if (!home) die("could not determine user's home directory; HOME is unset"); if (chdir(home) == -1) -- 1.9.2.msysgit.0.655.g1a42564 -- 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