Home | History | Annotate | Line # | Download | only in patch
      1 /*
      2  * $OpenBSD: common.h,v 1.26 2006/03/11 19:41:30 otto Exp $
      3  * $DragonFly: src/usr.bin/patch/common.h,v 1.5 2008/08/10 23:50:12 joerg Exp $
      4  * $NetBSD: common.h,v 1.22 2021/05/25 11:25:59 cjep Exp $
      5  */
      6 
      7 /*
      8  * patch - a program to apply diffs to original files
      9  *
     10  * Copyright 1986, Larry Wall
     11  *
     12  * Redistribution and use in source and binary forms, with or without
     13  * modification, are permitted provided that the following condition is met:
     14  * 1. Redistributions of source code must retain the above copyright notice,
     15  * this condition and the following disclaimer.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
     18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     20  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
     21  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     23  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     24  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     27  * SUCH DAMAGE.
     28  *
     29  * -C option added in 1998, original code by Marc Espie, based on FreeBSD
     30  * behaviour
     31  */
     32 
     33 #include <sys/types.h>
     34 
     35 #include <stdbool.h>
     36 #include <stdint.h>
     37 
     38 #define DEBUGGING
     39 
     40 /* constants */
     41 
     42 #define MAXHUNKSIZE 100000	/* is this enough lines? */
     43 #define INITHUNKMAX 125		/* initial dynamic allocation size */
     44 #define INITLINELEN 8192
     45 #define BUFFERSIZE 1024
     46 #define LINENUM_MAX LONG_MAX
     47 
     48 #define SCCSPREFIX "s."
     49 #define GET "get -e %s"
     50 #define SCCSDIFF "get -p %s | diff - %s >/dev/null"
     51 
     52 #define RCSSUFFIX ",v"
     53 #define CHECKOUT "/usr/bin/co"
     54 #define RCSDIFF "/usr/bin/rcsdiff"
     55 
     56 #define ORIGEXT ".orig"
     57 #define REJEXT ".rej"
     58 
     59 /* handy definitions */
     60 
     61 #define strNE(s1,s2) (strcmp(s1, s2))
     62 #define strEQ(s1,s2) (!strcmp(s1, s2))
     63 #define strnNE(s1,s2,l) (strncmp(s1, s2, l))
     64 #define strnEQ(s1,s2,l) (!strncmp(s1, s2, l))
     65 
     66 /* typedefs */
     67 
     68 typedef long    LINENUM;	/* must be signed */
     69 
     70 /* globals */
     71 
     72 extern mode_t	filemode;
     73 
     74 extern char	*buf;		/* general purpose buffer */
     75 extern size_t	bufsz;		/* general purpose buffer size */
     76 
     77 extern bool	using_plan_a;	/* try to keep everything in memory */
     78 extern bool	out_of_mem;	/* ran out of memory in plan a */
     79 
     80 #define MAXFILEC 2
     81 
     82 extern char	*filearg[MAXFILEC];
     83 extern bool	ok_to_create_file;
     84 extern char	*outname;
     85 extern char	*origprae;
     86 
     87 extern char	*TMPOUTNAME;
     88 extern char	*TMPINNAME;
     89 extern char	*TMPREJNAME;
     90 extern char	*TMPPATNAME;
     91 extern bool	toutkeep;
     92 extern bool	trejkeep;
     93 
     94 #ifdef DEBUGGING
     95 extern int	debug;
     96 #endif
     97 
     98 extern bool	force;
     99 extern bool	batch;
    100 extern bool	verbose;
    101 extern bool	reverse;
    102 extern bool	noreverse;
    103 extern bool	skip_rest_of_patch;
    104 extern int	strippath;
    105 extern bool	canonicalize;
    106 /* TRUE if -C was specified on command line.  */
    107 extern bool	check_only;
    108 extern bool	warn_on_invalid_line;
    109 extern bool	last_line_missing_eol;
    110 
    111 
    112 #define CONTEXT_DIFF 1
    113 #define NORMAL_DIFF 2
    114 #define ED_DIFF 3
    115 #define NEW_CONTEXT_DIFF 4
    116 #define UNI_DIFF 5
    117 
    118 extern int	diff_type;
    119 extern char	*revision;	/* prerequisite revision, if any */
    120 extern LINENUM	input_lines;	/* how long is input file in lines */
    121 
    122 extern int	posix;
    123 
    124