/** * minitiff.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 #include #include #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, "%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, "%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 }; const char minitiff_sig_i[4] = { 0x49, 0x49, 0x2a, 0x00 };