/* * This code contains changes by * Gunnar Ritter, Freiburg i. Br., Germany, March 2003. All rights reserved. * * Conditions 1, 2, and 4 and the no-warranty notice below apply * to these changes. * * * Copyright (c) 1991 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * * Copyright(C) Caldera International Inc. 2001-2002. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * Redistributions of source code and documentation must retain the * above copyright notice, this list of conditions and the following * disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed or owned by Caldera * International, Inc. * Neither the name of Caldera International, Inc. nor the names of * other contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA * INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE * LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Sccsid @(#)diff.h 1.15 (gritter) 3/26/05> */ /* from 4.3BSD diff.h 4.7 85/08/16 */ /* * diff - common declarations */ #include #include #include #include #include #include #include #include #include #include #include #if defined (__GLIBC__) #if defined (_IO_getc_unlocked) #undef getc #define getc(f) _IO_getc_unlocked(f) #endif #if defined (_IO_putc_unlocked) #undef putc #define putc(c, f) _IO_putc_unlocked(c, f) #undef putchar #define putchar(c) _IO_putc_unlocked(c, stdout) #endif #endif /* * Output format options */ int opt; #define D_NORMAL 0 /* Normal output */ #define D_EDIT -1 /* Editor script out */ #define D_REVERSE 1 /* Reverse editor script */ #define D_CONTEXT 2 /* Diff with context */ #define D_IFDEF 3 /* Diff with merged #ifdef's */ #define D_NREVERSE 4 /* Reverse ed script with numbered lines and no trailing . */ #define D_UNIFIED 5 /* Unified diff */ int aflag; /* diff binary files */ int tflag; /* expand tabs on output */ int pflag; /* show surrounding C function */ /* * Algorithm related options */ int hflag; /* -h, use halfhearted DIFFH */ int bflag; /* ignore blanks in comparisons */ int wflag; /* totally ignore blanks in comparisons */ int iflag; /* ignore case in comparisons */ int Bflag; /* ignore changes that consist of blank lines */ /* * Options on hierarchical diffs. */ int lflag; /* long output format with header */ int rflag; /* recursively trace directories */ int sflag; /* announce files which are same */ int Nflag; /* write text of nonexistant files */ const char *start; /* do file only if name >= this */ struct xclusion { struct xclusion *x_nxt; const char *x_pat; } *xflag; /* patterns to exclude from comparison */ /* * Variables for -I D_IFDEF option. */ int wantelses; /* -E */ char *ifdef1; /* String for -1 */ char *ifdef2; /* String for -2 */ char *endifname; /* What we will print on next #endif */ int inifdef; /* * Variables for -c context option. */ int context; /* lines of context to be printed */ /* * State for exit status. */ int status; int anychange; char *tempfile1; /* used when comparing against std input */ char *tempfile2; /* used when comparing against std input */ /* * Variables for diffdir. */ char **diffargv; /* option list to pass to recursive diffs */ int recdepth; /* recursion depth */ jmp_buf recenv; /* jump stack on error */ struct stackblk { struct stackblk *s_prev; struct stackblk *s_next; } *curstack; /* * Input file names. * With diffdir, file1 and file2 are allocated BUFSIZ space, * and padded with a '/', and then efile0 and efile1 point after * the '/'. */ char *file1, *file2, *efile1, *efile2; struct stat stb1, stb2; extern const char diffh[], diff[], pr[]; extern const char *argv0; extern const char *progname; int mb_cur_max; extern int sysv3; /* diff.c */ void diffany(char **); int min(int, int); int max(int, int); void done(void); void *dalloc(size_t); void *talloc(size_t); void *ralloc(void *, size_t); void tfree(void *); void purgestack(void); void oomsg(const char *); /* diffdir.c */ void diffdir(char **); int ascii(int); /* diffreg.c */ void diffreg(void);