~kris/9p

9hist

07f99f1eae030e0ec6fb2d825b8e736786070e03 — David du Colombier 35 years ago f747110
Plan 9 from Bell Labs 1991-08-19
1 files changed, 23 insertions(+), 16 deletions(-)

M pc/devhard.c
M pc/devhard.c => pc/devhard.c +23 -16
@@ 154,7 154,7 @@ hardgen(Chan *c, Dirtab *tab, long ntab, long s, Dir *dirp)
{
	Qid qid;
	int drive;
	char name[NAMELEN];
	char name[NAMELEN+4];
	Drive *dp;
	Partition *pp;
	ulong l;


@@ 169,6 169,7 @@ hardgen(Chan *c, Dirtab *tab, long ntab, long s, Dir *dirp)
	if(s < dp->npart){
		pp = &dp->p[s];
		sprint(name, "hd%d%s", drive, pp->name);
		name[NAMELEN] = 0;
		qid.path = MKQID(drive, s);
		l = (pp->end - pp->start) * dp->bytes;
	} else


@@ 472,8 473,8 @@ hardxfer(Drive *dp, Partition *pp, int cmd, long start, long len)
	cp->cmd = cmd;
	cp->dp = dp;
	cp->sofar = 0;
print("xfer:\ttcyl %d, tsec %d, thead %d\n", cp->tcyl, cp->tsec, cp->thead);
print("\tnsecs %d, sofar %d\n", cp->nsecs, cp->sofar);
/*print("xfer:\ttcyl %d, tsec %d, thead %d\n", cp->tcyl, cp->tsec, cp->thead);
print("\tnsecs %d, sofar %d\n", cp->nsecs, cp->sofar);/**/
	outb(cp->pbase+Pcount, cp->nsecs);
	outb(cp->pbase+Psector, cp->tsec);
	outb(cp->pbase+Pdh, (dp->drive<<4) | cp->thead);


@@ 582,6 583,18 @@ hardpart(Drive *dp)
	ulong n;
	int i;

	cp = dp->cp;
	qlock(cp);
	if(waserror()){
		qunlock(cp);
		print("error in hardpart\n");
		nexterror();
	}

	/*
	 *  we always have a partition for the whole disk
	 *  and one for the partition table
	 */
	pp = &dp->p[0];
	strcpy(pp->name, "disk");
	pp->start = 0;


@@ 592,17 605,15 @@ hardpart(Drive *dp)
	pp->end = dp->p[0].end;
	dp->npart = 2;

	cp = dp->cp;
	qlock(cp);
	if(waserror()){
		qunlock(cp);
		print("error in hardpart\n");
		nexterror();
	}

	/*
	 *  read partition table from disk, null terminate
	 */
	hardxfer(dp, pp, Cread, 0, dp->bytes);
	cp->buf[dp->bytes-1] = 0;

	/*
	 *  parse partition table.
	 */
	n = getfields(cp->buf, line, Npart+1, '\n');
	if(strncmp(line[0], MAGIC, sizeof(MAGIC)-1) != 0){
print("bad partition magic\n");


@@ 614,11 625,7 @@ print("bad partition magic\n");
print("bad partition field\n");
			break;
		}
		if(strlen(field[0]) > NAMELEN){
print("bad partition name\n");
			break;
		}
		strcpy(pp->name, field[0]);
		strncpy(pp->name, field[0], NAMELEN);
		pp->start = strtoul(field[1], 0, 0);
		pp->end = strtoul(field[2], 0, 0);
		if(pp->start > pp->end || pp->start >= dp->p[0].end){