~kris/9p

9hist

f8b5d730de0d6ada7f9723c37d00400d1914ff93 — David du Colombier 26 years ago af28670
Plan 9 from Bell Labs 2000-03-08
M alphapc/devfloppy.c => alphapc/devfloppy.c +1 -1
@@ 911,7 911,7 @@ floppyformat(FDrive *dp, char *params)
	/*
	 *  set the type
	 */
	if(parsefields(params, f, 3, " ") > 1){
	if(getfields(params, f, 3, 1, " ") > 1){
		for(t = floppytype; t < &floppytype[nelem(floppytype)]; t++){
			if(strcmp(f[1], t->name)==0 && t->dt==dp->dt){
				dp->t = t;

M alphapc/devvga.c => alphapc/devvga.c +1 -1
@@ 157,7 157,7 @@ vgactl(char* a)
	extern VGAdev *vgadev[];
	extern VGAcur *vgacur[];

	n = parsefields(a, field, 4, " ");
	n = getfields(a, field, 4, 1, " ");
	if(n < 2)
		error(Ebadarg);


M boot/aux.c => boot/aux.c +0 -17
@@ 171,20 171,3 @@ outin(char *prompt, char *def, int len)
	}
	return n;
}

int
parsefields(char *lp, char **fields, int n, char *sep)
{
	int i;

	for(i=0; lp && *lp && i<n; i++){
		while(*lp && strchr(sep, *lp) != 0)
			*lp++=0;
		if(*lp == 0)
			break;
		fields[i]=lp;
		while(*lp && strchr(sep, *lp) == 0)
			lp++;
	}
	return i;
}

M boot/boot.c => boot/boot.c +1 -1
@@ 210,7 210,7 @@ rootserver(char *arg)
		outin(prompt, reply, sizeof(reply));
		mp = findmethod(reply);
		if(mp){
			bargc = parsefields(reply, bargv, Nbarg-1, " ");
			bargc = getfields(reply, bargv, Nbarg-1, 1, " ");
			cp = strchr(reply, '!');
			if(cp)
				strcpy(sys, cp+1);

M ip/arp.c => ip/arp.c +1 -1
@@ 271,7 271,7 @@ arpwrite(Fs *fs, char *s, int len)
	if(len > 0 && buf[len-1] == '\n')
		buf[len-1] = 0;

	n = parsefields(buf, f, 4, " ");
	n = getfields(buf, f, 4, 1, " ");
	if(strcmp(f[0], "flush") == 0){
		qlock(arp);
		for(a = arp->cache; a < &arp->cache[NCACHE]; a++){

M ip/bootp.c => ip/bootp.c +1 -1
@@ 81,7 81,7 @@ rcvbootp(void *a)
		rp = (Bootp*)rcvbuf;
		if(memcmp(req.chaddr, rp->chaddr, 6) == 0
		&& rp->htype == 1 && rp->hlen == 6
		&& parsefields((char*)rp->vend+4, field, 4, " ") == 4
		&& getfields((char*)rp->vend+4, field, 4, 1, " ") == 4
		&& strncmp((char*)rp->vend, "p9  ", 4) == 0){
			if(ipaddr == 0)
				ipaddr = nhgetl(rp->yiaddr);

M ip/ipmux.c => ip/ipmux.c +2 -2
@@ 264,7 264,7 @@ parsemux(char *p)
	}

	/* parse vals */
	f->n = parsefields(val, vals, sizeof(vals)/sizeof(char*), "|");
	f->n = getfields(val, vals, sizeof(vals)/sizeof(char*), 1, "|");
	if(f->n == 0)
		goto parseerror;
	f->val = smalloc(f->n*f->len);


@@ 540,7 540,7 @@ ipmuxconnect(Conv *c, char **argv, int argc)
	if(argc != 2)
		return Ebadarg;

	n = parsefields(argv[1], field, nelem(field), ";");
	n = getfields(argv[1], field, nelem(field), 1, ";");
	if(n <= 0)
		return Ebadarg;


M ip/netlog.c => ip/netlog.c +1 -1
@@ 167,7 167,7 @@ netlogctl(Fs *f, char* s, int len)
	if(len > 0 && buf[len-1] == '\n')
		buf[len-1] = 0;

	n = parsefields(buf, fields, 10, " ");
	n = getfields(buf, fields, 10, 1, " ");
	if(n < 2)
		return Ebadnetctl;


M pc/devata.c => pc/devata.c +6 -6
@@ 1582,12 1582,12 @@ atareplinit(Drive *dp)
	/*
	 *  parse replacement table.
	 */
	n = parsefields((char*)buf, line, Nrepl+1, "\n");
	n = getfields((char*)buf, line, Nrepl+1, 1, "\n");
	if(strncmp(line[0], REPLMAGIC, sizeof(REPLMAGIC)-1)){
		dp->repl.p = 0;
	} else {
		for(dp->repl.nrepl = 0, i = 1; i < n; i++, dp->repl.nrepl++){
			if(parsefields(line[i], field, 1, " ") != 1)
			if(getfields(line[i], field, 1, 1, " ") != 1)
				break;
			dp->repl.blk[dp->repl.nrepl] = strtoul(field[0], 0, 0);
			if(dp->repl.blk[dp->repl.nrepl] <= 0)


@@ 1663,13 1663,13 @@ atapart(Drive *dp)
		ataxfer(dp, &dp->p[0], Cread, (dp->p[0].end-2)*
			(vlong)dp->bytes, dp->bytes, buf);
		buf[dp->bytes-1] = 0;
		n = parsefields((char*)buf, line, Npart+1, "\n");
		n = getfields((char*)buf, line, Npart+1, 1, "\n");
		if(n > 0 && strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1) == 0)
			i = 1;
		else{
			ataxfer(dp, &dp->p[1], Cread, 0, dp->bytes, buf);
			buf[dp->bytes-1] = 0;
			n = parsefields((char*)buf, line, Npart+1, "\n");
			n = getfields((char*)buf, line, Npart+1, 1, "\n");
			if(n == 0 || strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1))
				i = 1;
		}


@@ 1681,7 1681,7 @@ atapart(Drive *dp)
	}
	else{
		strcpy((char*)buf, p);
		n = parsefields((char*)buf, line, Npart+1, "\n");
		n = getfields((char*)buf, line, Npart+1, 1, "\n");
	}

	/*


@@ 1689,7 1689,7 @@ atapart(Drive *dp)
	 */
	if(n > 0 && strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1) == 0){
		for(i = 1; i < n; i++){
			if(parsefields(line[i], field, 3, " ") != 3)
			if(getfields(line[i], field, 3, 1, " ") != 3)
				break;
			if(pp >= &dp->p[Npart])
				break;

M pc/devfloppy.c => pc/devfloppy.c +1 -1
@@ 880,7 880,7 @@ floppyformat(FDrive *dp, char *params)
	/*
	 *  set the type
	 */
	if(parsefields(params, f, 3, " ") > 1){
	if(getfields(params, f, 3, 1, " ") > 1){
		for(t = floppytype; t < &floppytype[nelem(floppytype)]; t++){
			if(strcmp(f[1], t->name)==0 && t->dt==dp->dt){
				dp->t = t;

M pc/devusb.c => pc/devusb.c +2 -32
@@ 1776,36 1776,6 @@ writeusb(Endpt *e, void *a, long n, int tok)
	return p-(uchar*)a;
}

int
getfields(char *ss, char **sp, int nptrs)
{
	uchar *s = (uchar*)ss;
	uchar **p = (uchar**)sp;
	uint c;

	c = 0;
	for(;;){
		if(--nptrs < 0)
			break;
		*p++ = s;
		do {
			c = *s++;
			if (c == ' ') break;
			if (c == '\t') break;
			if (c == '\n') break;
		} while(c);
		if(c == 0)
			break;
		s[-1] = 0;
	}
	if(nptrs > 0)
		*p = 0;
	else
	if(--s >= (uchar*)ss)
		*s = c;
	return p - (uchar**)sp;
}

long
usbwrite(Chan *c, void *a, long n, vlong)
{


@@ 1822,7 1792,7 @@ usbwrite(Chan *c, void *a, long n, vlong)
			n = sizeof(cmd)-1;
		memmove(cmd, a, n);
		cmd[n] = 0;
		nf = getfields(cmd, fields, nelem(fields));
		nf = getfields(cmd, fields, nelem(fields), 0, " \t\n");
		if(nf==1 && strcmp(fields[0], "dump")==0){
			dumpframe(-1, -1);
			return n;


@@ 1850,7 1820,7 @@ usbwrite(Chan *c, void *a, long n, vlong)
			n = sizeof(cmd)-1;
		memmove(cmd, a, n);
		cmd[n] = 0;
		nf = getfields(cmd, fields, nelem(fields));
		nf = getfields(cmd, fields, nelem(fields), 0, " \t\n");
		if(nf > 1 && strcmp(fields[0], "speed") == 0){
			d->ls = strtoul(fields[1], nil, 0) == 0;
		} else if(nf > 5 && strcmp(fields[0], "class") == 0){

M pc/devvga.c => pc/devvga.c +1 -1
@@ 142,7 142,7 @@ vgactl(char* a)
	extern VGAcur *vgacur[];
	Rectangle r;

	n = parsefields(a, field, nelem(field), " ");
	n = getfields(a, field, nelem(field), 1, " ");
	if(n < 1)
		error(Ebadarg);


M port/devaudio.c => port/devaudio.c +1 -1
@@ 1081,7 1081,7 @@ audiowrite(Chan *c, void *vp, long n, vlong)
		memmove(buf, a, n);
		buf[n] = '\0';

		nf = parsefields(buf, field, Ncmd, " \t\n");
		nf = getfields(buf, field, Ncmd, 1, " \t\n");
		for(i = 0; i < nf; i++){
			/*
			 * a number is volume

M port/devdraw.c => port/devdraw.c +1 -1
@@ 1145,7 1145,7 @@ drawwrite(Chan *c, void *a, long n, vlong off)
			a = (char*)a + i;
			m -= i;
			*q = 0;
			if(parsefields(buf, fields, nelem(fields), " ") != 4)
			if(getfields(buf, fields, nelem(fields), 1, " ") != 4)
				error("eb1"); //error(Ebadarg);
			i = strtoul(fields[0], 0, 0);
			red = strtoul(fields[1], 0, 0);

M port/devmouse.c => port/devmouse.c +1 -1
@@ 311,7 311,7 @@ mousewrite(Chan *c, void *va, long n, vlong)
			buf[n-1] = 0;
		else
			buf[n] = 0;
		nf = parsefields(buf, field, 3, " ");
		nf = getfields(buf, field, 3, 1, " ");
		if(strcmp(field[0], "swap") == 0){
			if(mouseswap)
				setbuttonmap("123");

M port/devsd.c => port/devsd.c +3 -3
@@ 350,12 350,12 @@ sdrdpart(Disk *d)
	 */
	scsibio(d->t, d->lun, SCSIread, b, 1, d->bsize, d->table[0].end-2);
	b[d->bsize-1] = '\0';
	n = parsefields(b, line, nelem(line), "\n");
	n = getfields(b, line, nelem(line), 1, "\n");
	if(n <= 0 || strncmp(line[0], MAGIC, sizeof(MAGIC)-1) != 0){
		/* try the last */
		scsibio(d->t, d->lun, SCSIread, b, 1, d->bsize, d->table[0].end-1);
		b[d->bsize-1] = '\0';
		n = parsefields(b, line, nelem(line), "\n");
		n = getfields(b, line, nelem(line), 1, "\n");
		/* only point partition file at last sector if there is one there */
		if(n > 0 && strncmp(line[0], MAGIC, sizeof(MAGIC)-1) == 0){
			d->table[1].beg++;


@@ 368,7 368,7 @@ sdrdpart(Disk *d)
	 */
	if(n > 0 && strncmp(line[0], MAGIC, sizeof(MAGIC)-1) == 0) {
		for(i = 1; i < n; i++) {
			if(parsefields(line[i], field, nelem(field), " ") != 3)
			if(getfields(line[i], field, nelem(field), 1, " ") != 3)
				break;
			if(p >= &d->table[Npart])
				break;

M port/lib.h => port/lib.h +1 -0
@@ 77,6 77,7 @@ extern	uvlong	strtoull(char*, char**, int);
extern	char	etext[];
extern	char	edata[];
extern	char	end[];
extern	int	getfields(char*, char**, int, int, char*);

/*
 * Syscall data structures

M port/parse.c => port/parse.c +1 -18
@@ 5,23 5,6 @@
#include	"fns.h"
#include	"../port/error.h"

int
parsefields(char *lp, char **fields, int n, char *sep)
{
	int i;

	for(i=0; lp && *lp && i<n; i++){
		while(*lp && strchr(sep, *lp) != 0)
			*lp++=0;
		if(*lp == 0)
			break;
		fields[i]=lp;
		while(*lp && strchr(sep, *lp) == 0)
			lp++;
	}
	return i;
}

/*
 *  parse a command written to a device
 */


@@ 38,7 21,7 @@ parsecmd(char *p, int n)
	if(n > 0 && cb->buf[n-1] == '\n')
		n--;
	cb->buf[n] = '\0';
	cb->nf = parsefields(cb->buf, cb->f, nelem(cb->f), " ");
	cb->nf = getfields(cb->buf, cb->f, nelem(cb->f), 1, " ");
	return cb;
}


M port/portfns.h => port/portfns.h +2 -4
@@ 114,8 114,8 @@ void		freepte(Segment*, Pte*);
void		freesegs(int);
void		freesession(Session*);
void		getcolor(ulong, ulong*, ulong*, ulong*);
ulong	getmalloctag(void*);
ulong	getrealloctag(void*);
ulong		getmalloctag(void*);
ulong		getrealloctag(void*);
void		gotolabel(Label*);
int		haswaitq(void*);
long		hostdomainwrite(char*, int);


@@ 191,8 191,6 @@ void		pagechainhead(Page*);
void		pageinit(void);
void		pagersummary(void);
void		panic(char*, ...);
int		parseether(uchar*, char*);
int		parsefields(char*, char**, int, char*);
Cmdbuf*		parsecmd(char *a, int n);
void		pexit(char*, int);
void		pgrpcpy(Pgrp*, Pgrp*);