Giuseppe Bilotta <giuseppe.bilotta@xxxxxxxxx> writes: > diff --git a/builtin-apply.c b/builtin-apply.c > index 39dc96a..7ec5b8b 100644 > --- a/builtin-apply.c > +++ b/builtin-apply.c > @@ -1773,12 +1866,57 @@ static int match_fragment(struct image *img, > !memcmp(img->buf + try, preimage->buf, preimage->len)) > return 1; > > + /* > + * No exact match. If we are ignoring whitespace, run a line-by-line > + * fuzzy matching. We collect all the line length information because > + * we need it to adjust whitespace if we match. > + */ > + if (ws_ignore_action == ignore_ws_change) { > + size_t imgoff = 0; > + size_t preoff = 0; > + size_t postlen = postimage->len; > + size_t imglen[preimage->nr]; > + for (i = 0; i < preimage->nr; i++) { > + imglen[i] = img->line[try_lno+i].len; > + size_t prelen = preimage->line[i].len; > + if (!fuzzy_matchlines( > + img->buf + try + imgoff, imglen[i], > + preimage->buf + preoff, prelen)) > + return 0; > + if (preimage->line[i].flag & LINE_COMMON) > + postlen += imglen[i] - prelen; > + imgoff += imglen[i]; > + preoff += prelen; > + } > + > + /* > + * Ok, the preimage matches with whitespace fuzz. Update it and > + * the common postimage lines to use the same whitespace as the > + * target. imgoff now holds the true length of the target that > + * matches the preimage, and we need to update the line lengths > + * of the preimage to match the target ones. > + */ > + fixed_buf = xmalloc(imgoff); > + memcpy(fixed_buf, img->buf + try, imgoff); > + for (i = 0; i < preimage->nr; i++) > + preimage->line[i].len = imglen[i]; > + > + /* > + * Update the preimage buffer and the postimage context lines. > + */ > + update_pre_post_images(preimage, postimage, > + fixed_buf, imgoff, postlen); > + return 1; > + } > + Why do you need imglen[] vla here? IOW, can't the above be simply like this? diff --git a/builtin-apply.c b/builtin-apply.c index ae11b41..c8372a0 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -1874,20 +1874,18 @@ static int match_fragment(struct image *img, if (ws_ignore_action == ignore_ws_change) { size_t imgoff = 0; size_t preoff = 0; size_t postlen = postimage->len; - size_t imglen[preimage->nr]; for (i = 0; i < preimage->nr; i++) { size_t prelen = preimage->line[i].len; + size_t imglen = img->line[try_lno+i].len; - imglen[i] = img->line[try_lno+i].len; - if (!fuzzy_matchlines( - img->buf + try + imgoff, imglen[i], - preimage->buf + preoff, prelen)) + if (!fuzzy_matchlines(img->buf + try + imgoff, imglen, + preimage->buf + preoff, prelen)) return 0; if (preimage->line[i].flag & LINE_COMMON) - postlen += imglen[i] - prelen; - imgoff += imglen[i]; + postlen += imglen - prelen; + imgoff += imglen; preoff += prelen; } /* @@ -1899,9 +1897,9 @@ static int match_fragment(struct image *img, */ fixed_buf = xmalloc(imgoff); memcpy(fixed_buf, img->buf + try, imgoff); for (i = 0; i < preimage->nr; i++) - preimage->line[i].len = imglen[i]; + preimage->line[i].len = img->line[try_lno+i].len; /* * Update the preimage buffer and the postimage context lines. */ -- 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