LCOV - code coverage report
Current view: top level - src - prepend.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 37 41 90.2 %
Date: 2015-10-31 Functions: 6 6 100.0 %

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

Generated by: LCOV version 1.10