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: 2022-05-01 01:22:11 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           3 :         log_oom_w(__func__, func);
      24             :         return NULL;
      25             : }
      26             : #endif
      27             : 
      28       90986 : char *strdup_w(const char *s, const char *func)
      29             : {
      30             :         char *ret;
      31             : #ifdef UTEST
      32       90987 :         if(alloc_errors) return errored(func);
      33             : #endif
      34       90985 :         if(!(ret=strdup(s))) log_oom_w(__func__, func);
      35             : #ifdef UTEST
      36             :         else
      37             :         {
      38       90985 :                 alloc_count++;
      39       90985 :                 if(alloc_debug) printf("%p alloced s\n", ret);
      40             :         }
      41             : #endif
      42             :         return ret;
      43             : }
      44             : 
      45       51976 : void *realloc_w(void *ptr, size_t size, const char *func)
      46             : {
      47             :         void *ret;
      48             : #ifdef UTEST
      49       51976 :         int already_alloced=0;
      50       51976 :         if(alloc_errors) return errored(func);
      51       51976 :         if(ptr)
      52             :         {
      53       45191 :                 already_alloced=1;
      54       45191 :                 if(alloc_debug) printf("%p freed r\n", ptr);
      55             :         }
      56             : #endif
      57       51976 :         if(!(ret=realloc(ptr, size))) log_oom_w(__func__, func);
      58             : #ifdef UTEST
      59       51976 :         else if(!already_alloced)
      60        6785 :                 alloc_count++;
      61       51976 :         if(alloc_debug) printf("%p alloced r\n", ret);
      62             : #endif
      63             :         return ret;
      64             : }
      65             : 
      66       92952 : void *malloc_w(size_t size, const char *func)
      67             : {
      68             :         void *ret;
      69             : #ifdef UTEST
      70       92952 :         if(alloc_errors) return errored(func);
      71             : #endif
      72       92952 :         if(!(ret=malloc(size))) log_oom_w(__func__, func);
      73             : #ifdef UTEST
      74             :         else
      75             :         {
      76       92952 :                 alloc_count++;
      77       92952 :                 if(alloc_debug) printf("%p alloced m\n", ret);
      78             :         }
      79             : #endif
      80             :         return ret;
      81             : }
      82             : 
      83      132026 : void *calloc_w(size_t nmem, size_t size, const char *func)
      84             : {
      85             :         void *ret;
      86             : #ifdef UTEST
      87      132028 :         if(alloc_errors) return errored(func);
      88             : #endif
      89      132024 :         if(!(ret=calloc(nmem, size))) log_oom_w(__func__, func);
      90             : #ifdef UTEST
      91             :         else
      92             :         {
      93      132024 :                 alloc_count++;
      94      132024 :                 if(alloc_debug) printf("%p alloced c\n", ret);
      95             :         }
      96             : #endif
      97             :         return ret;
      98             : }
      99             : 
     100      705654 : void free_v(void **ptr)
     101             : {
     102      705654 :         if(!ptr || !*ptr) return;
     103             : #ifdef UTEST
     104      322744 :         if(alloc_debug) printf("%p freed\n", *ptr);
     105             : #endif
     106      322744 :         free(*ptr);
     107      322744 :         *ptr=NULL;
     108             : #ifdef UTEST
     109      322744 :         free_count++;
     110             : #endif
     111             : }
     112             : 
     113      569510 : void free_w(char **str)
     114             : {
     115      569510 :         free_v((void **)str);
     116      569510 : }

Generated by: LCOV version 1.13