Node:patch and Tradition
Previous:patch and POSIX
Up:Merging with patch
patch and Traditional
The current version of GNU
patch normally follows the
POSIX standard. See patch and POSIX, for the few exceptions
to this general rule.
Unfortunately, POSIX redefined the behavior of
several important ways. You should be aware of the following
differences if you must interoperate with traditional
or with GNU
patch version 2.1 and earlier.
- In traditional
-p option's operand was
optional, and a bare
-p was equivalent to
-p option now requires an operand, and
-p 0 is now
-p0. For maximum compatibility, use options
patch simply counted slashes when
stripping path prefixes;
patch now counts pathname
components. That is, a sequence of one or more adjacent slashes now
counts as a single slash. For maximum portability, avoid sending
// in file names.
- In traditional
patch, backups were enabled by default. This
behavior is now enabled with the
Conversely, in POSIX
patch, backups are never made,
even when there is a mismatch. In GNU
behavior is enabled with the
or by conforming to POSIX.
-b suffix option of traditional
equivalent to the
-b -z suffix options of GNU
patch used a complicated (and incompletely
documented) method to intuit the name of the file to be patched from
the patch header. This method did not conform to POSIX, and had
a few gotchas. Now
patch uses a different, equally
complicated (but better documented) method that is optionally
POSIX-conforming; we hope it has fewer gotchas. The two methods
are compatible if the file names in the context diff header and the
Index: line are all identical after prefix-stripping. Your
patch is normally compatible if each header's file names all contain
the same number of slashes.
- When traditional
patch asked the user a question, it sent
the question to standard error and looked for an answer from the first
file in the following list that was a terminal: standard error,
/dev/tty, and standard input. Now
patch sends questions to standard output and gets answers
/dev/tty. Defaults for some answers have been changed so
patch never goes into an infinite loop when using
patch exited with a status value that counted
the number of bad hunks, or with status 1 if there was real trouble.
patch exits with status 1 if some hunks failed, or with
2 if there was real trouble.
- Limit yourself to the following options when sending instructions
meant to be executed by anyone running GNU
patch, or a
patch that conforms to
POSIX. Spaces are significant in the following list, and
operands are required.