#include <stdlib.h>
#include <assert.h>
#include "output-private.h"
dctool_output_t *
dctool_output_allocate (const dctool_output_vtable_t *vtable)
{
dctool_output_t *output = NULL;
assert(vtable != NULL);
assert(vtable->size >= sizeof(dctool_output_t));
output = (dctool_output_t *) malloc (vtable->size);
if (output == NULL) {
return output;
}
output->vtable = vtable;
output->number = 0;
return output;
}
void
dctool_output_deallocate (dctool_output_t *output)
{
free (output);
}
dc_status_t
dctool_output_write (dctool_output_t *output, dc_parser_t *parser, const unsigned char data[], unsigned int size, const unsigned char fingerprint[], unsigned int fsize)
{
if (output == NULL || output->vtable->write == NULL)
return DC_STATUS_SUCCESS;
output->number++;
return output->vtable->write (output, parser, data, size, fingerprint, fsize);
}
dc_status_t
dctool_output_free (dctool_output_t *output)
{
dc_status_t status = DC_STATUS_SUCCESS;
if (output == NULL)
return DC_STATUS_SUCCESS;
if (output->vtable->free) {
status = output->vtable->free (output);
}
dctool_output_deallocate (output);
return status;
}