aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/diff
Commit message (Collapse)AuthorAgeFilesLines
* Remove $FreeBSD$: one-line nroff patternWarner Losh2023-08-161-1/+0
| | | | Remove /^\.\\"\s*\$FreeBSD\$$\n/
* Remove $FreeBSD$: one-line sh patternWarner Losh2023-08-164-4/+0
| | | | Remove /^\s*#[#!]?\s*\$FreeBSD\$.*$\n/
* Remove $FreeBSD$: one-line .c patternWarner Losh2023-08-165-10/+0
| | | | Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
* Remove $FreeBSD$: one-line .h patternWarner Losh2023-08-161-1/+0
| | | | Remove /^\s*\*+\s*\$FreeBSD\$.*$\n/
* Remove $FreeBSD$: two-line .h patternWarner Losh2023-08-162-4/+0
| | | | Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/
* diff: Fully comment out the jackpot variable.John Baldwin2023-06-201-3/+3
| | | | This fixes a set but unused warning.
* diff: restyle loop a bitKyle Evans2022-12-141-3/+6
| | | | | | | | This is a bit more readable, and this loop is probably unlikely to gain any `continue` or `break`s. Suggested by: pstef Differential Revision: https://reviews.freebsd.org/D37676
* diff: fix side-by-side output with tabbed inputKyle Evans2022-12-145-8/+35
| | | | | | | | | | | | | | | | | | | | | | | The previous logic conflated some things... in this block: - j: input characters rendered so far - nc: number of characters in the line - col: columns rendered so far - hw: column width ((h)ard (w)idth?) Comparing j to hw or col to nc are naturally wrong, as col and hw are limits on their respective counters and nc is already brought down to hw if the input line should be truncated to start with. Right now, we end up easily truncating lines with tabs in them as we count each tab for $tabwidth lines in the input line, but we really should only be accounting for them in the column count. The problem is most easily demonstrated by the two input files added for the tests, the two tabbed lines lose at least a word or two even though there's plenty of space left in the row for each side. Reviewed by: bapt, pstef Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D37676
* diff: Don't (ab)use sprintf() as a kind of strcat().John Baldwin2022-11-161-18/+21
| | | | | | | | | | | | Previously print_header() used sprintf() of a buffer to itself as a kind of string builder but without checking for overflows. This raised -Wformat-truncation and -Wrestrict warnings in GCC. Instead, just conditionally print the new timestamp fields after the initial strftime()-formatted string. While here, use sizeof(buf) with strftime() rather than a magic number. Reviewed by: bapt Differential Revision: https://reviews.freebsd.org/D36814
* diff: Don't treat null characters like carriage returns in readhash().John Baldwin2022-11-161-0/+2
| | | | | | | | | | | The implicit fall-through in the !D_FORCEASCII case caused null characters to be treated as carriage returns honoring the D_STRIPCR, D_FOLDBLANKS, and D_IGNOREBLANKS flags. Reported by: GCC -Wimplicit-fallthrough Reviewed by: bapt Fixes: 3cbf98e2bee9 diff: read whole files to determine if they are ASCII text Differential Revision: https://reviews.freebsd.org/D36813
* diff: Fix a use after free as well as a memory leak in change().John Baldwin2022-10-031-11/+11
| | | | | | | | | | | | | | | | | | | | | | | | When -B or -I are used, change() evaluates the lines in a hunk to determine if it is a hunk that should be ignored. It does this by reading each candidate line into a mallocated buffer via preadline() and then calling ignoreline(). Previously the buffer was freed as a side effect of ignoreline_pattern() called from ignoreline(). However, if only -B was specified, then ignoreline_pattern() was not called and the lines were leaked. If both options were specified, then ignoreline_pattern() was called before checking for a blank line so that the second check was a use after free. To fix, pull the free() out of ignoreline_pattern() and instead do it up in change() so that is paired with preadline(). While here, simplify ignoreline() by checking for the -B and -I cases individually without a separate clause for when both are set. Also, do the cheaper check (-B) first, and remove a false comment (this function is only called if at least one of -I or -B are specified). Reviewed by: emaste Reported by: GCC 12 -Wuse-after-free Differential Revision: https://reviews.freebsd.org/D36822
* diff: tests: loosen up requirements for report_identicalKyle Evans2022-04-191-4/+2
| | | | | | | | | | This test cannot run without an unprivileged_user being specified anyways, so just run as the unprivileged user. Revoking read permisions works just as well if you're guaranteed non-root. Reviewed by: pstef Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D34950
* diff: Re-add void argument to usageTom Jones2022-03-101-1/+1
| | | | | | | Previous commit (8cf449db88b2c7a505bc241a78f9736b43f2ede5) unintentionally dropped the 'void' argument to usage, reinstate it. Sponsored by: Klara Inc.
* diff: add support for --help and --versionTom Jones2022-03-102-5/+35
| | | | | | | | | | Add support for --help and --version to be compatible with gnu diff. gnu diff --help writes to stdout, do the same to be compatible Reviewed by: bapt, pstef, debrup, Pau Amma Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D34508
* diff: set cflag when passed to diffTom Jones2022-03-091-0/+1
| | | | | | | | | | | | | In b5541f456d641d23e0c46874daff0b62552bf3cb when flags were converted to be boolean, the setting of cflag as an integer was removed, but no boolean set was added. This effects the output format of dates, but the context type was set to D_CONTEXT so other functionality worked. Reviewed by: bapt Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D34481
* Fix indentation in usr.bin/diff/pr.cDimitry Andric2022-03-041-13/+12
| | | | | | | | | | In commit 6fa5bf0832ef the pr(1) related code in diff was moved around, but some part of the indentation was messed up, and one line was duplicated. Remove the duplicated line, and fix up the indentation. Reviewed by: bapt MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D34398
* Revert "Temporarily skip usr.bin.diff.diff_test.functionname in CI"Li-Wen Hsu2022-03-011-4/+0
| | | | | | | | This reverts commit 85eeb6ea62d45c5df893a16b87969bd7313a3dbb. The issue has been fixed by 4be7d087c2b566f4910683836be279d55c1a81c6. PR: 262086
* diff: Use start of change when searching for functionTom Jones2022-03-011-2/+2
| | | | | | | | | | | Use the start of change when searching for a function rather than the start of the context. In short functions if this could result in search for the function name starting from before the function definition. PR: 262086 Reviewed by: bapt, mckusick, mhorne Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D34328
* Temporarily skip usr.bin.diff.diff_test.functionname in CILi-Wen Hsu2022-02-211-0/+4
| | | | | PR: 262086 Sponsored by: The FreeBSD Foundation
* diff: fix failed compare when ignoring file caseTom Jones2022-02-182-9/+31
| | | | | | | | | | | | With --ignore-file-name-case we need to compare files regardless of case. We need to propigate both names down to diffit so we can look up the correct file when the names differ based on case, otherwise we try to look up the file using the case from the a tree which might not be discoverable if its case is different in the b tree. Reviewed by: bapt Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D34201
* Remove surplus check for which diff is being testedTom Jones2022-02-181-2/+0
| | | | | | | | Must have left this when I was testing the test invocation for 8f79bd9b85716c495c2741ac25db37e8d71f22f7 Pointy hat: thj Sponsored by: Klara Inc.
* diff: add --no-dereference flagTom Jones2022-02-184-19/+116
| | | | | | | | | When diffing files and directories, don't follow symbolic links, instead compare where the links point to. Reviewed by: bapt Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D34203
* diff: Detect Objective-C methodsTom Jones2022-02-1811-4/+182
| | | | | | | | | | When searching back for function definitions, consider lines starting with '+' and '-', this allows us to pick up Objective-C methods as well as C style function definitions. Reviewed by: bapt Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D34202
* diff: consider two files with same inodes as identicalMariusz Zaborski2021-10-071-0/+4
| | | | | Obtained from: OpenBSD MFC after: 1 week
* diff: link with libm for sqrt()Piotr Pawel Stefaniak2021-09-161-0/+1
| | | | | Reported by: Jenkins Fixes: bcf2e78dc48378456798191f1c15cb76d6221a65
* diff: implement option -F (--show-function-line)Piotr Pawel Stefaniak2021-09-154-25/+62
| | | | | | | | With unified and context diffs, show the last line that matches the provided pattern before the context. Reviewed by: bapt Differential Revision: https://reviews.freebsd.org/D31714
* diff(1): Add --color supportCameron Katri2021-09-154-3/+118
| | | | | | | | | | Adds a --color flag to diff(1) that supports the same options as GNU's diff(1). The colors are customizable with the env var DIFFCOLORS in a format similar to grep(1)'s GREPCOLORS. An example would be 04;36:41 for additions to be underlined light blue, and deletions have a red background. Differential Revision: https://reviews.freebsd.org/D30545
* diff: decrease indent levelPiotr Pawel Stefaniak2021-09-151-22/+21
| | | | An upcoming change will add more code in the loop.
* diff: avoid applying offsets to null pointerPiotr Pawel Stefaniak2021-09-151-3/+6
| | | | This was the only instance of undefined behavior I could find so far.
* diff: replace isqrt() with sqrt()Piotr Pawel Stefaniak2021-09-151-21/+2
| | | | Remove cruft and use a system-provided and maintained function instead.
* diff: move functions around and reduce their visibilityPiotr Pawel Stefaniak2021-09-154-39/+39
| | | | | | Most of them become static. There will be more such functions added in upcoming commits, so they would be inconsistent with existing code. Improve the existing code instead of reinforcing the unwanted pattern.
* diff: convert boolean flag variables to boolPiotr Pawel Stefaniak2021-09-152-15/+16
| | | | | | There will be more boolean flags added in upcoming commits and they would have to be stored in ints in order to be consistent with existing code. Change the existing code to use the bool type.
* diff: improve code stylePiotr Pawel Stefaniak2021-09-153-150/+123
| | | | Reflow comments, strip trailing space, improve wrapping of lines.
* diff: read whole files to determine if they are ASCII textPiotr Pawel Stefaniak2021-08-232-23/+50
| | | | | | | Before this change, only the first BUFSIZE bytes were checked. Reviewed by: bapt (previous version) Differential Revision: https://reviews.freebsd.org/D31639
* diff: don't output carriage returns that were stripped on inputPiotr Pawel Stefaniak2021-08-234-2/+29
| | | | | --strip-trailing-cr worked as intended for comparison between files, but the characters were still present in final output.
* usr.bin/diff: fix UBSan error in readhashAlex Richardson2021-07-061-1/+1
| | | | | | | | | | UBSan complains about the `sum = sum * 127 + chrtran(t);` line below since that can overflow an `int`. Use `unsigned int` instead to ensure that overflow is well-defined. Reviewed By: imp MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D31075
* diff tests: Require root for report_identicalMark Johnston2021-06-211-0/+1
| | | | | | | | This test switches users and either hangs or fails when run as an unprivileged user. MFC after: 1 week Sponsored by: The FreeBSD Foundation
* diff: Use unprivileged_user with report_identical testOlivier Cochard2021-02-031-1/+6
| | | | | | Approved by: bapt Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D28466
* Revert "diff: eliminate a useless lseek"Baptiste Daroussin2021-02-021-0/+1
| | | | | | | | This changes breaks when one of the files is stdin This reverts commit fa977a3b2bb2d0e6c2957b14474c31b58dd3a8e1. Reported by: olivier
* diff: eleminitate useless macrosBaptiste Daroussin2021-01-271-57/+56
| | | | | The diff_output was not bringing any values but was obfuscating the code.
* diff: simplify the hash functionsBaptiste Daroussin2021-01-271-50/+27
| | | | | Instead of 3 different complex case they have all been folded into a simple on based on switch
* diff: fix typo in a commentBaptiste Daroussin2021-01-271-1/+1
|
* diff: remove stalled entries in headersBaptiste Daroussin2021-01-271-3/+0
|
* diff: eliminate space at end of lineBaptiste Daroussin2021-01-271-33/+33
| | | | No functionnal changes
* diff: eliminate a useless lseekBaptiste Daroussin2021-01-271-1/+0
| | | | | fdopen with the "r" already position the stream at the beginning of the file.
* diff: add a test case about the non regular file supportBaptiste Daroussin2021-01-271-0/+15
|
* diff: fix incorrectly displaying files as duplicatesJamie Landeg-Jones2021-01-253-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When diff hits certain access errors, function diffreg() shows the error message, and then returns to the calling function, which calls print_status() with the return value. However, in these cases, the return value isn't changed from the initial default value of D_SAME. Normally, print_status() with a value of D_SAME does nothing, so this works out ok, however, if the "-s" flag is set, a message is displayed showing identicality: case D_SAME: if (sflag) printf("Files %s%s and %s%s are identical\n", path1, entry, path2, entry); break; This then produces such results as: % diff -s /COPYRIGHT /var/run/rpcbind.sock diff: /var/run/rpcbind.sock: Operation not supported Files /COPYRIGHT and /var/run/rpcbind.sock are identical % diff -s /COPYRIGHT /etc/master.passwd diff: /etc/master.passwd: Permission denied Files /COPYRIGHT and /etc/master.passwd are identical Create a D_ERROR status which is returned in such cases, and print_status() then deals with that status seperately from D_SAME PR: 252614 MFC after: 1 week
* diff: add a test case for failed -s optionBaptiste Daroussin2021-01-251-0/+11
|
* diff: honour flags with -qEd Maste2021-01-092-1/+13
| | | | | | | | | | | | | Previously -q (just print a line when files differ) ignored flags like -w (ignore whitespace). Avoid the D_BRIEF short-circuit when flags are in effect. PR: 252515 Reported by: Scott Aitken Reviewed by: kevans MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D28064
* diff: don't force the format to 'context' with -p immediatelyKyle Evans2020-10-271-11/+2
| | | | | | | | | | | | | | | Instead, leave the fomat as unspecified (if it hasn't been) and use the -p flag as a hint to 'context' if no other formatting option is specified. This fixes `diff -purw`, used frequently by emaste, and matches the behavior of its GNU counterpart. PR: 250015 Reviewed by: emaste MFC after: 1 week Notes: svn path=/head/; revision=367076