Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
patch(1)		    General Commands Manual		      patch(1)

       patch - apply changes to	files

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


       The  patch  command  reads  a source (patch) file containing any	of the
       three forms of difference (diff)	listings produced by the diff(1)  com-
       mand (normal, context or	in the style of	ed(1)) and apply those differ-
       ences to	a file.	 By default, patch reads from the standard input.

       patch attempts to determine the type of the diff	listing, unless	 over-
       ruled by	a -c, -e or -n option.

       If  the	patch file contains more than one patch, patch will attempt to
       apply each of them as if	they came from separate	patch files.  (In this
       case  the  name	of  the	 patch file must be determinable for each diff

       The following options are 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 will be overwritten; if mul-
		      tiple patches are	applied	to the same  file,  the	 .orig
		      file will	be written only	for the	first patch.  When the
		      -o outfile option	is also	specified, file.orig will  not
		      be  created but, if outfile already exists, outfile.orig
		      will be created.

       -c	      Interpret	the patch file as a  context  difference  (the
		      output of	the command diff when the -c or	-C options are

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

       -D define      Mark changes with	the C preprocessor construct:
		      #ifdef define

       The option-argument define will be used as the differentiating symbol.

       -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
		      path name	patchfile, rather than the standard input.

       -l	      (The  letter  ell.)  Cause any sequence of blank charac-
		      ters in the difference script to match any  sequence  of
		      blank  characters	 in  the input file.  Other characters
		      will 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
		      are 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  ap-
		      propriate	 differences  applied,	to  outfile.  Multiple
		      patches for a single file	will be	applied	to the	inter-
		      mediate  versions	 of  the  file created by any previous
		      patches, and will	result in multiple, concatenated  ver-
		      sions of the file	being written to outfile.

       -p num	      For  all	path names in the patch	file that indicate the
		      names of files to	be patched, delete num path name  com-
		      ponents  from  the  beginning of each path name.	If the
		      path name	in the patch file  is  absolute,  any  leading
		      slashes  are considered the first	component (that	is, -p
		      1	removes	the leading slashes).  Specifying -p 0	causes
		      the  full	path name to be	used.  If -p is	not specified,
		      only the basename	(the final  path  name	component)  is

       -R	      Reverse  the  sense of the patch script; that is,	assume
		      that the difference script was created from the new ver-
		      sion  to	the old	version.  The -R option	cannot be used
		      with ed scripts.	patch attempts to reverse each portion
		      of  the script before applying it.  Rejected differences
		      will be saved in swapped format.	If this	option is  not
		      specified, and until a portion of	the patch file is suc-
		      cessfully	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 will be  prompted
		      to determine if the -R option should be set.

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

       The following operand is	supported:

       file    A path name of a	file to	patch.

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

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


       Setting -p 0 gives the entire path name unmodified; -p 1	gives:


       without the leading slash, -p 4 gives:


       and not specifying -p at	all gives:


       When  using  -b	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 will overwrite	the new	file.

       See environ(5) for descriptions of the following	environment  variables
       that affect the execution of patch: LC_CTYPE, LC_MESSAGES, LC_TIME, and

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

       A  patchfile  may contain patching instructions for more	than one file;
       filenames are determined	as specified in	Patch Determination.  When the
       -b  option  is  specified,  for each patched file, the original will 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 will be formed by appending	the suffix .rej	to the original	 file-

   Patchfile Format
       The  patch  file	 must contain zero or more lines of header information
       followed	by one or more patches.	 Each patch must 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.

       patch recognizes	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 characters, patch will remove this sequence
       before proceeding.  Within each patch, if the  type  of	difference  is
       context,	patch recognizes the following expressions:

       *** filename timestamp	The patches arose from filename.

       --- filename timestamp	The patches should be applied to filename.

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

   Filename Determination
       If  no file operand is specified, patch performs	the following steps to
       obtain a	path name:

       1.     If the patch contains the	strings	*** and	---, patch strips com-
	      ponents  from  the beginning of each path	name (depending	on the
	      presence or value	of the -p option), then	tests  for  the	 exis-
	      tence of both files in the current directory (or directory spec-
	      ified with the -d	option).

       2.     If both files exist, patch assumes that no path name can be  ob-
	      tained  from  this  step.	  If the header	information contains a
	      line with	the string Index:, patch strips	 components  from  the
	      beginning	of the path name (depending on -p), then tests for the
	      existence	of this	file in	the current  directory	(or  directory
	      specified	with the -d option).

       3.     If an SCCS directory exists in the current directory, patch will
	      attempt to perform a get -e SCCS/s.filename command to  retrieve
	      an editable version of the file.

       4.     If  no path name can be obtained by applying the previous	steps,
	      or if the	path names obtained do not exist, patch	will  write  a
	      prompt  to  standard output and request a	filename interactively
	      from standard input.

   Patch Application
       If the -c, -e or	-n option is present, patch will 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,
       patch determines	the type of difference based on	the format of informa-
       tion within the hunk.

       For each	hunk, patch begins to search for the place to apply the	 patch
       at the line number at the beginning of the hunk,	plus or	minus any off-
       set used	in applying the	previous hunk.	If  lines  matching  the  hunk
       context are not found, patch scans 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  will take place, ignoring the first and last line of context.  If
       that fails, the first two and last two lines of context will be ignored
       and  another scan will be made.	Implementations	may search more	exten-
       sively for installation locations.

       If no location can be found, patch will append the hunk to  the	reject
       file.   The  rejected hunk will 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 will 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 command.

       The following exit values are returned:
       0      Successful completion.
       1      One or more lines	were written to	a reject file.
       >1     An error occurred.

       ed(1), diff(1), environ(5)

				  28 Mar 1995			      patch(1)


Want to link to this manual page? Use this URL:

home | help