From fe1ce2e43e612d7b07118cf139a8b61d76bea893 Mon Sep 17 00:00:00 2001 From: Matheus Izvekov Date: Mon, 18 Jan 2010 16:07:07 -0200 Subject: diff: implement flag -B (Ignore changes whose lines are all blank) >>From 7c3ce93213590bd0592435dc27d1272d0fd3309b Mon Sep 17 00:00:00 2001 From: Matheus Izvekov Date: Mon, 18 Jan 2010 15:52:31 -0200 Subject: [PATCH] diff: implement flag -B (Ignore changes whose lines are all blank) function old new delta diffreg 1196 1240 +44 .rodata 6538 6561 +23 packed_usage 457 478 +21 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 88/0) Total: 88 bytes text data bss dec hex filename 70123 733 8576 79432 13648 busybox_old 70190 733 8576 79499 1368b busybox_unstripped Signed-off-by: Matheus Izvekov Signed-off-by: Denys Vlasenko --- editors/diff.c | 28 +++++++++++++++++----------- include/usage.h | 3 ++- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/editors/diff.c b/editors/diff.c index ef2030527..772610477 100644 --- a/editors/diff.c +++ b/editors/diff.c @@ -84,27 +84,31 @@ #define dbg_error_msg(...) ((void)0) #endif -enum { /* print_status() and diffreg() return values */ - STATUS_SAME, /* files are the same */ - STATUS_DIFFER, /* files differ */ - STATUS_BINARY, /* binary files differ */ +enum { /* print_status() and diffreg() return values */ + STATUS_SAME, /* files are the same */ + STATUS_DIFFER, /* files differ */ + STATUS_BINARY, /* binary files differ */ }; -enum { /* Commandline flags */ +enum { /* Commandline flags */ FLAG_a, FLAG_b, FLAG_d, FLAG_i, - FLAG_L, /* unused */ + FLAG_L, /* never used, handled by getopt32 */ FLAG_N, FLAG_q, FLAG_r, FLAG_s, - FLAG_S, /* unused */ + FLAG_S, /* never used, handled by getopt32 */ FLAG_t, FLAG_T, - FLAG_U, /* unused */ + FLAG_U, /* never used, handled by getopt32 */ FLAG_w, + FLAG_u, /* ignored, this is the default */ + FLAG_p, /* not implemented */ + FLAG_B, + FLAG_E, /* not implemented */ }; #define FLAG(x) (1 << FLAG_##x) @@ -578,6 +582,8 @@ static bool diff(FILE_and_pos_t ft[2], char *file[2]) int idx = -1, i = 1; do { + bool nonempty = false; + while (1) { struct context_vec v; @@ -606,6 +612,7 @@ static bool diff(FILE_and_pos_t ft[2], char *file[2]) ) { break; } + nonempty |= (v.a >= v.b) && (v.c >= v.d); vec = xrealloc_vector(vec, 6, ++idx); vec[idx] = v; } @@ -617,7 +624,7 @@ static bool diff(FILE_and_pos_t ft[2], char *file[2]) } if (idx < 0) continue; - if (!(option_mask32 & FLAG(q))) { + if (!(option_mask32 & FLAG(q)) && !((option_mask32 & FLAG(B)) && !nonempty)) { struct context_vec *cvp = vec; int lowa = MAX(1, cvp->a - opt_U_context); int upb = MIN(nlen[0], vec[idx].b + opt_U_context); @@ -880,8 +887,7 @@ int diff_main(int argc UNUSED_PARAM, char **argv) /* exactly 2 params; collect multiple -L