
Thread
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:
- Modify nmake.opt so that we can build a full debug build of libtiff:
- OPTFLAGS = /Zi /Od /MDd /EHsc /W3 /D_CRT_SECURE_NO_DEPRECATE
- Launched VS native tools command line shell
- cd to libtiff source directory
- Rebuilt libtiff from scratch:
- nmake -f Makefile.vc clean && nmake -f Makefile.vc
- Modify ascii_tag.c so that: static const char filename[] = "images/ascii_test.tiff";
- cd test
- Compiled ascii_tag:
- cl /Zi /Od /MDd /EHsc /I..\libtiff ascii_tag.c \
- /link /libpath:..\libtiff libtiff.lib
- ascii_tag.exe
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