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