Commit Graph

59 Commits

Author SHA1 Message Date
kevans
b4a62267b6 diff: fix segfault with --tabsize and no/malformed argument
--tabsize was previously listed as optional_argument, but didn't account for
the optionality of it in the argument handling. This is irrelevant -- the
manpage doesn't indicate that the argument is optional, and indeed there's
no clear interpretation of omitting the argument because there's no other
side effect of --tabsize.

The "malformed" argument part of the header on this message is simply
referring to usage like this:

% diff --tabsize 4 A B

With an optional_argument, the argument must be attached to the parameter
directly (e.g. --tabsize=4), so the argument is effectively NULL with the
above invocation as if no argument had been passed.

PR:		243974
Submitted by:	fehmi noyan isi <fnoyanisi yahoo com> (diff.c portion)
MFC after:	3 days
2020-02-13 20:23:55 +00:00
0mp
7fe575331f diff.1: Fix style & document -y as extension to POSIX
- Long options must be stylized with the Fl macro as well.

Reviewed by:	bapt
Approved by:	bcr (mentor)
Differential Revision:	https://reviews.freebsd.org/D23642
2020-02-12 20:06:41 +00:00
bapt
2597a0e2ed Fix most of the style warnings 2020-02-07 12:26:38 +00:00
bapt
6e7eee03fa Update diff(1) TODO removing what has been implemented 2020-02-07 10:18:01 +00:00
bapt
c3b213c975 diff: implement -y (--side-by-side) along with -W and --suppress-common-lines
PR:		219933
Submitted by:	fehmi noyan isi <fnoyanisi@yahoo.com>
MFC after:	3 weeks
2020-02-07 10:17:13 +00:00
markj
557b058809 Do not skip line-by-line comparison if -q and -I are specified.
This fixes a regression from r356695.

Submitted by:	kevans
Reported by:	Jenkins via lwhsu
MFC after:	6 days
2020-01-14 15:35:03 +00:00
bapt
172b3c0240 When system calls indicate an error they return -1, not some arbitrary
value < 0.  errno is only updated in this case.

Obtained from:	OpenBSD
MFC after:	3 days
2020-01-14 08:22:28 +00:00
bapt
cf1a5bd52a asprintf returns -1, not an arbitrary value < 0. Also upon error the
(very sloppy specification) leaves an undefined value in *ret, so it is
wrong to inspect it, the error condition is enough.

Obtained from:	OpenBSD
MFC after:	3 days
2020-01-14 08:18:04 +00:00
bapt
714db93caa mkstemp returns -1
Obtained from:	OpenBSD
MFC after:	3 days
2020-01-14 08:16:15 +00:00
markj
ef17d00804 Optimize diff -q.
Once we know whether the files differ, we don't need to do any further
work.

PR:		242828
Submitted by:	fehmi noyan isi <fnoyanisi@yahoo.com> (original version)
Reviewed by:	bapt, kevans
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D23152
2020-01-13 18:29:47 +00:00
oshogbo
b60d6a5607 capsicum: use a new capsicum helpers in tools
Use caph_{rights,ioctls,fcntls}_limit to simplify the code.
2018-11-04 19:24:49 +00:00
kevans
1f54f4e50c diff(1): Refactor -B a little bit
Instead of doing a second pass to skip empty lines if we've specified -I, go
ahead and check both at once. Ignore critera has been split out into its own
function to try and keep the logic cleaner.
2018-08-19 04:15:38 +00:00
kevans
31cc0854aa diff(1): Implement -B/--ignore-blank-lines
As noted by cem in r338035, coccinelle invokes diff(1) with the -B flag.
This was not previously implemented here, so one was forced to create a link
for GNU diff to /usr/local/bin/diff

Implement the -B flag and add some primitive tests for it. It is implemented
in the same fashion that -I is implemented; each chunk's lines are scanned,
and if a non-blank line is encountered then the chunk will be output.
Otherwise, it's skipped.

MFC after:	2 weeks
2018-08-19 03:57:20 +00:00
delphij
4b9631678f Improve --strip-trailing-cr handling:
- Advance ctold for f1 and ctnew for f2
 - ungetc() if the character is unexpected
 - Don't break early when we hit the combination on one side

PR:		230049
Reported by:	maskray <emacsray gmail com>
Reviewed by:	bapt, maskray
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D16451
2018-07-27 05:21:20 +00:00
oshogbo
8acf9b1609 Convert cap_enter() < 0 && errno != ENOSYS to caph_enter() < 0.
No functional change intended.
2018-06-19 23:43:14 +00:00
bapt
b5681b9191 Fix memory leak
CID:		1393352
2018-06-12 16:42:11 +00:00
bapt
dbe09b2df6 Correctly test return value of pipe(2)
CID:		1393351
2018-06-12 16:40:22 +00:00
bapt
69a4356acd diff: Import fixes from OpenBSD
original commit log by miller@OpenBSD  r1.46:
Fix exit value when diffing directories with missing files and the -N
or -P options are not used.  From Ibrahim Khalifa
2018-06-09 21:09:24 +00:00
bapt
5b29c997f6 Isolate the pr(1) related code in its own source files
This keeps diffreg.c closer to what it is supposed to do:
diffing regular files.

It also allows my code to get a proper license
2018-06-09 20:24:17 +00:00
bapt
61e50de933 Replace homemade equivalent of tolower(3) by towlower(3)
This will help in the futur making diff -i works with multibyte
2017-12-13 16:09:00 +00:00
pfg
9da7bdde06 spdx: initial adoption of licensing ID tags.
The Software Package Data Exchange (SPDX) group provides a specification
to make it easier for automated tools to detect and summarize well known
opensource licenses. We are gradually adopting the specification, noting
that the tags are considered only advisory and do not, in any way,
superceed or replace the license texts.

Special thanks to Wind River for providing access to "The Duke of
Highlander" tool: an older (2014) run over FreeBSD tree was useful as a
starting point.

Initially, only tag files that use BSD 4-Clause "Original" license.

RelNotes:	yes
Differential Revision:	https://reviews.freebsd.org/D13133
2017-11-18 14:26:50 +00:00
bdrewery
a4164f0dcd DIRDEPS_BUILD: Connect new directories.
Sponsored by:	Dell EMC Isilon
2017-10-31 00:04:07 +00:00
ngie
d26727d972 Add HAS_TESTS to all Makefiles that are currently using the
`SUBDIR.${MK_TESTS}+= tests` idiom.

This is a follow up to r321912.
2017-08-02 08:50:42 +00:00
ngie
734d081ed1 MFhead@r321912 2017-08-02 08:38:36 +00:00
ngie
44761c7f7e Use more flexible expression for replacing t_diff in
contrib/netbsd-tests/usr.bin/diff/t_diff.sh with the name of the script via
`basename $0`.

This was a change I forgot to port over from
^/head/gnu/usr.bin/diff/tests/Makefile@r272787.
2017-07-19 18:30:16 +00:00
ngie
f6774d5e02 Add tests that exercise -q, like -rq and add tests that test -q like -Nrq
MFC after:	2 months
MFC with:	r321076, r321077, r321078
2017-07-17 18:07:53 +00:00
ngie
9de6ffe10b Fix exit status with -rq when there is a file in one directory but not another,
i.e., when print_only is called.

Prior to this change, -rq was always returning 0. After this change it will
return 1 if there is a difference between two directories.

This fixes compatibility with GNU diff and unbreaks backwards compatibility
expectations.

Found when trying to extend diff_test:brief_format_test.

MFC after:	2 months
MFC with:	r321076, r321077
2017-07-17 18:06:42 +00:00
ngie
fb55484ad5 Add some tests for brief (--brief/-q) format
MFC after:	2 months
MFC with:	r321076
2017-07-17 17:50:50 +00:00
ngie
e066de4be4 Don't emit "diff: diff <options> arguments" when diffing files if
-q is specified.

This improves compatibility with GNU diff.

Found by accident with `diff -Nrq /usr/tests /usr/tests.new | grep Kyuafile`.

MFC after:	2 months
Relnotes:	yes
2017-07-17 17:36:04 +00:00
ngie
cd875020fc Add some testcases for diff --side-by-side support
These are were created proactively, in anticipation of the support being
fully implemented sometime in the future.

The tests currently fail on ^/head@r319845, however. Expect them to fail.

PR:		219933
Tested with:	gdiff
2017-06-12 05:11:43 +00:00
jhb
5cb4df4bfa Add -H as an alias for --speed-large-file to match GNU diff.
This is undocumented to match GNU diff where -H is also undocumented.
Some existing software (such as kompare) uses this option by default.

Reviewed by:	emaste, rpokala
Differential Revision:	https://reviews.freebsd.org/D11022
2017-06-02 03:25:59 +00:00
dim
146ce2e05b Fix the following warning from gcc 4.2 in usr.bin/diff:
usr.bin/diff/diffreg.c: In function 'change':
usr.bin/diff/diffreg.c:1085: warning: 'i' may be used uninitialized in this function

This version of gcc is not smart enough to see that 'i' cannot actually
be used unitialized.  However, the variable is confusingly re-used, so
it is better to give it another name, and clearly initialize it before
attempting to use it.

Reviewed by:	bapt
Differential Revision: https://reviews.freebsd.org/D10484
2017-04-24 20:34:56 +00:00
bapt
49a226f092 Cross reference pr(1) which diff might call with -l option 2017-04-20 19:14:52 +00:00
bapt
7b9710f96e Update the TODO list to reflect what has been changed 2017-04-20 19:07:52 +00:00
bapt
c064b3f198 Document all long options 2017-04-20 19:05:43 +00:00
bapt
e676ac4a5f Implement a basic --changed-group-format
etcupdate(8) requires that option, while GNU diff supports many more variation
of that options, their behaviour beside the simple verion implemented here are
quite inconsistent as such I do not plan to implement those.

The only special keyword supported by this implementation are: %< and %>
%= is not implemented as the documentation of GNU diff says: common lines, but
it actually when tested print the changes from the first file
2017-04-20 14:22:33 +00:00
bapt
f0b66179eb Add a regression test for diff -D 2017-04-20 11:32:18 +00:00
bapt
4f55a572a1 Clean up headers declaration 2017-04-15 13:57:35 +00:00
bapt
f4042eab25 add a stub --speed-large-files for compatibility with GNU diff
There is no intention to implement it, but lots of scripts/tools using
diff(1) passes GNU diff option
2017-04-08 08:46:02 +00:00
jilles
43c125dabf diff: Show nanoseconds in -u/-c header line.
Show nanoseconds in the -u/-c header line.

The present portability conditionals cannot handle the POSIX standard
st_mtim, so remove them and unconditionally use st_mtim.

PR:		218018
Reported by:	jbeich
Reviewed by:	bapt
Differential Revision:	https://reviews.freebsd.org/D10145
2017-03-26 19:47:43 +00:00
jilles
f8f31de20e diff: Fix mtime of file1 in -u/-c header line.
PR:		218018
Reviewed by:	bapt
Differential Revision:	https://reviews.freebsd.org/D10140
2017-03-26 14:09:25 +00:00
ngie
cc4d755e6d diff(1): document remaining long options
While here, try and tie together some of the short options with
their long option equivalents, where possible.

Sponsored by:	Dell EMC Isilon
2017-03-23 04:35:52 +00:00
ngie
5ad4f59bfb Rename tests from <foo> to <foo>_test to match the FreeBSD test suite
naming scheme

usr.bin/diff/diff_test was renamed to usr.bin/diff/netbsd_diff_test
to avoid collisions with the renamed FreeBSD test.

MFC after:	1 week
Sponsored by:	Dell EMC Isilon
2017-03-23 03:28:24 +00:00
bapt
c426ea6953 Use MIN macros from sys/param.h 2017-03-22 21:59:04 +00:00
bapt
ccf4801ed2 Use strndup(3) instead of malloc + memcpy 2017-03-22 21:52:22 +00:00
bapt
d58997b5f8 Use MAX and MIN macros from sys/param.h 2017-03-22 21:35:01 +00:00
ngie
01472345a5 diff(1): fix SYNOPSIS section noting non-existent option, --no-ignore-case
`--no-ignore-case` should be `--no-ignore-file-name-case` per code for
compatibility with [g]diff(1).

Sponsored by:	Dell EMC Isilon
2017-03-22 18:13:14 +00:00
bapt
19909d0b9d Cache tzdata when running under capsicum
PR:		217957
Reported by:	tobik@
2017-03-20 19:24:16 +00:00
ngie
c7cfb14682 diff(1): add --strip-trailing-cr to last example in the SYNOPSIS
This syncs the last example in the SYNOPSIS with the other examples.

Reviewed by:	bapt
Sponsored by:	Dell EMC Isilon
Differential Revision:	D10017
2017-03-19 21:49:15 +00:00
ngie
3acb09ed02 diff(1): sort long options under -D example in SYNOPSYS
Sponsored by:	Dell EMC Isilon
2017-03-15 17:54:47 +00:00