Annotation of researchv10no/sys/mkconf/readtab.c, revision 1.1.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.