diff: fix bug where -D does not work

Problem reported by Robert Webb (bug#61193).
* NEWS: Mention this.
* src/diff.c (main): Omit stray ‘sizeof’.
* tests/ifdef: New test.
* tests/Makefile.am (TESTS): Add it.
This commit is contained in:
Paul Eggert 2023-02-10 15:33:40 -08:00
parent 7e7ef707d6
commit ba08fbbb0c
4 changed files with 44 additions and 1 deletions

5
NEWS
View File

@ -2,6 +2,11 @@ GNU diffutils NEWS -*- outline -*-
* Noteworthy changes in release ?.? (????-??-??) [?]
** Bug fixes
diff -D no longer fails to output #ifndef lines.
[bug#61193 introduced in 3.9]
* Noteworthy changes in release 3.9 (2023-01-15) [stable]

View File

@ -416,7 +416,7 @@ main (int argc, char **argv)
char *base = b;
int changes = 0;
for (i = 0; i < sizeof sizeof C_ifdef_group_formats; i++)
for (i = 0; i < sizeof C_ifdef_group_formats; i++)
{
char ch = C_ifdef_group_formats[i];
switch (ch)

View File

@ -10,6 +10,7 @@ TESTS = \
diff3 \
excess-slash \
help-version \
ifdef \
invalid-re \
function-line-vs-leading-space \
ignore-matching-lines \

37
tests/ifdef Executable file
View File

@ -0,0 +1,37 @@
#!/bin/sh
# --ifdef
# Bug reported by Robert Webb in <http://bugs.gnu.org/61193>.
. "${srcdir=.}/init.sh"; path_prepend_ ../src
fail=0
cat <<'EOF' >a
1
2
3
4
5
EOF
cat <<'EOF' >b
1
4
5
EOF
cat <<'EOF' >exp
1
#ifndef ZZZ
2
3
#endif /* ! ZZZ */
4
5
EOF
returns_ 1 diff -D ZZZ a b >out 2>err || fail=1
compare exp out || fail=1
Exit $fail