History log of /freebsd-current/usr.bin/patch/patch.c
Revision Date Author Comments
# 851a9da3 12-Feb-2024 Dag-Erling Smørgrav <des@FreeBSD.org>

patch: Support long context lines.

MFC after: 1 week
Sponsored by: Klara, Inc.
Reviewed by: allanjude
Differential Revision: https://reviews.freebsd.org/D43850


# 7e8afbb6 02-Dec-2023 Pedro F. Giffuni <pfg@FreeBSD.org>

patch: fix locate_hunk in empty files

if `first_guess' is zero then main() assumes that locate_hunk has failed
and aborts the patch operation. Instead, make sure to return 1 (the
line number) so that the patch operation can continue.

Issue originally found by Neels Hofmeyr in the regress suite of the diff
implementation for got, where the tests assume that applying a diff with
`patch' and then again with `patch -R' yields back the original file.

Obtained from: OpenBSD (CVS patch.c,v 1.71)


# 42b38843 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

Remove $FreeBSD$: one-line .h pattern

Remove /^\s*\*+\s*\$FreeBSD\$.*$\n/


# 7e688ed4 24-Jan-2023 Kyle Evans <kevans@FreeBSD.org>

patch: omit filename if the prompt was ignored

When a file is missing, patch(1) will prompt for a filename to try and
patch it. If we're doing a dry-run, we'll output that the patch to the
source file was either ignored/failed. If you ignore the prompt in a
dry-run (i.e. just hit enter), we'll output:

X out of X hunks ignored while patching (null)

Let's improve the aesthetics a bit and just omit the last part if the
prompt was ignored:

X out of X hunks ignored

Unfortunately we can't really test this without expect(1) because both
force and batch mode will use the first best guess, which is wiped out
by the "File to patch:" prompt. We could record the initially derived
bestguess there and use *that*, but given that this is only possible in
an interactive session I think it's fine to just omit the filename
rather than adding a fair amount of complexity (which could also break
other scenarios I haven't considered yet)..

Reviewed by: des
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D38179


# 50dacbf6 03-Nov-2019 Kyle Evans <kevans@FreeBSD.org>

patch(1): give /dev/null patches special treatment

We have a bad habit of duplicating contents of files that are sourced from
/dev/null and applied more than once... take the more sane (in most ways)
GNU route and complain if the file exists and offer reversal options.

This still falls short a little bit as selecting "don't reverse, apply
anyway" will still give you duplicated file contents. There's probably other
issues as well, but awareness is the first step to happiness.

MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D21535


# ef30b5a8 28-Feb-2019 Kyle Evans <kevans@FreeBSD.org>

patch(1): Exit successfully if we're fed a 0-length patch

This change is made in the name of GNU patch compatibility. If GNU patch is
fed a zero-length patch, it will exit successfully with no output. This is
used in at least one port to date (comms/wsjtx), and we break on this usage.

It seems unlikely that anyone relies on patch(1) calling their completely
empty patch garbage and failing, and GNU compatibility is a plus if it helps
with porting, so make the switch.

Reported by: db
MFC after: 2 weeks


# c844f14e 21-Dec-2017 Pedro F. Giffuni <pfg@FreeBSD.org>

patch: rejname[] is also -r option buffer, and should be PATH_MAX.

Obtained from: OpenBSD (CVS 1.64)


# bc4f0fe3 21-Nov-2017 Kyle Evans <kevans@FreeBSD.org>

patch(1): don't assume a match if we run out of context to check

Patches with very little context (-U0 and -U1) could get misapplied if
the file to be patched changes and a hunk is no longer applicable. Matching
with fuzz would be attempted and default to a match when we unexpectedly ran
out of context.

This also affected patches with higher levels of context but had limited
actual context due to the hunk being located near the beginning/end of file.

PR: 74127, 223545 (exp-run)
Reviewed by: emaste, pfg
Approved by: emaste (mentor)
Differential Revision: https://reviews.freebsd.org/D12631


# 752e881d 08-Nov-2017 Kyle Evans <kevans@FreeBSD.org>

Revert r325365

r325365 caused several ports to fail to patch correctly. Revert it for the
time being until an exp-run can be completed.

Requested by: antoine
Approved by: emaste (implicit)


# ed3b3059 03-Nov-2017 Kyle Evans <kevans@FreeBSD.org>

patch(1): don't assume a match if we run out of context to check

Patches with very little context (-U0 and -U1) could get misapplied if
the file to be patched changes and a hunk is no longer applicable. Matching
with fuzz would be attempted and default to a match when we unexpectedly ran
out of context.

PR: 74127
Reviewed by: emaste, pfg
Approved by: emaste (mentor)
Differential Revision: https://reviews.freebsd.org/D12631


# fa812237 02-Jan-2017 Pedro F. Giffuni <pfg@FreeBSD.org>

patch(1): replace strnlen() with a simpler strlen().

Small style fix with here.

Pointed out by: kib


# 4f548c19 02-Jan-2017 Pedro F. Giffuni <pfg@FreeBSD.org>

Revert r311106:
patch(1): extend the maximum length of a line from USHRT_MAX to UINT_MAX.

This doesn't really work for 32 bit platforms.

Pointed out by: kib


# ad8469fe 02-Jan-2017 Pedro F. Giffuni <pfg@FreeBSD.org>

patch(1): extend the maximum length of a line from USHRT_MAX to UINT_MAX.

We can handle such "big data" without much trouble.
Try to do a better job at detecting the rejection cause while here.

MFC after: 2 weeks


# 3548708c 23-Apr-2016 Pedro F. Giffuni <pfg@FreeBSD.org>

Adjust a type from r267490.

Independent of the maximum length, the return type for strnlen(3)
is always size_t.


# 300ca9a8 21-Jul-2015 Conrad Meyer <cem@FreeBSD.org>

patch(1): Add -Vnone option to disable backup files

Differential Revision: https://reviews.freebsd.org/D3146
Reviewed by: pfg
Approved by: markj (mentor)
MFC after: 1 week
Relnotes: yes
Sponsored by: EMC / Isilon Storage Division


# f718bedc 31-Dec-2014 Pedro F. Giffuni <pfg@FreeBSD.org>

Fixes to exit status.

Exit with EXIT_FAILURE for invalid arguments.
Fixes NetBSD-PR 43517.

Print version string to stdout instead of stderr;
it is user-requested and not an error.

Obtained from: NetBSD
MFC after: 5 days


# 547e0acb 25-Dec-2014 Pedro F. Giffuni <pfg@FreeBSD.org>

patch: Bring in xstrdup and use it when appropriate.

The function savestr allows NULL return values during Plan A patching so in
case of out of memory conditions, Plan B can step in. In many cases, NULL
value is not properly handled, so use xstrdup here (it's outside Plan A/B
patching, which means that even Plan B relies on successful operations).

Clean up some whitespaces while here

Obtained from: OpenBSD
MFC after: 2 weeks


# ab761cdb 07-Dec-2014 Pedro F. Giffuni <pfg@FreeBSD.org>

Prefer setvbuf() to setlinebuf().

On FreeBSD's libc setlinebuf is a wrapper to setvbuf anyways.

Obtained from: OpenBSD
MFC after: 5 days


# 5e64d66c 15-Jun-2014 Pedro F. Giffuni <pfg@FreeBSD.org>

patch: add dry-run alias for compatibility with other implementations.

Other implementations of patch(1), including GNU patch and "svn patch"
have a --dry-run option which does the same as our -C or --check
option.

Add a new alias to make our implementation more compatible.

MFC after: 1 week


# c1a08643 14-Jun-2014 Pedro F. Giffuni <pfg@FreeBSD.org>

patch: unsign the line length to avoid overflows.

Patch(1) uses a short int for the line length, which is usually
sufficient for regular diffs, but makes no effort to signal
when there is an overflow.

Change the line length to an unsigned short int to better use
the fact that a length is never negative. The change is loosely
inspired on a related change in DragonFly, but we avoid spending
more memory than necessary.

While here adjust the messages to be clearer on what is happening.

MFC after: 1 week


# e11cd3bc 26-Sep-2013 Xin LI <delphij@FreeBSD.org>

Improve bsdpatch usability:

- Ask only once for "Apply anyway". [1]
- Tell user what file have failed patch rather than just how
many hunks failed.

Reported by: jmg via pfg [1]
Tested by: pfg [1]
Approved by: re (gjb)


# b9740ba1 24-Jul-2013 Pedro F. Giffuni <pfg@FreeBSD.org>

patch: style fix

Submitted by: gogolok


# ffca5883 25-May-2013 Glen Barber <gjb@FreeBSD.org>

Revert r250972 to fix build.


# 2360cb0e 24-May-2013 Stefan Eßer <se@FreeBSD.org>

The error handling for writes to the target file could lead to the final
fclose() being skipped. Fix this by using boolean "&" and "|" instead of
short-cut operators "&&" and "||".
While here, increment the last part of the version string. The reason is
the fixed output file selection logic in pch.c, which was committed as
r250943, yesterday.

Reviewed by: pfg


# e56ef7d3 29-Jan-2013 Xin LI <delphij@FreeBSD.org>

- Refresh code with latest OpenBSD revisions.
- Remove $DragonFly$ tags as they are using git nowadays and VCS tags will
not help merging.
- Other changes to Copyright headers to make them consistent with other
source code, we intend to fork from this point.

Reviewed by: pfg


# 2dd076b8 29-Jan-2013 Gabor Kovesdan <gabor@FreeBSD.org>

- Add a BSD-licensed patch, ported by Pedro F. Giffuni (pfg) from
DragonflyBSD and install it as bsdpatch. WITH_BSD_PATCH makes it
default and installs GNU patch as gnupatch.

Submitted by: pfg
Obtained from: The DragonflyBSD Project


# a9c7144e 01-Aug-2004 Garance A Drosehn <gad@FreeBSD.org>

Import of a BSD-licensed version of `patch', which will eventually
replace the version we currently have in src/gnu/usr.bin/patch/.
Among other things, this version includes a --posix option for strict
POSIX conformance.

This version is the current source from OpenBSD as of today. It is
their 3.5-release, plus a few updates to patch.c and pch.c that they
made about three weeks ago.


# 65b3003d 13-Jul-1997 Peter Wemm <peter@FreeBSD.org>

kill the undead


# c44252b6 06-Jul-1997 Bruce Evans <bde@FreeBSD.org>

Finish importing Lite2's src/usr.bin, except for ex, diff, grep, mail,
pascal and vmstat.sparc. All changed files on the vendor branch should
already have been imported.


# 6065a0be 30-Dec-1995 Peter Wemm <peter@FreeBSD.org>

This commit was generated by cvs2svn to compensate for changes in r13122,
which included commits to RCS files with non-trunk default branches.


# 9b50d902 26-May-1994 Rodney W. Grimes <rgrimes@FreeBSD.org>

BSD 4.4 Lite Usr.bin Sources