From 8324bd72edb942bf0c67efb47daca3a916404647 Mon Sep 17 00:00:00 2001 From: mquinson Date: Tue, 29 May 2007 09:59:49 +0000 Subject: [PATCH] Fixups to the diff computation (again), and kill the last empty line of diffs git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3538 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/xbt/xbt_str.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/xbt/xbt_str.c b/src/xbt/xbt_str.c index 1694797105..62c32ca444 100644 --- a/src/xbt/xbt_str.c +++ b/src/xbt/xbt_str.c @@ -361,12 +361,12 @@ static void diff_build_diff(xbt_dynar_t res, diff_build_diff(res,C,da,db,i-1,j-1); topush = bprintf(" %s",xbt_dynar_get_as(da,i,char*)); xbt_dynar_push(res, &topush); - } else if (j>0 && + } else if (j>=0 && (i<=0 || xbt_matrix_get_as(C,i,j-1,int) >= xbt_matrix_get_as(C,i-1,j,int))) { diff_build_diff(res,C,da,db,i,j-1); topush = bprintf("+ %s",xbt_dynar_get_as(db,j,char*)); xbt_dynar_push(res,&topush); - } else if (i>0 && + } else if (i>=0 && (j<=0 || xbt_matrix_get_as(C,i,j-1,int) < xbt_matrix_get_as(C,i-1,j,int))) { diff_build_diff(res,C,da,db,i-1,j); topush = bprintf("- %s",xbt_dynar_get_as(da,i,char*)); @@ -376,6 +376,7 @@ static void diff_build_diff(xbt_dynar_t res, } else { THROW2(arg_error,0,"Invalid values: i=%d, j=%d",i,j); } + } /** @brief Compute the unified diff of two strings */ @@ -388,6 +389,17 @@ char *xbt_str_diff(char *a, char *b) { char *res=NULL; diff_build_diff(diff, C, da,db, xbt_dynar_length(da)-1, xbt_dynar_length(db)-1); + /* Clean empty lines at the end */ + while (xbt_dynar_length(diff) > 0) { + char *str; + xbt_dynar_pop(diff,&str); + if (str[0]=='\0' || !strcmp(str," ")) { + free(str); + } else { + xbt_dynar_push(diff,&str); + break; + } + } res = xbt_str_join(diff, "\n"); xbt_dynar_free(&da); -- 2.20.1