| AWARE [SYSTEMS] | Imaging expertise for the Delphi developer | |||||||
![]() |
TIFF and LibTiff Mailing List Archive | |||||||
LibTiff Mailing List
TIFF and LibTiff Mailing List Archive Contact
The TIFF Mailing List Homepage |
1998.12.28 21:35 "TIFFOpen error in tif_win32.c", by Larry ReeveI have run into a problem with the TIFFOpen(tif_win32.c) function in the
v3.4beta037 distribution that causes a failure when the incoming mode
character is 'a' to append to an existing file. In this case the
_TIFFgetMode call returns O_RDWR|O_CREAT and the subsequent switch sets the
dwMode variable to CREATE_NEW. The Win32 CreateFile function then fails to
open the existing file because the dwCreationDisposition parameter of
CREATE_NEW fails the function on an existing file. Setting the dwMode
variable to OPEN_ALWAYS fixes this problem and the image can then be
appended to the existing image.
I have attached an updated version of the function.
Larry Reeve
/*
* Open a TIFF file for read/writing.
*/
TIFF*
TIFFOpen(const char* name, const char* mode)
{
static const char module[] = "TIFFOpen";
thandle_t fd;
int m;
DWORD dwMode;
m = _TIFFgetMode(mode, module);
switch(m)
{
case O_RDONLY:
dwMode = OPEN_EXISTING;
break;
case O_RDWR:
dwMode = OPEN_ALWAYS;
break;
case O_RDWR|O_CREAT:
dwMode = OPEN_ALWAYS;//CREATE_NEW;
break;
case O_RDWR|O_TRUNC:
dwMode = CREATE_ALWAYS;
break;
case O_RDWR|O_CREAT|O_TRUNC:
dwMode = CREATE_ALWAYS;
break;
default:
return ((TIFF*)0);
}
fd = (thandle_t)CreateFile(name, (m == O_RDONLY) ? GENERIC_READ :
(GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ, NULL, dwMode,
(m == O_RDONLY) ? FILE_ATTRIBUTE_READONLY : FILE_ATTRIBUTE_NORMAL, NULL);
if (fd == INVALID_HANDLE_VALUE) {
TIFFError(module, "%s: Cannot open", name);
return ((TIFF *)0);
}
return (TIFFFdOpen((int)fd, name, mode));
}
|
|||||||