1: static char sccsid[] = "@(#)diff.c 4.1 10/9/80";
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: extern char _sobuf[];
12:
13: main(argc, argv)
14: int argc;
15: char **argv;
16: {
17: register char *argp;
18:
19: ifdef1 = "FILE1"; ifdef2 = "FILE2";
20: status = 2;
21: diffargv = argv;
22: setbuf(stdout, _sobuf);
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 'b':
63: bflag = 1;
64: continue;
65: case 'c':
66: opt = D_CONTEXT;
67: if (isdigit(*argp)) {
68: context = atoi(argp);
69: while (isdigit(*argp))
70: argp++;
71: if (*argp) {
72: fprintf(stderr,
73: "diff: -c: bad count\n");
74: done();
75: }
76: argp = "";
77: } else
78: context = 3;
79: continue;
80: case 'h':
81: hflag++;
82: continue;
83: case 'S':
84: if (*argp == 0) {
85: fprintf(stderr, "diff: use -Sstart\n");
86: done();
87: }
88: start = argp;
89: *--argp = 0; /* don't pass it on */
90: continue;
91: case 'r':
92: rflag++;
93: continue;
94: case 's':
95: sflag++;
96: continue;
97: case 'l':
98: lflag++;
99: continue;
100: default:
101: fprintf(stderr, "diff: -%s: unknown option\n",
102: --argp);
103: done();
104: }
105: }
106: if (argc != 2) {
107: fprintf(stderr, "diff: two filename arguments required\n");
108: done();
109: }
110: file1 = argv[0];
111: file2 = argv[1];
112: if (hflag && opt) {
113: fprintf(stderr,
114: "diff: -h doesn't support -e, -f, -c, or -I\n");
115: done();
116: }
117: if (!strcmp(file1, "-"))
118: stb1.st_mode = S_IFREG;
119: else if (stat(file1, &stb1) < 0) {
120: fprintf(stderr, "diff: ");
121: perror(file1);
122: done();
123: }
124: if (!strcmp(file2, "-"))
125: stb2.st_mode = S_IFREG;
126: else if (stat(file2, &stb2) < 0) {
127: fprintf(stderr, "diff: ");
128: perror(file2);
129: done();
130: }
131: if ((stb1.st_mode & S_IFMT) == S_IFDIR &&
132: (stb2.st_mode & S_IFMT) == S_IFDIR) {
133: diffdir(argv);
134: } else
135: diffreg();
136: done();
137: }
138:
139: char *
140: savestr(cp)
141: register char *cp;
142: {
143: register char *dp = malloc(strlen(cp)+1);
144:
145: if (dp == 0) {
146: fprintf(stderr, "diff: ran out of memory\n");
147: done();
148: }
149: strcpy(dp, cp);
150: return (dp);
151: }
152:
153: min(a,b)
154: int a,b;
155: {
156:
157: return (a < b ? a : b);
158: }
159:
160: max(a,b)
161: int a,b;
162: {
163:
164: return (a > b ? a : b);
165: }
166:
167: done()
168: {
169: unlink(tempfile);
170: exit(status);
171: }
172:
173: char *
174: talloc(n)
175: {
176: register char *p;
177: p = malloc((unsigned)n);
178: if(p!=NULL)
179: return(p);
180: noroom();
181: }
182:
183: char *
184: ralloc(p,n) /*compacting reallocation */
185: char *p;
186: {
187: register char *q;
188: char *realloc();
189: free(p);
190: free(dummy);
191: dummy = malloc(1);
192: q = realloc(p, (unsigned)n);
193: if(q==NULL)
194: noroom();
195: return(q);
196: }
197:
198: noroom()
199: {
200: fprintf(stderr, "diff: files too big, try -h\n");
201: done();
202: }
Defined functions
done
defined in line
167; used 30 times
- in line 74,
86,
103-108(2),
115,
122,
129,
136,
147,
201
- in /usr/src/cmd/diff/diff.h line
84
- in /usr/src/cmd/diff/diffdir.c line
28,
185,
191-196(2),
326,
336,
342,
354
- in /usr/src/cmd/diff/diffreg.c line
107,
117,
154,
163-166(4),
172,
178,
193,
212
main
defined in line
13;
never used
max
defined in line
160; used 2 times
min
defined in line
153; 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