LCOV - code coverage report
Current view: top level - src - iobuf.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 73 79 92.4 %
Date: 2017-02-01 Functions: 19 20 95.0 %

          Line data    Source code
       1             : #include "burp.h"
       2             : #include "alloc.h"
       3             : #include "cmd.h"
       4             : #include "iobuf.h"
       5             : #include "log.h"
       6             : #include "msg.h"
       7             : #include "pathcmp.h"
       8             : 
       9         355 : struct iobuf *iobuf_alloc(void)
      10             : {
      11             :         struct iobuf *iobuf;
      12         355 :         if(!(iobuf=(struct iobuf *)calloc_w(1, sizeof(struct iobuf), __func__)))
      13             :                 return NULL;
      14             :         iobuf_init(iobuf);
      15         355 :         return iobuf;
      16             : }
      17             : 
      18      364616 : void iobuf_set(struct iobuf *iobuf, enum cmd cmd, char *buf, size_t len)
      19             : {
      20     3286655 :         iobuf->cmd=cmd;
      21     3286655 :         iobuf->buf=buf;
      22     3286655 :         iobuf->len=len;
      23      364616 : }
      24             : 
      25      549386 : void iobuf_init(struct iobuf *iobuf)
      26             : {
      27             :         iobuf_set(iobuf, CMD_ERROR, NULL, 0);
      28      549386 : }
      29             : 
      30     1950668 : void iobuf_free_content(struct iobuf *iobuf)
      31             : {
      32     3901691 :         if(!iobuf) return;
      33     1951022 :         free_w(&iobuf->buf);
      34             :         iobuf_init(iobuf);
      35             : }
      36             : 
      37         357 : void iobuf_free(struct iobuf **iobuf)
      38             : {
      39         714 :         if(!iobuf || !*iobuf) return;
      40         355 :         iobuf_free_content(*iobuf);
      41         355 :         free_v((void **)iobuf);
      42             : }
      43             : 
      44           9 : void iobuf_log_unexpected(struct iobuf *iobuf, const char *func)
      45             : {
      46          18 :         logp("unexpected command in %s(): %c:%s\n",
      47           9 :                 func, iobuf->cmd, iobuf->buf);
      48           9 : }
      49             : 
      50       17208 : void iobuf_copy(struct iobuf *dst, struct iobuf *src)
      51             : {
      52      305765 :         iobuf_set(dst, src->cmd, src->buf, src->len);
      53       17208 : }
      54             : 
      55      288557 : void iobuf_move(struct iobuf *dst, struct iobuf *src)
      56             : {
      57             :         iobuf_copy(dst, src);
      58      288557 :         src->buf=NULL;
      59      288557 : }
      60             : 
      61      115511 : void iobuf_from_str(struct iobuf *iobuf, enum cmd cmd, char *str)
      62             : {
      63      115511 :         iobuf_set(iobuf, cmd, str, strlen(str));
      64      115511 : }
      65             : 
      66      382094 : int iobuf_send_msg_fzp(struct iobuf *iobuf, struct fzp *fzp)
      67             : {
      68      382094 :         return send_msg_fzp(fzp, iobuf->cmd, iobuf->buf, iobuf->len);
      69             : }
      70             : 
      71      150823 : int iobuf_pathcmp(struct iobuf *a, struct iobuf *b)
      72             : {
      73             :         int r;
      74      150823 :         if((r=pathcmp(a->buf, b->buf))) return r;
      75      144431 :         if(a->cmd==CMD_METADATA || a->cmd==CMD_ENC_METADATA)
      76             :         {
      77          51 :                 if(b->cmd==CMD_METADATA || b->cmd==CMD_ENC_METADATA) return 0;
      78           9 :                 else return 1;
      79             :         }
      80      144380 :         else if(a->cmd==CMD_VSS || a->cmd==CMD_ENC_VSS)
      81             :         {
      82          40 :                 if(b->cmd==CMD_VSS || b->cmd==CMD_ENC_VSS) return 0;
      83           0 :                 else return -1;
      84             :         }
      85      144340 :         else if(a->cmd==CMD_VSS_T || a->cmd==CMD_ENC_VSS_T)
      86             :         {
      87           8 :                 if(b->cmd==CMD_VSS_T || b->cmd==CMD_ENC_VSS_T) return 0;
      88           0 :                 else return 1;
      89             :         }
      90             :         else
      91             :         {
      92      144332 :                 if(b->cmd==CMD_METADATA || b->cmd==CMD_ENC_METADATA) return -1;
      93      144324 :                 else if(b->cmd==CMD_VSS || b->cmd==CMD_ENC_VSS) return 1;
      94      144324 :                 else if(b->cmd==CMD_VSS_T || b->cmd==CMD_ENC_VSS_T) return -1;
      95      144324 :                 else return 0;
      96             :         }
      97             : }
      98             : 
      99      261242 : int iobuf_is_filedata(struct iobuf *iobuf)
     100             : {
     101      261242 :         return cmd_is_filedata(iobuf->cmd);
     102             : }
     103             : 
     104       10788 : int iobuf_is_vssdata(struct iobuf *iobuf)
     105             : {
     106       10788 :         return cmd_is_vssdata(iobuf->cmd);
     107             : }
     108             : 
     109         110 : int iobuf_is_link(struct iobuf *iobuf)
     110             : {
     111         110 :         return cmd_is_link(iobuf->cmd);
     112             : }
     113             : 
     114       85249 : int iobuf_is_encrypted(struct iobuf *iobuf)
     115             : {
     116       85249 :         return cmd_is_encrypted(iobuf->cmd);
     117             : }
     118             : 
     119         115 : int iobuf_is_metadata(struct iobuf *iobuf)
     120             : {
     121         115 :         return cmd_is_metadata(iobuf->cmd);
     122             : }
     123             : 
     124           0 : int iobuf_is_estimatable(struct iobuf *iobuf)
     125             : {
     126           0 :         return cmd_is_estimatable(iobuf->cmd);
     127             : }
     128             : 
     129      368471 : static int do_iobuf_fill_from_fzp(struct iobuf *iobuf, struct fzp *fzp,
     130             :         int extra_bytes)
     131             : {
     132             :         static unsigned int s;
     133             :         static char lead[5]="";
     134             : 
     135      368471 :         switch(fzp_read_ensure(fzp, lead, sizeof(lead), __func__))
     136             :         {
     137             :                 case 0: break; // OK.
     138             :                 case 1: return 1; // Finished OK.
     139             :                 default:
     140             :                 {
     141          14 :                         logp("Error reading lead in %s\n", __func__);
     142          14 :                         return -1; // Error.
     143             :                 }
     144             :         }
     145      367850 :         if((sscanf(lead, "%c%04X", (char *)&iobuf->cmd, &s))!=2)
     146             :         {
     147           0 :                 logp("sscanf failed reading manifest: %s\n", lead);
     148           0 :                 return -1;
     149             :         }
     150      367850 :         iobuf->len=(size_t)s;
     151      367850 :         if(!(iobuf->buf=(char *)malloc_w(
     152      367850 :                 iobuf->len+extra_bytes+1, __func__)))
     153             :                         return -1;
     154      367850 :         switch(fzp_read_ensure(fzp,
     155      367850 :                 iobuf->buf, iobuf->len+extra_bytes, __func__))
     156             :         {
     157             :                 case 0: break; // OK.
     158             :                 case 1: return 1; // Finished OK.
     159             :                 default:
     160          45 :                         logp("Error attempting to read after %s in %s (%c:%u)\n", lead, __func__, iobuf->cmd, s);
     161          45 :                         return -1;
     162             :         }
     163      367805 :         iobuf->buf[iobuf->len]='\0';
     164      367805 :         return 0;
     165             : }
     166             : 
     167      368055 : int iobuf_fill_from_fzp(struct iobuf *iobuf, struct fzp *fzp)
     168             : {
     169      368055 :         return do_iobuf_fill_from_fzp(iobuf, fzp, 1 /*newline*/);
     170             : }
     171             : 
     172         416 : int iobuf_fill_from_fzp_data(struct iobuf *iobuf, struct fzp *fzp)
     173             : {
     174         416 :         return do_iobuf_fill_from_fzp(iobuf, fzp, 0 /*no newline*/);
     175             : }

Generated by: LCOV version 1.10