# 2.11BSD#431 - /usr/src/bin/diff/diff.c

##### Functions

    done              X
    main              X
    max               X
    min               X
    noroom            X
    ralloc            X
    savestr           X
    talloc            X

##### Variables

    diff              X
    diffh             X
    pr                X

       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

- in /usr/src/bin/diff/diffreg.c line 974-976(2)

min defined in line 165; used 2 times

- in /usr/src/bin/diff/diffreg.c line 975-977(2)

noroom defined in line 208; used 2 times

- in line 193, 204

ralloc defined in line 196; used 5 times

- in /usr/src/bin/diff/diff.h line 80
- in /usr/src/bin/diff/diffreg.c line 239-243(2), 324, 420

savestr defined in line 151; used 2 times

- in /usr/src/bin/diff/diff.h line 81
- in /usr/src/bin/diff/diffreg.c line 311

talloc defined in line 186; used 8 times

- in /usr/src/bin/diff/diff.h line 80
- in /usr/src/bin/diff/diffreg.c line 245-257(5), 322, 609

#### Defined variables

diff defined in line 10; used 3 times

- in /usr/src/bin/diff/diffdir.c line 364-366(3)

diffh defined in line 11; used 2 times

- in /usr/src/bin/diff/diffreg.c line 151-153(2)

pr defined in line 12; used 3 times

- in /usr/src/bin/diff/diffdir.c line 346-348(3)

sccsid defined in line 2; never used

Last modified: 1991-11-12 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1494 |