LCOV - code coverage report
Current view: top level - src/server - manios.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 26 34 76.5 %
Date: 2022-08-30 22:36:43 Functions: 2 2 100.0 %

          Line data    Source code
       1             : #include "../burp.h"
       2             : #include "../alloc.h"
       3             : #include "../fsops.h"
       4             : #include "../log.h"
       5             : #include "manios.h"
       6             : #include "manio.h"
       7             : 
       8             : static struct manios *manios_alloc(void)
       9             : {
      10           5 :         return (struct manios *)calloc_w(1, sizeof(struct manios), __func__);
      11             : }
      12             : 
      13           5 : struct manios *manios_open_phase2(
      14             :         struct sdirs *sdirs,
      15             :         man_off_t *pos_phase1,
      16             :         man_off_t *pos_current)
      17             : {
      18           5 :         struct manios *m=NULL;
      19             : 
      20           5 :         if(!(m=manios_alloc())
      21           5 :           || !(m->phase1=manio_open_phase1(sdirs->phase1data, "rb"))
      22           5 :           || !(m->changed=manio_open_phase2(sdirs->changed, "ab"))
      23           5 :           || !(m->unchanged=manio_open_phase2(sdirs->unchanged, "ab"))
      24          10 :           || !(m->counters_d=manio_open_phase2(
      25           5 :                 sdirs->counters_d, "ab"))
      26          10 :           || !(m->counters_n=manio_open_phase2(
      27           5 :                 sdirs->counters_n, "ab"))
      28           5 :           || (pos_phase1 && manio_seek(m->phase1, pos_phase1)))
      29             :                 goto error;
      30             : 
      31           5 :         if(!(m->current=manio_open(sdirs->cmanifest, "rb")))
      32             :         {
      33           0 :                 if(pos_current)
      34             :                 {
      35           0 :                         logp("Want to seek but could not open %s\n",
      36             :                                 sdirs->cmanifest);
      37           0 :                         goto error;
      38             :                 }
      39           0 :                 if(is_reg_lstat(sdirs->cmanifest)==1)
      40             :                 {
      41           0 :                         logp("Could not open %s\n", sdirs->cmanifest);
      42           0 :                         goto error;
      43             :                 }
      44             :         }
      45           5 :         if(pos_current && manio_seek(m->current, pos_current))
      46             :                 goto error;
      47             : 
      48           5 :         return m;
      49             : error:
      50           0 :         manios_close(&m);
      51           0 :         return NULL;
      52             : }
      53             : 
      54          10 : int manios_close(struct manios **manios)
      55             : {
      56          10 :         int ret=0;
      57          10 :         if(!manios || !*manios) return 0;
      58           5 :         ret|=manio_close(&(*manios)->current);
      59           5 :         ret|=manio_close(&(*manios)->phase1);
      60           5 :         ret|=manio_close(&(*manios)->changed);
      61           5 :         ret|=manio_close(&(*manios)->unchanged);
      62           5 :         ret|=manio_close(&(*manios)->counters_d);
      63           5 :         ret|=manio_close(&(*manios)->counters_n);
      64           5 :         free_v((void **)manios);
      65           5 :         return ret;
      66             : }

Generated by: LCOV version 1.13