aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/diff/diff.c
Commit message (Collapse)AuthorAgeFilesLines
* MFC r360437: diff(1): don't reject specifying the same format multiple timesKyle Evans2020-05-031-10/+21
| | | | | | | | | | | | | | | | | | This may happen, for instance, if one happens to have an alias of diff to diff -up and attempts to specify the amount of context on top of that. Aliases like this may cause other problems, but if they're really not ever generating non-unified diffs then we should at least not break that use-case. In addition, we'll now pick up a format mismatch if -p is specified with !contextual && !unified && !unset. Fix up a small trailing whitespace nit in the tests while we're here, and add tests to make sure that we can double up all the formatting options. Notes: svn path=/stable/12/; revision=360595
* MFC r357875: diff: fix segfault with --tabsize and no/malformed argumentKyle Evans2020-04-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | --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 Notes: svn path=/stable/12/; revision=360407
* MFC r356723-r356725, r357649, r357652: diff(1) catch-upKyle Evans2020-04-271-3/+3
| | | | | | | | | | | | | | | | | | | | | | | r356723: mkstemp returns -1 r356724: 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. r356725: When system calls indicate an error they return -1, not some arbitrary value < 0. errno is only updated in this case. r357649: Update diff(1) TODO removing what has been implemented r357652: Fix most of the style warnings Notes: svn path=/stable/12/; revision=360404
* MFC r360125: diff(1): reject conflicting formatting optionsKyle Evans2020-04-271-2/+33
| | | | | | | | | | | | | | | | | This matches GNU diff(1) behavior and, more importantly, eliminates any source of confusion if multiple formatting options are specified. Note that the committed diff differs slightly from the submitted: I've modified it so that we initialize diff_format to something that isn't an accepted format option so that we can also reject --normal -c and -c --normal, which would've otherwise been accepted because the default was --normal. After option parsing we default it to D_NORMAL if it's still unset. PR: 243975 Notes: svn path=/stable/12/; revision=360403
* MFC r357648:Baptiste Daroussin2020-03-041-5/+28
| | | | | | | | | | diff: implement -y (--side-by-side) along with -W and --suppress-common-lines PR: 219933 Submitted by: fehmi noyan isi <fnoyanisi@yahoo.com> Notes: svn path=/stable/12/; revision=358610
* diff(1): Implement -B/--ignore-blank-linesKyle Evans2018-08-191-5/+9
| | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=338039
* Add -H as an alias for --speed-large-file to match GNU diff.John Baldwin2017-06-021-5/+5
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=319489
* Implement a basic --changed-group-formatBaptiste Daroussin2017-04-201-0/+7
| | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=317194
* Clean up headers declarationBaptiste Daroussin2017-04-151-2/+0
| | | | Notes: svn path=/head/; revision=316959
* add a stub --speed-large-files for compatibility with GNU diffBaptiste Daroussin2017-04-081-0/+4
| | | | | | | | There is no intention to implement it, but lots of scripts/tools using diff(1) passes GNU diff option Notes: svn path=/head/; revision=316639
* Use strndup(3) instead of malloc + memcpyBaptiste Daroussin2017-03-221-3/+2
| | | | Notes: svn path=/head/; revision=315746
* Implement a stub --horizon-lines=NUM for compatibility with GNU diff3Baptiste Daroussin2017-03-121-0/+4
| | | | | | | | | | some options of GNU diff3 would call diff with --horizon-lines, rcs is depending on that. Reported by: antoine Notes: svn path=/head/; revision=315103
* Import diff from OpenBSD and remove GNU diffBaptiste Daroussin2017-03-111-0/+454
Some of the modifications from the previous summer of code has been integrated Modification for compatibility with GNU diff output has been added Main difference with OpenBSD: Implement multiple GNU diff options: * --ignore-file-name-case * --no-ignore-file-name-case * --normal * --tabsize * --strip-trailing-cr Make diff -p compatible with GNU diff Implement diff -l Make diff -r compatible with GNU diff Capsicumize diffing 2 regular files Add a simple test suite Approved by: AsiaBSDcon devsummit Obtained from: OpenBSD, GSoC Relnotes: yes Notes: svn path=/head/; revision=315051