plan 9 kernel history: overview | file list | diff list

1992/0113/port/devmux.c (diff list | history)

1992/0111/sys/src/9/port/devmux.c:221,2331992/0113/sys/src/9/port/devmux.c:221,233 (short | long | prev | next)
1991/1114    
	switch(NCON(c)) { 
	case Qhead: 
		if(m->headopen) 
			errors("server channel busy"); 
1992/0113    
			error(Einuse); 
1991/1117    
		m->headopen = 1; 
		m->ref++; 
1991/1114    
		break; 
	case Qclone: 
		if(m->headopen == 0) 
			errors("server shutdown"); 
1992/0113    
			error(Emuxshutdown); 
1991/1114    
 
		cm = m->connects; 
		for(e = &cm[Nmux]; cm < e; cm++) 
1992/0111/sys/src/9/port/devmux.c:234,2401992/0113/sys/src/9/port/devmux.c:234,240
1991/1114    
			if(cm->ref == 0) 
				break; 
1991/1117    
		if(cm == e) 
1991/1114    
			errors("all cannels busy"); 
1992/0113    
			error(Emuxbusy); 
1991/1115    
		cm->ref = 1; 
1991/1114    
		m->ref++; 
		strncpy(cm->user, u->p->user, NAMELEN); 
1992/0111/sys/src/9/port/devmux.c:275,2811992/0113/sys/src/9/port/devmux.c:275,281
1991/1114    
	} 
 
	if(m == e) 
		errors("no multiplexors"); 
1992/0113    
		error(Enomux); 
1991/1114    
 
	strncpy(m->name, name, NAMELEN); 
	strncpy(m->user, u->p->user, NAMELEN); 
1992/0111/sys/src/9/port/devmux.c:304,3111992/0113/sys/src/9/port/devmux.c:304,311
1991/1117    
	if((c->qid.path&CHDIR) == 0 && m->srv == 0) 
		error(Eperm); 
		 
1991/1114    
	if(strcmp(u->p->user, m->user) != 0) 
		errors("not owner"); 
1992/0113    
	if(strncmp(u->p->user, m->user, NAMELEN)) 
		error(Eperm); 
1991/1114    
 
1991/1117    
	srv = 0; 
	lock(m); 
1992/0111/sys/src/9/port/devmux.c:332,3391992/0113/sys/src/9/port/devmux.c:332,339
1991/1114    
		error(Eperm); 
 
	m = &muxes[NMUX(c)]; 
	if(strcmp(u->p->user, m->user) != 0) 
		errors("not owner"); 
1992/0113    
	if(strncmp(u->p->user, m->user, NAMELEN)) 
		error(Eperm); 
1991/1114    
 
	convM2D(db, &d); 
	d.mode &= 0777; 
1992/0111/sys/src/9/port/devmux.c:434,4441992/0113/sys/src/9/port/devmux.c:434,444
1991/1114    
	Con *c; 
 
1991/1115    
	if(h[0] != Tmux || h[2] != 0) 
1991/1114    
		error(Ebadmsg); 
1992/0113    
		error(Emuxmsg); 
1991/1114    
 
	c = &m->connects[h[1]]; 
	if(c < m->connects || c > &m->connects[Nmux])	 
		error(Ebadmsg); 
1992/0113    
		error(Emuxmsg); 
1991/1114    
 
	if(c->ref == 0) 
		return 0; 
1992/0111/sys/src/9/port/devmux.c:476,4821992/0113/sys/src/9/port/devmux.c:476,482
1991/1114    
		error(Eperm); 
	case Qhead: 
		if(n < 2) 
			error(Ebadmsg); 
1992/0113    
			error(Emuxmsg); 
1991/1114    
 
		a = (char*)va; 
		memmove(hdr, a, sizeof(hdr)); 
1992/0111/sys/src/9/port/devmux.c:610,6161992/0113/sys/src/9/port/devmux.c:610,616
1991/1115    
	while(!havedata(q)) { 
		sleep(&q->r, havedata, q); 
		if(m->headopen == 0) 
			errors("server shutdown"); 
1992/0113    
			errors(Emuxshutdown); 
1991/1115    
	} 
1991/1114    
 
	nread = 0; 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)