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

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
patch(1)			 User Commands			      patch(1)

NAME
       patch - apply changes to	files

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

DESCRIPTION
       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
       listing.)

OPTIONS
       The following options are supported:

       -b	       Saves  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
		       multiple	 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	       Interprets  the patch file as a context difference (the
		       output of the command diff when the -c  or  -C  options
		       are specified).

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

       -D define       Marks changes with the C	preprocessor construct:

		       #ifdef define
		       ...
		       #endif

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

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

       -i patchfile    Reads the patch information from	the file named by  the
		       path name patchfile, rather than	the standard input.

       -l	       (The  letter ell.) Causes 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	       Interprets the script as	a normal difference.

       -N	       Ignores 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, writes a
		       copy of the file	referenced by  each  patch,  with  the
		       appropriate  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,  deletes  num  path  name
		       components 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
		       used.

       -R	       Reverses	 the  sense  of	 the  patch  script.  That is,
		       assumes that the	difference script was created from the
		       new version 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 dif-
		       ferences	will 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  will  be  prompted	 to determine if the -R	option
		       should be set.

       -r rejectfile   Overrides the default reject file name. 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.

       -u	       Interprets  the patch file as a unified context differ-
		       ence, that is, the output of the	command	diff when  the
		       -u or -U	options	are specified.

OPERANDS
       The following operand is	supported:

       file	A path name of a file to patch.

USAGE
       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 customize a patch file to local user
       directory structures without manually editing the patch file. For exam-
       ple,    if    the    file    name    in	  the	 patch	  file	   was
       /curds/whey/src/blurfl/blurfl.c:

	 o  Setting -p 0 gives the entire path name unmodified.

	 o  Setting -p 1 gives:

	    curds/whey/src/blurfl/blurfl.c

	 o  Without the	leading	slash, -p 4 gives:

	    blurfl/blurfl.c

	 o  Not	specifying -p at all gives:

	    blurfl.c

       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  file names, on file systems supporting 14-character maxi-
       mum file	names, the .orig file will overwrite the new file.

ENVIRONMENT VARIABLES
       See environ(5) for descriptions of the following	environment  variables
       that  affect  the  execution  of	patch: LANG, LC_ALL, LC_CTYPE, LC_MES-
       SAGES, LC_TIME, and NLSPATH.

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

EXTENDED DESCRIPTION
       A  patch	file may contain patching instructions for more	than one file.
       File names 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 an -r option,  the	name  of  this
       file  will  be formed by	appending the suffix .rej to the original file
       name.

   Patch File 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	file name 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 con-
       text, 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.

   File	Name 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	compo-
	   nents  from the beginning of	each path name (depending on the pres-
	   ence	or value of the	-p option), then tests for  the	 existence  of
	   both	 files	in  the	current	directory (or directory	specified with
	   the -d option).

       2.  If both files exist,	 patch	assumes	 that  no  path	 name  can  be
	   obtained  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 file name interactively from stan-
	   dard	input.

   Patch Application
       If the -c, -e, -n, or -u	option is present, patch will interpret	infor-
       mation  within  each  hunk as a context difference, an ed difference, a
       normal difference, or a unified context	difference,  respectively.  In
       the  absence of any of these options, patch determines the type of dif-
       ference based on	the format of information 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 con-
       text  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.

EXIT STATUS
       The following exit values are returned:

       0	Successful completion.

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

       >1	An error occurred.

ATTRIBUTES
       See attributes(5) for descriptions of the following attributes:

       +-----------------------------+-----------------------------+
       |      ATTRIBUTE	TYPE	     |	    ATTRIBUTE VALUE	   |
       +-----------------------------+-----------------------------+
       |Availability		     |SUNWcsu			   |
       +-----------------------------+-----------------------------+
       |Interface Stability	     |Standard			   |
       +-----------------------------+-----------------------------+

SEE ALSO
       ed(1), diff(1), attributes(5), environ(5), standards(5)

SunOS 5.10			  28 Sep 2001			      patch(1)

NAME | SYNOPSIS | DESCRIPTION | OPTIONS | OPERANDS | USAGE | ENVIRONMENT VARIABLES | OUTPUT FILES | EXTENDED DESCRIPTION | EXIT STATUS | ATTRIBUTES | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=patch&sektion=1&manpath=SunOS+5.10>

home | help