libc: remove privfree(), simplify privalloc()
This commit is contained in:
parent
431cbe35f6
commit
7562da90e5
3 changed files with 6 additions and 43 deletions
|
@ -2,8 +2,6 @@
|
|||
#include <libc.h>
|
||||
|
||||
static Lock privlock;
|
||||
static int privinit;
|
||||
static void **privs;
|
||||
|
||||
extern void **_privates;
|
||||
extern int _nprivates;
|
||||
|
@ -12,34 +10,13 @@ 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;
|
||||
}
|
||||
if(_nprivates > 0)
|
||||
p = &_privates[--_nprivates];
|
||||
else
|
||||
p = nil;
|
||||
unlock(&privlock);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
void
|
||||
privfree(void **p)
|
||||
{
|
||||
lock(&privlock);
|
||||
if(p != nil && privinit){
|
||||
*p = privs;
|
||||
privs = p;
|
||||
}
|
||||
unlock(&privlock);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue