17
AVLTree *keepers = NULL, *nokeepers = NULL;
18
static int keeperfd = -1;
20
void openkeepers(int readonly) {
22
keeperfd = open(KeeperFile, O_RDONLY);
23
if(keeperfd<0 && errno != ENOENT)
24
perror_exit(ERROR_CONFIG, KeeperFile);
28
keeperfd = open(KeeperFile, O_RDWR|O_CREAT, 0666);
30
perror_exit(ERROR_CONFIG, KeeperFile);
32
if(flock(keeperfd, LOCK_EX|LOCK_NB)) {
33
if(getenv("DEBFOSTER_LOCK_SOFTFAIL"))
35
fprintf(stderr, "debfoster is unable to acquire a lock on the keeper file.\nAnother debfoster process probably has it.\n");
36
perror_exit(ERROR_USER, KeeperFile);
39
if(setenv("DEBFOSTER_LOCK_SOFTFAIL", "", 0))
40
perror_exit(ERROR_SYSTEM, "setenv()");
44
void closekeepers(void) {
48
flock(keeperfd, LOCK_UN);
53
void writekeepers(void) {
60
ftruncate(keeperfd, 0);
61
f = fdopen(dup(keeperfd), "w");
63
perror_exit(ERROR_SYSTEM, KeeperFile);
66
for(c = keepers->head; c; c = c->next)
67
fprintf(f, "%s\n", (char *)c->item);
68
for(c = nokeepers->head; c; c = c->next)
69
fprintf(f, "-%s\n", (char *)c->item);
74
void readkeepers(void) {
76
char buf[READBUF], *s;
83
f = fdopen(dup(keeperfd), "r");
85
perror_exit(ERROR_SYSTEM, KeeperFile);
88
while(fgets(buf, READBUF, f)) {
104
AVLInsert(keepers, name);
105
else if (NegativeKeepers && !AVLSearch(keepers, name)) /* sanity check */
106
AVLInsert(nokeepers, name);