45 lines · 606 B · C
RawDownload
#include <u.h>#include <libc.h> static Lock	privlock;static int	privinit;static void	**privs; extern void	**_privates;extern int	_nprivates; void **privalloc(void){	void **p;	int i; 	lock(&privlock);	if(!privinit){		privinit = 1;		if(_nprivates){			_privates[0] = 0;			for(i = 1; i < _nprivates; i++)				_privates[i] = &_privates[i - 1];			privs = &_privates[i - 1];		}	}	p = privs;	if(p != nil){		privs = *p;		*p = nil;	}	unlock(&privlock);	return p;} voidprivfree(void **p){	lock(&privlock);	if(p != nil && privinit){		*p = privs;		privs = p;	}	unlock(&privlock);}