mirror of
https://github.com/git/git.git
synced 2024-11-27 12:03:55 +08:00
Merge branch 'bw/realpath-wo-chdir'
The implementation of "real_path()" was to go there with chdir(2) and call getcwd(3), but this obviously wouldn't be usable in a threaded environment. Rewrite it to manually resolve relative paths including symbolic links in path components. * bw/realpath-wo-chdir: real_path: set errno when max number of symlinks is exceeded real_path: prevent redefinition of MAXSYMLINKS
This commit is contained in:
commit
1c16df23b1
@ -62,7 +62,9 @@ static void get_root_part(struct strbuf *resolved, struct strbuf *remaining)
|
||||
}
|
||||
|
||||
/* We allow "recursive" symbolic links. Only within reason, though. */
|
||||
#define MAXSYMLINKS 5
|
||||
#ifndef MAXSYMLINKS
|
||||
#define MAXSYMLINKS 32
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Return the real path (i.e., absolute path, with symlinks resolved
|
||||
@ -139,6 +141,8 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,
|
||||
strbuf_reset(&symlink);
|
||||
|
||||
if (num_symlinks++ > MAXSYMLINKS) {
|
||||
errno = ELOOP;
|
||||
|
||||
if (die_on_error)
|
||||
die("More than %d nested symlinks "
|
||||
"on path '%s'", MAXSYMLINKS, path);
|
||||
|
4
dir.c
4
dir.c
@ -2731,8 +2731,8 @@ void connect_work_tree_and_git_dir(const char *work_tree_, const char *git_dir_)
|
||||
{
|
||||
struct strbuf file_name = STRBUF_INIT;
|
||||
struct strbuf rel_path = STRBUF_INIT;
|
||||
char *git_dir = xstrdup(real_path(git_dir_));
|
||||
char *work_tree = xstrdup(real_path(work_tree_));
|
||||
char *git_dir = real_pathdup(git_dir_);
|
||||
char *work_tree = real_pathdup(work_tree_);
|
||||
|
||||
/* Update gitfile */
|
||||
strbuf_addf(&file_name, "%s/.git", work_tree);
|
||||
|
Loading…
Reference in New Issue
Block a user