Blame libtiff/tif_win32.c

Packit 7838c8
/* $Id: tif_win32.c,v 1.42 2017-01-11 19:02:49 erouault Exp $ */
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
 * Copyright (c) 1988-1997 Sam Leffler
Packit 7838c8
 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
Packit 7838c8
 *
Packit 7838c8
 * Permission to use, copy, modify, distribute, and sell this software and 
Packit 7838c8
 * its documentation for any purpose is hereby granted without fee, provided
Packit 7838c8
 * that (i) the above copyright notices and this permission notice appear in
Packit 7838c8
 * all copies of the software and related documentation, and (ii) the names of
Packit 7838c8
 * Sam Leffler and Silicon Graphics may not be used in any advertising or
Packit 7838c8
 * publicity relating to the software without the specific, prior written
Packit 7838c8
 * permission of Sam Leffler and Silicon Graphics.
Packit 7838c8
 * 
Packit 7838c8
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
Packit 7838c8
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
Packit 7838c8
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
Packit 7838c8
 * 
Packit 7838c8
 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
Packit 7838c8
 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
Packit 7838c8
 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
Packit 7838c8
 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
Packit 7838c8
 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
Packit 7838c8
 * OF THIS SOFTWARE.
Packit 7838c8
 */
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
 * TIFF Library Win32-specific Routines.  Adapted from tif_unix.c 4/5/95 by
Packit 7838c8
 * Scott Wagner (wagner@itek.com), Itek Graphix, Rochester, NY USA
Packit 7838c8
 */
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
  CreateFileA/CreateFileW return type 'HANDLE'.
Packit 7838c8
Packit 7838c8
  thandle_t is declared like
Packit 7838c8
Packit 7838c8
    DECLARE_HANDLE(thandle_t);
Packit 7838c8
Packit 7838c8
  in tiffio.h.
Packit 7838c8
Packit 7838c8
  Windows (from winnt.h) DECLARE_HANDLE logic looks like
Packit 7838c8
Packit 7838c8
  #ifdef STRICT
Packit 7838c8
    typedef void *HANDLE;
Packit 7838c8
  #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
Packit 7838c8
  #else
Packit 7838c8
    typedef PVOID HANDLE;
Packit 7838c8
  #define DECLARE_HANDLE(name) typedef HANDLE name
Packit 7838c8
  #endif
Packit 7838c8
Packit 7838c8
  See http://bugzilla.maptools.org/show_bug.cgi?id=1941 for problems in WIN64
Packit 7838c8
  builds resulting from this.  Unfortunately, the proposed patch was lost.
Packit 7838c8
Packit 7838c8
*/
Packit 7838c8
  
Packit 7838c8
#include "tiffiop.h"
Packit 7838c8
Packit 7838c8
#include <windows.h>
Packit 7838c8
Packit 7838c8
static tmsize_t
Packit 7838c8
_tiffReadProc(thandle_t fd, void* buf, tmsize_t size)
Packit 7838c8
{
Packit 7838c8
	/* tmsize_t is 64bit on 64bit systems, but the WinAPI ReadFile takes
Packit 7838c8
	 * 32bit sizes, so we loop through the data in suitable 32bit sized
Packit 7838c8
	 * chunks */
Packit 7838c8
	uint8* ma;
Packit 7838c8
	uint64 mb;
Packit 7838c8
	DWORD n;
Packit 7838c8
	DWORD o;
Packit 7838c8
	tmsize_t p;
Packit 7838c8
	ma=(uint8*)buf;
Packit 7838c8
	mb=size;
Packit 7838c8
	p=0;
Packit 7838c8
	while (mb>0)
Packit 7838c8
	{
Packit 7838c8
		n=0x80000000UL;
Packit 7838c8
		if ((uint64)n>mb)
Packit 7838c8
			n=(DWORD)mb;
Packit 7838c8
		if (!ReadFile(fd,(LPVOID)ma,n,&o,NULL))
Packit 7838c8
			return(0);
Packit 7838c8
		ma+=o;
Packit 7838c8
		mb-=o;
Packit 7838c8
		p+=o;
Packit 7838c8
		if (o!=n)
Packit 7838c8
			break;
Packit 7838c8
	}
Packit 7838c8
	return(p);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static tmsize_t
Packit 7838c8
_tiffWriteProc(thandle_t fd, void* buf, tmsize_t size)
Packit 7838c8
{
Packit 7838c8
	/* tmsize_t is 64bit on 64bit systems, but the WinAPI WriteFile takes
Packit 7838c8
	 * 32bit sizes, so we loop through the data in suitable 32bit sized
Packit 7838c8
	 * chunks */
Packit 7838c8
	uint8* ma;
Packit 7838c8
	uint64 mb;
Packit 7838c8
	DWORD n;
Packit 7838c8
	DWORD o;
Packit 7838c8
	tmsize_t p;
Packit 7838c8
	ma=(uint8*)buf;
Packit 7838c8
	mb=size;
Packit 7838c8
	p=0;
Packit 7838c8
	while (mb>0)
Packit 7838c8
	{
Packit 7838c8
		n=0x80000000UL;
Packit 7838c8
		if ((uint64)n>mb)
Packit 7838c8
			n=(DWORD)mb;
Packit 7838c8
		if (!WriteFile(fd,(LPVOID)ma,n,&o,NULL))
Packit 7838c8
			return(0);
Packit 7838c8
		ma+=o;
Packit 7838c8
		mb-=o;
Packit 7838c8
		p+=o;
Packit 7838c8
		if (o!=n)
Packit 7838c8
			break;
Packit 7838c8
	}
Packit 7838c8
	return(p);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static uint64
Packit 7838c8
_tiffSeekProc(thandle_t fd, uint64 off, int whence)
Packit 7838c8
{
Packit 7838c8
	LARGE_INTEGER offli;
Packit 7838c8
	DWORD dwMoveMethod;
Packit 7838c8
	offli.QuadPart = off;
Packit 7838c8
	switch(whence)
Packit 7838c8
	{
Packit 7838c8
		case SEEK_SET:
Packit 7838c8
			dwMoveMethod = FILE_BEGIN;
Packit 7838c8
			break;
Packit 7838c8
		case SEEK_CUR:
Packit 7838c8
			dwMoveMethod = FILE_CURRENT;
Packit 7838c8
			break;
Packit 7838c8
		case SEEK_END:
Packit 7838c8
			dwMoveMethod = FILE_END;
Packit 7838c8
			break;
Packit 7838c8
		default:
Packit 7838c8
			dwMoveMethod = FILE_BEGIN;
Packit 7838c8
			break;
Packit 7838c8
	}
Packit 7838c8
	offli.LowPart=SetFilePointer(fd,offli.LowPart,&offli.HighPart,dwMoveMethod);
Packit 7838c8
	if ((offli.LowPart==INVALID_SET_FILE_POINTER)&&(GetLastError()!=NO_ERROR))
Packit 7838c8
		offli.QuadPart=0;
Packit 7838c8
	return(offli.QuadPart);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static int
Packit 7838c8
_tiffCloseProc(thandle_t fd)
Packit 7838c8
{
Packit 7838c8
	return (CloseHandle(fd) ? 0 : -1);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static uint64
Packit 7838c8
_tiffSizeProc(thandle_t fd)
Packit 7838c8
{
Packit 7838c8
	ULARGE_INTEGER m;
Packit 7838c8
	m.LowPart=GetFileSize(fd,&m.HighPart);
Packit 7838c8
	return(m.QuadPart);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static int
Packit 7838c8
_tiffDummyMapProc(thandle_t fd, void** pbase, toff_t* psize)
Packit 7838c8
{
Packit 7838c8
	(void) fd;
Packit 7838c8
	(void) pbase;
Packit 7838c8
	(void) psize;
Packit 7838c8
	return (0);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
 * From "Hermann Josef Hill" <lhill@rhein-zeitung.de>:
Packit 7838c8
 *
Packit 7838c8
 * Windows uses both a handle and a pointer for file mapping,
Packit 7838c8
 * but according to the SDK documentation and Richter's book
Packit 7838c8
 * "Advanced Windows Programming" it is safe to free the handle
Packit 7838c8
 * after obtaining the file mapping pointer
Packit 7838c8
 *
Packit 7838c8
 * This removes a nasty OS dependency and cures a problem
Packit 7838c8
 * with Visual C++ 5.0
Packit 7838c8
 */
Packit 7838c8
static int
Packit 7838c8
_tiffMapProc(thandle_t fd, void** pbase, toff_t* psize)
Packit 7838c8
{
Packit 7838c8
	uint64 size;
Packit 7838c8
	tmsize_t sizem;
Packit 7838c8
	HANDLE hMapFile;
Packit 7838c8
Packit 7838c8
	size = _tiffSizeProc(fd);
Packit 7838c8
	sizem = (tmsize_t)size;
Packit 7838c8
	if ((uint64)sizem!=size)
Packit 7838c8
		return (0);
Packit 7838c8
Packit 7838c8
	/* By passing in 0 for the maximum file size, it specifies that we
Packit 7838c8
	   create a file mapping object for the full file size. */
Packit 7838c8
	hMapFile = CreateFileMapping(fd, NULL, PAGE_READONLY, 0, 0, NULL);
Packit 7838c8
	if (hMapFile == NULL)
Packit 7838c8
		return (0);
Packit 7838c8
	*pbase = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
Packit 7838c8
	CloseHandle(hMapFile);
Packit 7838c8
	if (*pbase == NULL)
Packit 7838c8
		return (0);
Packit 7838c8
	*psize = size;
Packit 7838c8
	return(1);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
_tiffDummyUnmapProc(thandle_t fd, void* base, toff_t size)
Packit 7838c8
{
Packit 7838c8
	(void) fd;
Packit 7838c8
	(void) base;
Packit 7838c8
	(void) size;
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
_tiffUnmapProc(thandle_t fd, void* base, toff_t size)
Packit 7838c8
{
Packit 7838c8
	(void) fd;
Packit 7838c8
	(void) size;
Packit 7838c8
	UnmapViewOfFile(base);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
 * Open a TIFF file descriptor for read/writing.
Packit 7838c8
 * Note that TIFFFdOpen and TIFFOpen recognise the character 'u' in the mode
Packit 7838c8
 * string, which forces the file to be opened unmapped.
Packit 7838c8
 */
Packit 7838c8
TIFF*
Packit 7838c8
TIFFFdOpen(int ifd, const char* name, const char* mode)
Packit 7838c8
{
Packit 7838c8
	TIFF* tif;
Packit 7838c8
	int fSuppressMap;
Packit 7838c8
	int m;
Packit 7838c8
	fSuppressMap=0;
Packit 7838c8
	for (m=0; mode[m]!=0; m++)
Packit 7838c8
	{
Packit 7838c8
		if (mode[m]=='u')
Packit 7838c8
		{
Packit 7838c8
			fSuppressMap=1;
Packit 7838c8
			break;
Packit 7838c8
		}
Packit 7838c8
	}
Packit 7838c8
	tif = TIFFClientOpen(name, mode, (thandle_t)ifd, /* FIXME: WIN64 cast to pointer warning */
Packit 7838c8
			_tiffReadProc, _tiffWriteProc,
Packit 7838c8
			_tiffSeekProc, _tiffCloseProc, _tiffSizeProc,
Packit 7838c8
			fSuppressMap ? _tiffDummyMapProc : _tiffMapProc,
Packit 7838c8
			fSuppressMap ? _tiffDummyUnmapProc : _tiffUnmapProc);
Packit 7838c8
	if (tif)
Packit 7838c8
		tif->tif_fd = ifd;
Packit 7838c8
	return (tif);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
#ifndef _WIN32_WCE
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
 * Open a TIFF file for read/writing.
Packit 7838c8
 */
Packit 7838c8
TIFF*
Packit 7838c8
TIFFOpen(const char* name, const char* mode)
Packit 7838c8
{
Packit 7838c8
	static const char module[] = "TIFFOpen";
Packit 7838c8
	thandle_t fd;
Packit 7838c8
	int m;
Packit 7838c8
	DWORD dwMode;
Packit 7838c8
	TIFF* tif;
Packit 7838c8
Packit 7838c8
	m = _TIFFgetMode(mode, module);
Packit 7838c8
Packit 7838c8
	switch(m) {
Packit 7838c8
		case O_RDONLY:			dwMode = OPEN_EXISTING; break;
Packit 7838c8
		case O_RDWR:			dwMode = OPEN_ALWAYS;   break;
Packit 7838c8
		case O_RDWR|O_CREAT:		dwMode = OPEN_ALWAYS;   break;
Packit 7838c8
		case O_RDWR|O_TRUNC:		dwMode = CREATE_ALWAYS; break;
Packit 7838c8
		case O_RDWR|O_CREAT|O_TRUNC:	dwMode = CREATE_ALWAYS; break;
Packit 7838c8
		default:			return ((TIFF*)0);
Packit 7838c8
	}
Packit 7838c8
        
Packit 7838c8
	fd = (thandle_t)CreateFileA(name,
Packit 7838c8
		(m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE),
Packit 7838c8
		FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode,
Packit 7838c8
		(m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL,
Packit 7838c8
		NULL);
Packit 7838c8
	if (fd == INVALID_HANDLE_VALUE) {
Packit 7838c8
		TIFFErrorExt(0, module, "%s: Cannot open", name);
Packit 7838c8
		return ((TIFF *)0);
Packit 7838c8
	}
Packit 7838c8
Packit 7838c8
	tif = TIFFFdOpen((int)fd, name, mode);   /* FIXME: WIN64 cast from pointer to int warning */
Packit 7838c8
	if(!tif)
Packit 7838c8
		CloseHandle(fd);
Packit 7838c8
	return tif;
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
 * Open a TIFF file with a Unicode filename, for read/writing.
Packit 7838c8
 */
Packit 7838c8
TIFF*
Packit 7838c8
TIFFOpenW(const wchar_t* name, const char* mode)
Packit 7838c8
{
Packit 7838c8
	static const char module[] = "TIFFOpenW";
Packit 7838c8
	thandle_t fd;
Packit 7838c8
	int m;
Packit 7838c8
	DWORD dwMode;
Packit 7838c8
	int mbsize;
Packit 7838c8
	char *mbname;
Packit 7838c8
	TIFF *tif;
Packit 7838c8
Packit 7838c8
	m = _TIFFgetMode(mode, module);
Packit 7838c8
Packit 7838c8
	switch(m) {
Packit 7838c8
		case O_RDONLY:			dwMode = OPEN_EXISTING; break;
Packit 7838c8
		case O_RDWR:			dwMode = OPEN_ALWAYS;   break;
Packit 7838c8
		case O_RDWR|O_CREAT:		dwMode = OPEN_ALWAYS;   break;
Packit 7838c8
		case O_RDWR|O_TRUNC:		dwMode = CREATE_ALWAYS; break;
Packit 7838c8
		case O_RDWR|O_CREAT|O_TRUNC:	dwMode = CREATE_ALWAYS; break;
Packit 7838c8
		default:			return ((TIFF*)0);
Packit 7838c8
	}
Packit 7838c8
Packit 7838c8
	fd = (thandle_t)CreateFileW(name,
Packit 7838c8
		(m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE),
Packit 7838c8
		FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode,
Packit 7838c8
		(m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL,
Packit 7838c8
		NULL);
Packit 7838c8
	if (fd == INVALID_HANDLE_VALUE) {
Packit 7838c8
		TIFFErrorExt(0, module, "%S: Cannot open", name);
Packit 7838c8
		return ((TIFF *)0);
Packit 7838c8
	}
Packit 7838c8
Packit 7838c8
	mbname = NULL;
Packit 7838c8
	mbsize = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL);
Packit 7838c8
	if (mbsize > 0) {
Packit 7838c8
		mbname = (char *)_TIFFmalloc(mbsize);
Packit 7838c8
		if (!mbname) {
Packit 7838c8
			TIFFErrorExt(0, module,
Packit 7838c8
			"Can't allocate space for filename conversion buffer");
Packit 7838c8
			return ((TIFF*)0);
Packit 7838c8
		}
Packit 7838c8
Packit 7838c8
		WideCharToMultiByte(CP_ACP, 0, name, -1, mbname, mbsize,
Packit 7838c8
				    NULL, NULL);
Packit 7838c8
	}
Packit 7838c8
Packit 7838c8
	tif = TIFFFdOpen((int)fd,    /* FIXME: WIN64 cast from pointer to int warning */
Packit 7838c8
			 (mbname != NULL) ? mbname : "<unknown>", mode);
Packit 7838c8
	if(!tif)
Packit 7838c8
		CloseHandle(fd);
Packit 7838c8
Packit 7838c8
	_TIFFfree(mbname);
Packit 7838c8
Packit 7838c8
	return tif;
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
#endif /* ndef _WIN32_WCE */
Packit 7838c8
Packit 7838c8
void*
Packit 7838c8
_TIFFmalloc(tmsize_t s)
Packit 7838c8
{
Packit 7838c8
        if (s == 0)
Packit 7838c8
                return ((void *) NULL);
Packit 7838c8
Packit 7838c8
	return (malloc((size_t) s));
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz)
Packit 7838c8
{
Packit 7838c8
    if( nmemb == 0 || siz == 0 )
Packit 7838c8
        return ((void *) NULL);
Packit 7838c8
Packit 7838c8
    return calloc((size_t) nmemb, (size_t)siz);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
_TIFFfree(void* p)
Packit 7838c8
{
Packit 7838c8
	free(p);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void*
Packit 7838c8
_TIFFrealloc(void* p, tmsize_t s)
Packit 7838c8
{
Packit 7838c8
	return (realloc(p, (size_t) s));
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
_TIFFmemset(void* p, int v, tmsize_t c)
Packit 7838c8
{
Packit 7838c8
	memset(p, v, (size_t) c);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
_TIFFmemcpy(void* d, const void* s, tmsize_t c)
Packit 7838c8
{
Packit 7838c8
	memcpy(d, s, (size_t) c);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
int
Packit 7838c8
_TIFFmemcmp(const void* p1, const void* p2, tmsize_t c)
Packit 7838c8
{
Packit 7838c8
	return (memcmp(p1, p2, (size_t) c));
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
#ifndef _WIN32_WCE
Packit 7838c8
Packit 7838c8
#if (_MSC_VER < 1500)
Packit 7838c8
#  define vsnprintf _vsnprintf
Packit 7838c8
#endif
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
Win32WarningHandler(const char* module, const char* fmt, va_list ap)
Packit 7838c8
{
Packit 7838c8
#ifndef TIF_PLATFORM_CONSOLE
Packit 7838c8
	LPTSTR szTitle;
Packit 7838c8
	LPTSTR szTmp;
Packit 7838c8
	LPCTSTR szTitleText = "%s Warning";
Packit 7838c8
	LPCTSTR szDefaultModule = "LIBTIFF";
Packit 7838c8
	LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module;
Packit 7838c8
        SIZE_T nBufSize = (strlen(szTmpModule) +
Packit 7838c8
                        strlen(szTitleText) + strlen(fmt) + 256)*sizeof(char);
Packit 7838c8
Packit 7838c8
	if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, nBufSize)) == NULL)
Packit 7838c8
		return;
Packit 7838c8
	sprintf(szTitle, szTitleText, szTmpModule);
Packit 7838c8
	szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char);
Packit 7838c8
	vsnprintf(szTmp, nBufSize-(strlen(szTitle)+2)*sizeof(char), fmt, ap);
Packit 7838c8
	MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONINFORMATION);
Packit 7838c8
	LocalFree(szTitle);
Packit 7838c8
Packit 7838c8
	return;
Packit 7838c8
#else
Packit 7838c8
	if (module != NULL)
Packit 7838c8
		fprintf(stderr, "%s: ", module);
Packit 7838c8
	fprintf(stderr, "Warning, ");
Packit 7838c8
	vfprintf(stderr, fmt, ap);
Packit 7838c8
	fprintf(stderr, ".\n");
Packit 7838c8
#endif        
Packit 7838c8
}
Packit 7838c8
TIFFErrorHandler _TIFFwarningHandler = Win32WarningHandler;
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
Win32ErrorHandler(const char* module, const char* fmt, va_list ap)
Packit 7838c8
{
Packit 7838c8
#ifndef TIF_PLATFORM_CONSOLE
Packit 7838c8
	LPTSTR szTitle;
Packit 7838c8
	LPTSTR szTmp;
Packit 7838c8
	LPCTSTR szTitleText = "%s Error";
Packit 7838c8
	LPCTSTR szDefaultModule = "LIBTIFF";
Packit 7838c8
	LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module;
Packit 7838c8
        SIZE_T nBufSize = (strlen(szTmpModule) +
Packit 7838c8
                        strlen(szTitleText) + strlen(fmt) + 256)*sizeof(char);
Packit 7838c8
Packit 7838c8
	if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, nBufSize)) == NULL)
Packit 7838c8
		return;
Packit 7838c8
	sprintf(szTitle, szTitleText, szTmpModule);
Packit 7838c8
	szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char);
Packit 7838c8
	vsnprintf(szTmp, nBufSize-(strlen(szTitle)+2)*sizeof(char), fmt, ap);
Packit 7838c8
	MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONEXCLAMATION);
Packit 7838c8
	LocalFree(szTitle);
Packit 7838c8
	return;
Packit 7838c8
#else
Packit 7838c8
	if (module != NULL)
Packit 7838c8
		fprintf(stderr, "%s: ", module);
Packit 7838c8
	vfprintf(stderr, fmt, ap);
Packit 7838c8
	fprintf(stderr, ".\n");
Packit 7838c8
#endif        
Packit 7838c8
}
Packit 7838c8
TIFFErrorHandler _TIFFerrorHandler = Win32ErrorHandler;
Packit 7838c8
Packit 7838c8
#endif /* ndef _WIN32_WCE */
Packit 7838c8
Packit 7838c8
/* vim: set ts=8 sts=8 sw=8 noet: */
Packit 7838c8
/*
Packit 7838c8
 * Local Variables:
Packit 7838c8
 * mode: c
Packit 7838c8
 * c-basic-offset: 8
Packit 7838c8
 * fill-column: 78
Packit 7838c8
 * End:
Packit 7838c8
 */