LCOV - code coverage report
Current view: top level - src - alloc.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 43 43 100.0 %
Date: 2017-10-31 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          30 : void alloc_counters_reset(void)
      16             : {
      17          30 :         alloc_count=0;
      18          30 :         free_count=0;
      19          30 : }
      20             : 
      21             : static char *errored(const char *func)
      22             : {
      23          10 :         log_oom_w(__func__, func);
      24             :         return NULL;
      25             : }
      26             : #endif
      27             : 
      28      454462 : char *strdup_w(const char *s, const char *func)
      29             : {
      30             :         char *ret;
      31             : #ifdef UTEST
      32      454463 :         if(alloc_errors) return errored(func);
      33             : #endif
      34      454461 :         if(!(ret=strdup(s))) log_oom_w(__func__, func);
      35             : #ifdef UTEST
      36             :         else
      37             :         {
      38      454461 :                 alloc_count++;
      39      454461 :                 if(alloc_debug) printf("%p alloced s\n", ret);
      40             :         }
      41             : #endif
      42      454461 :         return ret;
      43             : }
      44             : 
      45      458704 : void *realloc_w(void *ptr, size_t size, const char *func)
      46             : {
      47             :         void *ret;
      48             : #ifdef UTEST
      49      458704 :         int already_alloced=0;
      50      458705 :         if(alloc_errors) return errored(func);
      51      458703 :         if(ptr)
      52             :         {
      53      410883 :                 already_alloced=1;
      54      410883 :                 if(alloc_debug) printf("%p freed r\n", ptr);
      55             :         }
      56             : #endif
      57      458703 :         if(!(ret=realloc(ptr, size))) log_oom_w(__func__, func);
      58             : #ifdef UTEST
      59      458703 :         else if(!already_alloced)
      60       47820 :                 alloc_count++;
      61      458703 :         if(alloc_debug) printf("%p alloced r\n", ret);
      62             : #endif
      63      458703 :         return ret;
      64             : }
      65             : 
      66      650848 : void *malloc_w(size_t size, const char *func)
      67             : {
      68             :         void *ret;
      69             : #ifdef UTEST
      70      650849 :         if(alloc_errors) return errored(func);
      71             : #endif
      72      650847 :         if(!(ret=malloc(size))) log_oom_w(__func__, func);
      73             : #ifdef UTEST
      74             :         else
      75             :         {
      76      650847 :                 alloc_count++;
      77      650847 :                 if(alloc_debug) printf("%p alloced m\n", ret);
      78             :         }
      79             : #endif
      80      650847 :         return ret;
      81             : }
      82             : 
      83      578598 : void *calloc_w(size_t nmem, size_t size, const char *func)
      84             : {
      85             :         void *ret;
      86             : #ifdef UTEST
      87      578605 :         if(alloc_errors) return errored(func);
      88             : #endif
      89      578591 :         if(!(ret=calloc(nmem, size))) log_oom_w(__func__, func);
      90             : #ifdef UTEST
      91             :         else
      92             :         {
      93      578591 :                 alloc_count++;
      94      578591 :                 if(alloc_debug) printf("%p alloced c\n", ret);
      95             :         }
      96             : #endif
      97      578591 :         return ret;
      98             : }
      99             : 
     100     3482511 : void free_v(void **ptr)
     101             : {
     102     6965022 :         if(!ptr || !*ptr) return;
     103             : #ifdef UTEST
     104     1731712 :         if(alloc_debug) printf("%p freed\n", *ptr);
     105             : #endif
     106     1731712 :         free(*ptr);
     107     1731712 :         *ptr=NULL;
     108             : #ifdef UTEST
     109     1731712 :         free_count++;
     110             : #endif
     111             : }
     112             : 
     113     2750607 : void free_w(char **str)
     114             : {
     115     2750607 :         free_v((void **)str);
     116     2750607 : }

Generated by: LCOV version 1.10