1/* $FreeBSD$ 2 * 3 * $Log: common.h,v $ 4 * Revision 2.0.1.2 88/06/22 20:44:53 lwall 5 * patch12: sprintf was declared wrong 6 * 7 * Revision 2.0.1.1 88/06/03 15:01:56 lwall 8 * patch10: support for shorter extensions. 9 * 10 * Revision 2.0 86/09/17 15:36:39 lwall 11 * Baseline for netwide release. 12 * 13 */ 14 15#define DEBUGGING 16 17#define VOIDUSED 7 18#include "config.h" 19 20/* shut lint up about the following when return value ignored */ 21 22#define Signal (void)signal 23#define Unlink (void)unlink 24#define Lseek (void)lseek 25#define Fseek (void)fseek 26#define Fstat (void)fstat 27#define Pclose (void)pclose 28#define Close (void)close 29#define Fclose (void)fclose 30#define Fflush (void)fflush 31#define Sprintf (void)sprintf 32#define Snprintf (void)snprintf 33#define Mktemp (void)mktemp 34#define Strcpy (void)strcpy 35#define Strcat (void)strcat 36#define Strlcpy (void)strlcpy 37#define Strncpy (void)strncpy 38#define Strlcat (void)strlcat 39 40/* NeXT declares malloc and realloc incompatibly from us in some of 41 these files. Temporarily redefine them to prevent errors. */ 42#define malloc system_malloc 43#define realloc system_realloc 44#include <stdio.h> 45#include <assert.h> 46#include <sys/types.h> 47#include <sys/stat.h> 48#include <ctype.h> 49#include <signal.h> 50#undef malloc 51#undef realloc 52 53/* constants */ 54 55/* AIX predefines these. */ 56#ifdef TRUE 57#undef TRUE 58#endif 59#ifdef FALSE 60#undef FALSE 61#endif 62#define TRUE (1) 63#define FALSE (0) 64 65#define MAXHUNKSIZE 200000 /* is this enough lines? */ 66#define INITHUNKMAX 125 /* initial dynamic allocation size */ 67#define INITLINELEN 4096 68#define BUFFERSIZE 4096 69 70#define SCCSPREFIX "s." 71#define GET "get %s" 72#define GET_LOCKED "get -e %s" 73#define SCCSDIFF "get -p %s | diff - %s >/dev/null" 74 75#define RCSSUFFIX ",v" 76#define CHECKOUT "co %s" 77#define CHECKOUT_LOCKED "co -l %s" 78#define RCSDIFF "rcsdiff %s > /dev/null" 79 80/* handy definitions */ 81 82#define Null(t) ((t)0) 83#define Nullch Null(char *) 84#define Nullfp Null(FILE *) 85#define Nulline Null(LINENUM) 86 87#define Ctl(ch) ((ch) & 037) 88 89#define strNE(s1,s2) (strcmp(s1, s2)) 90#define strEQ(s1,s2) (!strcmp(s1, s2)) 91#define strnNE(s1,s2,l) (strncmp(s1, s2, l)) 92#define strnEQ(s1,s2,l) (!strncmp(s1, s2, l)) 93 94/* typedefs */ 95 96typedef char bool; 97typedef long LINENUM; /* must be signed */ 98typedef unsigned MEM; /* what to feed malloc */ 99 100/* globals */ 101 102EXT int Argc; /* guess */ 103EXT char **Argv; 104EXT int optind_last; /* for restarting plan_b */ 105 106EXT struct stat filestat; /* file statistics area */ 107EXT int filemode INIT(0644); 108 109EXT char *buf; /* general purpose buffer */ 110EXT size_t buf_size; /* size of the general purpose buffer */ 111EXT FILE *ofp INIT(Nullfp); /* output file pointer */ 112EXT FILE *rejfp INIT(Nullfp); /* reject file pointer */ 113 114EXT int myuid; /* cache getuid return value */ 115 116EXT bool using_plan_a INIT(TRUE); /* try to keep everything in memory */ 117EXT bool out_of_mem INIT(FALSE); /* ran out of memory in plan a */ 118 119#define MAXFILEC 2 120EXT int filec INIT(0); /* how many file arguments? */ 121EXT char *filearg[MAXFILEC]; 122EXT bool ok_to_create_file INIT(FALSE); 123EXT char *bestguess INIT(Nullch); /* guess at correct filename */ 124 125EXT char *outname INIT(Nullch); 126EXT char rejname[128]; 127 128EXT char *origprae INIT(Nullch); 129 130EXT char *TMPOUTNAME; 131EXT char *TMPINNAME; 132EXT char *TMPREJNAME; 133EXT char *TMPPATNAME; 134EXT bool toutkeep INIT(FALSE); 135EXT bool trejkeep INIT(FALSE); 136 137EXT LINENUM last_offset INIT(0); 138#ifdef DEBUGGING 139EXT int debug INIT(0); 140#endif 141EXT LINENUM maxfuzz INIT(2); 142EXT bool force INIT(FALSE); 143EXT bool batch INIT(FALSE); 144EXT bool verbose INIT(TRUE); 145EXT bool reverse INIT(FALSE); 146EXT bool noreverse INIT(FALSE); 147EXT bool skip_rest_of_patch INIT(FALSE); 148EXT int strippath INIT(957); 149EXT bool canonicalize INIT(FALSE); 150 151#define CONTEXT_DIFF 1 152#define NORMAL_DIFF 2 153#define ED_DIFF 3 154#define NEW_CONTEXT_DIFF 4 155#define UNI_DIFF 5 156EXT int diff_type INIT(0); 157 158EXT bool do_defines INIT(FALSE); /* patch using ifdef, ifndef, etc. */ 159EXT char if_defined[128]; /* #ifdef xyzzy */ 160EXT char not_defined[128]; /* #ifndef xyzzy */ 161EXT char else_defined[] INIT("#else\n");/* #else */ 162EXT char end_defined[128]; /* #endif xyzzy */ 163 164EXT char *revision INIT(Nullch); /* prerequisite revision, if any */ 165 166#include <errno.h> 167#ifdef STDC_HEADERS 168#include <stdlib.h> 169#include <string.h> 170#else 171extern int errno; 172FILE *popen(); 173char *malloc(); 174char *realloc(); 175long atol(); 176char *getenv(); 177char *strcpy(); 178char *strcat(); 179#endif 180char *mktemp(char *); 181#ifdef HAVE_UNISTD_H 182#include <unistd.h> 183#else 184long lseek(); 185#endif 186#if defined(_POSIX_VERSION) || defined(HAVE_FCNTL_H) 187#include <fcntl.h> 188#endif 189 190#if !defined(S_ISDIR) && defined(S_IFDIR) 191#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 192#endif 193#if !defined(S_ISREG) && defined(S_IFREG) 194#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 195#endif 196