1*80ee5cbfSDavid du Colombier #include <u.h> 2*80ee5cbfSDavid du Colombier #include <libc.h> 3*80ee5cbfSDavid du Colombier 4*80ee5cbfSDavid du Colombier static Lock privlock; 5*80ee5cbfSDavid du Colombier static int privinit; 6*80ee5cbfSDavid du Colombier static void **privs; 7*80ee5cbfSDavid du Colombier 8*80ee5cbfSDavid du Colombier extern void **_privates; 9*80ee5cbfSDavid du Colombier extern int _nprivates; 10*80ee5cbfSDavid du Colombier 11*80ee5cbfSDavid du Colombier void ** privalloc(void)12*80ee5cbfSDavid du Colombierprivalloc(void) 13*80ee5cbfSDavid du Colombier { 14*80ee5cbfSDavid du Colombier void **p; 15*80ee5cbfSDavid du Colombier int i; 16*80ee5cbfSDavid du Colombier 17*80ee5cbfSDavid du Colombier lock(&privlock); 18*80ee5cbfSDavid du Colombier if(!privinit){ 19*80ee5cbfSDavid du Colombier privinit = 1; 20*80ee5cbfSDavid du Colombier if(_nprivates){ 21*80ee5cbfSDavid du Colombier _privates[0] = 0; 22*80ee5cbfSDavid du Colombier for(i = 1; i < _nprivates; i++) 23*80ee5cbfSDavid du Colombier _privates[i] = &_privates[i - 1]; 24*80ee5cbfSDavid du Colombier privs = &_privates[i - 1]; 25*80ee5cbfSDavid du Colombier } 26*80ee5cbfSDavid du Colombier } 27*80ee5cbfSDavid du Colombier p = privs; 28*80ee5cbfSDavid du Colombier if(p != nil){ 29*80ee5cbfSDavid du Colombier privs = *p; 30*80ee5cbfSDavid du Colombier *p = nil; 31*80ee5cbfSDavid du Colombier } 32*80ee5cbfSDavid du Colombier unlock(&privlock); 33*80ee5cbfSDavid du Colombier return p; 34*80ee5cbfSDavid du Colombier } 35*80ee5cbfSDavid du Colombier 36*80ee5cbfSDavid du Colombier void privfree(void ** p)37*80ee5cbfSDavid du Colombierprivfree(void **p) 38*80ee5cbfSDavid du Colombier { 39*80ee5cbfSDavid du Colombier lock(&privlock); 40*80ee5cbfSDavid du Colombier if(p != nil && privinit){ 41*80ee5cbfSDavid du Colombier *p = privs; 42*80ee5cbfSDavid du Colombier privs = p; 43*80ee5cbfSDavid du Colombier } 44*80ee5cbfSDavid du Colombier unlock(&privlock); 45*80ee5cbfSDavid du Colombier } 46