Listing 1: cdc_tbl.h — Defines the BAT and MAP tables

#ifndef cdc_tbl_h__
#define cdc_tbl_h__
/*
 * cdc_tbl.h -- common table code
 *   december 2000, Kyle York
 *
 */
typedef struct cdc_tbl cdc_tbl_t;

typedef int (*cdc_tbl_create_fn_t)(cdc_t *, cdc_tbl_t *);

struct cdc_tbl
{
  unsigned long       count;        /* # of tables             */
  unsigned long       blocks;       /* blocks / cluster        */
  unsigned long       entries;      /* table entries / cluster */
  unsigned long       block_offset;
  unsigned long       phantom_value;
  int                 is_phantom;   /* non-zero if the table 
                                       doesn't exist */
  cdc_tbl_create_fn_t create_fn;

  struct
  {
    int            dirty; /* non-0 if this page is dirty */
    unsigned long  block; /* file block number           */
    unsigned long *data;  /* buffer                      */
  } buffer;
  comprio_counter_t counter;
};

int cdc_tbl_init(
  cdc_t              *cdc,
  cdc_tbl_t          *tbl,
  unsigned long       blocks,
  unsigned long       phantom_value,
  unsigned long       block_offset,
  cdc_tbl_create_fn_t create_fn
  );
int cdc_tbl_cleanup(cdc_t *cdc, cdc_tbl_t *tbl);
int cdc_tbl_create(cdc_t *cdc, cdc_tbl_t *tbl);
int cdc_tbl_flush(cdc_t *cdc, cdc_tbl_t *tbl);
int cdc_tbl_entry_get(
  cdc_t         *cdc,
  cdc_tbl_t     *tbl,
  unsigned long  entry,
  unsigned long *value
  );
int cdc_tbl_entry_set(
  cdc_t         *cdc,
  cdc_tbl_t     *tbl,
  unsigned long  entry,
  unsigned long  value
  );

#endif /* cdc_tbl_h__ */

— End of Listing —