path: root/abspath.c
diff options
authorEric Sunshine <>2010-07-07 01:48:47 (GMT)
committerPat Thoyts <>2010-10-03 22:34:23 (GMT)
commitb248e950966769f5f981321ea9d12f2b238c978c (patch)
tree8dc2dbd54301814462799a1774a0aa931da485a5 /abspath.c
parent1a4042096c2e8893246a99ef8e43c07acb76f54b (diff)
Fix 'clone' failure at DOS root directory.
Cloning via relative path fails for a project residing immediately under the root directory of a DOS drive. For instance, for project c:/foo, issuing "cd c:/" followed by "git clone foo bar" fails with error "Unable to find remote helper for 'c'". The problem is caused by make_nonrelative_path() incorrectly returning c://foo rather than c:/foo for input "foo". The bogus path c://foo is misinterpreted by transport_get() as a URL with unrecognized protocol "c", hence the missing remote helper error. Fix make_nonrelative_path() to return c:/foo rather than c://foo (and /foo rather than //foo on Unix). Resolves msysgit issue #501 [1] [PT: squashed in changes requested by Junio [2][3]] [1] [2] [3] Acked-by: Johannes Sixt <> Signed-off-by: Eric Sunshine <> Signed-off-by: Pat Thoyts <> Signed-off-by: Johannes Schindelin <>
Diffstat (limited to 'abspath.c')
1 files changed, 5 insertions, 1 deletions
diff --git a/abspath.c b/abspath.c
index c91a29c..91ca00f 100644
--- a/abspath.c
+++ b/abspath.c
@@ -108,10 +108,14 @@ const char *make_nonrelative_path(const char *path)
if (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)
die("Too long path: %.*s", 60, path);
} else {
+ size_t len;
+ const char *fmt;
const char *cwd = get_pwd_cwd();
if (!cwd)
die_errno("Cannot determine the current working directory");
- if (snprintf(buf, PATH_MAX, "%s/%s", cwd, path) >= PATH_MAX)
+ len = strlen(cwd);
+ fmt = (len > 0 && is_dir_sep(cwd[len-1])) ? "%s%s" : "%s/%s";
+ if (snprintf(buf, PATH_MAX, fmt, cwd, path) >= PATH_MAX)
die("Too long path: %.*s", 60, path);
return buf;