LCOV - code coverage report
Current view: top level - src - cstat.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 60 73 82.2 %
Date: 2019-11-30 11:33:35 Functions: 11 12 91.7 %

          Line data    Source code
       1             : #include "burp.h"
       2             : #include "alloc.h"
       3             : #include "bu.h"
       4             : #include "cstat.h"
       5             : #include "log.h"
       6             : #include "prepend.h"
       7             : #include "strlist.h"
       8             : 
       9         116 : struct cstat *cstat_alloc(void)
      10             : {
      11         116 :         return (struct cstat *)calloc_w(1, sizeof(struct cstat), __func__);
      12             : }
      13             : 
      14         115 : int cstat_init(struct cstat *cstat,
      15             :         const char *name, const char *clientconfdir)
      16             : {
      17         115 :         if((clientconfdir && !(cstat->conffile=prepend_s(clientconfdir, name)))
      18         115 :           || !(cstat->name=strdup_w(name, __func__)))
      19             :                 return -1;
      20             :         return 0;
      21             : }
      22             : 
      23         116 : static void cstat_free_content(struct cstat *c)
      24             : {
      25         116 :         if(!c) return;
      26         116 :         bu_list_free(&c->bu);
      27         116 :         free_w(&c->name);
      28         116 :         free_w(&c->conffile);
      29         116 :         strlists_free(&c->labels);
      30         116 :         cntrs_free(&c->cntrs);
      31         116 :         if(c->sdirs) logp("%s() called without freeing sdirs\n", __func__);
      32         116 :         c->clientdir_mtime=0;
      33             : }
      34             : 
      35           1 : void cstat_add_cntr_to_list(struct cstat *c, struct cntr *cntr)
      36             : {
      37           1 :         cntr->next=c->cntrs;
      38           1 :         c->cntrs=cntr;
      39           1 : }
      40             : 
      41           0 : void cstat_remove_cntr_from_list(struct cstat *c, struct cntr *cntr)
      42             : {
      43             :         struct cntr *x;
      44           0 :         if(!c || !cntr)
      45             :                 return;
      46           0 :         if(c->cntrs==cntr)
      47             :         {
      48           0 :                 c->cntrs=cntr->next;
      49           0 :                 return;
      50             :         }
      51           0 :         for(x=c->cntrs; x; x=x->next)
      52             :         {
      53           0 :                 if(x->next==cntr)
      54             :                 {
      55           0 :                         x->next=cntr->next;
      56           0 :                         return;
      57             :                 }
      58             :         }
      59             : }
      60             : 
      61         116 : void cstat_free(struct cstat **cstat)
      62             : {
      63         116 :         if(!cstat || !*cstat) return;
      64         116 :         cstat_free_content(*cstat);
      65         116 :         free_v((void **)cstat);
      66             : }
      67             : 
      68         104 : void cstat_add_to_list(struct cstat **clist, struct cstat *cnew)
      69             : {
      70         104 :         struct cstat *c=NULL;
      71         104 :         struct cstat *clast=NULL;
      72             : 
      73         180 :         for(c=*clist; c; c=c->next)
      74             :         {
      75         108 :                 if(strcmp(cnew->name, c->name)<0)
      76             :                 {
      77          32 :                         c->prev=cnew;
      78          32 :                         break;
      79             :                 }
      80          76 :                 c->prev=clast;
      81          76 :                 clast=c;
      82             :         }
      83         104 :         if(clast)
      84             :         {
      85          55 :                 cnew->next=clast->next;
      86          55 :                 clast->next=cnew;
      87          55 :                 cnew->prev=clast;
      88             :         }
      89             :         else
      90             :         {
      91          49 :                 *clist=cnew;
      92          49 :                 cnew->next=c;
      93             :         }
      94         104 : }
      95             : 
      96          55 : void cstat_list_free(struct cstat **clist)
      97             : {
      98             :         struct cstat *c;
      99             :         struct cstat *next;
     100          55 :         struct cstat *prev=NULL;
     101          55 :         if(*clist) prev=(*clist)->prev;
     102         151 :         for(c=*clist; c; c=next)
     103             :         {
     104          96 :                 next=c->next;
     105          96 :                 cstat_free(&c);
     106             :         }
     107             :         // Do it in both directions.
     108          55 :         for(c=prev; c; c=prev)
     109             :         {
     110           0 :                 prev=c->prev;
     111           0 :                 cstat_free(&c);
     112             :         }
     113          55 :         *clist=NULL;
     114          55 : }
     115             : 
     116          45 : const char *run_status_to_str(struct cstat *cstat)
     117             : {
     118          45 :         switch(cstat->run_status)
     119             :         {
     120             :                 case RUN_STATUS_IDLE:
     121             :                         return RUN_STATUS_STR_IDLE;
     122             :                 case RUN_STATUS_RUNNING:
     123           0 :                         return RUN_STATUS_STR_RUNNING;
     124             :                 default:
     125          45 :                         return "unknown";
     126             :         }
     127             : }
     128             : 
     129          80 : enum run_status run_str_to_status(const char *str)
     130             : {
     131          80 :         if(!strcmp(str, RUN_STATUS_STR_IDLE))
     132             :                 return RUN_STATUS_IDLE;
     133          80 :         else if(!strcmp(str, RUN_STATUS_STR_RUNNING))
     134             :                 return RUN_STATUS_RUNNING;
     135          80 :         return RUN_STATUS_UNSET;
     136             : }
     137             : 
     138          81 : struct cstat *cstat_get_by_name(struct cstat *clist, const char *name)
     139             : {
     140             :         struct cstat *c;
     141          81 :         for(c=clist; c; c=c->next) if(!strcmp(c->name, name)) return c;
     142             :         return NULL;
     143             : }
     144             : 
     145           4 : int cstat_count(struct cstat *clist)
     146             : {
     147           4 :         int count=0;
     148             :         struct cstat *c;
     149           4 :         for(c=clist; c; c=c->next)
     150           0 :                 count++;
     151           4 :         return count;
     152             : }

Generated by: LCOV version 1.13