From: Johannes Schindelin <johannes.schinde...@gmx.de>
Date: Wed, 2 Jun 2010 00:41:33 +0200

If HOME is not set, use $HOMEDRIVE/$HOMEPATH

Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
Signed-off-by: Stepan Kasal <ka...@ucw.cz>
---
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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to