diff options
author | Jeff King <peff@peff.net> | 2007-12-03 00:30:01 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-12-02 23:35:46 -0800 |
commit | 69e7491835a0aa4e1a793a7c131783d8bb1cbb2b (patch) | |
tree | cfa2dbbec33eb2cfb6a2c0778e17d7b7089bcba4 /wt-status.c | |
parent | 2f02b25f36bce23e6b65c5112876796a56e084ca (diff) | |
download | git-69e7491835a0aa4e1a793a7c131783d8bb1cbb2b.tar.gz git-69e7491835a0aa4e1a793a7c131783d8bb1cbb2b.tar.xz |
quote_path: fix collapsing of relative paths
The code tries to collapse identical leading components
between the prefix and the path. So if we're in "dir1", the
path "dir1/file" should become just "file". However, we were
ending up with "../dir1/file". The included test expected
the wrong output.
The "len" parameter to quote_path can be negative to mean
"this is a NUL terminated string". Simply count it so that
the loop can rely on it being the length of the path.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'wt-status.c')
-rw-r--r-- | wt-status.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/wt-status.c b/wt-status.c index 0e0439f2c..52ab41ceb 100644 --- a/wt-status.c +++ b/wt-status.c @@ -82,12 +82,13 @@ static void wt_status_print_trailer(struct wt_status *s) } static char *quote_path(const char *in, int len, - struct strbuf *out, const char *prefix) + struct strbuf *out, const char *prefix) { - if (len > 0) - strbuf_grow(out, len); - strbuf_setlen(out, 0); + if (len < 0) + len = strlen(in); + strbuf_grow(out, len); + strbuf_setlen(out, 0); if (prefix) { int off = 0; while (prefix[off] && off < len && prefix[off] == in[off]) @@ -104,7 +105,7 @@ static char *quote_path(const char *in, int len, strbuf_addstr(out, "../"); } - for (; (len < 0 && *in) || len > 0; in++, len--) { + for ( ; len > 0; in++, len--) { int ch = *in; switch (ch) { |