LCOV - code coverage report
Current view: top level - src - prepend.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 38 40 95.0 %
Date: 2018-12-11 11:12:16 Functions: 6 6 100.0 %

          Line data    Source code
       1             : #include "burp.h"
       2             : #include "alloc.h"
       3             : #include "log.h"
       4             : #include "prepend.h"
       5             : 
       6             : /* This may be given binary data, of which we need to already know the length */
       7       40529 : char *prepend_len(const char *prep, size_t plen, const char *fname,
       8             :         size_t flen, const char *sep, size_t slen, size_t *newlen)
       9             : {
      10       40529 :         size_t l=0;
      11       40529 :         char *rpath=NULL;
      12             : 
      13       40529 :         l+=plen;
      14       40529 :         l+=flen;
      15       40529 :         l+=slen;
      16       40529 :         l+=1;
      17             : 
      18       40529 :         if(!(rpath=(char *)malloc_w(l, __func__)))
      19             :                 return NULL;
      20       40529 :         if(plen) memcpy(rpath,           prep,  plen);
      21       40529 :         if(slen) memcpy(rpath+plen,      sep,   slen);
      22       40529 :         if(flen) memcpy(rpath+plen+slen, fname, flen);
      23       40529 :         rpath[plen+slen+flen]='\0';
      24             : 
      25       40529 :         if(newlen) (*newlen)+=slen+flen;
      26             :         return rpath;
      27             : }
      28             : 
      29       40521 : char *prepend_n(const char *prep, const char *fname,
      30             :         size_t len, const char *sep)
      31             : {
      32       75809 :         return prepend_len(prep, prep?strlen(prep):0,
      33             :                 fname, len,
      34       40521 :                 sep, (sep && *fname)?strlen(sep):0, NULL);
      35             : }
      36             : 
      37        1543 : char *prepend(const char *prep, const char *fname)
      38             : {
      39        1543 :         return prepend_n(prep, fname, strlen(fname), "");
      40             : }
      41             : 
      42       38883 : char *prepend_slash(const char *prep, const char *fname, size_t len)
      43             : {
      44       38883 :         if(!prep || !*prep)
      45          42 :                 return strdup_w(fname, __func__);
      46             :         // Try to avoid getting a double slash in the path.
      47       38841 :         if(fname && fname[0]=='/')
      48             :         {
      49        7407 :                 fname++;
      50        7407 :                 len--;
      51             :         }
      52       38841 :         return prepend_n(prep, fname, len, "/");
      53             : }
      54             : 
      55       38859 : char *prepend_s(const char *prep, const char *fname)
      56             : {
      57       38859 :         return prepend_slash(prep, fname, strlen(fname));
      58             : }
      59             : 
      60      376458 : int astrcat(char **buf, const char *append, const char *func)
      61             : {
      62      376458 :         int l=0;
      63      376458 :         char *copy=NULL;
      64      376458 :         if(append) l+=strlen(append);
      65      376458 :         if(*buf) l+=strlen(*buf);
      66      376458 :         l++;
      67      376458 :         if((*buf && !(copy=strdup_w(*buf, __func__)))
      68      376458 :           || !(*buf=(char *)realloc_w(*buf, l, __func__)))
      69             :         {
      70           0 :                 log_oom_w(__func__, func);
      71           0 :                 return -1;
      72             :         }
      73      376458 :         snprintf(*buf, l, "%s%s", copy?copy:"", append?append:"");
      74      376458 :         free_w(&copy);
      75      376458 :         return 0;
      76             : }

Generated by: LCOV version 1.13