int match_beginning, match_end;
const char *patch = frag->patch;
int size = frag->size;
- char *old = xmalloc(size);
- char *new = xmalloc(size);
- char *oldlines, *newlines;
- int oldsize = 0, newsize = 0;
+ char *old, *new, *oldlines, *newlines;
int new_blank_lines_at_end = 0;
unsigned long leading, trailing;
int pos, applied_pos;
memset(&preimage, 0, sizeof(preimage));
memset(&postimage, 0, sizeof(postimage));
+ oldlines = xmalloc(size);
+ newlines = xmalloc(size);
+ old = oldlines;
+ new = newlines;
while (size > 0) {
char first;
int len = linelen(patch, size);
* followed by "\ No newline", then we also remove the
* last one (which is the newline, of course).
*/
- plen = len-1;
+ plen = len - 1;
if (len < size && patch[len] == '\\')
plen--;
first = *patch;
if (plen < 0)
/* ... followed by '\No newline'; nothing */
break;
- old[oldsize++] = '\n';
- new[newsize++] = '\n';
+ *old++ = '\n';
+ *new++ = '\n';
add_line_info(&preimage, "\n", 1, LINE_COMMON);
add_line_info(&postimage, "\n", 1, LINE_COMMON);
break;
case ' ':
case '-':
- memcpy(old + oldsize, patch + 1, plen);
- add_line_info(&preimage, old + oldsize, plen,
+ memcpy(old, patch + 1, plen);
+ add_line_info(&preimage, old, plen,
(first == ' ' ? LINE_COMMON : 0));
- oldsize += plen;
+ old += plen;
if (first == '-')
break;
/* Fall-through for ' ' */
case '+':
if (first != '+' || !no_add) {
- int added = apply_line(new + newsize, patch,
+ int added = apply_line(new, patch,
plen, ws_rule);
- add_line_info(&postimage, new + newsize, added,
+ add_line_info(&postimage, new, added,
(first == '+' ? 0 : LINE_COMMON));
- newsize += added;
+ new += added;
if (first == '+' &&
- added == 1 && new[newsize-1] == '\n')
+ added == 1 && new[-1] == '\n')
added_blank_line = 1;
}
break;
patch += len;
size -= len;
}
-
if (inaccurate_eof &&
- oldsize > 0 && old[oldsize - 1] == '\n' &&
- newsize > 0 && new[newsize - 1] == '\n') {
- oldsize--;
- newsize--;
+ old > oldlines && old[-1] == '\n' &&
+ new > newlines && new[-1] == '\n') {
+ old--;
+ new--;
}
- oldlines = old;
- newlines = new;
leading = frag->leading;
trailing = frag->trailing;
}
pos = frag->newpos ? (frag->newpos - 1) : 0;
- preimage.buf = old;
- preimage.len = oldsize;
- postimage.buf = new;
- postimage.len = newsize;
+ preimage.buf = oldlines;
+ preimage.len = old - oldlines;
+ postimage.buf = newlines;
+ postimage.len = new - newlines;
preimage.line = preimage.line_allocated;
postimage.line = postimage.line_allocated;
update_image(img, applied_pos, &preimage, &postimage);
} else {
if (apply_verbosely)
- error("while searching for:\n%.*s", oldsize, oldlines);
+ error("while searching for:\n%.*s",
+ (int)(old - oldlines), oldlines);
}
- free(old);
- free(new);
+ free(oldlines);
+ free(newlines);
free(preimage.line_allocated);
free(postimage.line_allocated);