1: static char sccsid[] = "@(#)diff.c 4.6 4/3/86";
2:
3: #include "diff.h"
4: /*
5: * diff - driver and subroutines
6: */
7:
8: char diff[] = DIFF;
9: char diffh[] = DIFFH;
10: char pr[] = PR;
11:
12: main(argc, argv)
13: int argc;
14: char **argv;
15: {
16: register char *argp;
17:
18: ifdef1 = "FILE1"; ifdef2 = "FILE2";
19: status = 2;
20: diffargv = argv;
21: argc--, argv++;
22: while (argc > 2 && argv[0][0] == '-') {
23: argp = &argv[0][1];
24: argv++, argc--;
25: while (*argp) switch(*argp++) {
26:
27: #ifdef notdef
28: case 'I':
29: opt = D_IFDEF;
30: wantelses = 0;
31: continue;
32: case 'E':
33: opt = D_IFDEF;
34: wantelses = 1;
35: continue;
36: case '1':
37: opt = D_IFDEF;
38: ifdef1 = argp;
39: *--argp = 0;
40: continue;
41: #endif
42: case 'D':
43: /* -Dfoo = -E -1 -2foo */
44: wantelses = 1;
45: ifdef1 = "";
46: /* fall through */
47: #ifdef notdef
48: case '2':
49: #endif
50: opt = D_IFDEF;
51: ifdef2 = argp;
52: *--argp = 0;
53: continue;
54: case 'e':
55: opt = D_EDIT;
56: continue;
57: case 'f':
58: opt = D_REVERSE;
59: continue;
60: case 'n':
61: opt = D_NREVERSE;
62: continue;
63: case 'b':
64: bflag = 1;
65: continue;
66: case 'w':
67: wflag = 1;
68: continue;
69: case 'i':
70: iflag = 1;
71: continue;
72: case 't':
73: tflag = 1;
74: continue;
75: case 'c':
76: opt = D_CONTEXT;
77: if (isdigit(*argp)) {
78: context = atoi(argp);
79: while (isdigit(*argp))
80: argp++;
81: if (*argp) {
82: fprintf(stderr,
83: "diff: -c: bad count\n");
84: done();
85: }
86: argp = "";
87: } else
88: context = 3;
89: continue;
90: case 'h':
91: hflag++;
92: continue;
93: case 'S':
94: if (*argp == 0) {
95: fprintf(stderr, "diff: use -Sstart\n");
96: done();
97: }
98: start = argp;
99: *--argp = 0; /* don't pass it on */
100: continue;
101: case 'r':
102: rflag++;
103: continue;
104: case 's':
105: sflag++;
106: continue;
107: case 'l':
108: lflag++;
109: continue;
110: default:
111: fprintf(stderr, "diff: -%s: unknown option\n",
112: --argp);
113: done();
114: }
115: }
116: if (argc != 2) {
117: fprintf(stderr, "diff: two filename arguments required\n");
118: done();
119: }
120: file1 = argv[0];
121: file2 = argv[1];
122: if (hflag && opt) {
123: fprintf(stderr,
124: "diff: -h doesn't support -e, -f, -n, -c, or -I\n");
125: done();
126: }
127: if (!strcmp(file1, "-"))
128: stb1.st_mode = S_IFREG;
129: else if (stat(file1, &stb1) < 0) {
130: fprintf(stderr, "diff: ");
131: perror(file1);
132: done();
133: }
134: if (!strcmp(file2, "-"))
135: stb2.st_mode = S_IFREG;
136: else if (stat(file2, &stb2) < 0) {
137: fprintf(stderr, "diff: ");
138: perror(file2);
139: done();
140: }
141: if ((stb1.st_mode & S_IFMT) == S_IFDIR &&
142: (stb2.st_mode & S_IFMT) == S_IFDIR) {
143: diffdir(argv);
144: } else
145: diffreg();
146: done();
147: }
148:
149: char *
150: savestr(cp)
151: register char *cp;
152: {
153: register char *dp = malloc(strlen(cp)+1);
154:
155: if (dp == 0) {
156: fprintf(stderr, "diff: ran out of memory\n");
157: done();
158: }
159: strcpy(dp, cp);
160: return (dp);
161: }
162:
163: min(a,b)
164: int a,b;
165: {
166:
167: return (a < b ? a : b);
168: }
169:
170: max(a,b)
171: int a,b;
172: {
173:
174: return (a > b ? a : b);
175: }
176:
177: done()
178: {
179: if (tempfile)
180: unlink(tempfile);
181: exit(status);
182: }
183:
184: char *
185: talloc(n)
186: {
187: register char *p;
188:
189: if ((p = malloc((unsigned)n)) != NULL)
190: return(p);
191: noroom();
192: }
193:
194: char *
195: ralloc(p,n)
196: char *p;
197: {
198: register char *q;
199: char *realloc();
200:
201: if ((q = realloc(p, (unsigned)n)) == NULL)
202: noroom();
203: return(q);
204: }
205:
206: noroom()
207: {
208: fprintf(stderr, "diff: files too big, try -h\n");
209: done();
210: }
Defined functions
done
defined in line
177; used 39 times
- in line 84,
96,
113-118(2),
125,
132,
139,
146,
157,
209
- in /usr/src/bin/diff/diff.h line
83
- in /usr/src/bin/diff/diffdir.c line
35,
181,
187,
199,
207,
327,
337,
343,
355
- in /usr/src/bin/diff/diffreg.c line
152,
160,
167-172(2),
178,
185,
191,
197,
225,
262,
271-274(4),
280,
286,
301,
476-480(2)
main
defined in line
12;
never used
max
defined in line
170; used 2 times
min
defined in line
163; used 2 times
Defined variables
diff
defined in line
8; used 3 times
diffh
defined in line
9; used 2 times
pr
defined in line
10; used 3 times
sccsid
defined in line
1;
never used