summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 45f66f6)
raw | patch | inline | side by side (parent: 45f66f6)
author | Pierre Habouzit <madcoder@debian.org> | |
Mon, 24 Sep 2007 09:25:04 +0000 (11:25 +0200) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 26 Sep 2007 09:27:05 +0000 (02:27 -0700) |
memory is now reused across hunks.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-rerere.c | patch | blob | history |
diff --git a/builtin-rerere.c b/builtin-rerere.c
index 58288f61a3861df757f8299e168e847943915e6b..d331772e100d87592d091aa5ad9c38d36bea86c2 100644 (file)
--- a/builtin-rerere.c
+++ b/builtin-rerere.c
SHA_CTX ctx;
char buf[1024];
int hunk = 0, hunk_no = 0;
- struct strbuf minus, plus;
- struct strbuf *one = &minus, *two = +
+ struct strbuf one, two;
FILE *f = fopen(path, "r");
- FILE *out;
-
- strbuf_init(&minus, 0);
- strbuf_init(&plus, 0);
+ FILE *out = NULL;
if (!f)
return error("Could not open %s", path);
fclose(f);
return error("Could not write %s", output);
}
- } else
- out = NULL;
+ }
if (sha1)
SHA1_Init(&ctx);
+ strbuf_init(&one, 0);
+ strbuf_init(&two, 0);
while (fgets(buf, sizeof(buf), f)) {
if (!prefixcmp(buf, "<<<<<<< "))
hunk = 1;
else if (!prefixcmp(buf, "======="))
hunk = 2;
else if (!prefixcmp(buf, ">>>>>>> ")) {
- int one_is_longer = (one->len > two->len);
- int common_len = one_is_longer ? two->len : one->len;
- int cmp = memcmp(one->buf, two->buf, common_len);
+ int cmp = strbuf_cmp(&one, &two);
hunk_no++;
hunk = 0;
- if ((cmp > 0) || ((cmp == 0) && one_is_longer)) {
- struct strbuf *swap = one;
- one = two;
- two = swap;
+ if (cmp > 0) {
+ strbuf_swap(&one, &two);
}
if (out) {
fputs("<<<<<<<\n", out);
- fwrite(one->buf, one->len, 1, out);
+ fwrite(one.buf, one.len, 1, out);
fputs("=======\n", out);
- fwrite(two->buf, two->len, 1, out);
+ fwrite(two.buf, two.len, 1, out);
fputs(">>>>>>>\n", out);
}
if (sha1) {
- SHA1_Update(&ctx, one->buf, one->len);
- SHA1_Update(&ctx, "\0", 1);
- SHA1_Update(&ctx, two->buf, two->len);
- SHA1_Update(&ctx, "\0", 1);
+ SHA1_Update(&ctx, one.buf, one.len + 1);
+ SHA1_Update(&ctx, two.buf, two.len + 1);
}
- strbuf_release(one);
- strbuf_release(two);
+ strbuf_reset(&one);
+ strbuf_reset(&two);
} else if (hunk == 1)
- strbuf_addstr(one, buf);
+ strbuf_addstr(&one, buf);
else if (hunk == 2)
- strbuf_addstr(two, buf);
+ strbuf_addstr(&two, buf);
else if (out)
fputs(buf, out);
}
+ strbuf_release(&one);
+ strbuf_release(&two);
fclose(f);
if (out)