summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/diff/diff.11
-rw-r--r--usr.bin/diff/diff.c252
-rw-r--r--usr.bin/diff/diff.h16
-rw-r--r--usr.bin/diff/diffdir.c193
-rw-r--r--usr.bin/diff/diffreg.c839
-rw-r--r--usr.bin/diff/pathnames.h1
6 files changed, 678 insertions, 624 deletions
diff --git a/usr.bin/diff/diff.1 b/usr.bin/diff/diff.1
index 1b5c0787430..59d276f89df 100644
--- a/usr.bin/diff/diff.1
+++ b/usr.bin/diff/diff.1
@@ -1,3 +1,4 @@
+.\" $OpenBSD: diff.1,v 1.3 2003/06/25 03:02:33 tedu Exp $
.\" Copyright (c) 1980, 1990, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
diff --git a/usr.bin/diff/diff.c b/usr.bin/diff/diff.c
index 7762c06ac6d..4625f99a9e0 100644
--- a/usr.bin/diff/diff.c
+++ b/usr.bin/diff/diff.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: diff.c,v 1.2 2003/06/25 01:23:38 deraadt Exp $ */
+/* $OpenBSD: diff.c,v 1.3 2003/06/25 03:02:33 tedu Exp $ */
/*
* Copyright (C) Caldera International Inc. 2001-2002.
@@ -34,122 +34,129 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-static char sccsid[] = "@(#)diff.c 4.7 5/11/89";
+#include <stdlib.h>
+#include <unistd.h>
#include "diff.h"
#include "pathnames.h"
+#if 0
+static char const sccsid[] = "@(#)diff.c 4.7 5/11/89";
+#endif
+
/*
* diff - driver and subroutines
*/
-char diff[] = _PATH_DIFF;
-char diffh[] = _PATH_DIFFH;
-char pr[] = _PATH_PR;
+char diff[] = _PATH_DIFF;
+char diffh[] = _PATH_DIFFH;
+char pr[] = _PATH_PR;
-main(argc, argv)
- int argc;
- char **argv;
+static void noroom(void);
+
+int
+main(int argc, char **argv)
{
- register char *argp;
+ char *argp;
- ifdef1 = "FILE1"; ifdef2 = "FILE2";
+ ifdef1 = "FILE1";
+ ifdef2 = "FILE2";
status = 2;
diffargv = argv;
argc--, argv++;
while (argc > 2 && argv[0][0] == '-') {
argp = &argv[0][1];
argv++, argc--;
- while (*argp) switch(*argp++) {
-
+ while (*argp)
+ switch (*argp++) {
#ifdef notdef
- case 'I':
- opt = D_IFDEF;
- wantelses = 0;
- continue;
- case 'E':
- opt = D_IFDEF;
- wantelses = 1;
- continue;
- case '1':
- opt = D_IFDEF;
- ifdef1 = argp;
- *--argp = 0;
- continue;
+ case 'I':
+ opt = D_IFDEF;
+ wantelses = 0;
+ continue;
+ case 'E':
+ opt = D_IFDEF;
+ wantelses = 1;
+ continue;
+ case '1':
+ opt = D_IFDEF;
+ ifdef1 = argp;
+ *--argp = 0;
+ continue;
#endif
- case 'D':
- /* -Dfoo = -E -1 -2foo */
- wantelses = 1;
- ifdef1 = "";
- /* fall through */
+ case 'D':
+ /* -Dfoo = -E -1 -2foo */
+ wantelses = 1;
+ ifdef1 = "";
+ /* fall through */
#ifdef notdef
- case '2':
+ case '2':
#endif
- opt = D_IFDEF;
- ifdef2 = argp;
- *--argp = 0;
- continue;
- case 'e':
- opt = D_EDIT;
- continue;
- case 'f':
- opt = D_REVERSE;
- continue;
- case 'n':
- opt = D_NREVERSE;
- continue;
- case 'b':
- bflag = 1;
- continue;
- case 'w':
- wflag = 1;
- continue;
- case 'i':
- iflag = 1;
- continue;
- case 't':
- tflag = 1;
- continue;
- case 'c':
- opt = D_CONTEXT;
- if (isdigit(*argp)) {
- context = atoi(argp);
- while (isdigit(*argp))
- argp++;
- if (*argp) {
- fprintf(stderr,
- "diff: -c: bad count\n");
+ opt = D_IFDEF;
+ ifdef2 = argp;
+ *--argp = 0;
+ continue;
+ case 'e':
+ opt = D_EDIT;
+ continue;
+ case 'f':
+ opt = D_REVERSE;
+ continue;
+ case 'n':
+ opt = D_NREVERSE;
+ continue;
+ case 'b':
+ bflag = 1;
+ continue;
+ case 'w':
+ wflag = 1;
+ continue;
+ case 'i':
+ iflag = 1;
+ continue;
+ case 't':
+ tflag = 1;
+ continue;
+ case 'c':
+ opt = D_CONTEXT;
+ if (isdigit(*argp)) {
+ context = atoi(argp);
+ while (isdigit(*argp))
+ argp++;
+ if (*argp) {
+ fprintf(stderr,
+ "diff: -c: bad count\n");
+ done();
+ }
+ argp = "";
+ } else
+ context = 3;
+ continue;
+ case 'h':
+ hflag++;
+ continue;
+ case 'S':
+ if (*argp == 0) {
+ fprintf(stderr, "diff: use -Sstart\n");
done();
}
- argp = "";
- } else
- context = 3;
- continue;
- case 'h':
- hflag++;
- continue;
- case 'S':
- if (*argp == 0) {
- fprintf(stderr, "diff: use -Sstart\n");
+ start = argp;
+ *--argp = 0; /* don't pass it on */
+ continue;
+ case 'r':
+ rflag++;
+ continue;
+ case 's':
+ sflag++;
+ continue;
+ case 'l':
+ lflag++;
+ continue;
+ default:
+ fprintf(stderr, "diff: -%s: unknown option\n",
+ --argp);
done();
}
- start = argp;
- *--argp = 0; /* don't pass it on */
- continue;
- case 'r':
- rflag++;
- continue;
- case 's':
- sflag++;
- continue;
- case 'l':
- lflag++;
- continue;
- default:
- fprintf(stderr, "diff: -%s: unknown option\n",
- --argp);
- done();
- }
}
if (argc != 2) {
fprintf(stderr, "diff: two filename arguments required\n");
@@ -182,66 +189,61 @@ main(argc, argv)
} else
diffreg();
done();
+ /* notreached */
+ return (0);
}
-char *
-savestr(cp)
- register char *cp;
-{
- register char *dp = malloc(strlen(cp)+1);
-
- if (dp == 0) {
- fprintf(stderr, "diff: ran out of memory\n");
- done();
- }
- strcpy(dp, cp);
- return (dp);
-}
-
-min(a,b)
- int a,b;
+int
+min(int a, int b)
{
return (a < b ? a : b);
}
-max(a,b)
- int a,b;
+int
+max(int a, int b)
{
return (a > b ? a : b);
}
-done()
+void
+done(void)
{
if (tempfile)
unlink(tempfile);
exit(status);
}
-char *
-talloc(n)
+void
+catchsig(int sigraised)
{
- register char *p;
+ /* print something? */
+ done();
+}
- if ((p = malloc((unsigned)n)) != NULL)
- return(p);
- noroom();
+void *
+talloc(size_t n)
+{
+ void *p;
+
+ if ((p = malloc(n)) == NULL)
+ noroom();
+ return (p);
}
-char *
-ralloc(p,n)
-char *p;
+void *
+ralloc(void *p, size_t n)
{
- register char *q;
- char *realloc();
+ void *q;
- if ((q = realloc(p, (unsigned)n)) == NULL)
+ if ((q = realloc(p, n)) == NULL)
noroom();
- return(q);
+ return (q);
}
-noroom()
+static void
+noroom(void)
{
fprintf(stderr, "diff: files too big, try -h\n");
done();
diff --git a/usr.bin/diff/diff.h b/usr.bin/diff/diff.h
index 73ba52c0cbf..0aafd79784f 100644
--- a/usr.bin/diff/diff.h
+++ b/usr.bin/diff/diff.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: diff.h,v 1.2 2003/06/25 01:23:38 deraadt Exp $ */
+/* $OpenBSD: diff.h,v 1.3 2003/06/25 03:02:33 tedu Exp $ */
/*
* Copyright (C) Caldera International Inc. 2001-2002.
@@ -113,9 +113,15 @@ char **diffargv; /* option list to pass to recursive diffs */
char *file1, *file2, *efile1, *efile2;
struct stat stb1, stb2;
-char *malloc(), *talloc(), *ralloc();
-char *savestr(), *splice(), *splicen();
-char *mktemp(), *copytemp(), *rindex();
-int done();
+void *talloc(size_t);
+void *ralloc(void *, size_t);
+char *splice(char *, char *);
+char *copytemp(void);
+void catchsig(int);
+void done(void);
+void diffdir(char **);
+void diffreg(void);
+int max(int, int);
+int min(int, int);
extern char diffh[], diff[], pr[];
diff --git a/usr.bin/diff/diffdir.c b/usr.bin/diff/diffdir.c
index ae99429ac3a..d929f7fa500 100644
--- a/usr.bin/diff/diffdir.c
+++ b/usr.bin/diff/diffdir.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: diffdir.c,v 1.2 2003/06/25 01:23:38 deraadt Exp $ */
+/* $OpenBSD: diffdir.c,v 1.3 2003/06/25 03:02:33 tedu Exp $ */
/*
* Copyright (C) Caldera International Inc. 2001-2002.
@@ -34,9 +34,20 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-static char *sccsid = "@(#)diffdir.c 4.12 (Berkeley) 4/30/89";
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
#include "diff.h"
+
+#if 0
+static const char sccsid[] = "@(#)diffdir.c 4.12 (Berkeley) 4/30/89";
+#endif
+
/*
* diff - directory comparison
*/
@@ -48,24 +59,35 @@ static char *sccsid = "@(#)diffdir.c 4.12 (Berkeley) 4/30/89";
#define DIRECT 8 /* Directory */
struct dir {
- u_long d_ino;
- short d_reclen;
- short d_namlen;
- char *d_entry;
+ u_long d_ino;
+ short d_reclen;
+ short d_namlen;
+ char *d_entry;
};
-struct dir *setupdir();
-int header;
-static int dirstatus; /* exit status from diffdir */
-extern int status;
-char title[2*BUFSIZ], *etitle;
+int header;
+static int dirstatus; /* exit status from diffdir */
+extern int status;
+char title[2 * BUFSIZ];
+char *etitle;
+char *prargs[] = {"pr", "-h", 0, "-f", 0, 0};
-diffdir(argv)
- char **argv;
+
+static struct dir *setupdir(char *);
+static int ascii(int);
+static void compare(struct dir *);
+static void calldiff(char *);
+static void setfile(char **fpp, char **epp, char *file);
+static int useless(char *);
+static void only(struct dir * dp, int which);
+static void scanpr(struct dir *, int, char *, char *, char *, char *, char *);
+
+void
+diffdir(char **argv)
{
- register struct dir *d1, *d2;
+ struct dir *d1, *d2;
struct dir *dir1, *dir2;
- register int i;
+ int i;
int cmp;
if (opt == D_IFDEF) {
@@ -75,23 +97,22 @@ diffdir(argv)
if (opt == D_EDIT && (sflag || lflag))
fprintf(stderr,
"diff: warning: shouldn't give -s or -l with -e\n");
- title[0] = 0;
- strcpy(title, "diff ");
- for (i = 1; diffargv[i+2]; i++) {
+ strlcpy(title, "diff ", sizeof title);
+ for (i = 1; diffargv[i + 2]; i++) {
if (!strcmp(diffargv[i], "-"))
continue; /* was -S, dont look silly */
- strcat(title, diffargv[i]);
- strcat(title, " ");
+ strlcat(title, diffargv[i], sizeof title);
+ strlcat(title, " ", sizeof title);
}
- for (etitle = title; *etitle; etitle++)
- ;
+ for (etitle = title; *etitle; etitle++);
setfile(&file1, &efile1, file1);
setfile(&file2, &efile2, file2);
argv[0] = file1;
argv[1] = file2;
dir1 = setupdir(file1);
dir2 = setupdir(file2);
- d1 = dir1; d2 = dir2;
+ d1 = dir1;
+ d2 = dir2;
while (d1->d_entry != 0 || d2->d_entry != 0) {
if (d1->d_entry && useless(d1->d_entry)) {
d1++;
@@ -140,7 +161,7 @@ diffdir(argv)
if (rflag) {
if (header && lflag)
printf("\f");
- for (d1 = dir1; d1->d_entry; d1++) {
+ for (d1 = dir1; d1->d_entry; d1++) {
if ((d1->d_flags & DIRECT) == 0)
continue;
strcpy(efile1, d1->d_entry);
@@ -151,17 +172,12 @@ diffdir(argv)
status = dirstatus;
}
-setfile(fpp, epp, file)
- char **fpp, **epp;
- char *file;
+void
+setfile(char **fpp, char **epp, char *file)
{
- register char *cp;
+ char *cp;
- *fpp = malloc(BUFSIZ);
- if (*fpp == 0) {
- fprintf(stderr, "diff: ran out of memory\n");
- exit(1);
- }
+ *fpp = talloc(BUFSIZ);
strcpy(*fpp, file);
for (cp = *fpp; *cp; cp++)
continue;
@@ -169,10 +185,9 @@ setfile(fpp, epp, file)
*epp = cp;
}
-scanpr(dp, test, title, file1, efile1, file2, efile2)
- register struct dir *dp;
- int test;
- char *title, *file1, *efile1, *file2, *efile2;
+static void
+scanpr(struct dir * dp, int test, char *title, char *file1, char *efile1,
+ char *file2, char *efile2)
{
int titled = 0;
@@ -194,26 +209,23 @@ scanpr(dp, test, title, file1, efile1, file2, efile2)
}
}
-only(dp, which)
- struct dir *dp;
- int which;
+void
+only(struct dir * dp, int which)
{
char *file = which == 1 ? file1 : file2;
char *efile = which == 1 ? efile1 : efile2;
- printf("Only in %.*s: %s\n", efile - file - 1, file, dp->d_entry);
-
+ printf("Only in %.*s: %s\n", (int)(efile - file - 1), file, dp->d_entry);
}
-int entcmp();
+int entcmp();
struct dir *
-setupdir(cp)
- char *cp;
+setupdir(char *cp)
{
- register struct dir *dp, *ep;
- register struct direct *rp;
- register int nitems, n;
+ struct dir *dp, *ep;
+ struct direct *rp;
+ int nitems;
DIR *dirp;
dirp = opendir(cp);
@@ -223,51 +235,42 @@ setupdir(cp)
done();
}
nitems = 0;
- dp = (struct dir *)malloc(sizeof (struct dir));
- if (dp == 0) {
- fprintf(stderr, "diff: ran out of memory\n");
- done();
- }
- while (rp = readdir(dirp)) {
+ dp = talloc(sizeof(struct dir));
+ while ((rp = readdir(dirp))) {
ep = &dp[nitems++];
ep->d_reclen = rp->d_reclen;
ep->d_namlen = rp->d_namlen;
ep->d_entry = 0;
ep->d_flags = 0;
if (ep->d_namlen > 0) {
- ep->d_entry = malloc(ep->d_namlen + 1);
- if (ep->d_entry == 0) {
- fprintf(stderr, "diff: out of memory\n");
- done();
- }
+ ep->d_entry = talloc(ep->d_namlen + 1);
strcpy(ep->d_entry, rp->d_name);
}
- dp = (struct dir *)realloc((char *)dp,
- (nitems + 1) * sizeof (struct dir));
+ dp = realloc((char *) dp,
+ (nitems + 1) * sizeof(struct dir));
if (dp == 0) {
fprintf(stderr, "diff: ran out of memory\n");
done();
}
}
- dp[nitems].d_entry = 0; /* delimiter */
+ dp[nitems].d_entry = 0; /* delimiter */
closedir(dirp);
- qsort(dp, nitems, sizeof (struct dir), entcmp);
+ qsort(dp, nitems, sizeof(struct dir), entcmp);
return (dp);
}
-entcmp(d1, d2)
- struct dir *d1, *d2;
+int
+entcmp(struct dir * d1, struct dir * d2)
{
return (strcmp(d1->d_entry, d2->d_entry));
}
-compare(dp)
- register struct dir *dp;
+static void
+compare(struct dir * dp)
{
- register int i, j;
+ int i, j;
int f1, f2, fmt1, fmt2;
struct stat stb1, stb2;
- int flag = 0;
char buf1[BUFSIZ], buf2[BUFSIZ];
strcpy(efile1, dp->d_entry);
@@ -283,7 +286,8 @@ compare(dp)
close(f1);
return;
}
- fstat(f1, &stb1); fstat(f2, &stb2);
+ fstat(f1, &stb1);
+ fstat(f2, &stb2);
fmt1 = stb1.st_mode & S_IFMT;
fmt2 = stb2.st_mode & S_IFMT;
if (fmt1 != S_IFREG || fmt2 != S_IFREG) {
@@ -332,7 +336,8 @@ notsame:
file1, file2);
goto closem;
}
- close(f1); close(f2);
+ close(f1);
+ close(f2);
anychange = 1;
if (lflag)
calldiff(title);
@@ -349,20 +354,19 @@ notsame:
}
return;
closem:
- close(f1); close(f2);
+ close(f1);
+ close(f2);
}
-char *prargs[] = { "pr", "-h", 0, "-f", 0, 0 };
-
-calldiff(wantpr)
- char *wantpr;
+static void
+calldiff(char *wantpr)
{
int pid, lstatus, lstatus2, pv[2];
prargs[2] = wantpr;
fflush(stdout);
if (wantpr) {
- (void)sprintf(etitle, "%s %s", file1, file2);
+ sprintf(etitle, "%s %s", file1, file2);
pipe(pv);
pid = fork();
if (pid == -1) {
@@ -374,7 +378,7 @@ calldiff(wantpr)
dup(pv[0]);
close(pv[0]);
close(pv[1]);
- execv(pr+4, prargs);
+ execv(pr + 4, prargs);
execv(pr, prargs);
perror(pr);
done();
@@ -392,7 +396,7 @@ calldiff(wantpr)
close(pv[0]);
close(pv[1]);
}
- execv(diff+4, diffargv);
+ execv(diff + 4, diffargv);
execv(diff, diffargv);
perror(diff);
done();
@@ -405,30 +409,22 @@ calldiff(wantpr)
continue;
while (wait(&lstatus2) != -1)
continue;
-/*
- if ((lstatus >> 8) >= 2)
- done();
-*/
+ /*
+ if ((lstatus >> 8) >= 2)
+ done();
+ */
dirstatus |= lstatus >> 8;
}
-#include <a.out.h>
-
-ascii(f)
- int f;
+int
+ascii(int f)
{
char buf[BUFSIZ];
- register int cnt;
- register char *cp;
+ int cnt;
+ char *cp;
- lseek(f, (long)0, 0);
+ lseek(f, 0, 0);
cnt = read(f, buf, BUFSIZ);
- if (cnt >= sizeof (struct exec)) {
- struct exec hdr;
- hdr = *(struct exec *)buf;
- if (!N_BADMAG(hdr))
- return (0);
- }
cp = buf;
while (--cnt >= 0)
if (*cp++ & 0200)
@@ -439,10 +435,9 @@ ascii(f)
/*
* THIS IS CRUDE.
*/
-useless(cp)
-register char *cp;
+int
+useless(char *cp)
{
-
if (cp[0] == '.') {
if (cp[1] == '\0')
return (1); /* directory "." */
diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
index 44a5ffb76d5..e5adb43df24 100644
--- a/usr.bin/diff/diffreg.c
+++ b/usr.bin/diff/diffreg.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: diffreg.c,v 1.2 2003/06/25 01:23:38 deraadt Exp $ */
+/* $OpenBSD: diffreg.c,v 1.3 2003/06/25 03:02:33 tedu Exp $ */
/*
* Copyright (C) Caldera International Inc. 2001-2002.
@@ -34,10 +34,20 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-static char sccsid[] = "@(#)diffreg.c 4.21 4/6/90";
+#include <sys/types.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
#include "diff.h"
#include "pathnames.h"
+
+#if 0
+static char const sccsid[] = "@(#)diffreg.c 4.21 4/6/90";
+#endif
+
/*
* diff - compare two files.
*/
@@ -57,7 +67,7 @@ static char sccsid[] = "@(#)diffreg.c 4.21 4/6/90";
* on the hash (called ``value''). In particular, this
* collects the equivalence classes in file1 together.
* Subroutine equiv replaces the value of each line in
- * file0 by the index of the first element of its
+ * file0 by the index of the first element of its
* matching equivalence in (the reordered) file1.
* To save space equiv squeezes file1 into a single
* array member in which the equivalence classes
@@ -72,15 +82,15 @@ static char sccsid[] = "@(#)diffreg.c 4.21 4/6/90";
* of "k-candidates". At step i a k-candidate is a matched
* pair of lines x,y (x in file0 y in file1) such that
* there is a common subsequence of length k
- * between the first i lines of file0 and the first y
+ * between the first i lines of file0 and the first y
* lines of file1, but there is no such subsequence for
* any smaller y. x is the earliest possible mate to y
* that occurs in such a subsequence.
*
* Whenever any of the members of the equivalence class of
- * lines in file1 matable to a line in file0 has serial number
- * less than the y of some k-candidate, that k-candidate
- * with the smallest such y is replaced. The new
+ * lines in file1 matable to a line in file0 has serial number
+ * less than the y of some k-candidate, that k-candidate
+ * with the smallest such y is replaced. The new
* k-candidate is chained (via pred) to the current
* k-1 candidate so that the actual subsequence can
* be recovered. When a member has serial number greater
@@ -102,82 +112,121 @@ static char sccsid[] = "@(#)diffreg.c 4.21 4/6/90";
* The core requirements for problems larger than somewhat
* are (in words) 2*length(file0) + length(file1) +
* 3*(number of k-candidates installed), typically about
- * 6n words for files of length n.
+ * 6n words for files of length n.
*/
#define prints(s) fputs(s,stdout)
-FILE *input[2];
-FILE *fopen();
+FILE *input[2];
+FILE *fopen();
struct cand {
- int x;
- int y;
- int pred;
+ int x;
+ int y;
+ int pred;
} cand;
+
struct line {
- int serial;
- int value;
+ int serial;
+ int value;
} *file[2], line;
-int len[2];
-struct line *sfile[2]; /* shortened by pruning common prefix and suffix */
-int slen[2];
-int pref, suff; /* length of prefix and suffix */
-int *class; /* will be overlaid on file[0] */
-int *member; /* will be overlaid on file[1] */
-int *klist; /* will be overlaid on file[0] after class */
-struct cand *clist; /* merely a free storage pot for candidates */
-int clen = 0;
-int *J; /* will be overlaid on class */
-long *ixold; /* will be overlaid on klist */
-long *ixnew; /* will be overlaid on file[1] */
-char *chrtran; /* translation table for case-folding */
-
-/* chrtran points to one of 2 translation tables:
- * cup2low if folding upper to lower case
- * clow2low if not folding case
+
+int len[2];
+struct line *sfile[2]; /* shortened by pruning common prefix and
+ * suffix */
+int slen[2];
+int pref, suff; /* length of prefix and suffix */
+int *class; /* will be overlaid on file[0] */
+int *member; /* will be overlaid on file[1] */
+int *klist; /* will be overlaid on file[0] after class */
+struct cand *clist; /* merely a free storage pot for candidates */
+int clen = 0;
+int *J; /* will be overlaid on class */
+long *ixold; /* will be overlaid on klist */
+long *ixnew; /* will be overlaid on file[1] */
+char *chrtran; /* translation table for case-folding */
+
+static void fetch(long *, int, int, FILE *, char *, int);
+static void output(void);
+static void check(void);
+static void range(int, int, char *);
+static void dump_context_vec(void);
+static void prepare(int, FILE *);
+static void prune(void);
+static void equiv(struct line *, int, struct line *, int, int *);
+static void unravel(int);
+static void unsort(struct line *, int, int *);
+static void change(int, int, int, int);
+static void sort(struct line *, int);
+static int newcand(int, int, int);
+static int search(int *, int, int);
+static int skipline(int);
+static int asciifile(FILE *);
+static int stone(int *, int, int *, int *);
+static int readhash(FILE *);
+
+/*
+ * chrtran points to one of 2 translation tables: cup2low if folding upper to
+ * lower case clow2low if not folding case
*/
-char clow2low[256] = {
-0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
-0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
-0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
-0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
-0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
-0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
-0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
-0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
-0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
-0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
-0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
-0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
-0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
-0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
+char clow2low[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
+ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
+ 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
+ 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41,
+ 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c,
+ 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62,
+ 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+ 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
+ 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
+ 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
+ 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4,
+ 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba,
+ 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
+ 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
+ 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
+ 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1,
+ 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc,
+ 0xfd, 0xfe, 0xff
};
-char cup2low[256] = {
-0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
-0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
-0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
-0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
-0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
-0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
-0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
-0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
-0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
-0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
-0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
-0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
-0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
-0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
+char cup2low[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
+ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
+ 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
+ 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x60, 0x61,
+ 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c,
+ 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x60, 0x61, 0x62,
+ 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+ 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
+ 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
+ 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
+ 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4,
+ 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba,
+ 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
+ 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
+ 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
+ 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1,
+ 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc,
+ 0xfd, 0xfe, 0xff
};
-diffreg()
+void
+diffreg(void)
{
- register int i, j;
+ int i, j;
FILE *f1, *f2;
char buf1[BUFSIZ], buf2[BUFSIZ];
@@ -188,7 +237,7 @@ diffreg()
perror(diffh);
done();
}
- chrtran = (iflag? cup2low : clow2low);
+ chrtran = (iflag ? cup2low : clow2low);
if ((stb1.st_mode & S_IFMT) == S_IFDIR) {
file1 = splice(file1, file2);
if (stat(file1, &stb1) < 0) {
@@ -243,7 +292,7 @@ diffreg()
if (i == 0 && j == 0) {
fclose(f1);
fclose(f2);
- status = 0; /* files don't differ */
+ status = 0; /* files don't differ */
goto same;
}
for (j = 0; j < i; j++)
@@ -266,30 +315,30 @@ notsame:
fclose(f1);
fclose(f2);
prune();
- sort(sfile[0],slen[0]);
- sort(sfile[1],slen[1]);
+ sort(sfile[0], slen[0]);
+ sort(sfile[1], slen[1]);
member = (int *)file[1];
equiv(sfile[0], slen[0], sfile[1], slen[1], member);
- member = (int *)ralloc((char *)member,(slen[1]+2)*sizeof(int));
+ member = ralloc((char *) member, (slen[1] + 2) * sizeof(int));
- class = (int *)file[0];
+ class = (int *) file[0];
unsort(sfile[0], slen[0], class);
- class = (int *)ralloc((char *)class,(slen[0]+2)*sizeof(int));
+ class = ralloc((char *) class, (slen[0] + 2) * sizeof(int));
- klist = (int *)talloc((slen[0]+2)*sizeof(int));
- clist = (struct cand *)talloc(sizeof(cand));
+ klist = talloc((slen[0] + 2) * sizeof(int));
+ clist = talloc(sizeof(cand));
i = stone(class, slen[0], member, klist);
- free((char *)member);
- free((char *)class);
+ free(member);
+ free(class);
- J = (int *)talloc((len[0]+2)*sizeof(int));
+ J = talloc((len[0] + 2) * sizeof(int));
unravel(klist[i]);
- free((char *)clist);
- free((char *)klist);
+ free(clist);
+ free(klist);
- ixold = (long *)talloc((len[0]+2)*sizeof(long));
- ixnew = (long *)talloc((len[1]+2)*sizeof(long));
+ ixold = talloc((len[0] + 2) * sizeof(long));
+ ixnew = talloc((len[1] + 2) * sizeof(long));
check();
output();
status = anychange;
@@ -302,24 +351,23 @@ same:
char *tempfile = _PATH_TMP;
char *
-copytemp()
+copytemp(void)
{
char buf[BUFSIZ];
- register int i, f;
-
- signal(SIGHUP,done);
- signal(SIGINT,done);
- signal(SIGPIPE,done);
- signal(SIGTERM,done);
- mktemp(tempfile);
- f = creat(tempfile,0600);
+ int i, f;
+
+ signal(SIGHUP, catchsig);
+ signal(SIGINT, catchsig);
+ signal(SIGPIPE, catchsig);
+ signal(SIGTERM, catchsig);
+ f = mkstemp(tempfile);
if (f < 0) {
fprintf(stderr, "diff: ");
perror(tempfile);
done();
}
- while ((i = read(0,buf,BUFSIZ)) > 0)
- if (write(f,buf,i) != i) {
+ while ((i = read(0, buf, BUFSIZ)) > 0)
+ if (write(f, buf, i) != i) {
fprintf(stderr, "diff: ");
perror(tempfile);
done();
@@ -329,8 +377,7 @@ copytemp()
}
char *
-splice(dir, file)
- char *dir, *file;
+splice(char *dir, char *file)
{
char *tail;
char buf[BUFSIZ];
@@ -344,65 +391,64 @@ splice(dir, file)
tail = file;
else
tail++;
- (void)sprintf(buf, "%s/%s", dir, tail);
- return (savestr(buf));
+ snprintf(buf, sizeof buf, "%s/%s", dir, tail);
+ return (strdup(buf));
}
-prepare(i, fd)
- int i;
- FILE *fd;
+static void
+prepare(int i, FILE * fd)
{
- register struct line *p;
- register j,h;
+ struct line *p;
+ int j, h;
- fseek(fd, (long)0, 0);
- p = (struct line *)talloc(3*sizeof(line));
- for(j=0; h=readhash(fd);) {
- p = (struct line *)ralloc((char *)p,(++j+3)*sizeof(line));
+ fseek(fd, 0, 0);
+ p = talloc(3 * sizeof(line));
+ for (j = 0; (h = readhash(fd));) {
+ p = (struct line *) ralloc((char *) p, (++j + 3) * sizeof(line));
p[j].value = h;
}
len[i] = j;
file[i] = p;
}
-prune()
+static void
+prune(void)
{
- register i,j;
- for(pref=0;pref<len[0]&&pref<len[1]&&
- file[0][pref+1].value==file[1][pref+1].value;
- pref++ ) ;
- for(suff=0;suff<len[0]-pref&&suff<len[1]-pref&&
- file[0][len[0]-suff].value==file[1][len[1]-suff].value;
- suff++) ;
- for(j=0;j<2;j++) {
- sfile[j] = file[j]+pref;
- slen[j] = len[j]-pref-suff;
- for(i=0;i<=slen[j];i++)
+ int i, j;
+ for (pref = 0; pref < len[0] && pref < len[1] &&
+ file[0][pref + 1].value == file[1][pref + 1].value;
+ pref++);
+ for (suff = 0; suff < len[0] - pref && suff < len[1] - pref &&
+ file[0][len[0] - suff].value == file[1][len[1] - suff].value;
+ suff++);
+ for (j = 0; j < 2; j++) {
+ sfile[j] = file[j] + pref;
+ slen[j] = len[j] - pref - suff;
+ for (i = 0; i <= slen[j]; i++)
sfile[j][i].serial = i;
}
}
-equiv(a,n,b,m,c)
-struct line *a, *b;
-int *c;
+static void
+equiv(struct line * a, int n, struct line * b, int m, int *c)
{
- register int i, j;
+ int i, j;
i = j = 1;
- while(i<=n && j<=m) {
- if(a[i].value <b[j].value)
+ while (i <= n && j <= m) {
+ if (a[i].value < b[j].value)
a[i++].value = 0;
- else if(a[i].value == b[j].value)
+ else if (a[i].value == b[j].value)
a[i++].value = j;
else
j++;
}
- while(i <= n)
+ while (i <= n)
a[i++].value = 0;
- b[m+1].value = 0;
+ b[m + 1].value = 0;
j = 0;
- while(++j <= m) {
+ while (++j <= m) {
c[j] = -b[j].serial;
- while(b[j+1].value == b[j].value) {
+ while (b[j + 1].value == b[j].value) {
j++;
c[j] = b[j].serial;
}
@@ -410,111 +456,114 @@ int *c;
c[j] = -1;
}
-stone(a,n,b,c)
-int *a;
-int *b;
-register int *c;
+static int
+stone(int *a, int n, int *b, int *c)
{
- register int i, k,y;
+ int i, k, y;
int j, l;
int oldc, tc;
int oldl;
k = 0;
- c[0] = newcand(0,0,0);
- for(i=1; i<=n; i++) {
+ c[0] = newcand(0, 0, 0);
+ for (i = 1; i <= n; i++) {
j = a[i];
- if(j==0)
+ if (j == 0)
continue;
y = -b[j];
oldl = 0;
oldc = c[0];
do {
- if(y <= clist[oldc].y)
+ if (y <= clist[oldc].y)
continue;
l = search(c, k, y);
- if(l!=oldl+1)
- oldc = c[l-1];
- if(l<=k) {
- if(clist[c[l]].y <= y)
+ if (l != oldl + 1)
+ oldc = c[l - 1];
+ if (l <= k) {
+ if (clist[c[l]].y <= y)
continue;
tc = c[l];
- c[l] = newcand(i,y,oldc);
+ c[l] = newcand(i, y, oldc);
oldc = tc;
oldl = l;
} else {
- c[l] = newcand(i,y,oldc);
+ c[l] = newcand(i, y, oldc);
k++;
break;
}
- } while((y=b[++j]) > 0);
+ } while ((y = b[++j]) > 0);
}
- return(k);
+ return (k);
}
-newcand(x,y,pred)
+static int
+newcand(int x, int y, int pred)
{
- register struct cand *q;
- clist = (struct cand *)ralloc((char *)clist,++clen*sizeof(cand));
- q = clist + clen -1;
+ struct cand *q;
+
+ clist = (struct cand *) ralloc((char *) clist, ++clen * sizeof(cand));
+ q = clist + clen - 1;
q->x = x;
q->y = y;
q->pred = pred;
- return(clen-1);
+ return (clen - 1);
}
-search(c, k, y)
-int *c;
+static int
+search(int *c, int k, int y)
{
- register int i, j, l;
+ int i, j, l;
int t;
- if(clist[c[k]].y<y) /*quick look for typical case*/
- return(k+1);
+ if (clist[c[k]].y < y) /* quick look for typical case */
+ return (k + 1);
i = 0;
- j = k+1;
+ j = k + 1;
while (1) {
l = i + j;
- if ((l >>= 1) <= i)
+ if ((l >>= 1) <= i)
break;
t = clist[c[l]].y;
- if(t > y)
+ if (t > y)
j = l;
- else if(t < y)
+ else if (t < y)
i = l;
else
- return(l);
+ return (l);
}
- return(l+1);
+ return (l + 1);
}
-unravel(p)
+static void
+unravel(int p)
{
- register int i;
- register struct cand *q;
- for(i=0; i<=len[0]; i++)
- J[i] = i<=pref ? i:
- i>len[0]-suff ? i+len[1]-len[0]:
- 0;
- for(q=clist+p;q->y!=0;q=clist+q->pred)
- J[q->x+pref] = q->y+pref;
+ int i;
+ struct cand *q;
+ for (i = 0; i <= len[0]; i++)
+ J[i] = i <= pref ? i :
+ i > len[0] - suff ? i + len[1] - len[0] :
+ 0;
+ for (q = clist + p; q->y != 0; q = clist + q->pred)
+ J[q->x + pref] = q->y + pref;
}
-/* check does double duty:
-1. ferret out any fortuitous correspondences due
-to confounding by hashing (which result in "jackpot")
-2. collect random access indexes to the two files */
+/*
+ * check does double duty: 1. ferret out any fortuitous correspondences due
+ * to confounding by hashing (which result in "jackpot") 2. collect random
+ * access indexes to the two files
+ */
-check()
+static void
+check(void)
{
- register int i, j;
+ int i, j;
int jackpot;
long ctold, ctnew;
- register int c,d;
+ int c, d;
- if ((input[0] = fopen(file1,"r")) == NULL) {
+ if ((input[0] = fopen(file1, "r")) == NULL) {
perror(file1);
done();
}
- if ((input[1] = fopen(file2,"r")) == NULL) {
+ if ((input[1] = fopen(file2, "r")) == NULL) {
perror(file2);
done();
}
@@ -522,68 +571,68 @@ check()
ixold[0] = ixnew[0] = 0;
jackpot = 0;
ctold = ctnew = 0;
- for(i=1;i<=len[0];i++) {
- if(J[i]==0) {
+ for (i = 1; i <= len[0]; i++) {
+ if (J[i] == 0) {
ixold[i] = ctold += skipline(0);
continue;
}
- while(j<J[i]) {
+ while (j < J[i]) {
ixnew[j] = ctnew += skipline(1);
j++;
}
- if(bflag || wflag || iflag) {
- for(;;) {
+ if (bflag || wflag || iflag) {
+ for (;;) {
c = getc(input[0]);
d = getc(input[1]);
ctold++;
ctnew++;
- if(bflag && isspace(c) && isspace(d)) {
+ if (bflag && isspace(c) && isspace(d)) {
do {
- if(c=='\n')
+ if (c == '\n')
break;
ctold++;
- } while(isspace(c=getc(input[0])));
+ } while (isspace(c = getc(input[0])));
do {
- if(d=='\n')
+ if (d == '\n')
break;
ctnew++;
- } while(isspace(d=getc(input[1])));
- } else if ( wflag ) {
- while( isspace(c) && c!='\n' ) {
- c=getc(input[0]);
+ } while (isspace(d = getc(input[1])));
+ } else if (wflag) {
+ while (isspace(c) && c != '\n') {
+ c = getc(input[0]);
ctold++;
}
- while( isspace(d) && d!='\n' ) {
- d=getc(input[1]);
+ while (isspace(d) && d != '\n') {
+ d = getc(input[1]);
ctnew++;
}
}
- if(chrtran[c] != chrtran[d]) {
+ if (chrtran[c] != chrtran[d]) {
jackpot++;
J[i] = 0;
- if(c!='\n')
+ if (c != '\n')
ctold += skipline(0);
- if(d!='\n')
+ if (d != '\n')
ctnew += skipline(1);
break;
}
- if(c=='\n')
+ if (c == '\n')
break;
}
} else {
- for(;;) {
+ for (;;) {
ctold++;
ctnew++;
- if((c=getc(input[0])) != (d=getc(input[1]))) {
+ if ((c = getc(input[0])) != (d = getc(input[1]))) {
/* jackpot++; */
J[i] = 0;
- if(c!='\n')
+ if (c != '\n')
ctold += skipline(0);
- if(d!='\n')
+ if (d != '\n')
ctnew += skipline(1);
break;
}
- if(c=='\n')
+ if (c == '\n')
break;
}
}
@@ -591,40 +640,40 @@ check()
ixnew[j] = ctnew;
j++;
}
- for(;j<=len[1];j++) {
+ for (; j <= len[1]; j++) {
ixnew[j] = ctnew += skipline(1);
}
fclose(input[0]);
fclose(input[1]);
-/*
- if(jackpot)
- fprintf(stderr, "jackpot\n");
-*/
+ /*
+ if(jackpot)
+ fprintf(stderr, "jackpot\n");
+ */
}
-sort(a,n) /*shellsort CACM #201*/
-struct line *a;
-{
+static void
+sort(struct line * a, int n)
+{ /* shellsort CACM #201 */
struct line w;
- register int j,m;
+ int j, m = 0; /* gcc */
struct line *ai;
- register struct line *aim;
+ struct line *aim;
int k;
if (n == 0)
return;
- for(j=1;j<=n;j*= 2)
- m = 2*j - 1;
- for(m/=2;m!=0;m/=2) {
- k = n-m;
- for(j=1;j<=k;j++) {
- for(ai = &a[j]; ai > a; ai -= m) {
+ for (j = 1; j <= n; j *= 2)
+ m = 2 * j - 1;
+ for (m /= 2; m != 0; m /= 2) {
+ k = n - m;
+ for (j = 1; j <= k; j++) {
+ for (ai = &a[j]; ai > a; ai -= m) {
aim = &ai[m];
- if(aim < ai)
- break; /*wraparound*/
- if(aim->value > ai[0].value ||
- aim->value == ai[0].value &&
- aim->serial > ai[0].serial)
+ if (aim < ai)
+ break; /* wraparound */
+ if (aim->value > ai[0].value ||
+ (aim->value == ai[0].value &&
+ aim->serial > ai[0].serial))
break;
w.value = ai[0].value;
ai[0].value = aim->value;
@@ -637,60 +686,70 @@ struct line *a;
}
}
-unsort(f, l, b)
-struct line *f;
-int *b;
+static void
+unsort(struct line * f, int l, int *b)
{
- register int *a;
- register int i;
- a = (int *)talloc((l+1)*sizeof(int));
- for(i=1;i<=l;i++)
+ int *a;
+ int i;
+
+ a = talloc((l + 1) * sizeof(int));
+ for (i = 1; i <= l; i++)
a[f[i].serial] = f[i].value;
- for(i=1;i<=l;i++)
+ for (i = 1; i <= l; i++)
b[i] = a[i];
- free((char *)a);
+ free(a);
}
-skipline(f)
+static int
+skipline(int f)
{
- register i, c;
+ int i, c;
- for(i=1;(c=getc(input[f]))!='\n';i++)
+ for (i = 1; (c = getc(input[f])) != '\n'; i++)
if (c < 0)
- return(i);
- return(i);
+ return (i);
+ return (i);
}
-output()
+static void
+output(void)
{
int m;
- register int i0, i1, j1;
+ int i0, i1, j1;
int j0;
- input[0] = fopen(file1,"r");
- input[1] = fopen(file2,"r");
+ input[0] = fopen(file1, "r");
+ input[1] = fopen(file2, "r");
m = len[0];
J[0] = 0;
- J[m+1] = len[1]+1;
- if(opt!=D_EDIT) for(i0=1;i0<=m;i0=i1+1) {
- while(i0<=m&&J[i0]==J[i0-1]+1) i0++;
- j0 = J[i0-1]+1;
- i1 = i0-1;
- while(i1<m&&J[i1+1]==0) i1++;
- j1 = J[i1+1]-1;
- J[i1] = j1;
- change(i0,i1,j0,j1);
- } else for(i0=m;i0>=1;i0=i1-1) {
- while(i0>=1&&J[i0]==J[i0+1]-1&&J[i0]!=0) i0--;
- j0 = J[i0+1]-1;
- i1 = i0+1;
- while(i1>1&&J[i1-1]==0) i1--;
- j1 = J[i1-1]+1;
- J[i1] = j1;
- change(i1,i0,j1,j0);
+ J[m + 1] = len[1] + 1;
+ if (opt != D_EDIT) {
+ for (i0 = 1; i0 <= m; i0 = i1 + 1) {
+ while (i0 <= m && J[i0] == J[i0 - 1] + 1)
+ i0++;
+ j0 = J[i0 - 1] + 1;
+ i1 = i0 - 1;
+ while (i1 < m && J[i1 + 1] == 0)
+ i1++;
+ j1 = J[i1 + 1] - 1;
+ J[i1] = j1;
+ change(i0, i1, j0, j1);
+ }
+ } else {
+ for (i0 = m; i0 >= 1; i0 = i1 - 1) {
+ while (i0 >= 1 && J[i0] == J[i0 + 1] - 1 && J[i0] != 0)
+ i0--;
+ j0 = J[i0 + 1] - 1;
+ i1 = i0 + 1;
+ while (i1 > 1 && J[i1 - 1] == 0)
+ i1--;
+ j1 = J[i1 - 1] + 1;
+ J[i1] = j1;
+ change(i1, i0, j1, j0);
+ }
}
- if(m==0)
- change(1,0,1,len[1]);
- if (opt==D_IFDEF) {
+ if (m == 0)
+ change(1, 0, 1, len[1]);
+ if (opt == D_IFDEF) {
for (;;) {
#define c i0
c = getc(input[0]);
@@ -710,34 +769,33 @@ output()
* highly mneumonic field names)
*/
struct context_vec {
- int a; /* start line in old file */
- int b; /* end line in old file */
- int c; /* start line in new file */
- int d; /* end line in new file */
+ int a; /* start line in old file */
+ int b; /* end line in old file */
+ int c; /* start line in new file */
+ int d; /* end line in new file */
};
-struct context_vec *context_vec_start,
- *context_vec_end,
- *context_vec_ptr;
+struct context_vec *context_vec_start, *context_vec_end, *context_vec_ptr;
#define MAX_CONTEXT 128
-/* indicate that there is a difference between lines a and b of the from file
- to get to lines c to d of the to file.
- If a is greater then b then there are no lines in the from file involved
- and this means that there were lines appended (beginning at b).
- If c is greater than d then there are lines missing from the to file.
-*/
-change(a,b,c,d)
+/*
+ * indicate that there is a difference between lines a and b of the from file
+ * to get to lines c to d of the to file. If a is greater then b then there
+ * are no lines in the from file involved and this means that there were
+ * lines appended (beginning at b). If c is greater than d then there are
+ * lines missing from the to file.
+ */
+static void
+change(int a, int b, int c, int d)
{
- int lowa,upb,lowc,upd;
struct stat stbuf;
- if (opt != D_IFDEF && a>b && c>d)
+ if (opt != D_IFDEF && a > b && c > d)
return;
if (anychange == 0) {
anychange = 1;
- if(opt == D_CONTEXT) {
+ if (opt == D_CONTEXT) {
printf("*** %s ", file1);
stat(file1, &stbuf);
printf("%s--- %s ",
@@ -745,14 +803,13 @@ change(a,b,c,d)
stat(file2, &stbuf);
printf("%s", ctime(&stbuf.st_mtime));
- context_vec_start = (struct context_vec *)
- malloc(MAX_CONTEXT *
- sizeof(struct context_vec));
+ context_vec_start = talloc(MAX_CONTEXT *
+ sizeof(struct context_vec));
context_vec_end = context_vec_start + MAX_CONTEXT;
context_vec_ptr = context_vec_start - 1;
}
}
- if(opt == D_CONTEXT) {
+ if (opt == D_CONTEXT) {
/*
* if this new change is within 'context' lines of
* the previous change, just add it to the change
@@ -760,10 +817,10 @@ change(a,b,c,d)
* change is more than 'context' lines from the previous
* change, dump the record, reset it & add the new change.
*/
- if ( context_vec_ptr >= context_vec_end ||
- ( context_vec_ptr >= context_vec_start &&
- a > (context_vec_ptr->b + 2*context) &&
- c > (context_vec_ptr->d + 2*context) ) )
+ if (context_vec_ptr >= context_vec_end ||
+ (context_vec_ptr >= context_vec_start &&
+ a > (context_vec_ptr->b + 2 * context) &&
+ c > (context_vec_ptr->d + 2 * context)))
dump_context_vec();
context_vec_ptr++;
@@ -777,35 +834,35 @@ change(a,b,c,d)
case D_NORMAL:
case D_EDIT:
- range(a,b,",");
- putchar(a>b?'a':c>d?'d':'c');
- if(opt==D_NORMAL)
- range(c,d,",");
+ range(a, b, ",");
+ putchar(a > b ? 'a' : c > d ? 'd' : 'c');
+ if (opt == D_NORMAL)
+ range(c, d, ",");
putchar('\n');
break;
case D_REVERSE:
- putchar(a>b?'a':c>d?'d':'c');
- range(a,b," ");
+ putchar(a > b ? 'a' : c > d ? 'd' : 'c');
+ range(a, b, " ");
putchar('\n');
break;
- case D_NREVERSE:
- if (a>b)
- printf("a%d %d\n",b,d-c+1);
- else {
- printf("d%d %d\n",a,b-a+1);
- if (!(c>d))
- /* add changed lines */
- printf("a%d %d\n",b, d-c+1);
- }
- break;
+ case D_NREVERSE:
+ if (a > b)
+ printf("a%d %d\n", b, d - c + 1);
+ else {
+ printf("d%d %d\n", a, b - a + 1);
+ if (!(c > d))
+ /* add changed lines */
+ printf("a%d %d\n", b, d - c + 1);
+ }
+ break;
}
- if(opt == D_NORMAL || opt == D_IFDEF) {
- fetch(ixold,a,b,input[0],"< ", 1);
- if(a<=b&&c<=d && opt == D_NORMAL)
+ if (opt == D_NORMAL || opt == D_IFDEF) {
+ fetch(ixold, a, b, input[0], "< ", 1);
+ if (a <= b && c <= d && opt == D_NORMAL)
prints("---\n");
}
- fetch(ixnew,c,d,input[1],opt==D_NORMAL?"> ":"", 0);
- if ((opt ==D_EDIT || opt == D_REVERSE) && c<=d)
+ fetch(ixnew, c, d, input[1], opt == D_NORMAL ? "> " : "", 0);
+ if ((opt == D_EDIT || opt == D_REVERSE) && c <= d)
prints(".\n");
if (inifdef) {
fprintf(stdout, "#endif /* %s */\n", endifname);
@@ -813,34 +870,32 @@ change(a,b,c,d)
}
}
-range(a,b,separator)
-char *separator;
+static void
+range(int a, int b, char *separator)
{
- printf("%d", a>b?b:a);
- if(a<b) {
+ printf("%d", a > b ? b : a);
+ if (a < b) {
printf("%s%d", separator, b);
}
}
-fetch(f,a,b,lb,s,oldfile)
-long *f;
-FILE *lb;
-char *s;
+static void
+fetch(long *f, int a, int b, FILE * lb, char *s, int oldfile)
{
- register int i, j;
- register int c;
- register int col;
- register int nc;
- int oneflag = (*ifdef1!='\0') != (*ifdef2!='\0');
+ int i, j;
+ int c;
+ int col;
+ int nc;
+ int oneflag = (*ifdef1 != '\0') != (*ifdef2 != '\0');
/*
* When doing #ifdef's, copy down to current line
* if this is the first file, so that stuff makes it to output.
*/
- if (opt == D_IFDEF && oldfile){
+ if (opt == D_IFDEF && oldfile) {
long curpos = ftell(lb);
/* print through if append (a>b), else to (nb: 0 vs 1 orig) */
- nc = f[a>b? b : a-1 ] - curpos;
+ nc = f[a > b ? b : a - 1] - curpos;
for (i = 0; i < nc; i++)
putchar(getc(lb));
}
@@ -848,7 +903,7 @@ char *s;
return;
if (opt == D_IFDEF) {
if (inifdef)
- fprintf(stdout, "#else /* %s%s */\n", oneflag && oldfile==1 ? "!" : "", ifdef2);
+ fprintf(stdout, "#else /* %s%s */\n", oneflag && oldfile == 1 ? "!" : "", ifdef2);
else {
if (oneflag) {
/* There was only one ifdef given */
@@ -857,22 +912,20 @@ char *s;
fprintf(stdout, "#ifndef %s\n", endifname);
else
fprintf(stdout, "#ifdef %s\n", endifname);
- }
- else {
+ } else {
endifname = oldfile ? ifdef1 : ifdef2;
fprintf(stdout, "#ifdef %s\n", endifname);
}
}
- inifdef = 1+oldfile;
+ inifdef = 1 + oldfile;
}
-
- for(i=a;i<=b;i++) {
- fseek(lb,f[i-1],0);
- nc = f[i]-f[i-1];
+ for (i = a; i <= b; i++) {
+ fseek(lb, f[i - 1], 0);
+ nc = f[i] - f[i - 1];
if (opt != D_IFDEF)
prints(s);
col = 0;
- for(j=0;j<nc;j++) {
+ for (j = 0; j < nc; j++) {
c = getc(lb);
if (c == '\t' && tflag)
do
@@ -899,23 +952,23 @@ char *s;
/*
* hashing has the effect of
* arranging line in 7-bit bytes and then
- * summing 1-s complement in 16-bit hunks
+ * summing 1-s complement in 16-bit hunks
*/
-readhash(f)
-register FILE *f;
+static int
+readhash(FILE * f)
{
- register long sum;
- register unsigned shift;
- register t;
- register space;
+ long sum;
+ unsigned shift;
+ int t;
+ int space;
sum = 1;
space = 0;
- if(!bflag && !wflag) {
- if(iflag)
- for(shift=0;(t=getc(f))!='\n';shift+=7) {
- if(t==-1)
- return(0);
+ if (!bflag && !wflag) {
+ if (iflag)
+ for (shift = 0; (t = getc(f)) != '\n'; shift += 7) {
+ if (t == -1)
+ return (0);
sum += (long)chrtran[t] << (shift
#ifdef POW2
&= HALFLONG - 1);
@@ -924,9 +977,9 @@ register FILE *f;
#endif
}
else
- for(shift=0;(t=getc(f))!='\n';shift+=7) {
- if(t==-1)
- return(0);
+ for (shift = 0; (t = getc(f)) != '\n'; shift += 7) {
+ if (t == -1)
+ return (0);
sum += (long)t << (shift
#ifdef POW2
&= HALFLONG - 1);
@@ -935,16 +988,16 @@ register FILE *f;
#endif
}
} else {
- for(shift=0;;) {
- switch(t=getc(f)) {
+ for (shift = 0;;) {
+ switch (t = getc(f)) {
case -1:
- return(0);
+ return (0);
case '\t':
case ' ':
space++;
continue;
default:
- if(space && !wflag) {
+ if (space && !wflag) {
shift += 7;
space = 0;
}
@@ -963,26 +1016,18 @@ register FILE *f;
}
}
sum = low(sum) + high(sum);
- return((short)low(sum) + (short)high(sum));
+ return ((short) low(sum) + (short) high(sum));
}
-#include <a.out.h>
-
-asciifile(f)
- FILE *f;
+static int
+asciifile(FILE * f)
{
char buf[BUFSIZ];
- register int cnt;
- register char *cp;
+ int cnt;
+ char *cp;
- fseek(f, (long)0, 0);
+ fseek(f, 0, 0);
cnt = fread(buf, 1, BUFSIZ, f);
- if (cnt >= sizeof (struct exec)) {
- struct exec hdr;
- hdr = *(struct exec *)buf;
- if (!N_BADMAG(hdr))
- return (0);
- }
cp = buf;
while (--cnt >= 0)
if (*cp++ & 0200)
@@ -992,24 +1037,26 @@ asciifile(f)
/* dump accumulated "context" diff changes */
-dump_context_vec()
+static void
+dump_context_vec(void)
{
- register int a, b, c, d;
- register char ch;
- register struct context_vec *cvp = context_vec_start;
- register int lowa, upb, lowc, upd;
- register int do_output;
+ int a, b, c, d;
+ char ch;
+ struct context_vec *cvp = context_vec_start;
+ int lowa, upb, lowc, upd;
+ int do_output;
- if ( cvp > context_vec_ptr )
+ if (cvp > context_vec_ptr)
return;
+ b = d = 0; /* gcc */
lowa = max(1, cvp->a - context);
- upb = min(len[0], context_vec_ptr->b + context);
+ upb = min(len[0], context_vec_ptr->b + context);
lowc = max(1, cvp->c - context);
- upd = min(len[1], context_vec_ptr->d + context);
+ upd = min(len[1], context_vec_ptr->d + context);
printf("***************\n*** ");
- range(lowa,upb,",");
+ range(lowa, upb, ",");
printf(" ****\n");
/*
@@ -1018,16 +1065,18 @@ dump_context_vec()
* the "old" lines as context in the "new" list).
*/
do_output = 0;
- for ( ; cvp <= context_vec_ptr; cvp++)
+ for (; cvp <= context_vec_ptr; cvp++)
if (cvp->a <= cvp->b) {
cvp = context_vec_start;
do_output++;
break;
}
-
- if ( do_output ) {
+ if (do_output) {
while (cvp <= context_vec_ptr) {
- a = cvp->a; b = cvp->b; c = cvp->c; d = cvp->d;
+ a = cvp->a;
+ b = cvp->b;
+ c = cvp->c;
+ d = cvp->d;
if (a <= b && c <= d)
ch = 'c';
@@ -1035,20 +1084,19 @@ dump_context_vec()
ch = (a <= b) ? 'd' : 'a';
if (ch == 'a')
- fetch(ixold,lowa,b,input[0]," ");
+ fetch(ixold, lowa, b, input[0], " ", 0);
else {
- fetch(ixold,lowa,a-1,input[0]," ");
- fetch(ixold,a,b,input[0],ch == 'c' ? "! " : "- ");
+ fetch(ixold, lowa, a - 1, input[0], " ", 0);
+ fetch(ixold, a, b, input[0], ch == 'c' ? "! " : "- ", 0);
}
lowa = b + 1;
cvp++;
}
- fetch(ixold, b+1, upb, input[0], " ");
+ fetch(ixold, b + 1, upb, input[0], " ", 0);
}
-
/* output changes to the "new" file */
printf("--- ");
- range(lowc,upd,",");
+ range(lowc, upd, ",");
printf(" ----\n");
do_output = 0;
@@ -1058,10 +1106,12 @@ dump_context_vec()
do_output++;
break;
}
-
if (do_output) {
while (cvp <= context_vec_ptr) {
- a = cvp->a; b = cvp->b; c = cvp->c; d = cvp->d;
+ a = cvp->a;
+ b = cvp->b;
+ c = cvp->c;
+ d = cvp->d;
if (a <= b && c <= d)
ch = 'c';
@@ -1069,16 +1119,15 @@ dump_context_vec()
ch = (a <= b) ? 'd' : 'a';
if (ch == 'd')
- fetch(ixnew,lowc,d,input[1]," ");
+ fetch(ixnew, lowc, d, input[1], " ", 0);
else {
- fetch(ixnew,lowc,c-1,input[1]," ");
- fetch(ixnew,c,d,input[1],ch == 'c' ? "! " : "+ ");
+ fetch(ixnew, lowc, c - 1, input[1], " ", 0);
+ fetch(ixnew, c, d, input[1], ch == 'c' ? "! " : "+ ", 0);
}
lowc = d + 1;
cvp++;
}
- fetch(ixnew, d+1, upd, input[1], " ");
+ fetch(ixnew, d + 1, upd, input[1], " ", 0);
}
-
context_vec_ptr = context_vec_start - 1;
}
diff --git a/usr.bin/diff/pathnames.h b/usr.bin/diff/pathnames.h
index 97b9ae9717c..d7e48e8f673 100644
--- a/usr.bin/diff/pathnames.h
+++ b/usr.bin/diff/pathnames.h
@@ -1,3 +1,4 @@
+/* $OpenBSD: pathnames.h,v 1.2 2003/06/25 03:02:33 tedu Exp $ */
/*
* Copyright (c) 1989 The Regents of the University of California.
* All rights reserved.