15027f2b8SJohn Marino /*- 248d201a5SJoerg Sonnenberger * Copyright 1986, Larry Wall 348d201a5SJoerg Sonnenberger * 448d201a5SJoerg Sonnenberger * Redistribution and use in source and binary forms, with or without 548d201a5SJoerg Sonnenberger * modification, are permitted provided that the following condition is met: 648d201a5SJoerg Sonnenberger * 1. Redistributions of source code must retain the above copyright notice, 748d201a5SJoerg Sonnenberger * this condition and the following disclaimer. 848d201a5SJoerg Sonnenberger * 948d201a5SJoerg Sonnenberger * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY 1048d201a5SJoerg Sonnenberger * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1148d201a5SJoerg Sonnenberger * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1248d201a5SJoerg Sonnenberger * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 1348d201a5SJoerg Sonnenberger * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1448d201a5SJoerg Sonnenberger * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 1548d201a5SJoerg Sonnenberger * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 1648d201a5SJoerg Sonnenberger * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 1748d201a5SJoerg Sonnenberger * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 1848d201a5SJoerg Sonnenberger * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 1948d201a5SJoerg Sonnenberger * SUCH DAMAGE. 2048d201a5SJoerg Sonnenberger * 215027f2b8SJohn Marino * patch - a program to apply diffs to original files 225027f2b8SJohn Marino * 2348d201a5SJoerg Sonnenberger * -C option added in 1998, original code by Marc Espie, based on FreeBSD 2448d201a5SJoerg Sonnenberger * behaviour 255027f2b8SJohn Marino * 265027f2b8SJohn Marino * $OpenBSD: common.h,v 1.26 2006/03/11 19:41:30 otto Exp $ 27*b94b84caSDaniel Fojt * $FreeBSD: head/usr.bin/patch/common.h 344677 2019-03-01 01:20:21Z kevans $ 2848d201a5SJoerg Sonnenberger */ 2948d201a5SJoerg Sonnenberger 309d62a0f9SSascha Wildner #include <sys/types.h> 319d62a0f9SSascha Wildner 3248d201a5SJoerg Sonnenberger #include <stdbool.h> 332c017143SJoerg Sonnenberger #include <stdint.h> 345d6897abSMatthew Dillon 3548d201a5SJoerg Sonnenberger #define DEBUGGING 3648d201a5SJoerg Sonnenberger 3748d201a5SJoerg Sonnenberger /* constants */ 3848d201a5SJoerg Sonnenberger 395027f2b8SJohn Marino #define MAXHUNKSIZE 200000 /* is this enough lines? */ 4048d201a5SJoerg Sonnenberger #define INITHUNKMAX 125 /* initial dynamic allocation size */ 415027f2b8SJohn Marino #define INITLINELEN 4096 425027f2b8SJohn Marino #define BUFFERSIZE 4096 43*b94b84caSDaniel Fojt #define LINENUM_MAX LONG_MAX 4448d201a5SJoerg Sonnenberger 4548d201a5SJoerg Sonnenberger #define ORIGEXT ".orig" 4648d201a5SJoerg Sonnenberger #define REJEXT ".rej" 4748d201a5SJoerg Sonnenberger 4848d201a5SJoerg Sonnenberger /* handy definitions */ 4948d201a5SJoerg Sonnenberger 50*b94b84caSDaniel Fojt #define strEQ(s1,s2) (strcmp(s1, s2) == 0) 51*b94b84caSDaniel Fojt #define strnNE(s1,s2,l) (strncmp(s1, s2, l) != 0) 52*b94b84caSDaniel Fojt #define strnEQ(s1,s2,l) (strncmp(s1, s2, l) == 0) 5348d201a5SJoerg Sonnenberger 5448d201a5SJoerg Sonnenberger /* typedefs */ 5548d201a5SJoerg Sonnenberger 5648d201a5SJoerg Sonnenberger typedef long LINENUM; /* must be signed */ 5748d201a5SJoerg Sonnenberger 5848d201a5SJoerg Sonnenberger /* globals */ 5948d201a5SJoerg Sonnenberger 609d62a0f9SSascha Wildner extern mode_t filemode; 6148d201a5SJoerg Sonnenberger 625027f2b8SJohn Marino extern char *buf; /* general purpose buffer */ 635027f2b8SJohn Marino extern size_t buf_size; /* size of general purpose buffer */ 6448d201a5SJoerg Sonnenberger 6548d201a5SJoerg Sonnenberger extern bool using_plan_a; /* try to keep everything in memory */ 6648d201a5SJoerg Sonnenberger extern bool out_of_mem; /* ran out of memory in plan a */ 67*b94b84caSDaniel Fojt extern bool nonempty_patchf_seen; /* seen a non-zero-length patch file? */ 6848d201a5SJoerg Sonnenberger 6948d201a5SJoerg Sonnenberger #define MAXFILEC 2 7048d201a5SJoerg Sonnenberger 7148d201a5SJoerg Sonnenberger extern char *filearg[MAXFILEC]; 7248d201a5SJoerg Sonnenberger extern bool ok_to_create_file; 7348d201a5SJoerg Sonnenberger extern char *outname; 7448d201a5SJoerg Sonnenberger extern char *origprae; 7548d201a5SJoerg Sonnenberger 7648d201a5SJoerg Sonnenberger extern char *TMPOUTNAME; 7748d201a5SJoerg Sonnenberger extern char *TMPINNAME; 7848d201a5SJoerg Sonnenberger extern char *TMPREJNAME; 7948d201a5SJoerg Sonnenberger extern char *TMPPATNAME; 8048d201a5SJoerg Sonnenberger extern bool toutkeep; 8148d201a5SJoerg Sonnenberger extern bool trejkeep; 8248d201a5SJoerg Sonnenberger 8348d201a5SJoerg Sonnenberger #ifdef DEBUGGING 8448d201a5SJoerg Sonnenberger extern int debug; 8548d201a5SJoerg Sonnenberger #endif 8648d201a5SJoerg Sonnenberger 8748d201a5SJoerg Sonnenberger extern bool force; 8848d201a5SJoerg Sonnenberger extern bool batch; 8948d201a5SJoerg Sonnenberger extern bool verbose; 9048d201a5SJoerg Sonnenberger extern bool reverse; 9148d201a5SJoerg Sonnenberger extern bool noreverse; 9248d201a5SJoerg Sonnenberger extern bool skip_rest_of_patch; 9348d201a5SJoerg Sonnenberger extern int strippath; 9448d201a5SJoerg Sonnenberger extern bool canonicalize; 9548d201a5SJoerg Sonnenberger /* TRUE if -C was specified on command line. */ 9648d201a5SJoerg Sonnenberger extern bool check_only; 9748d201a5SJoerg Sonnenberger extern bool warn_on_invalid_line; 9848d201a5SJoerg Sonnenberger extern bool last_line_missing_eol; 9948d201a5SJoerg Sonnenberger 10048d201a5SJoerg Sonnenberger 10148d201a5SJoerg Sonnenberger #define CONTEXT_DIFF 1 10248d201a5SJoerg Sonnenberger #define NORMAL_DIFF 2 10348d201a5SJoerg Sonnenberger #define ED_DIFF 3 10448d201a5SJoerg Sonnenberger #define NEW_CONTEXT_DIFF 4 10548d201a5SJoerg Sonnenberger #define UNI_DIFF 5 10648d201a5SJoerg Sonnenberger 10748d201a5SJoerg Sonnenberger extern int diff_type; 10848d201a5SJoerg Sonnenberger extern char *revision; /* prerequisite revision, if any */ 10948d201a5SJoerg Sonnenberger extern LINENUM input_lines; /* how long is input file in lines */ 11048d201a5SJoerg Sonnenberger 11148d201a5SJoerg Sonnenberger extern int posix; 11248d201a5SJoerg Sonnenberger 113