~kris/9p

9hist

7f6fc7e31886fe28b2fc5da83827cdd4fea6e56b — David du Colombier 34 years ago 37f55a7
Plan 9 from Bell Labs 1992-01-13
4 files changed, 27 insertions(+), 25 deletions(-)

M port/devmnt.c
M port/devmux.c
M port/devnonet.c
M port/error.h
M port/devmnt.c => port/devmnt.c +3 -3
@@ 487,7 487,7 @@ mountrpc(Mnt *m, Mntrpc *r)
	if(r->reply.type != r->request.type+1) {
		print("devmnt: mismatched reply 0x%lux T%d R%d tags req %d fls %d rep %d\n",
		r, r->request.type, r->reply.type, r->request.tag, r->flushtag, r->reply.tag);
		errors("protocol error");
		error(Emountrpc);
	}
}



@@ 513,12 513,12 @@ mountio(Mnt *m, Mntrpc *r)
	else {
		if(m->mux) {
			if((*devtab[m->c->type].write)(m->c, r->rpc, n, 0) != n)
				error(Eshortmsg);
				error(Emountrpc);
		}
		else {
			qlock(&m->c->wrl);
			if((*devtab[m->c->type].write)(m->c, r->rpc, n, 0) != n)
				error(Eshortmsg);
				error(Emountrpc);
			qunlock(&m->c->wrl);
		}
		poperror();

M port/devmux.c => port/devmux.c +12 -12
@@ 221,20 221,20 @@ muxopen(Chan *c, int omode)
	switch(NCON(c)) {
	case Qhead:
		if(m->headopen)
			errors("server channel busy");
			error(Einuse);
		m->headopen = 1;
		m->ref++;
		break;
	case Qclone:
		if(m->headopen == 0)
			errors("server shutdown");
			error(Emuxshutdown);

		cm = m->connects;
		for(e = &cm[Nmux]; cm < e; cm++)
			if(cm->ref == 0)
				break;
		if(cm == e)
			errors("all cannels busy");
			error(Emuxbusy);
		cm->ref = 1;
		m->ref++;
		strncpy(cm->user, u->p->user, NAMELEN);


@@ 275,7 275,7 @@ muxcreate(Chan *c, char *name, int omode, ulong perm)
	}

	if(m == e)
		errors("no multiplexors");
		error(Enomux);

	strncpy(m->name, name, NAMELEN);
	strncpy(m->user, u->p->user, NAMELEN);


@@ 304,8 304,8 @@ muxremove(Chan *c)
	if((c->qid.path&CHDIR) == 0 && m->srv == 0)
		error(Eperm);
		
	if(strcmp(u->p->user, m->user) != 0)
		errors("not owner");
	if(strncmp(u->p->user, m->user, NAMELEN))
		error(Eperm);

	srv = 0;
	lock(m);


@@ 332,8 332,8 @@ muxwstat(Chan *c, char *db)
		error(Eperm);

	m = &muxes[NMUX(c)];
	if(strcmp(u->p->user, m->user) != 0)
		errors("not owner");
	if(strncmp(u->p->user, m->user, NAMELEN))
		error(Eperm);

	convM2D(db, &d);
	d.mode &= 0777;


@@ 434,11 434,11 @@ muxhdr(Mux *m, char *h)
	Con *c;

	if(h[0] != Tmux || h[2] != 0)
		error(Ebadmsg);
		error(Emuxmsg);

	c = &m->connects[h[1]];
	if(c < m->connects || c > &m->connects[Nmux])	
		error(Ebadmsg);
		error(Emuxmsg);

	if(c->ref == 0)
		return 0;


@@ 476,7 476,7 @@ muxwrite(Chan *c, void *va, long n, ulong offset)
		error(Eperm);
	case Qhead:
		if(n < 2)
			error(Ebadmsg);
			error(Emuxmsg);

		a = (char*)va;
		memmove(hdr, a, sizeof(hdr));


@@ 610,7 610,7 @@ muxreadq(Mux *m, Dtq *q, char *va, ulong n)
	while(!havedata(q)) {
		sleep(&q->r, havedata, q);
		if(m->headopen == 0)
			errors("server shutdown");
			errors(Emuxshutdown);
	}

	nread = 0;

M port/devnonet.c => port/devnonet.c +2 -2
@@ 238,7 238,7 @@ nonetopenclone(Chan *c, Noifc *ifc)
		}
	}
	if(cp == ep)
		error(Enodev);;
		error(Enodev);
	return cp;
}



@@ 276,7 276,7 @@ nonetopen(Chan *c, int omode)
		line = STREAMID(c->qid.path);
		ifc = &noifc[c->dev];
		if(ifc->conv[line].state != Cannounced)
			errors("channel not announced");
			error(Enolisten);
		nolisten(c, ifc);
		break;
	case Nraddrqid:

M port/error.h => port/error.h +10 -8
@@ 2,6 2,9 @@ extern char Enoerror[];		/* no error */
extern char Emount[];		/* inconsistent mount */
extern char Eunmount[];		/* not mounted */
extern char Eunion[];		/* not in union */
extern char Emountrpc[];	/* mount rpc error */
extern char Eshutdown[];	/* mounted device shut down */
extern char Enomntdev[];	/* no free mount devices */
extern char Enocreate[];	/* mounted directory forbids creation */
extern char Enonexist[];	/* file does not exist */
extern char Ebadsharp[];	/* unknown device in # filename */


@@ 21,7 24,7 @@ extern char Ebadbitmap[];	/* unallocated bitmap */
extern char Enobitmap[];	/* out of bitmap descriptors */
extern char Enobitstore[];	/* out of bitmap storage */
extern char Ebadfont[];		/* unallocated font */
extern char Enofont[];		/* out of font descriptors */
extern char Enofont[];		/* no free font descriptors */
extern char Eauth[];		/* authentication failure */
extern char Ebadaddr[];		/* bad network address */
extern char Emsgsize[];		/* message is too big for protocol */


@@ 32,8 35,14 @@ extern char Enoroute[];		/* no free routes */
extern char Enoifc[];		/* bad interface or no free interface slots */
extern char Enolisten[];	/* not announced */
extern char Ehungup[];		/* write to hungup stream */
extern char Ebadctl[];		/* bad process or stream control request */
extern char Enodev[];		/* no free devices */
extern char Enoenv[];		/* no free environment resources */
extern char Emuxshutdown[];	/* mux server shut down */
extern char Emuxbusy[];		/* all mux channels busy */
extern char Enomux[];		/* no free multiplexers */
extern char Emuxmsg[];		/* bad mux message format or mismatch */
extern char Enopipe[];		/* no free pipes */

extern char Enofd[];		/* no free file descriptors */
extern char Ebadfd[];		/* fd out of range or not open */


@@ 42,9 51,6 @@ extern char Eioload[];		/* i/o error in demand load */
extern char Enochild[];		/* no living children */
extern char Enoseg[];		/* no free segments */
extern char Ebadmount[];	/* inconsistent mount */
extern char Enomount[];		/* mount table full */
extern char Enomntdev[];	/* no free mount devices */
extern char Eshutdown[];	/* mounted device shut down */
extern char Ebaddirread[];	/* directory read not quantized */
extern char Esegaddr[];		/* illegal segment addresses or size */
extern char Eprocdied[];	/* process exited */


@@ 53,19 59,15 @@ extern char Enoqueue[];		/* no free stream queues */
extern char Ebadld[];		/* illegal line discipline */
extern char Enostream[];	/* no free stream heads */
extern char Ebadnet[];		/* illegal network address */
extern char Ebadctl[];		/* bad process or stream control request */
extern char Enonote[];		/* note overflow */
extern char Eintr[];		/* interrupted */
extern char Edestbusy[];	/* datakit destination busy */
extern char Edestotl[];		/* datakit destination out to lunch */
extern char Enetotl[];		/* datakit controller out to lunch */
extern char Erejected[];	/* datakit destination rejected call */
extern char Eshortmsg[];	/* short message */
extern char Ebadmsg[];		/* format error or mismatch in message */
extern char Ebadcnt[];		/* read count greater than requested */
extern char Enovmem[];		/* virtual memory allocation failed */
extern char Enoasync[];		/* out of async stream modules */
extern char Enopipe[];		/* out of pipes */
extern char Enetunreach[];	/* network unreachable */
extern char Etimedout[];	/* connection timed out */
extern char Econrefused[];	/* connection refused */