V10/lsys/mkconf/readtab.c

Compare this file to the similar file:
Show the results in this format:

/*
 * read device tables
 */

#include <libc.h>
#include <ctype.h>
#include <fio.h>
#include "mkconf.h"

#define	MAXDEV	100	/* highest allowed major dev number */

Devtab bdevsw[MAXDEV];
int nblk;
Devtab cdevsw[MAXDEV];
int nchr;
Devtab fstypsw[MAXDEV];
int nfs;
Devtab ldispsw[MAXDEV];
int nld;
Devtab mscpsw[MAXDEV];
int nmscp;

#define	BIGARGS	5

readtab(f)
char *f;
{
	int fd;
	register char *p;
	char *args[BIGARGS];

	if ((fd = open(f, 0)) < 0) {
		perror(f);
		exit(1);
	}
	while ((p = Frdline(fd)) != NULL) {
		while (isspace(*p))
			p++;
		if (*p == '#' || *p == 0)
			continue;
		if (crack(p, args, BIGARGS) != 3) {
			fprint(STDERR, "%s: bad line: %s\n", f, p);
			errs++;
			continue;
		}
		if (strcmp(args[0], "bdev") == 0)
			newent(bdevsw, &nblk, "bdev", args[1], args[2]);
		else if (strcmp(args[0], "cdev") == 0)
			newent(cdevsw, &nchr, "cdev", args[1], args[2]);
		else if (strcmp(args[0], "fs") == 0)
			newent(fstypsw, &nfs, "fs", args[1], args[2]);
		else if (strcmp(args[0], "ld") == 0)
			newent(ldispsw, &nld, "ld", args[1], args[2]);
		else if (strcmp(args[0], "mscp") == 0)
			newent(mscpsw, &nmscp, "mscp", args[1], args[2]);
		else {
			fprint(STDERR, "%s: unknown table %s\n", f, args[0]);
			errs++;
		}
	}
	close(fd);
}

newent(tab, max, tnam, num, name)
Devtab *tab;
int *max;
char *tnam;
char *num, *name;
{
	register Mdev *mp;
	register int i;

	i = atoi(num);
	if (i < 0 || i >= MAXDEV) {
		fprint(STDERR, "%s %d %s: devno out of range\n", tnam, i, name);
		errs++;
		return;
	}
	if ((mp = mdlook(name)) == NULL) {
		fprint(STDERR, "%s: no such %s\n", name, tnam);
		errs++;
		return;
	}
	if (tab[i].dev) {
		fprint(STDERR, "%s %d %s: dup %s\n", tnam, i, name, tnam);
		errs++;
		return;
	}
	tab[i].dev = mp;
	if (*max < i)
		*max = i;
}

devtfix(dp)
register Dev *dp;
{
	register int i;
	register Mdev *mp;

	mp = dp->mdev;
	if (mp->flags & FTBDONE)
		return; 
	for (i = 0; i <= nblk; i++)
		if (bdevsw[i].dev == mp)
			bdevsw[i].used = 1;
	for (i = 0; i <= nchr; i++)
		if (cdevsw[i].dev == mp)
			cdevsw[i].used = 1;
	for (i = 0; i <= nfs; i++)
		if (fstypsw[i].dev == mp)
			fstypsw[i].used = 1;
	for (i = 0; i <= nld; i++)
		if (ldispsw[i].dev == mp)
			ldispsw[i].used = 1;
	for (i = 0; i <= nmscp; i++)
		if (mscpsw[i].dev == mp)
			mscpsw[i].used = 1;
	mp->flags |= FTBDONE;
}