summaryrefslogtreecommitdiff
path: root/usr.bin/patch/patch.c
AgeCommit message (Collapse)Author
2024-02-12patch: Support long context lines.Dag-Erling Smørgrav
MFC after: 1 week Sponsored by: Klara, Inc. Reviewed by: allanjude Differential Revision: https://reviews.freebsd.org/D43850
2023-12-03patch: fix locate_hunk in empty filesPedro F. Giffuni
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)
2023-08-16Remove $FreeBSD$: one-line .h patternWarner Losh
Remove /^\s*\*+\s*\$FreeBSD\$.*$\n/
2023-02-13patch: omit filename if the prompt was ignoredKyle Evans
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
2019-11-04patch(1): give /dev/null patches special treatmentKyle Evans
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 Notes: svn path=/head/; revision=354328
2019-03-01patch(1): Exit successfully if we're fed a 0-length patchKyle Evans
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 Notes: svn path=/head/; revision=344677
2017-12-21patch: rejname[] is also -r option buffer, and should be PATH_MAX.Pedro F. Giffuni
Obtained from: OpenBSD (CVS 1.64) Notes: svn path=/head/; revision=327063
2017-11-22patch(1): don't assume a match if we run out of context to checkKyle Evans
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 Notes: svn path=/head/; revision=326084
2017-11-08Revert r325365Kyle Evans
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) Notes: svn path=/head/; revision=325564
2017-11-03patch(1): don't assume a match if we run out of context to checkKyle Evans
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 Notes: svn path=/head/; revision=325365
2017-01-02patch(1): replace strnlen() with a simpler strlen().Pedro F. Giffuni
Small style fix with here. Pointed out by: kib Notes: svn path=/head/; revision=311110
2017-01-02Revert r311106:Pedro F. Giffuni
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 Notes: svn path=/head/; revision=311109
2017-01-02patch(1): extend the maximum length of a line from USHRT_MAX to UINT_MAX.Pedro F. Giffuni
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 Notes: svn path=/head/; revision=311106
2016-04-24Adjust a type from r267490.Pedro F. Giffuni
Independent of the maximum length, the return type for strnlen(3) is always size_t. Notes: svn path=/head/; revision=298531
2015-07-21patch(1): Add -Vnone option to disable backup filesConrad Meyer
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 Notes: svn path=/head/; revision=285772
2014-12-31Fixes to exit status.Pedro F. Giffuni
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 Notes: svn path=/head/; revision=276472
2014-12-25patch: Bring in xstrdup and use it when appropriate.Pedro F. Giffuni
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 Notes: svn path=/head/; revision=276218
2014-12-07Prefer setvbuf() to setlinebuf().Pedro F. Giffuni
On FreeBSD's libc setlinebuf is a wrapper to setvbuf anyways. Obtained from: OpenBSD MFC after: 5 days Notes: svn path=/head/; revision=275581
2014-06-15patch: add dry-run alias for compatibility with other implementations.Pedro F. Giffuni
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 Notes: svn path=/head/; revision=267512
2014-06-15patch: unsign the line length to avoid overflows.Pedro F. Giffuni
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 Notes: svn path=/head/; revision=267490
2013-09-26Improve bsdpatch usability:Xin LI
- 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) Notes: svn path=/head/; revision=255894
2013-07-24patch: style fixPedro F. Giffuni
Submitted by: gogolok Notes: svn path=/head/; revision=253614
2013-05-25Revert r250972 to fix build.Glen Barber
Notes: svn path=/head/; revision=250975
2013-05-24The error handling for writes to the target file could lead to the finalStefan Eßer
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 Notes: svn path=/head/; revision=250972
2013-01-29 - Refresh code with latest OpenBSD revisions.Xin LI
- 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 Notes: svn path=/head/; revision=246091
2013-01-29- Add a BSD-licensed patch, ported by Pedro F. Giffuni (pfg) fromGabor Kovesdan
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 Notes: svn path=/head/; revision=246074
1997-07-13kill the undeadPeter Wemm
Notes: svn path=/head/; revision=27369
1997-07-06Finish importing Lite2's src/usr.bin, except for ex, diff, grep, mail,Bruce Evans
pascal and vmstat.sparc. All changed files on the vendor branch should already have been imported. Notes: svn path=/vendor/CSRG/dist/; revision=27241