~kris/9p

9hist

07cba2253ec1f863bba53c2d3829d97e649238e7 — David du Colombier 26 years ago bb4d179
Plan 9 from Bell Labs 1999-12-24
3 files changed, 34 insertions(+), 25 deletions(-)

M ip/tcp.c
M port/auth.c
M port/chan.c
M ip/tcp.c => ip/tcp.c +1 -1
@@ 2012,7 2012,7 @@ addreseq(Tcpctl *tcb, Tcp *seg, Block *bp, ushort length)
	if(i > 100 && once++ == 0){
		print("very long tcp resequence queue: %d\n", length);
		for(rp1 = tcb->reseq, i = 0; i < 10 && rp1 != nil; rp1 = rp1->next, i++)
			print("0x%lux 0x%lux 0x%ux", rp1->seg.seq, rp1->seg.ack,
			print("0x%lux 0x%lux 0x%ux\n", rp1->seg.seq, rp1->seg.ack,
				rp1->seg.flags);
		return -1;
	}

M port/auth.c => port/auth.c +1 -1
@@ 537,7 537,7 @@ authentwrite(Chan *c, char *a, int n)

/*
 *  create an authenticator and return it and optionally the
 *  unencripted ticket
 *  unencrypted ticket
 */
long
authentread(Chan *c, char *a, int n)

M port/chan.c => port/chan.c +32 -23
@@ 156,7 156,8 @@ addelem(Cname *n, char *s)
		n->s = t;
		n->alen = a;
	}
	n->s[n->len++] = '/';
	if(n->len>0 && n->s[n->len-1]!='/' && s[0]!='/')	/* don't insert extra slash if one is present */
		n->s[n->len++] = '/';
	memmove(n->s+n->len, s, i+1);
	n->len += i;
	return n;


@@ 473,6 474,21 @@ undomount(Chan *c)
	return c;
}

Chan *
updatecname(Chan *c, char *name, int dotdot)
{
	if(c->name == nil)
		c->name = newcname(name);
	else
		c->name = addelem(c->name, name);
	
	if(dotdot){
		cleancname(c->name, c->name->s[0]=='#');	/* could be cheaper */
		c = undomount(c);
	}
	return c;
}

int
walk(Chan **cp, char *name, int domnt)
{


@@ 494,16 510,7 @@ walk(Chan **cp, char *name, int domnt)
	ac->flag &= ~CCREATE;	/* not inherited through a walk */
	if(devtab[ac->type]->walk(ac, name) != 0) {
		/* walk succeeded: update name associated with *cp (ac) */
		c = *cp;
		if(c->name == nil)
			c->name = newcname(name);
		else
			c->name = addelem(c->name, name);
		
		if(dotdot){
			cleancname(c->name, c->name->s[0]=='#');	/* could be cheaper */
			*cp = undomount(c);
		}
		*cp = updatecname(*cp, name, dotdot);
		if(domnt)
			*cp = domount(*cp);
		return 0;


@@ 535,23 542,22 @@ walk(Chan **cp, char *name, int domnt)
	if(c == nil)
		return -1;

	if(dotdot)
		c = undomount(c);

	if(c->mh){
		putmhead(c->mh);
		c->mh = nil;
	}
	if(domnt) {
		if(waserror()) {
			cclose(c);
			nexterror();
		}
		c = domount(c);
		poperror();
	}

	/* replace c->name by ac->name */
	cnameclose(c->name);
	c->name = ac->name;
	if(ac->name)
		incref(ac->name);
	c = updatecname(c, name, dotdot);
	cclose(ac);
	*cp = c;

	if(domnt)
		*cp = domount(c);
	return 0;
}



@@ 733,8 739,11 @@ namec(char *name, int amode, int omode, ulong perm)
		mntok = 0;
		elem[0] = 0;
		n = 0;
		while(*name && (*name != '/' || n < 2))
		while(*name && (*name != '/' || n < 2)){
			if(n >= NAMELEN-1)
				error(Efilename);
			elem[n++] = *name++;
		}
		elem[n] = '\0';
		n = chartorune(&r, elem+1)+1;
		if(r == 'M') {