mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
55 lines
704 B
C
55 lines
704 B
C
|
#include <u.h>
|
||
|
#include <libc.h>
|
||
|
|
||
|
#define NEXIT 33
|
||
|
|
||
|
static Lock onexlock;
|
||
|
static struct
|
||
|
{
|
||
|
void (*f)(void);
|
||
|
int pid;
|
||
|
}onex[NEXIT];
|
||
|
|
||
|
int
|
||
|
atexit(void (*f)(void))
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
lock(&onexlock);
|
||
|
for(i=0; i<NEXIT; i++)
|
||
|
if(onex[i].f == 0) {
|
||
|
onex[i].pid = getpid();
|
||
|
onex[i].f = f;
|
||
|
unlock(&onexlock);
|
||
|
return 1;
|
||
|
}
|
||
|
unlock(&onexlock);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
atexitdont(void (*f)(void))
|
||
|
{
|
||
|
int i, pid;
|
||
|
|
||
|
pid = getpid();
|
||
|
for(i=0; i<NEXIT; i++)
|
||
|
if(onex[i].f == f && onex[i].pid == pid)
|
||
|
onex[i].f = 0;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
exits(char *s)
|
||
|
{
|
||
|
int i, pid;
|
||
|
void (*f)(void);
|
||
|
|
||
|
pid = getpid();
|
||
|
for(i = NEXIT-1; i >= 0; i--)
|
||
|
if((f = onex[i].f) && pid == onex[i].pid) {
|
||
|
onex[i].f = 0;
|
||
|
(*f)();
|
||
|
}
|
||
|
_exits(s);
|
||
|
}
|