Annotation of 43BSD/bin/diff/diff.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.