73 |
char *buf1 = NULL; |
char *buf1 = NULL; |
74 |
char *buf2 = NULL; |
char *buf2 = NULL; |
75 |
char *buf3 = NULL; |
char *buf3 = NULL; |
76 |
|
ITERATOR *itr = iterator_create(chanlist); |
77 |
|
|
78 |
cat = L_CAT(level); |
cat = L_CAT(level); |
79 |
if (cat == 0) |
if (cat == 0) |
87 |
|
|
88 |
vasprintf(&buf2, fmt, ap); |
vasprintf(&buf2, fmt, ap); |
89 |
|
|
90 |
for (chan = list_first(chanlist); chan; chan = list_next(chanlist)) { |
for (chan = iterator_first(itr); chan; chan = iterator_next(itr)) { |
91 |
/* Skip channels whith incorrect priority */ |
/* Skip channels whith incorrect priority */ |
92 |
if (chan->pmask[cat] & L_MASK(pri)) |
if (chan->pmask[cat] & L_MASK(pri)) |
93 |
log_to_channel(chan, cat, pri, buf1, buf2, buf3); |
log_to_channel(chan, cat, pri, buf1, buf2, buf3); |
94 |
} |
} |
95 |
|
iterator_destroy(&itr); |
96 |
|
|
97 |
if (buf1) |
if (buf1) |
98 |
free(buf1); |
free(buf1); |
263 |
Channel * |
Channel * |
264 |
log_mark() |
log_mark() |
265 |
{ |
{ |
266 |
return list_first(chanlist); |
return list_item(chanlist, 0); |
267 |
} |
} |
268 |
|
|
269 |
void |
void |
271 |
{ |
{ |
272 |
Channel *cp, *prev = NULL; |
Channel *cp, *prev = NULL; |
273 |
int emerg, alert, crit; |
int emerg, alert, crit; |
274 |
|
ITERATOR *itr = iterator_create(chanlist); |
275 |
|
|
276 |
cp = list_locate(chanlist, chan, NULL); |
for (cp = iterator_first(itr); cp; cp = iterator_next(itr)) |
277 |
|
if (cp == chan) |
278 |
while (cp) { |
break; |
279 |
|
for (; cp; cp = iterator_next(itr)) { |
280 |
if (!(cp->options & LO_PERSIST)) { |
if (!(cp->options & LO_PERSIST)) { |
281 |
list_remove_current(chanlist); |
list_remove(chanlist, cp, NULL); |
282 |
channel_free(cp); |
channel_free(cp); |
283 |
} |
} |
|
cp = list_next(chanlist); |
|
284 |
} |
} |
285 |
|
|
286 |
/* Make sure we have at least a channel for categories below |
/* Make sure we have at least a channel for categories below |
288 |
emerg = L_EMERG; |
emerg = L_EMERG; |
289 |
alert = L_ALERT; |
alert = L_ALERT; |
290 |
crit = L_CRIT; |
crit = L_CRIT; |
291 |
for (cp = list_first(chanlist); cp; cp = list_next(chanlist)) { |
for (cp = iterator_first(itr); cp; cp = iterator_next(itr)) { |
292 |
int i; |
int i; |
293 |
for (i = 1; i < L_NCAT; i++) { |
for (i = 1; i < L_NCAT; i++) { |
294 |
if (emerg && (cp->pmask[i] & L_MASK(emerg))) |
if (emerg && (cp->pmask[i] & L_MASK(emerg))) |
299 |
crit = 0; |
crit = 0; |
300 |
} |
} |
301 |
} |
} |
302 |
|
iterator_destroy(&itr); |
303 |
if (emerg || alert || crit) |
if (emerg || alert || crit) |
304 |
log_set_default("##emerg##", -1, emerg|alert|crit); |
log_set_default("##emerg##", -1, emerg|alert|crit); |
305 |
} |
} |
306 |
|
|
307 |
|
static int |
308 |
|
_chancmp(const void *item, const void *data) |
309 |
|
{ |
310 |
|
const Channel *chan = item; |
311 |
|
const char *name = data; |
312 |
|
return strcmp(chan->name, name); |
313 |
|
} |
314 |
|
|
315 |
Channel * |
Channel * |
316 |
channel_lookup(char *name) |
channel_lookup(char *name) |
317 |
{ |
{ |
318 |
Channel *chan; |
return list_locate(chanlist, name, _chancmp); |
|
|
|
|
for (chan = list_first(chanlist); chan; chan = list_next(chanlist)) { |
|
|
if (strcmp(chan->name, name) == 0) |
|
|
break ; |
|
|
} |
|
|
return chan; |
|
319 |
} |
} |
320 |
|
|
321 |
void |
void |
370 |
chan->pmask[L_CAT(cat)] |= pri; |
chan->pmask[L_CAT(cat)] |= pri; |
371 |
} |
} |
372 |
|
|
373 |
|
struct category_closure { |
374 |
|
int cat; |
375 |
|
int pri; |
376 |
|
}; |
377 |
|
|
378 |
|
static int |
379 |
|
_regcat(void *item, void *data) |
380 |
|
{ |
381 |
|
Channel *chan = item; |
382 |
|
struct category_closure *cp = data; |
383 |
|
register_category0(cp->cat, cp->pri, chan); |
384 |
|
return 0; |
385 |
|
} |
386 |
|
|
387 |
void |
void |
388 |
register_category(int cat, int pri, LIST *clist) |
register_category(int cat, int pri, LIST *clist) |
389 |
{ |
{ |
390 |
Channel *chan; |
Channel *chan; |
391 |
|
struct category_closure clos; |
392 |
|
|
393 |
if (pri == -1) |
if (pri == -1) |
394 |
pri = L_UPTO(L_DEBUG); |
pri = L_UPTO(L_DEBUG); |
395 |
|
|
396 |
for (chan = list_first(clist); chan; chan = list_next(clist)) |
clos.cat = cat; |
397 |
register_category0(cat, pri, chan); |
clos.pri = pri; |
398 |
|
list_iterate(clist, _regcat, &clos); |
399 |
} |
} |
400 |
|
|
401 |
/* Auxiliary calls */ |
/* Auxiliary calls */ |