diff options
author | Matheus Izvekov | 2010-01-18 16:07:07 -0200 |
---|---|---|
committer | Denys Vlasenko | 2010-01-20 02:45:05 +0100 |
commit | fe1ce2e43e612d7b07118cf139a8b61d76bea893 (patch) | |
tree | ce8b6457e532b62c0ced45b0a33257d781f3c346 /editors | |
parent | b7a044043ceae800a1f7abd69b107876ad5e9d40 (diff) | |
download | busybox-fe1ce2e43e612d7b07118cf139a8b61d76bea893.zip busybox-fe1ce2e43e612d7b07118cf139a8b61d76bea893.tar.gz |
diff: implement flag -B (Ignore changes whose lines are all blank)
>>From 7c3ce93213590bd0592435dc27d1272d0fd3309b Mon Sep 17 00:00:00 2001
From: Matheus Izvekov <mizvekov@gmail.com>
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 <mizvekov@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors')
-rw-r--r-- | editors/diff.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/editors/diff.c b/editors/diff.c index ef20305..7726104 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 <label>; -U N */ opt_complementary = "=2:L::U+"; - getopt32(argv, "abdiL:NqrsS:tTU:wu" - "p" /* ignored (for compatibility) */, + getopt32(argv, "abdiL:NqrsS:tTU:wupBE", &L_arg, &s_start, &opt_U_context); argv += optind; while (L_arg) { |