LCOV - code coverage report
Current view: top level - src - iobuf.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 72 76 94.7 %
Date: 2016-02-29 Functions: 19 19 100.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         203 : struct iobuf *iobuf_alloc(void)
      10             : {
      11             :         struct iobuf *iobuf;
      12         203 :         if(!(iobuf=(struct iobuf *)calloc_w(1, sizeof(struct iobuf), __func__)))
      13             :                 return NULL;
      14             :         iobuf_init(iobuf);
      15         203 :         return iobuf;
      16             : }
      17             : 
      18      362879 : void iobuf_set(struct iobuf *iobuf, enum cmd cmd, char *buf, size_t len)
      19             : {
      20     3252048 :         iobuf->cmd=cmd;
      21     3252048 :         iobuf->buf=buf;
      22     3252048 :         iobuf->len=len;
      23      362879 : }
      24             : 
      25      547063 : void iobuf_init(struct iobuf *iobuf)
      26             : {
      27             :         iobuf_set(iobuf, CMD_ERROR, NULL, 0);
      28      547063 : }
      29             : 
      30     1906423 : void iobuf_free_content(struct iobuf *iobuf)
      31             : {
      32     3813049 :         if(!iobuf) return;
      33     1906625 :         free_w(&iobuf->buf);
      34             :         iobuf_init(iobuf);
      35             : }
      36             : 
      37         203 : void iobuf_free(struct iobuf **iobuf)
      38             : {
      39         406 :         if(!iobuf || !*iobuf) return;
      40         203 :         iobuf_free_content(*iobuf);
      41         203 :         free_v((void **)iobuf);
      42             : }
      43             : 
      44           4 : void iobuf_log_unexpected(struct iobuf *iobuf, const char *func)
      45             : {
      46             :         logp("unexpected command in %s(): %c:%s\n",
      47           4 :                 func, iobuf->cmd, iobuf->buf);
      48           4 : }
      49             : 
      50       17208 : void iobuf_copy(struct iobuf *dst, struct iobuf *src)
      51             : {
      52      308078 :         iobuf_set(dst, src->cmd, src->buf, src->len);
      53       17208 : }
      54             : 
      55      290870 : void iobuf_move(struct iobuf *dst, struct iobuf *src)
      56             : {
      57             :         iobuf_copy(dst, src);
      58      290870 :         src->buf=NULL;
      59      290870 : }
      60             : 
      61      127200 : void iobuf_from_str(struct iobuf *iobuf, enum cmd cmd, char *str)
      62             : {
      63      127200 :         iobuf_set(iobuf, cmd, str, strlen(str));
      64      127200 : }
      65             : 
      66      379882 : int iobuf_send_msg_fzp(struct iobuf *iobuf, struct fzp *fzp)
      67             : {
      68      379882 :         return send_msg_fzp(fzp, iobuf->cmd, iobuf->buf, iobuf->len);
      69             : }
      70             : 
      71      150786 : int iobuf_pathcmp(struct iobuf *a, struct iobuf *b)
      72             : {
      73             :         int r;
      74      150786 :         if((r=pathcmp(a->buf, b->buf))) return r;
      75      144410 :         if(a->cmd==CMD_METADATA || a->cmd==CMD_ENC_METADATA)
      76             :         {
      77          48 :                 if(b->cmd==CMD_METADATA || b->cmd==CMD_ENC_METADATA) return 0;
      78           8 :                 else return 1;
      79             :         }
      80      144362 :         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      144322 :         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      144314 :                 if(b->cmd==CMD_METADATA || b->cmd==CMD_ENC_METADATA) return -1;
      93      144306 :                 else if(b->cmd==CMD_VSS || b->cmd==CMD_ENC_VSS) return 1;
      94      144306 :                 else if(b->cmd==CMD_VSS_T || b->cmd==CMD_ENC_VSS_T) return -1;
      95      144306 :                 else return 0;
      96             :         }
      97             : }
      98             : 
      99      260289 : int iobuf_is_filedata(struct iobuf *iobuf)
     100             : {
     101      260289 :         return cmd_is_filedata(iobuf->cmd);
     102             : }
     103             : 
     104       10552 : int iobuf_is_vssdata(struct iobuf *iobuf)
     105             : {
     106       10552 :         return cmd_is_vssdata(iobuf->cmd);
     107             : }
     108             : 
     109         108 : int iobuf_is_link(struct iobuf *iobuf)
     110             : {
     111         108 :         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          76 : int iobuf_is_metadata(struct iobuf *iobuf)
     120             : {
     121          76 :         return cmd_is_metadata(iobuf->cmd);
     122             : }
     123             : 
     124      366216 : static int do_iobuf_fill_from_fzp(struct iobuf *iobuf, struct fzp *fzp,
     125             :         int extra_bytes)
     126             : {
     127             :         static unsigned int s;
     128             :         static char lead[5]="";
     129             : 
     130      366216 :         switch(fzp_read_ensure(fzp, lead, sizeof(lead), __func__))
     131             :         {
     132             :                 case 0: break; // OK.
     133             :                 case 1: return 1; // Finished OK.
     134             :                 default:
     135             :                 {
     136          14 :                         logp("Error reading lead in %s\n", __func__);
     137          14 :                         return -1; // Error.
     138             :                 }
     139             :         }
     140      365822 :         if((sscanf(lead, "%c%04X", (char *)&iobuf->cmd, &s))!=2)
     141             :         {
     142           0 :                 logp("sscanf failed reading manifest: %s\n", lead);
     143           0 :                 return -1;
     144             :         }
     145      365822 :         iobuf->len=(size_t)s;
     146      365822 :         if(!(iobuf->buf=(char *)malloc_w(
     147      365822 :                 iobuf->len+extra_bytes+1, __func__)))
     148             :                         return -1;
     149      365822 :         switch(fzp_read_ensure(fzp,
     150      365822 :                 iobuf->buf, iobuf->len+extra_bytes, __func__))
     151             :         {
     152             :                 case 0: break; // OK.
     153             :                 case 1: return 1; // Finished OK.
     154             :                 default:
     155          45 :                         logp("Error attempting to read after %s in %s (%c:%u)\n", lead, __func__, iobuf->cmd, s);
     156          45 :                         return -1;
     157             :         }
     158      365777 :         iobuf->buf[iobuf->len]='\0';
     159      365777 :         return 0;
     160             : }
     161             : 
     162      365800 : int iobuf_fill_from_fzp(struct iobuf *iobuf, struct fzp *fzp)
     163             : {
     164      365800 :         return do_iobuf_fill_from_fzp(iobuf, fzp, 1 /*newline*/);
     165             : }
     166             : 
     167         416 : int iobuf_fill_from_fzp_data(struct iobuf *iobuf, struct fzp *fzp)
     168             : {
     169         416 :         return do_iobuf_fill_from_fzp(iobuf, fzp, 0 /*no newline*/);
     170             : }

Generated by: LCOV version 1.10