From: Neil Brown Date: Mon, 7 May 2012 21:59:26 +0000 (+1000) Subject: Refactor do_diff slightly X-Git-Tag: v0.9~39 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=4af43258646cc6e9b5a4065354b1e4bb9d059c79;p=wiggle.git Refactor do_diff slightly Combine come code that is common to 'word' and 'line' branches. Signed-off-by: NeilBrown --- diff --git a/wiggle.c b/wiggle.c index d922c83..a103cbf 100644 --- a/wiggle.c +++ b/wiggle.c @@ -334,6 +334,8 @@ static int do_diff(int argc, char *argv[], int obj, int ispatch, struct stream f, flist[3]; int chunks1 = 0, chunks2 = 0, chunks3 = 0; int exit_status = 0; + struct file fl[2]; + struct csl *csl; switch (argc-optind) { case 0: @@ -402,30 +404,18 @@ static int do_diff(int argc, char *argv[], int obj, int ispatch, flist[1] = flist[2]; flist[2] = f; } + fl[0] = split_stream(flist[0], obj == 'l' ? ByLine : ByWord); + fl[1] = split_stream(flist[1], obj == 'l' ? ByLine : ByWord); + if (chunks2 && !chunks1) + csl = pdiff(fl[0], fl[1], chunks2); + else + csl = diff(fl[0], fl[1]); if (obj == 'l') { - struct file fl[2]; - struct csl *csl; - fl[0] = split_stream(flist[0], ByLine); - fl[1] = split_stream(flist[1], ByLine); - if (chunks2 && !chunks1) - csl = pdiff(fl[0], fl[1], chunks2); - else - csl = diff(fl[0], fl[1]); - if (!chunks1) printf("@@ -1,%d +1,%d @@\n", fl[0].elcnt, fl[1].elcnt); exit_status = do_diff_lines(fl, csl); } else { - struct file fl[2]; - struct csl *csl; - fl[0] = split_stream(flist[0], ByWord); - fl[1] = split_stream(flist[1], ByWord); - if (chunks2 && !chunks1) - csl = pdiff(fl[0], fl[1], chunks2); - else - csl = diff(fl[0], fl[1]); - if (!chunks1) { /* count lines in each file */ int l1, l2, i;