builtin-apply.c: clean-up apply_one_fragment()
We had two pointer variables pointing to the same buffer and an integer variable used to index into its tail part that was active (old, oldlines and oldsize for the preimage, and their 'new' counterparts for the postimage). To help readability, use 'oldlines' as the allocated pointer, and use 'old' as the pointer to the tail that advances while the code builds up the contents in the buffer. The size 'oldsize' can be computed as (old-oldines). Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
c330fdd42d
commit
61e08ccacb
@ -1804,10 +1804,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
|||||||
int match_beginning, match_end;
|
int match_beginning, match_end;
|
||||||
const char *patch = frag->patch;
|
const char *patch = frag->patch;
|
||||||
int size = frag->size;
|
int size = frag->size;
|
||||||
char *old = xmalloc(size);
|
char *old, *new, *oldlines, *newlines;
|
||||||
char *new = xmalloc(size);
|
|
||||||
char *oldlines, *newlines;
|
|
||||||
int oldsize = 0, newsize = 0;
|
|
||||||
int new_blank_lines_at_end = 0;
|
int new_blank_lines_at_end = 0;
|
||||||
unsigned long leading, trailing;
|
unsigned long leading, trailing;
|
||||||
int pos, applied_pos;
|
int pos, applied_pos;
|
||||||
@ -1816,7 +1813,11 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
|||||||
|
|
||||||
memset(&preimage, 0, sizeof(preimage));
|
memset(&preimage, 0, sizeof(preimage));
|
||||||
memset(&postimage, 0, sizeof(postimage));
|
memset(&postimage, 0, sizeof(postimage));
|
||||||
|
oldlines = xmalloc(size);
|
||||||
|
newlines = xmalloc(size);
|
||||||
|
|
||||||
|
old = oldlines;
|
||||||
|
new = newlines;
|
||||||
while (size > 0) {
|
while (size > 0) {
|
||||||
char first;
|
char first;
|
||||||
int len = linelen(patch, size);
|
int len = linelen(patch, size);
|
||||||
@ -1833,7 +1834,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
|||||||
* followed by "\ No newline", then we also remove the
|
* followed by "\ No newline", then we also remove the
|
||||||
* last one (which is the newline, of course).
|
* last one (which is the newline, of course).
|
||||||
*/
|
*/
|
||||||
plen = len-1;
|
plen = len - 1;
|
||||||
if (len < size && patch[len] == '\\')
|
if (len < size && patch[len] == '\\')
|
||||||
plen--;
|
plen--;
|
||||||
first = *patch;
|
first = *patch;
|
||||||
@ -1850,30 +1851,30 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
|||||||
if (plen < 0)
|
if (plen < 0)
|
||||||
/* ... followed by '\No newline'; nothing */
|
/* ... followed by '\No newline'; nothing */
|
||||||
break;
|
break;
|
||||||
old[oldsize++] = '\n';
|
*old++ = '\n';
|
||||||
new[newsize++] = '\n';
|
*new++ = '\n';
|
||||||
add_line_info(&preimage, "\n", 1, LINE_COMMON);
|
add_line_info(&preimage, "\n", 1, LINE_COMMON);
|
||||||
add_line_info(&postimage, "\n", 1, LINE_COMMON);
|
add_line_info(&postimage, "\n", 1, LINE_COMMON);
|
||||||
break;
|
break;
|
||||||
case ' ':
|
case ' ':
|
||||||
case '-':
|
case '-':
|
||||||
memcpy(old + oldsize, patch + 1, plen);
|
memcpy(old, patch + 1, plen);
|
||||||
add_line_info(&preimage, old + oldsize, plen,
|
add_line_info(&preimage, old, plen,
|
||||||
(first == ' ' ? LINE_COMMON : 0));
|
(first == ' ' ? LINE_COMMON : 0));
|
||||||
oldsize += plen;
|
old += plen;
|
||||||
if (first == '-')
|
if (first == '-')
|
||||||
break;
|
break;
|
||||||
/* Fall-through for ' ' */
|
/* Fall-through for ' ' */
|
||||||
case '+':
|
case '+':
|
||||||
if (first != '+' || !no_add) {
|
if (first != '+' || !no_add) {
|
||||||
int added = apply_line(new + newsize, patch,
|
int added = apply_line(new, patch,
|
||||||
plen, ws_rule);
|
plen, ws_rule);
|
||||||
add_line_info(&postimage, new + newsize, added,
|
add_line_info(&postimage, new, added,
|
||||||
(first == '+' ? 0 : LINE_COMMON));
|
(first == '+' ? 0 : LINE_COMMON));
|
||||||
|
|
||||||
newsize += added;
|
new += added;
|
||||||
if (first == '+' &&
|
if (first == '+' &&
|
||||||
added == 1 && new[newsize-1] == '\n')
|
added == 1 && new[-1] == '\n')
|
||||||
added_blank_line = 1;
|
added_blank_line = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1892,16 +1893,13 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
|||||||
patch += len;
|
patch += len;
|
||||||
size -= len;
|
size -= len;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inaccurate_eof &&
|
if (inaccurate_eof &&
|
||||||
oldsize > 0 && old[oldsize - 1] == '\n' &&
|
old > oldlines && old[-1] == '\n' &&
|
||||||
newsize > 0 && new[newsize - 1] == '\n') {
|
new > newlines && new[-1] == '\n') {
|
||||||
oldsize--;
|
old--;
|
||||||
newsize--;
|
new--;
|
||||||
}
|
}
|
||||||
|
|
||||||
oldlines = old;
|
|
||||||
newlines = new;
|
|
||||||
leading = frag->leading;
|
leading = frag->leading;
|
||||||
trailing = frag->trailing;
|
trailing = frag->trailing;
|
||||||
|
|
||||||
@ -1923,10 +1921,10 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
|||||||
}
|
}
|
||||||
|
|
||||||
pos = frag->newpos ? (frag->newpos - 1) : 0;
|
pos = frag->newpos ? (frag->newpos - 1) : 0;
|
||||||
preimage.buf = old;
|
preimage.buf = oldlines;
|
||||||
preimage.len = oldsize;
|
preimage.len = old - oldlines;
|
||||||
postimage.buf = new;
|
postimage.buf = newlines;
|
||||||
postimage.len = newsize;
|
postimage.len = new - newlines;
|
||||||
preimage.line = preimage.line_allocated;
|
preimage.line = preimage.line_allocated;
|
||||||
postimage.line = postimage.line_allocated;
|
postimage.line = postimage.line_allocated;
|
||||||
|
|
||||||
@ -1990,11 +1988,12 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
|||||||
update_image(img, applied_pos, &preimage, &postimage);
|
update_image(img, applied_pos, &preimage, &postimage);
|
||||||
} else {
|
} else {
|
||||||
if (apply_verbosely)
|
if (apply_verbosely)
|
||||||
error("while searching for:\n%.*s", oldsize, oldlines);
|
error("while searching for:\n%.*s",
|
||||||
|
(int)(old - oldlines), oldlines);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(old);
|
free(oldlines);
|
||||||
free(new);
|
free(newlines);
|
||||||
free(preimage.line_allocated);
|
free(preimage.line_allocated);
|
||||||
free(postimage.line_allocated);
|
free(postimage.line_allocated);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user