diff options
author | Matheus Izvekov <mizvekov@gmail.com> | 2010-01-18 16:07:07 -0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-01-20 02:45:05 +0100 |
commit | fe1ce2e43e612d7b07118cf139a8b61d76bea893 (patch) | |
tree | ce8b6457e532b62c0ced45b0a33257d781f3c346 | |
parent | b7a044043ceae800a1f7abd69b107876ad5e9d40 (diff) | |
download | 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>
-rw-r--r-- | editors/diff.c | 28 | ||||
-rw-r--r-- | 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 <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) { diff --git a/include/usage.h b/include/usage.h index 168d6e1e5..7b8564278 100644 --- a/include/usage.h +++ b/include/usage.h @@ -852,13 +852,14 @@ "Relay DHCP requests between clients and server" \ #define diff_trivial_usage \ - "[-abdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2" + "[-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2" #define diff_full_usage "\n\n" \ "Compare files line by line and output the differences between them.\n" \ "This implementation supports unified diffs only.\n" \ "\nOptions:" \ "\n -a Treat all files as text" \ "\n -b Ignore changes in the amount of whitespace" \ + "\n -B Ignore changes whose lines are all blank" \ "\n -d Try hard to find a smaller set of changes" \ "\n -i Ignore case differences" \ "\n -L Use LABEL instead of the filename in the unified header" \ |