Add a Windows-specific fallback to getenv("HOME");

This fixes msysGit issue 482 properly.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin
2010-06-02 00:41:33 +02:00
parent f02dbc1701
commit 6754497c51
6 changed files with 29 additions and 4 deletions

View File

@@ -158,7 +158,7 @@ static int get_value(const char *key_, const char *regex_)
local = config_exclusive_filename; local = config_exclusive_filename;
if (!local) { if (!local) {
const char *home = getenv("HOME"); const char *home = get_home_directory();
local = repo_config = git_pathdup("config"); local = repo_config = git_pathdup("config");
if (git_config_global() && home) if (git_config_global() && home)
global = xstrdup(mkpath("%s/.gitconfig", home)); global = xstrdup(mkpath("%s/.gitconfig", home));
@@ -348,7 +348,7 @@ int cmd_config(int argc, const char **argv, const char *unused_prefix)
} }
if (use_global_config) { if (use_global_config) {
char *home = getenv("HOME"); char *home = get_home_directory();
if (home) { if (home) {
char *user_config = xstrdup(mkpath("%s/.gitconfig", home)); char *user_config = xstrdup(mkpath("%s/.gitconfig", home));
config_exclusive_filename = user_config; config_exclusive_filename = user_config;

View File

@@ -1709,3 +1709,21 @@ struct dirent *mingw_readdir(DIR *dir)
return (struct dirent*)&dir->dd_dir; return (struct dirent*)&dir->dd_dir;
} }
#endif // !NO_MINGW_REPLACE_READDIR #endif // !NO_MINGW_REPLACE_READDIR
const char *get_windows_home_directory()
{
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;
}

View File

@@ -334,3 +334,6 @@ struct dirent *mingw_readdir(DIR *dir);
* Used by Pthread API implementation for Windows * Used by Pthread API implementation for Windows
*/ */
extern int err_win_to_posix(DWORD winerr); extern int err_win_to_posix(DWORD winerr);
extern const char *get_windows_home_directory();
#define get_home_directory() get_windows_home_directory()

View File

@@ -788,7 +788,7 @@ int git_config(config_fn_t fn, void *data)
found += 1; found += 1;
} }
home = getenv("HOME"); home = get_home_directory();
if (git_config_global() && home) { if (git_config_global() && home) {
char *user_config = xstrdup(mkpath("%s/.gitconfig", home)); char *user_config = xstrdup(mkpath("%s/.gitconfig", home));
if (!access(user_config, R_OK)) { if (!access(user_config, R_OK)) {

View File

@@ -503,4 +503,8 @@ int remove_or_warn(unsigned int mode, const char *path);
#define mark_as_git_dir(x) /* noop */ #define mark_as_git_dir(x) /* noop */
#endif #endif
#ifndef get_home_directory
#define get_home_directory() getenv("HOME")
#endif
#endif #endif

2
path.c
View File

@@ -315,7 +315,7 @@ char *expand_user_path(const char *path)
const char *username = path + 1; const char *username = path + 1;
size_t username_len = first_slash - username; size_t username_len = first_slash - username;
if (username_len == 0) { if (username_len == 0) {
const char *home = getenv("HOME"); const char *home = get_home_directory();
strbuf_add(&user_path, home, strlen(home)); strbuf_add(&user_path, home, strlen(home));
} else { } else {
struct passwd *pw = getpw_str(username, username_len); struct passwd *pw = getpw_str(username, username_len);