Skip to content

Commit

Permalink
builtin-apply.c: clean-up apply_one_fragment()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Feb 5, 2008
1 parent c330fdd commit 61e08cc
Showing 1 changed file with 27 additions and 28 deletions.
55 changes: 27 additions & 28 deletions builtin-apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -1804,10 +1804,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
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;
Expand All @@ -1816,7 +1813,11 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,

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);
Expand All @@ -1833,7 +1834,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
* 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;
Expand All @@ -1850,30 +1851,30 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
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;
Expand All @@ -1892,16 +1893,13 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
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;

Expand All @@ -1923,10 +1921,10 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
}

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;

Expand Down Expand Up @@ -1990,11 +1988,12 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
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);

Expand Down

0 comments on commit 61e08cc

Please sign in to comment.