From: Dmitry Kakurin <Dmitry.Kakurin@xxxxxxxxx> We have a function set_git_dir(). So let's use it, instead of setting the evironment directly. This also fixes a problem on Windows: environment.c caches results of many getenv calls. A setenv(X) call to the Windows C runtime (CRT) invalidates all previous values returned by getenv(X). So cached values become dangling pointers. Before this change, git clone was failing with 'invalid object name HEAD' if ran from Windows' cmd.exe. [sp: rebased; split off get_git_dir() in builtin-init-db.c to separate commit; adjusted commit message. ] Signed-off-by: Dmitry Kakurin <Dmitry.Kakurin@xxxxxxxxx> Signed-off-by: Steffen Prohaska <prohaska@xxxxxx> --- git.c | 6 +++--- path.c | 2 +- setup.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/git.c b/git.c index 7604319..8bc25b7 100644 --- a/git.c +++ b/git.c @@ -45,14 +45,14 @@ static int handle_options(const char*** argv, int* argc, int* envchanged) fprintf(stderr, "No directory given for --git-dir.\n" ); usage(git_usage_string); } - setenv(GIT_DIR_ENVIRONMENT, (*argv)[1], 1); + set_git_dir( (*argv)[1] ); if (envchanged) *envchanged = 1; (*argv)++; (*argc)--; handled++; } else if (!prefixcmp(cmd, "--git-dir=")) { - setenv(GIT_DIR_ENVIRONMENT, cmd + 10, 1); + set_git_dir(cmd + 10); if (envchanged) *envchanged = 1; } else if (!strcmp(cmd, "--work-tree")) { @@ -72,7 +72,7 @@ static int handle_options(const char*** argv, int* argc, int* envchanged) } else if (!strcmp(cmd, "--bare")) { static char git_dir[PATH_MAX+1]; is_bare_repository_cfg = 1; - setenv(GIT_DIR_ENVIRONMENT, getcwd(git_dir, sizeof(git_dir)), 0); + set_git_dir(getcwd(git_dir, sizeof(git_dir))); if (envchanged) *envchanged = 1; } else { diff --git a/path.c b/path.c index 4260952..f26a4a1 100644 --- a/path.c +++ b/path.c @@ -248,7 +248,7 @@ char *enter_repo(char *path, int strict) if (access("objects", X_OK) == 0 && access("refs", X_OK) == 0 && validate_headref("HEAD") == 0) { - setenv(GIT_DIR_ENVIRONMENT, ".", 1); + set_git_dir("."); check_repository_format(); return path; } diff --git a/setup.c b/setup.c index 43cd3f9..8dbd46c 100644 --- a/setup.c +++ b/setup.c @@ -285,7 +285,7 @@ const char *setup_git_directory_gently(int *nongit_ok) inside_git_dir = 1; if (!work_tree_env) inside_work_tree = 0; - setenv(GIT_DIR_ENVIRONMENT, ".", 1); + set_git_dir("."); return NULL; } chdir(".."); -- 1.5.3.5.750.g8692 - 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