--- builtin-apply.c | 32 +++++++++++++++++++++++++++++--- 1 files changed, 29 insertions(+), 3 deletions(-) diff --git a/builtin-apply.c b/builtin-apply.c index 86860d6..d213cce 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -1640,6 +1640,10 @@ static void update_pre_post_images(struct image *preimage, int i, ctx; char *new, *old, *fixed; struct image fixed_preimage; + /* Do we need more space for the postimage? */ + size_t newlen = postimage->len; + if (len > preimage->len) + newlen += len - preimage->len; /* * Update the preimage with whitespace fixes. Note that we @@ -1654,11 +1658,16 @@ static void update_pre_post_images(struct image *preimage, *preimage = fixed_preimage; /* - * Adjust the common context lines in postimage, in place. + * Adjust the common context lines in postimage, in place + * if we are not ignoring whitespace differences. * This is possible because whitespace fixing does not make * the string grow. */ - new = old = postimage->buf; + old = postimage->buf; + if (ignore_whitespace) + new = postimage->buf = xmalloc(newlen); + else + new = old; fixed = preimage->buf; for (i = ctx = 0; i < postimage->nr; i++) { size_t len = postimage->line[i].len; @@ -1730,8 +1739,25 @@ static int match_fragment(struct image *img, if ((match_end ? (try + preimage->len == img->len) : (try + preimage->len <= img->len)) && - !memcmp_switch(img->buf + try, preimage->buf, preimage->len)) + !memcmp_switch(img->buf + try, preimage->buf, preimage->len)) { + if (ignore_whitespace) { + /* + * Replace the preimage whitespace with the original one + */ + size_t newlen = 0; + for (i = 0; i < preimage->nr; i++) { + newlen += preimage->line[i].len = + img->line[try_lno + i].len; + } + fixed_buf = xmalloc(newlen); + memcpy(fixed_buf, img->buf + try, newlen); + + update_pre_post_images( + preimage, postimage, + fixed_buf, newlen); + } return 1; + } if (!ignore_whitespace && (ws_error_action != correct_ws_error)) return 0; -- 1.6.3.3.512.g1f6a.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html