From: Bobby Powers <bobbypowers@gmail.com>
To: git@vger.kernel.org
Cc: Bobby Powers <bobbypowers@gmail.com>
Subject: [PATCH] diff --no-index: reset temporary buffer lengths on directory iteration
Date: Wed, 16 May 2012 00:14:53 -0400 [thread overview]
Message-ID: <1337141693-3515-1-git-send-email-bobbypowers@gmail.com> (raw)
Commit 875b91b3 introduced a regression when using diff --no-index
with directories. When iterating through a directory, the switch to
strbuf from heap-allocated char arrays caused paths to form like
'dir/file1', 'dir/file1file2', rather than 'dir/file1', 'dir/file2' as
expected. By resetting the length on each iteration (but not
buf.alloc), we avoid this.
Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
---
diff-no-index.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/diff-no-index.c b/diff-no-index.c
index b44473e..bec3ea4 100644
--- a/diff-no-index.c
+++ b/diff-no-index.c
@@ -67,7 +67,7 @@ static int queue_diff(struct diff_options *o,
struct strbuf buffer2 = STRBUF_INIT;
struct string_list p1 = STRING_LIST_INIT_DUP;
struct string_list p2 = STRING_LIST_INIT_DUP;
- int i1, i2, ret = 0;
+ int len1 = 0, len2 = 0, i1, i2, ret = 0;
if (name1 && read_directory(name1, &p1))
return -1;
@@ -80,18 +80,23 @@ static int queue_diff(struct diff_options *o,
strbuf_addstr(&buffer1, name1);
if (buffer1.len && buffer1.buf[buffer1.len - 1] != '/')
strbuf_addch(&buffer1, '/');
+ len1 = buffer1.len;
}
if (name2) {
strbuf_addstr(&buffer2, name2);
if (buffer2.len && buffer2.buf[buffer2.len - 1] != '/')
strbuf_addch(&buffer2, '/');
+ len2 = buffer2.len;
}
for (i1 = i2 = 0; !ret && (i1 < p1.nr || i2 < p2.nr); ) {
const char *n1, *n2;
int comp;
+ buffer1.len = len1;
+ buffer2.len = len2;
+
if (i1 == p1.nr)
comp = 1;
else if (i2 == p2.nr)
--
1.7.10.2
next reply other threads:[~2012-05-16 4:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-16 4:14 Bobby Powers [this message]
2012-05-16 6:33 ` [PATCH] diff --no-index: reset temporary buffer lengths on directory iteration René Scharfe
2012-05-16 14:20 ` Bobby Powers
2012-05-16 14:28 ` [PATCH v2] " Bobby Powers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1337141693-3515-1-git-send-email-bobbypowers@gmail.com \
--to=bobbypowers@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).