/[radius]/radius/radiusd/log.c
ViewVC logotype

Diff of /radius/radiusd/log.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.41 by gray, Tue Apr 29 13:57:59 2003 UTC revision 1.42 by gray, Wed Apr 30 20:12:25 2003 UTC
# Line 73  vlog(int level, char *file, int line, ch Line 73  vlog(int level, char *file, int line, ch
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)
# Line 86  vlog(int level, char *file, int line, ch Line 87  vlog(int level, char *file, int line, ch
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);
# Line 261  channel_free(Channel *chan) Line 263  channel_free(Channel *chan)
263  Channel *  Channel *
264  log_mark()  log_mark()
265  {  {
266          return list_first(chanlist);          return list_item(chanlist, 0);
267  }  }
268    
269  void  void
# Line 269  log_release(Channel *chan) Line 271  log_release(Channel *chan)
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
# Line 285  log_release(Channel *chan) Line 288  log_release(Channel *chan)
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)))
# Line 296  log_release(Channel *chan) Line 299  log_release(Channel *chan)
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
# Line 365  register_category0(int cat, int pri, Cha Line 370  register_category0(int cat, int pri, Cha
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 */

Legend:
Removed from v.1.41  
changed lines
  Added in v.1.42

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26