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: 2019-04-28 12:12:12 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      502662 : char *strdup_w(const char *s, const char *func)
      29             : {
      30             :         char *ret;
      31             : #ifdef UTEST
      32      502663 :         if(alloc_errors) return errored(func);
      33             : #endif
      34      502661 :         if(!(ret=strdup(s))) log_oom_w(__func__, func);
      35             : #ifdef UTEST
      36             :         else
      37             :         {
      38      502661 :                 alloc_count++;
      39      502661 :                 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      652788 : void *malloc_w(size_t size, const char *func)
      67             : {
      68             :         void *ret;
      69             : #ifdef UTEST
      70      652789 :         if(alloc_errors) return errored(func);
      71             : #endif
      72      652787 :         if(!(ret=malloc(size))) log_oom_w(__func__, func);
      73             : #ifdef UTEST
      74             :         else
      75             :         {
      76      652787 :                 alloc_count++;
      77      652787 :                 if(alloc_debug) printf("%p alloced m\n", ret);
      78             :         }
      79             : #endif
      80             :         return ret;
      81             : }
      82             : 
      83      590815 : void *calloc_w(size_t nmem, size_t size, const char *func)
      84             : {
      85             :         void *ret;
      86             : #ifdef UTEST
      87      590822 :         if(alloc_errors) return errored(func);
      88             : #endif
      89      590808 :         if(!(ret=calloc(nmem, size))) log_oom_w(__func__, func);
      90             : #ifdef UTEST
      91             :         else
      92             :         {
      93      590808 :                 alloc_count++;
      94      590808 :                 if(alloc_debug) printf("%p alloced c\n", ret);
      95             :         }
      96             : #endif
      97             :         return ret;
      98             : }
      99             : 
     100     3304402 : void free_v(void **ptr)
     101             : {
     102     3304402 :         if(!ptr || !*ptr) return;
     103             : #ifdef UTEST
     104     1794129 :         if(alloc_debug) printf("%p freed\n", *ptr);
     105             : #endif
     106     1794129 :         free(*ptr);
     107     1794129 :         *ptr=NULL;
     108             : #ifdef UTEST
     109     1794129 :         free_count++;
     110             : #endif
     111             : }
     112             : 
     113     2557915 : void free_w(char **str)
     114             : {
     115     2557915 :         free_v((void **)str);
     116     2557915 : }

Generated by: LCOV version 1.13