blob: ec1d703896b86e1e09279a64faeafae06de6ab09 [file] [log] [blame]
/**
* tiffbase.c
* General-purpose routines for minitiff.
*
* Copyright (C) 2006 Cosmin Truta.
*
* minitiff is open-source software, distributed under the zlib license.
* For conditions of distribution and use, see copyright notice in minitiff.h.
**/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "minitiff.h"
/**
* Constructor.
**/
void minitiff_init_info(struct minitiff_info *minitiff_ptr)
{
memset(minitiff_ptr, 0, sizeof(*minitiff_ptr));
minitiff_ptr->photometric = (unsigned int)(-1);
}
/**
* Validator.
**/
void minitiff_validate_info(struct minitiff_info *tiff_ptr)
{
if (tiff_ptr->width == 0 || tiff_ptr->height == 0
|| tiff_ptr->bits_per_sample == 0 || tiff_ptr->samples_per_pixel == 0)
minitiff_error(tiff_ptr, "Invalid TIFF dimensions");
if (tiff_ptr->strip_offsets == NULL || tiff_ptr->rows_per_strip == 0)
minitiff_error(tiff_ptr, "Invalid TIFF strip info");
if (tiff_ptr->photometric >= 3)
minitiff_error(tiff_ptr, "Unknown photometric interpretation");
}
/**
* Destructor.
**/
void minitiff_destroy_info(struct minitiff_info *minitiff_ptr)
{
if (minitiff_ptr->strip_offsets != NULL)
free(minitiff_ptr->strip_offsets);
}
/**
* Error reporting.
**/
static void minitiff_default_error_handler(const char *msg)
{
fprintf(stderr, "** Error: %s\n", msg);
exit(EXIT_FAILURE);
}
void minitiff_error(struct minitiff_info *minitiff_ptr, const char *msg)
{
if (minitiff_ptr->error_handler != NULL)
minitiff_ptr->error_handler(msg);
else
minitiff_default_error_handler(msg);
abort();
}
static void minitiff_default_warning_handler(const char *msg)
{
fprintf(stderr, "** Warning: %s\n", msg);
}
void minitiff_warning(struct minitiff_info *minitiff_ptr, const char *msg)
{
if (minitiff_ptr->warning_handler != NULL)
minitiff_ptr->warning_handler(msg);
else
minitiff_default_warning_handler(msg);
}
/**
* Global constants:
* TIFF file signature.
**/
const char minitiff_sig_m[4] = { 0x4d, 0x4d, 0x00, 0x2a }; /* "MM\0*" */
const char minitiff_sig_i[4] = { 0x49, 0x49, 0x2a, 0x00 }; /* "II*\0" */