Annotation of researchv9/cmd/cmp.c, revision 1.1.1.1

1.1       root        1: #define                BUF             4096
                      2: 
                      3: int sflag = 0;
                      4: int lflag = 0;
                      5: int Lflag = 0;
                      6: 
                      7: main(argc, argv)
                      8:        char **argv;
                      9: {
                     10:        register n1, n2, n;
                     11:        unsigned char buf1[BUF], buf2[BUF];
                     12:        register unsigned char *p, *q;
                     13:        int f1, f2, i, nn;
                     14:        long nc = 1, o, otoi(), l=1, l1;
                     15:        char *name1, *name2, *a;
                     16:        unsigned char *b1s, *b1e, *b2s, *b2e;
                     17: 
                     18:        for(n=1; n<argc && (*argv[n] == '-'); n++)
                     19:                for(a = &argv[n][1]; *a; a++)
                     20:                        switch(*a) {
                     21:                        case 's':       sflag = 1; break;
                     22:                        case 'l':       lflag = 1; break;
                     23:                        case 'L':       Lflag = 1; break;
                     24:                        default:        usage();
                     25:                        }
                     26:        if(n > argc-2)
                     27:                usage();
                     28:        if((f1 = open(name1 = argv[n++], 0)) == -1){
                     29:                perror(name1);
                     30:                exit(2);
                     31:        }
                     32:        if((f2 = open(name2 = argv[n++], 0)) == -1){
                     33:                perror(name2);
                     34:                exit(2);
                     35:        }
                     36:        if(n < argc){
                     37:                o = otoi(argv[n++]);
                     38:                if(lseek(f1, o, 0) < 0){
                     39:                        perror("cmp: lseek by offset1");
                     40:                        exit(2);
                     41:                }
                     42:        }
                     43:        if(n < argc){
                     44:                o = otoi(argv[n++]);
                     45:                if(lseek(f2, o, 0) < 0){
                     46:                        perror("cmp: lseek by offset2");
                     47:                        exit(2);
                     48:                }
                     49:        }
                     50:        if(n < argc)
                     51:                usage();
                     52:        b1s = b1e = buf1;
                     53:        b2s = b2e = buf2;
                     54:        for(;;){
                     55:                register unsigned char *ep;
                     56: 
                     57:                if(b1s >= b1e){
                     58:                        if(b1s >= &buf1[BUF])
                     59:                                b1s = buf1;
                     60:                        n1 = read(f1, b1s,  &buf1[BUF] - b1s);
                     61:                        b1e = b1s + n1;
                     62:                }
                     63:                if(b2s >= b2e){
                     64:                        if(b2s >= &buf2[BUF])
                     65:                                b2s = buf2;
                     66:                        n2 = read(f2, b2s,  &buf2[BUF] - b2s);
                     67:                        b2e = b2s + n2;
                     68:                }
                     69:                n = n2;
                     70:                if(n1 < n2) n = n1;
                     71:                if(n <= 0)
                     72:                        break;
                     73:                if(memcmp(b1s, b2s, n) != 0){
                     74:                        if(sflag)
                     75:                                exit(1);
                     76:                        l1 = 0;
                     77:                        for(p = b1s, q = b2s, i = 0, nn = n; nn > 0; nn--, p++, q++, i++) {
                     78:                                if(*p=='\n')
                     79:                                        l1++;
                     80:                                if(*p != *q){
                     81:                                        if(!lflag){
                     82:                                                printf("%s %s differ: char %d",
                     83:                                                    name1, name2, nc+i);
                     84:                                                printf(Lflag?" line %d\n":"\n", l+l1);
                     85:                                                exit(1);
                     86:                                        }
                     87:                                        printf("%6ld %3o %3o\n", nc+i, *p, *q);
                     88:                                }
                     89:                        }
                     90:                }               
                     91:                if(Lflag)
                     92:                        for(p = b1s; p < b1e;)
                     93:                                if(*p++=='\n')
                     94:                                        l++;
                     95:                nc += n;
                     96:                b1s += n;
                     97:                b2s += n;
                     98:        }
                     99:        if(n1 == n2)
                    100:                exit(0);
                    101:        if(!sflag)
                    102:                printf("EOF on %s\n", (n1 > n2)? name2 : name1);
                    103:        exit(1);
                    104: }
                    105: 
                    106: long
                    107: otoi(s)
                    108:        register char *s;
                    109: {
                    110:        long n, ok;
                    111: 
                    112:        if(*s == '0'){
                    113:                if(s[1] == 'x')
                    114:                        ok = sscanf(s, "%lx", &n);
                    115:                else
                    116:                        ok = sscanf(s, "%lo", &n);
                    117:        } else
                    118:                ok = sscanf(s, "%ld", &n);
                    119:        if (ok!=1)
                    120:                usage();
                    121:        return(n);
                    122: }
                    123: 
                    124: usage()
                    125: {
                    126:        printf("Usage: cmp [-ls] file1 file2 [offset1 [offset2] ]\n");
                    127:        exit(2);
                    128: }

unix.superglobalmegacorp.com

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