Annotation of researchv8dc/cmd/rarepl/rarct.c, revision 1.1.1.1

1.1       root        1: /*% cc -O -o rarct %
                      2:  *
                      3:  * read the rct and other stuff
                      4:  */
                      5: 
                      6: #include <stdio.h>
                      7: #include <sys/param.h>
                      8: #include <sys/udaioc.h>
                      9: #include "rct.h"
                     10: 
                     11: struct ud_unit ud_unit;
                     12: 
                     13: main(argc, argv)
                     14: int argc;
                     15: char **argv;
                     16: {
                     17:        int hdr = 0;
                     18:        int stat = 0;
                     19:        int nd = 0;
                     20:        int errs = 0;
                     21: 
                     22:        while (--argc > 0) {
                     23:                if (**++argv == '-')
                     24:                        switch (argv[0][1]) {
                     25:                        case 'h':
                     26:                                hdr++;
                     27:                                continue;
                     28: 
                     29:                        case 'c':
                     30:                                stat++;
                     31:                                continue;
                     32: 
                     33:                        default:
                     34:                                fprintf(stderr, "%s ignored\n", *argv);
                     35:                                continue;
                     36:                        }
                     37:                nd++;
                     38:                errs += dodev(*argv, hdr, stat);
                     39:        }
                     40:        if (nd == 0) {
                     41:                fprintf(stderr, "usage: %s dev\n", argv[0]);
                     42:                exit(1);
                     43:        }
                     44:        exit(errs);
                     45: }
                     46: 
                     47: dodev(dev, hdr, stat)
                     48: char *dev;
                     49: int hdr, stat;
                     50: {
                     51:        int fd;
                     52:        daddr_t size;
                     53:        char buf[RBNSEC];
                     54:        register daddr_t i;
                     55:        daddr_t rctmax();
                     56: 
                     57:        if ((fd = open(dev, 0)) < 0) {
                     58:                perror(dev);
                     59:                return (1);
                     60:        }
                     61:        /*
                     62:         * hack to force driver to read status
                     63:         */
                     64:        if (read(fd, buf, RBNSEC) != RBNSEC) {
                     65:                perror("read first block");
                     66:                close(fd);
                     67:                return (1);
                     68:        }
                     69:        if (ioctl(fd, UIOCHAR, &ud_unit) < 0) {
                     70:                perror("ioctl");
                     71:                close(fd);
                     72:                return (1);
                     73:        }
                     74:        if (stat)
                     75:                statput();
                     76:        if (hdr) {
                     77:                rctread(fd, buf, RCTHDR);
                     78:                hdrput(buf);
                     79:        }
                     80:        if (hdr || stat) {
                     81:                close(fd);
                     82:                return (0);
                     83:        }
                     84:        size = rctmax();
                     85:        for (i = RCTTAB; i < size; i++) {
                     86:                rctread(fd, buf, i);
                     87:                rctput(buf, i);
                     88:        }
                     89:        close(fd);
                     90:        return (0);
                     91: }
                     92: 
                     93: daddr_t
                     94: rctmax()
                     95: {
                     96:        daddr_t nrbns;
                     97: 
                     98:        nrbns = (ud_unit.radsize / ud_unit.tracksz) * ud_unit.rbns;
                     99:        return ((nrbns / RBNPB) + RCTTAB);
                    100: }
                    101: 
                    102: rctread(fd, buf, bno)
                    103: char *buf;
                    104: daddr_t bno;
                    105: {
                    106:        struct ud_rctbuf rb;
                    107:        register int i;
                    108: 
                    109:        rb.lbn = bno;
                    110:        rb.buf = buf;
                    111:        if (ioctl(fd, UIORRCT, &rb) < 0) {
                    112:                perror("read rct");
                    113:                fprintf(stderr, "block %d\n", bno);
                    114:                for (i = 0; i < RBNSEC; i++)
                    115:                        buf[i] = 0;
                    116:        }
                    117: }
                    118: 
                    119: rctput(buf, bno)
                    120: char *buf;
                    121: int bno;
                    122: {
                    123:        register long rbn;
                    124:        register struct rbd *rp;
                    125:        register int i;
                    126: 
                    127:        rbn = (bno - RCTTAB) * RBNPB;
                    128:        rp = (struct rbd *)buf;
                    129:        for (i = 0; i < RBNPB; i++, rp++, rbn++)
                    130:                if (rp->rb_lbn || rp->rb_code)
                    131:                        printf("%ld: %o: %ld\n", rbn, rp->rb_code, rp->rb_lbn);
                    132: }
                    133: 
                    134: hdrput(buf)
                    135: char *buf;
                    136: {
                    137:        register struct rct *rc;
                    138: 
                    139:        rc = (struct rct *)buf;
                    140:        printf("volser x%lx x%lx\n", rc->rc_volser[0], rc->rc_volser[1]);
                    141:        printf("flags 0%x lbn %ld rbn %ld badrbn %ld\n",
                    142:                rc->rc_flags, rc->rc_lbn, rc->rc_rbn, rc->rc_badrbn);
                    143: }
                    144: 
                    145: statput()
                    146: {
                    147: 
                    148:        printf("size %ld\nrctsize %ld\n", ud_unit.radsize, ud_unit.rctsize);
                    149:        printf("medium x%lx\n", ud_unit.medium);
                    150:        printf("tracks %d groups %d cyls %d\n",
                    151:                ud_unit.tracksz, ud_unit.groupsz, ud_unit.cylsz);
                    152:        printf("rbns/track %d\ncopies %d\n", ud_unit.rbns, ud_unit.copies);
                    153: }

unix.superglobalmegacorp.com

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