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

2001/0823/port/devssl.c (diff list | history)

2001/0602/sys/src/9/port/devssl.c:70,892001/0823/sys/src/9/port/devssl.c:70,88 (short | long | prev | next)
1996/1029    
	int	perm; 
1995/1213    
}; 
 
1996/1029    
Lock	dslock; 
int	dshiwat; 
2000/0913    
int	maxdstate = 128; 
2001/0527    
char	**dsname; 
Dstate	**dstate; 
1998/0417    
char	*encalgs; 
char	*hashalgs; 
1996/1029    
                 
1995/1213    
enum 
{ 
1996/1029    
	Maxdmsg=	1<<16, 
	Maxdstate=	64 
2001/0823    
	Maxdstate=	128,	/* must be a power of 2 */ 
1995/1213    
}; 
 
2001/0823    
Lock	dslock; 
int	dshiwat; 
char	*dsname[Maxdstate]; 
Dstate	*dstate[Maxdstate]; 
char	*encalgs; 
char	*hashalgs; 
 
1995/1213    
enum{ 
1996/1029    
	Qtopdir		= 1,	/* top level directory */ 
1998/0417    
	Qprotodir, 
2001/0602/sys/src/9/port/devssl.c:1173,11842001/0823/sys/src/9/port/devssl.c:1172,1177
1998/0417    
	int n; 
	char *cp; 
 
	if((dstate = smalloc(sizeof(Dstate*) * maxdstate)) == 0) 
		panic("sslinit"); 
                 
2001/0527    
	if((dsname = smalloc(sizeof(char*) * maxdstate)) == 0) 
		panic("sslinit"); 
                 
1998/0417    
	n = 1; 
	for(e = encrypttab; e->name != nil; e++) 
		n += strlen(e->name) + 1; 
2001/0602/sys/src/9/port/devssl.c:1397,14022001/0823/sys/src/9/port/devssl.c:1390,1399
1996/1029    
	if(fd < 0) 
		error(Ebadarg); 
1995/1213    
	c = fdtochan(fd, -1, 0, 1);	/* error check and inc ref */ 
2001/0823    
	if(devtab[c->type] == &ssldevtab){ 
		cclose(c); 
		error("cannot ssl encrypt devssl files"); 
	} 
1995/1213    
	return c; 
} 
 
2001/0602/sys/src/9/port/devssl.c:1422,14302001/0823/sys/src/9/port/devssl.c:1419,1426
1996/1029    
static Dstate* 
dsclone(Chan *ch) 
{ 
	Dstate **pp, **ep, **np; 
2001/0527    
	char **names; 
1996/1029    
	int newmax; 
2001/0823    
	int i; 
	Dstate *ret; 
1996/1029    
 
	if(waserror()) { 
		unlock(&dslock); 
2001/0602/sys/src/9/port/devssl.c:1431,14722001/0823/sys/src/9/port/devssl.c:1427,1443
1996/1029    
		nexterror(); 
	} 
	lock(&dslock); 
	ep = &dstate[maxdstate]; 
	for(pp = dstate; pp < ep; pp++) { 
		if(*pp == 0) { 
			dsnew(ch, pp); 
2001/0823    
	ret = nil; 
	for(i=0; i<Maxdstate; i++){ 
		if(dstate[i] == nil){ 
			dsnew(ch, &dstate[i]); 
			ret = dstate[i]; 
1996/1029    
			break; 
		} 
	} 
	if(pp >= ep) { 
		if(maxdstate >= Maxdstate) { 
			unlock(&dslock); 
			poperror(); 
			return 0; 
		} 
		newmax = 2 * maxdstate; 
		if(newmax > Maxdstate) 
			newmax = Maxdstate; 
2001/0527    
                 
1996/1029    
		np = smalloc(sizeof(Dstate*) * newmax); 
		if(np == 0) 
			error(Enomem); 
		memmove(np, dstate, sizeof(Dstate*) * maxdstate); 
		dstate = np; 
		pp = &dstate[maxdstate]; 
2001/0527    
                 
		names = smalloc(sizeof(char*) * newmax); 
		if(names == 0) 
			error(Enomem); 
		memmove(names, dsname, sizeof(char*) * maxdstate); 
		dsname = names; 
                 
1996/1029    
		maxdstate = newmax; 
		dsnew(ch, pp); 
	} 
	unlock(&dslock); 
	poperror(); 
	return *pp; 
2001/0823    
	return ret; 
1996/1029    
} 
 
static void 


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