2014.07.01 11:12 "[Tiff] Possible bug in tiff_dirread.c? Or user error?", by Andreas Romeyke

2014.07.16 13:31 "Re: [Tiff] Error while opening tiff - fstat64.c", by Edward Lam

Hi,

I failed to reproduce your problem using VS2012 using the latest cvs version of libtiff. The steps I took were:

It all works (that is, no errors are printed).

My guess is that is that you're not problem compiling ascii_tag.c against the same C Run Time library (CRT) that you did with your libtiff.

Cheers,

-Edward

On 16/07/2014 2:57 AM, h4ever wrote:

> Hello. I am using Visual Studio C++ Express 2010, installed on disk P:. > While running method TIFFOpenI got error referencing to non-existing

> directory and path to fstat64.c
>

> I have downloaded the libtiff library as part of SDL2 package, but I > test it separately. There is a test file named ascii_tag.c which I am

> testing.
>

> It creates file ascii_test.tiff. But maybe the file is not correct > because the following command crashes - breaks.

>
> There is a line
> tif = TIFFOpen(filename, "r");
>
> and it breaks here when I run the program. Filename is:
> static const char filename[] = "images/ascii_test.tiff";
> the file exists on disk, because the program just create it and closed
> the file handler.
>
> The error I got:

> Debug assertion failed... program name... File: (and *this is the > strange thing!*[/b]) _*f:\dd\vctools\crt_bld\self_x86\crt\src\fstat64.c*_

> line:64
>

> Why it displays this path? I did not added this path to project so why > it tries to call this file? I have installed VC in different location

> and running x86 32bit machine.
>

> I already succeed to run test raw_decode.c where I used libtiff.lib and > libjpeg.lib also here I used the libraries. I already succeed to open

> file there using [code]tif = TIFFOpen(srcfile,"r");[/code] and srcfile = > "./images/quad-tile.jpg.tiff".

>

> Well I tried to use different path as "./images/ascii_test.tiff" but > this also results in break. Where could be the problem that

> ascii_test.tiff cannot be opened?
>
> Complete code:
> [code]
> /* $Id: ascii_tag.c,v 1.7 2008/04/15 13:32:12 dron Exp $ */
>
> /* Copyright (c) 2004, Andrey Kiselev */
>
> /*

>   * TIFF Library
>   *
>   * Module to test ASCII tags read/write functions.
>   */

>
> #pragma once
> #define _CRT_SECURE_NO_WARNINGS
> //#pragma warning( disable: 4355 )
> //#pragma warning( disable: 4101 )
> #pragma warning( disable: 4099 )
>
> #include "tif_config.h"
>
> #include <stdio.h>
> #include <string.h>
>
> #ifdef HAVE_UNISTD_H
> # include <unistd.h>
> #endif
>
> #include "tiffio.h"
>

> static const char filename[] = "./images/ascii_test.tiff";
>
> static const struct {
>      ttag_t        tag;
>      const char    *value;
> } ascii_tags[] = {
>      { TIFFTAG_DOCUMENTNAME, "Test TIFF image" },
>      { TIFFTAG_IMAGEDESCRIPTION, "Temporary test image" },
>      { TIFFTAG_MAKE, "This is not scanned image" },
>      { TIFFTAG_MODEL, "No scanner" },
>      { TIFFTAG_PAGENAME, "Test page" },
>      { TIFFTAG_SOFTWARE, "Libtiff library" },
>      { TIFFTAG_DATETIME, "2004:09:10 16:09:00" },
>      { TIFFTAG_ARTIST, "Andrey V. Kiselev" },
>      { TIFFTAG_HOSTCOMPUTER, "Debian GNU/Linux (Sarge)" },
>      { TIFFTAG_TARGETPRINTER, "No printer" },
>      { TIFFTAG_COPYRIGHT, "Copyright (c) 2004, Andrey Kiselev" },
>      { TIFFTAG_FAXSUBADDRESS, "Fax subaddress" },
>      /* DGN tags */
>      { TIFFTAG_UNIQUECAMERAMODEL, "No camera" },
>      { TIFFTAG_CAMERASERIALNUMBER, "1234567890" }
> };
> #define NTAGS   (sizeof (ascii_tags) / sizeof (ascii_tags[0]))
>
> static const char ink_names[] = "Red\0Green\0Blue";
> const int ink_names_size = 15;
>
> int
> main()
> {
>      TIFF        *tif;
>      size_t        i;
>      unsigned char    buf[] = { 0, 127, 255 };
>      char        *value;
>
>      /* Test whether we can write tags. */
>      tif = TIFFOpen(filename, "w");
>      if (!tif) {
>          fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
>          return 1;
>      }
>
>      if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1)) {
>          fprintf (stderr, "Can't set ImageWidth tag.\n");
>          goto failure;
>      }
>      if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, 1)) {
>          fprintf (stderr, "Can't set ImageLength tag.\n");
>          goto failure;
>      }
>      if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8)) {
>          fprintf (stderr, "Can't set BitsPerSample tag.\n");
>          goto failure;
>      }
>      if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, sizeof(buf))) {
>          fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
>          goto failure;
>      }
>      if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) {
>          fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
>          goto failure;
>      }
>      if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB)) {
>          fprintf (stderr, "Can't set PhotometricInterpretation tag.\n");
>          goto failure;
>      }
>
>      for (i = 0; i < NTAGS; i++) {
>          if (!TIFFSetField(tif, ascii_tags[i].tag,
>                    ascii_tags[i].value)) {
>              fprintf(stderr, "Can't set tag %lu.\n",
>                  (unsigned long)ascii_tags[i].tag);
>              goto failure;
>          }
>      }
>
>      /* InkNames tag has special form, so we handle it separately. */
>      if (!TIFFSetField(tif, TIFFTAG_NUMBEROFINKS, 3)) {
>          fprintf (stderr, "Can't set tag %d (NUMBEROFINKS).\n",
>                           TIFFTAG_NUMBEROFINKS);
>          goto failure;
>      }
>      if (!TIFFSetField(tif, TIFFTAG_INKNAMES, ink_names_size, ink_names)) {
>          fprintf (stderr, "Can't set tag %d (INKNAMES).\n",
>               TIFFTAG_INKNAMES);
>          goto failure;
>      }
>
>      /* Write dummy pixel data. */
>      if (!TIFFWriteScanline(tif, buf, 0, 0) < 0) {
>          fprintf (stderr, "Can't write image data.\n");
>          goto failure;
>      }
>
>      TIFFClose(tif);
>
>      /* Ok, now test whether we can read written values. */
>      tif = TIFFOpen(filename, "r");
>      if (!tif) {
>          fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
>          return 1;
>      }
>
>      for (i = 0; i < NTAGS; i++) {
>          if (!TIFFGetField(tif, ascii_tags[i].tag, &value)
>              || strcmp(value, ascii_tags[i].value)) {
>              fprintf(stderr, "Can't get tag %lu.\n",
>                  (unsigned long)ascii_tags[i].tag);
>              goto failure;
>          }
>      }
>
>      if (!TIFFGetField(tif, TIFFTAG_INKNAMES, &value)
>          || memcmp(value, ink_names, ink_names_size)) {
>          fprintf (stderr, "Can't get tag %d (INKNAMES).\n",
>               TIFFTAG_INKNAMES);
>          goto failure;
>      }
>
>      TIFFClose(tif);
>
>      /* All tests passed; delete file and exit with success status. */
>      unlink(filename);
>      return 0;
>
> failure:
>      /*
>       * Something goes wrong; close file and return unsuccessful status.
>       * Do not remove the file for further manual investigation.
>       */
>      TIFFClose(tif);
>      return 1;

> }
>
> /* vim: set ts=8 sts=8 sw=8 noet: */
>
>
> Thanks for help