Annotation of researchv10no/sys/mkconf/readtab.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * read device tables
        !             3:  */
        !             4: 
        !             5: #include <libc.h>
        !             6: #include <ctype.h>
        !             7: #include <fio.h>
        !             8: #include "mkconf.h"
        !             9: 
        !            10: #define        MAXDEV  100     /* highest allowed major dev number */
        !            11: 
        !            12: Devtab bdevsw[MAXDEV];
        !            13: int nblk;
        !            14: Devtab cdevsw[MAXDEV];
        !            15: int nchr;
        !            16: Devtab fstypsw[MAXDEV];
        !            17: int nfs;
        !            18: Devtab ldispsw[MAXDEV];
        !            19: int nld;
        !            20: Devtab mscpsw[MAXDEV];
        !            21: int nmscp;
        !            22: 
        !            23: #define        BIGARGS 5
        !            24: 
        !            25: readtab(f)
        !            26: char *f;
        !            27: {
        !            28:        int fd;
        !            29:        register char *p;
        !            30:        char *args[BIGARGS];
        !            31: 
        !            32:        if ((fd = open(f, 0)) < 0) {
        !            33:                perror(f);
        !            34:                exit(1);
        !            35:        }
        !            36:        while ((p = Frdline(fd)) != NULL) {
        !            37:                while (isspace(*p))
        !            38:                        p++;
        !            39:                if (*p == '#' || *p == 0)
        !            40:                        continue;
        !            41:                if (crack(p, args, BIGARGS) != 3) {
        !            42:                        fprint(STDERR, "%s: bad line: %s\n", f, p);
        !            43:                        errs++;
        !            44:                        continue;
        !            45:                }
        !            46:                if (strcmp(args[0], "bdev") == 0)
        !            47:                        newent(bdevsw, &nblk, "bdev", args[1], args[2]);
        !            48:                else if (strcmp(args[0], "cdev") == 0)
        !            49:                        newent(cdevsw, &nchr, "cdev", args[1], args[2]);
        !            50:                else if (strcmp(args[0], "fs") == 0)
        !            51:                        newent(fstypsw, &nfs, "fs", args[1], args[2]);
        !            52:                else if (strcmp(args[0], "ld") == 0)
        !            53:                        newent(ldispsw, &nld, "ld", args[1], args[2]);
        !            54:                else if (strcmp(args[0], "mscp") == 0)
        !            55:                        newent(mscpsw, &nmscp, "mscp", args[1], args[2]);
        !            56:                else {
        !            57:                        fprint(STDERR, "%s: unknown table %s\n", f, args[0]);
        !            58:                        errs++;
        !            59:                }
        !            60:        }
        !            61:        close(fd);
        !            62: }
        !            63: 
        !            64: newent(tab, max, tnam, num, name)
        !            65: Devtab *tab;
        !            66: int *max;
        !            67: char *tnam;
        !            68: char *num, *name;
        !            69: {
        !            70:        register Mdev *mp;
        !            71:        register int i;
        !            72: 
        !            73:        i = atoi(num);
        !            74:        if (i < 0 || i >= MAXDEV) {
        !            75:                fprint(STDERR, "%s %d %s: devno out of range\n", tnam, i, name);
        !            76:                errs++;
        !            77:                return;
        !            78:        }
        !            79:        if ((mp = mdlook(name)) == NULL) {
        !            80:                fprint(STDERR, "%s: no such %s\n", name, tnam);
        !            81:                errs++;
        !            82:                return;
        !            83:        }
        !            84:        if (tab[i].dev) {
        !            85:                fprint(STDERR, "%s %d %s: dup %s\n", tnam, i, name, tnam);
        !            86:                errs++;
        !            87:                return;
        !            88:        }
        !            89:        tab[i].dev = mp;
        !            90:        if (*max < i)
        !            91:                *max = i;
        !            92: }
        !            93: 
        !            94: devtfix(dp)
        !            95: register Dev *dp;
        !            96: {
        !            97:        register int i;
        !            98:        register Mdev *mp;
        !            99: 
        !           100:        mp = dp->mdev;
        !           101:        if (mp->flags & FTBDONE)
        !           102:                return; 
        !           103:        for (i = 0; i <= nblk; i++)
        !           104:                if (bdevsw[i].dev == mp)
        !           105:                        bdevsw[i].used = 1;
        !           106:        for (i = 0; i <= nchr; i++)
        !           107:                if (cdevsw[i].dev == mp)
        !           108:                        cdevsw[i].used = 1;
        !           109:        for (i = 0; i <= nfs; i++)
        !           110:                if (fstypsw[i].dev == mp)
        !           111:                        fstypsw[i].used = 1;
        !           112:        for (i = 0; i <= nld; i++)
        !           113:                if (ldispsw[i].dev == mp)
        !           114:                        ldispsw[i].used = 1;
        !           115:        for (i = 0; i <= nmscp; i++)
        !           116:                if (mscpsw[i].dev == mp)
        !           117:                        mscpsw[i].used = 1;
        !           118:        mp->flags |= FTBDONE;
        !           119: }

unix.superglobalmegacorp.com

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