--- diff.c | 50 +++++++++++++++----------------------------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/diff.c b/diff.c index 27ad8cf..cd0166c 100644 --- a/diff.c +++ b/diff.c _AT_@ -107,9 +107,9 @@ diff2(char **a, char **b, size_t an, size_t bn) size_t d = matrix[ai - 1][bi - 1]; size_t u = matrix[ai - 1][bi ]; size_t l = matrix[ai ][bi - 1]; - size_t lu = 1 + (l < u ? l : u); + size_t lu = 1 + (l <= u ? l : u); int ch = strcmp(a[ai], b[bi]); /* remember !! if using d += ch */ - map [ai][bi] = (lu < d || ch) ? 1 + (l < u) : 0; + map [ai][bi] = (lu < d || ch) ? 1 + (l <= u) : 0; matrix[ai][bi] = (lu < d || ch) ? lu : d; if (matrix[ai][bi] < matrix[ai][boff]) { boff = bi - 1; _AT_@ -131,26 +131,6 @@ diff2(char **a, char **b, size_t an, size_t bn) return rc + ri; } -static void -flush_output(struct output *output, size_t n) -{ - size_t i; - - if (!n) - return; - - if (output->colour == 0) { - printf("%s%s\n", " ", output->text); - } else { - for (i = 0; i < n; i++) - if (output[i].colour == 1) - printf("\033[31m-%s\033[m\n", output[i].text); - for (i = 0; i < n; i++) - if (output[i].colour == 2) - printf("\033[32m+%s\033[m\n", output[i].text); - } -} - int main(int argc, char *argv[]) { _AT_@ -158,8 +138,7 @@ main(int argc, char *argv[]) struct file_data *new; char *path; char trace; - struct output *output; - size_t n, ai, bi; + size_t ai, bi; char **a; char **b; int ret = 0; _AT_@ -171,20 +150,22 @@ main(int argc, char *argv[]) a = old->lines, b = new->lines; path = diff2(a, b, old->line_count, new->line_count); - - output = emalloc((old->line_count + new->line_count) * sizeof(*output)); - for (n = ai = bi = 0; (trace = *--path) != END_OF_PATH;) { - if (trace) { - output[n++] = (struct output){ trace, trace == 1 ? a[ai] : b[bi] }; - } else { - flush_output(output, n), n = 0; - output[n++] = (struct output){ trace, a[ai] }; - flush_output(output, n), n = 0; + + for (ai = bi = 0; (trace = *--path) != END_OF_PATH;) { + switch (trace) { + default: + printf("%s%s\n", " ", a[ai]); + break; + case 1: + printf("\033[31m-%s\033[m\n", a[ai]); + break; + case 2: + printf("\033[32m+%s\033[m\n", b[bi]); + break; } ai += trace != 2; bi += trace != 1; } - flush_output(output, n); if (fshut(stdout, "<stdout>")) ret = 2; _AT_@ -192,6 +173,5 @@ main(int argc, char *argv[]) free(old); free(new); free(path); - free(output); return ret; } -- 2.7.0Received on Thu Jan 28 2016 - 00:18:37 CET
This archive was generated by hypermail 2.3.0 : Thu Jan 28 2016 - 00:24:19 CET