minimal plan9port to cross-build Jehanne
This commit is contained in:
58
lib/lib9/atnotify.c
Normal file
58
lib/lib9/atnotify.c
Normal file
@ -0,0 +1,58 @@
|
||||
#include <u.h>
|
||||
#include <libc.h>
|
||||
|
||||
#define NFN 33
|
||||
static int (*onnot[NFN])(void*, char*);
|
||||
static Lock onnotlock;
|
||||
|
||||
static
|
||||
void
|
||||
notifier(void *v, char *s)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<NFN; i++)
|
||||
if(onnot[i] && ((*onnot[i])(v, s))){
|
||||
noted(NCONT);
|
||||
return;
|
||||
}
|
||||
noted(NDFLT);
|
||||
}
|
||||
|
||||
int
|
||||
atnotify(int (*f)(void*, char*), int in)
|
||||
{
|
||||
int i, n, ret;
|
||||
static int init;
|
||||
|
||||
if(!init){
|
||||
notify(notifier);
|
||||
init = 1; /* assign = */
|
||||
}
|
||||
ret = 0;
|
||||
lock(&onnotlock);
|
||||
if(in){
|
||||
for(i=0; i<NFN; i++)
|
||||
if(onnot[i] == 0) {
|
||||
onnot[i] = f;
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
n = 0;
|
||||
for(i=0; i<NFN; i++)
|
||||
if(onnot[i]){
|
||||
if(ret==0 && onnot[i]==f){
|
||||
onnot[i] = 0;
|
||||
ret = 1;
|
||||
}else
|
||||
n++;
|
||||
}
|
||||
if(n == 0){
|
||||
init = 0;
|
||||
notify(0);
|
||||
}
|
||||
}
|
||||
unlock(&onnotlock);
|
||||
return ret;
|
||||
}
|
Reference in New Issue
Block a user