LCOV - code coverage report
Current view: top level - src - alloc.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 39 39 100.0 %
Date: 2020-07-31 05:59:47 Functions: 7 7 100.0 %

          Line data    Source code
       1             : #include "burp.h"
       2             : #include "alloc.h"
       3             : #include "log.h"
       4             : 
       5             : #ifdef UTEST
       6             : int alloc_debug=0;
       7             : /*
       8             :    To use alloc_debug:
       9             :    CK_FORK=no ./runner > /tmp/out
      10             :    grep freed /tmp/out | cut -f 1 -d ' ' | sort > /tmp/freed && grep alloced /tmp/out | cut -f 1 -d ' ' | sort > /tmp/alloced && diff -u /tmp/alloced /tmp/freed
      11             : */
      12             : int alloc_errors=0;
      13             : uint64_t alloc_count=0;
      14             : uint64_t free_count=0;
      15          39 : void alloc_counters_reset(void)
      16             : {
      17          39 :         alloc_count=0;
      18          39 :         free_count=0;
      19          39 : }
      20             : 
      21             : static char *errored(const char *func)
      22             : {
      23          10 :         log_oom_w(__func__, func);
      24             :         return NULL;
      25             : }
      26             : #endif
      27             : 
      28      504613 : char *strdup_w(const char *s, const char *func)
      29             : {
      30             :         char *ret;
      31             : #ifdef UTEST
      32      504614 :         if(alloc_errors) return errored(func);
      33             : #endif
      34      504612 :         if(!(ret=strdup(s))) log_oom_w(__func__, func);
      35             : #ifdef UTEST
      36             :         else
      37             :         {
      38      504612 :                 alloc_count++;
      39      504612 :                 if(alloc_debug) printf("%p alloced s\n", ret);
      40             :         }
      41             : #endif
      42             :         return ret;
      43             : }
      44             : 
      45      506042 : void *realloc_w(void *ptr, size_t size, const char *func)
      46             : {
      47             :         void *ret;
      48             : #ifdef UTEST
      49      506042 :         int already_alloced=0;
      50      506043 :         if(alloc_errors) return errored(func);
      51      506041 :         if(ptr)
      52             :         {
      53      458166 :                 already_alloced=1;
      54      458166 :                 if(alloc_debug) printf("%p freed r\n", ptr);
      55             :         }
      56             : #endif
      57      506041 :         if(!(ret=realloc(ptr, size))) log_oom_w(__func__, func);
      58             : #ifdef UTEST
      59      506041 :         else if(!already_alloced)
      60       47875 :                 alloc_count++;
      61      506041 :         if(alloc_debug) printf("%p alloced r\n", ret);
      62             : #endif
      63             :         return ret;
      64             : }
      65             : 
      66      654476 : void *malloc_w(size_t size, const char *func)
      67             : {
      68             :         void *ret;
      69             : #ifdef UTEST
      70      654477 :         if(alloc_errors) return errored(func);
      71             : #endif
      72      654475 :         if(!(ret=malloc(size))) log_oom_w(__func__, func);
      73             : #ifdef UTEST
      74             :         else
      75             :         {
      76      654475 :                 alloc_count++;
      77      654475 :                 if(alloc_debug) printf("%p alloced m\n", ret);
      78             :         }
      79             : #endif
      80             :         return ret;
      81             : }
      82             : 
      83      596708 : void *calloc_w(size_t nmem, size_t size, const char *func)
      84             : {
      85             :         void *ret;
      86             : #ifdef UTEST
      87      596715 :         if(alloc_errors) return errored(func);
      88             : #endif
      89      596701 :         if(!(ret=calloc(nmem, size))) log_oom_w(__func__, func);
      90             : #ifdef UTEST
      91             :         else
      92             :         {
      93      596701 :                 alloc_count++;
      94      596701 :                 if(alloc_debug) printf("%p alloced c\n", ret);
      95             :         }
      96             : #endif
      97             :         return ret;
      98             : }
      99             : 
     100     3318135 : void free_v(void **ptr)
     101             : {
     102     3318135 :         if(!ptr || !*ptr) return;
     103             : #ifdef UTEST
     104     1803661 :         if(alloc_debug) printf("%p freed\n", *ptr);
     105             : #endif
     106     1803661 :         free(*ptr);
     107     1803661 :         *ptr=NULL;
     108             : #ifdef UTEST
     109     1803661 :         free_count++;
     110             : #endif
     111             : }
     112             : 
     113     2565558 : void free_w(char **str)
     114             : {
     115     2565558 :         free_v((void **)str);
     116     2565558 : }

Generated by: LCOV version 1.13