summaryrefslogtreecommitdiff
path: root/abspath.c
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2014-07-28 18:27:34 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-08-26 18:06:04 (GMT)
commit251277acdf8c8dee59bdd0e9e7b7e3502226cf9d (patch)
treeb35195fb71027f7d2b1afc2258fdd0094ab0a15a /abspath.c
parent7333ed1788b4f2b162a35003044d77a716732a1f (diff)
downloadgit-251277acdf8c8dee59bdd0e9e7b7e3502226cf9d.zip
git-251277acdf8c8dee59bdd0e9e7b7e3502226cf9d.tar.gz
git-251277acdf8c8dee59bdd0e9e7b7e3502226cf9d.tar.bz2
abspath: use strbuf_getcwd() to remember original working directory
Store the original working directory in a strbuf instead of in a fixed-sized buffer, in order to be able to handle longer paths. Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'abspath.c')
-rw-r--r--abspath.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/abspath.c b/abspath.c
index ca33558..911e931 100644
--- a/abspath.c
+++ b/abspath.c
@@ -41,7 +41,7 @@ static const char *real_path_internal(const char *path, int die_on_error)
* here so that we can chdir() back to it at the end of the
* function:
*/
- char cwd[1024] = "";
+ struct strbuf cwd = STRBUF_INIT;
int buf_index = 1;
@@ -80,7 +80,7 @@ static const char *real_path_internal(const char *path, int die_on_error)
}
if (*buf) {
- if (!*cwd && !getcwd(cwd, sizeof(cwd))) {
+ if (!cwd.len && strbuf_getcwd(&cwd)) {
if (die_on_error)
die_errno("Could not get current working directory");
else
@@ -142,8 +142,9 @@ static const char *real_path_internal(const char *path, int die_on_error)
retval = buf;
error_out:
free(last_elem);
- if (*cwd && chdir(cwd))
- die_errno("Could not change back to '%s'", cwd);
+ if (cwd.len && chdir(cwd.buf))
+ die_errno("Could not change back to '%s'", cwd.buf);
+ strbuf_release(&cwd);
return retval;
}