Provided by: manpages-posix_2.16-1_all bug

NAME

       patch - apply changes to files

SYNOPSIS

       patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]
               [-o outfile][-p num][-r rejectfile][file]

DESCRIPTION

       The patch utility shall read a source (patch) file containing any of the three forms of difference (diff)
       listings  produced  by  the  diff  utility  (normal,  context,  or  in  the  style of ed) and apply those
       differences to a file. By default, patch shall read from the standard input.

       The patch utility shall attempt to determine the type of the diff listing, unless overruled by a -c,  -e,
       or -n option.

       If the patch file contains more than one patch, patch shall attempt to apply each of them as if they came
       from separate patch files. (In this case, the application shall ensure that the name of the patch file is
       determinable for each diff listing.)

OPTIONS

       The  patch  utility  shall  conform to the Base Definitions volume of IEEE Std 1003.1-2001, Section 12.2,
       Utility Syntax Guidelines.

       The following options shall be supported:

       -b     Save a copy of the original contents of each modified file, before the differences are applied, in
              a file of the same name with the suffix .orig appended to it. If the file already exists, it shall
              be overwritten; if multiple patches are applied to the same file, the .orig file shall be  written
              only  for  the  first patch. When the -o outfile option is also specified, file .orig shall not be
              created but, if outfile already exists, outfile .orig shall be created.

       -c     Interpret the patch file as a context difference (the output of the utility diff when the -c or -C
              options are specified).

       -d  dir
              Change the current directory to dir before processing as described  in  the  EXTENDED  DESCRIPTION
              section.

       -D  define
              Mark changes with one of the following C preprocessor constructs:

              #ifdef define
              ...
              #endif

              #ifndef define
              ...
              #endif

       optionally combined with the C preprocessor construct #else.  If the patched file is processed with the C
       preprocessor,  where  the  macro  define  is defined, the output shall contain the changes from the patch
       file; otherwise, the output shall not contain the patches specified in the patch file.

       -e     Interpret the patch file as an ed script, rather than a diff script.

       -i  patchfile
              Read the patch information from the file named by the pathname patchfile, rather than the standard
              input.

       -l     (The letter ell.) Cause any sequence of <blank>s in the difference script to match any sequence of
              <blank>s in the input file. Other characters shall be matched exactly.

       -n     Interpret the script as a normal difference.

       -N     Ignore patches where the differences have already been applied to the file; by  default,  already-
              applied patches shall be rejected.

       -o  outfile
              Instead  of  modifying  the  files  (specified  by  the  file  operand or the difference listings)
              directly, write a copy of the file referenced by each  patch,  with  the  appropriate  differences
              applied,  to  outfile.  Multiple  patches  for  a single file shall be applied to the intermediate
              versions of the file created by any previous patches, and shall result in  multiple,  concatenated
              versions of the file being written to outfile.

       -p  num
              For  all  pathnames  in  the patch file that indicate the names of files to be patched, delete num
              pathname components from the beginning of each pathname. If the pathname  in  the  patch  file  is
              absolute,  any leading slashes shall be considered the first component (that is, -p 1 shall remove
              the leading slashes).  Specifying -p 0 shall cause the full pathname to be  used.  If  -p  is  not
              specified, only the basename (the final pathname component) shall be used.

       -R     Reverse the sense of the patch script; that is, assume that the difference script was created from
              the  new  version  to  the  old  version. The -R option cannot be used with ed scripts.  The patch
              utility shall attempt to  reverse  each  portion  of  the  script  before  applying  it.  Rejected
              differences shall be saved in swapped format. If this option is not specified, and until a portion
              of  the  patch  file is successfully applied, patch attempts to apply each portion in its reversed
              sense as well as in its normal sense. If the attempt is successful, the user shall be prompted  to
              determine whether the -R option should be set.

       -r  rejectfile
              Override  the  default  reject  filename. In the default case, the reject file shall have the same
              name as the output file, with the suffix .rej appended to it; see Patch Application .

OPERANDS

       The following operand shall be supported:

       file   A pathname of a file to patch.

STDIN

       See the INPUT FILES section.

INPUT FILES

       Input files shall be text files.

ENVIRONMENT VARIABLES

       The following environment variables shall affect the execution of patch:

       LANG   Provide a default value for the internationalization variables that are unset or  null.  (See  the
              Base  Definitions  volume of IEEE Std 1003.1-2001, Section 8.2, Internationalization Variables for
              the  precedence  of  internationalization  variables  used  to  determine  the  values  of  locale
              categories.)

       LC_ALL If  set  to  a  non-empty  string value, override the values of all the other internationalization
              variables.

       LC_CTYPE
              Determine the locale for the interpretation of sequences of bytes of text data as characters  (for
              example, single-byte as opposed to multi-byte characters in arguments and input files).

       LC_MESSAGES
              Determine  the locale that should be used to affect the format and contents of diagnostic messages
              written to standard error and informative messages written to standard output.

       NLSPATH
              Determine the location of message catalogs for the processing of LC_MESSAGES .

       LC_TIME
              Determine the locale for recognizing the format of file timestamps written by the diff utility  in
              a context-difference input file.

ASYNCHRONOUS EVENTS

       Default.

STDOUT

       Not used.

STDERR

       The standard error shall be used for diagnostic and informational messages.

OUTPUT FILES

       The  output of the patch utility, the save files ( .orig suffixes), and the reject files ( .rej suffixes)
       shall be text files.

EXTENDED DESCRIPTION

       A patch file may contain patching instructions for more than one file; filenames shall be  determined  as
       specified  in  Filename  Determination  .  When  the  -b  option is specified, for each patched file, the
       original shall be saved in a file of the same name with the suffix .orig appended to it.

       For each patched file, a reject file may also be created as noted in Patch Application . In  the  absence
       of  a  -r  option,  the  name  of  this file shall be formed by appending the suffix .rej to the original
       filename.

   Patch File Format
       The patch file shall contain zero or more lines of header information followed by one  or  more  patches.
       Each patch shall contain zero or more lines of filename identification in the format produced by diff -c,
       and one or more sets of diff output, which are customarily called hunks.

       The patch utility shall recognize the following expression in the header information:

       Index:  pathname

              The file to be patched is named pathname.

       If  all  lines  (including  headers) within a patch begin with the same leading sequence of <blank>s, the
       patch utility shall remove this sequence before proceeding. Within each patch, if the type of  difference
       is context, the patch utility shall recognize the following expressions:

       *** filename timestamp

              The patches arose from filename.

       --- filename timestamp

              The patches should be applied to filename.

       Each  hunk  within  a patch shall be the diff output to change a line range within the original file. The
       line numbers for successive hunks within a patch shall occur in ascending order.

   Filename Determination
       If no file operand is specified, patch shall perform the following steps to  determine  the  filename  to
       use:

        1. If  the  type of diff is context, the patch utility shall delete pathname components (as specified by
           the -p option) from the filename on the line beginning with "***" , then test for  the  existence  of
           this  file  relative to the current directory (or the directory specified with the -d option). If the
           file exists, the patch utility shall use this filename.

        2. If the type of diff is context, the patch utility shall delete the pathname components (as  specified
           by the -p option) from the filename on the line beginning with "---" , then test for the existence of
           this  file  relative to the current directory (or the directory specified with the -d option). If the
           file exists, the patch utility shall use this filename.

        3. If the header information contains a line beginning with the string Index:, the patch  utility  shall
           delete  pathname  components  (as  specified  by  the  -p  option)  from this line, then test for the
           existence of this file relative to the current directory (or the  directory  specified  with  the  -d
           option).  If the file exists, the patch utility shall use this filename.

        4. If an SCCS directory exists in the current directory, patch shall attempt to perform a get -e SCCS/s.
           filename  command  to retrieve an editable version of the file. If the file exists, the patch utility
           shall use this filename.

        5. The patch utility shall write a prompt to standard output and request a filename  interactively  from
           the controlling terminal (for example, /dev/tty).

   Patch Application
       If the -c, -e, or -n option is present, the patch utility shall interpret information within each hunk as
       a  context  difference,  an ed difference, or a normal difference, respectively. In the absence of any of
       these options, the patch utility  shall  determine  the  type  of  difference  based  on  the  format  of
       information within the hunk.

       For  each  hunk,  the  patch  utility  shall begin to search for the place to apply the patch at the line
       number at the beginning of the hunk, plus or minus any offset used in  applying  the  previous  hunk.  If
       lines matching the hunk context are not found, patch shall scan both forwards and backwards at least 1000
       bytes for a set of lines that match the hunk context.

       If  no  such  place is found and it is a context difference, then another scan shall take place, ignoring
       the first and last line of context. If that fails, the first two and last two lines of context  shall  be
       ignored  and  another  scan  shall be made.  Implementations may search more extensively for installation
       locations.

       If no location can be found, the patch utility shall append the hunk to the  reject  file.  The  rejected
       hunk  shall  be  written  in context-difference format regardless of the format of the patch file. If the
       input was a normal or ed-style difference, the reject file may contain differences  with  zero  lines  of
       context.   The line numbers on the hunks in the reject file may be different from the line numbers in the
       patch file since they shall reflect the approximate locations for the failed hunks in the new file rather
       than the old one.

       If the type of patch is an ed diff, the implementation may accomplish the patching  by  invoking  the  ed
       utility.

EXIT STATUS

       The following exit values shall be returned:

        0     Successful completion.

        1     One or more lines were written to a reject file.

       >1     An error occurred.

CONSEQUENCES OF ERRORS

       Patches that cannot be correctly placed in the file shall be written to a reject file.

       The following sections are informative.

APPLICATION USAGE

       The  -R  option  does not work with ed scripts because there is too little information to reconstruct the
       reverse operation.

       The -p option makes it possible to customize a patch file to  local  user  directory  structures  without
       manually editing the patch file. For example, if the filename in the patch file was:

              /curds/whey/src/blurfl/blurfl.c

       Setting -p 0 gives the entire pathname unmodified; -p 1 gives:

              curds/whey/src/blurfl/blurfl.c

       without the leading slash, -p 4 gives:

              blurfl/blurfl.c

       and not specifying -p at all gives:

              blurfl.c .

EXAMPLES

       None.

RATIONALE

       Some  of the functionality in historical patch implementations was not specified. The following documents
       those features present in historical implementations that have not been specified.

       A deleted piece of functionality was the '+' pseudo-option allowing an additional set of  options  and  a
       patch file operand to be given. This was seen as being insufficiently useful to standardize.

       In  historical  implementations,  if the string "Prereq:" appeared in the header, the patch utility would
       search for the corresponding version information (the  string  specified  in  the  header,  delimited  by
       <blank>s  or  the beginning or end of a line or the file) anywhere in the original file. This was deleted
       as too simplistic and insufficiently trustworthy a mechanism to standardize. For example, if:

              Prereq: 1.2

       were in the header, the presence of a delimited 1.2 anywhere in the file would satisfy the prerequisite.

       The following options were dropped from historical implementations of patch as insufficiently  useful  to
       standardize:

       -b     The  -b  option  historically provided a method for changing the name extension of the backup file
              from  the  default  .orig.  This  option  has  been  modified  and  retained  in  this  volume  of
              IEEE Std 1003.1-2001.

       -F     The -F option specified the number of lines of a context diff to ignore when searching for a place
              to install a patch.

       -f     The -f option historically caused patch not to request additional information from the user.

       -r     The  -r  option historically provided a method of overriding the extension of the reject file from
              the default .rej.

       -s     The -s option historically caused patch to work silently unless an error occurred.

       -x     The -x option historically set internal debugging flags.

       In some file system implementations, the saving of a .orig file may produce unwanted results. In the case
       of 12, 13, or 14-character filenames (on file systems supporting  14-character  maximum  filenames),  the
       .orig  file  overwrites  the  new  file.   The  reject  file  may also exceed this filename limit. It was
       suggested, due to some historical practice, that a tilde ( '~' ) suffix be used instead of .orig and some
       other character instead of the .rej suffix. This was rejected because it is not obvious to the user which
       file is which.  The suffixes .orig and .rej are clearer and more understandable.

       The -b option has the opposite sense in some historical implementations-do not save the .orig  file.  The
       default case here is not to save the files, making patch behave more consistently with the other standard
       utilities.

       The -w option in early proposals was changed to -l to match historical practice.

       The  -N  option  was  included because without it, a non-interactive application cannot reject previously
       applied patches.  For example, if a user is piping the output of diff into the  patch  utility,  and  the
       user only wants to patch a file to a newer version non-interactively, the -N option is required.

       Changes  to  the  -l  option description were proposed to allow matching across <newline>s in addition to
       just <blank>s. Since this is not historical practice, and since some  ambiguities  could  result,  it  is
       suggested that future developments in this area utilize another option letter, such as -L.

FUTURE DIRECTIONS

       None.

SEE ALSO

       ed , diff

COPYRIGHT

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition,
       Standard  for  Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base
       Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers,
       Inc and The Open Group. In the event of any discrepancy between this version and the  original  IEEE  and
       The  Open  Group  Standard,  the  original  IEEE and The Open Group Standard is the referee document. The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

IEEE/The Open Group                                   2003                                              PATCH(P)