Fix warnings about pointer/int casts in Win32 part of libtiff too.

Do the same thing for tif_win32.c as f995dfcc20
did for tif_unix.c, i.e. use a union for casting between HANDLEs and ints to
avoid compiler warnings which were given for the explicit casts before.
This commit is contained in:
Vadim Zeitlin
2015-07-27 03:28:07 +02:00
parent 01af56440a
commit 6caa5e92c1
3 changed files with 24 additions and 17 deletions

View File

@@ -54,12 +54,6 @@
#include "tiffiop.h" #include "tiffiop.h"
typedef union fd_as_handle_union
{
int fd;
thandle_t h;
} fd_as_handle_union_t;
static tmsize_t static tmsize_t
_tiffReadProc(thandle_t fd, void* buf, tmsize_t size) _tiffReadProc(thandle_t fd, void* buf, tmsize_t size)
{ {

View File

@@ -210,6 +210,8 @@ TIFFFdOpen(int ifd, const char* name, const char* mode)
int fSuppressMap; int fSuppressMap;
int m; int m;
fSuppressMap=0; fSuppressMap=0;
fd_as_handle_union_t fdh;
fdh.fd = ifd;
for (m=0; mode[m]!=0; m++) for (m=0; mode[m]!=0; m++)
{ {
if (mode[m]=='u') if (mode[m]=='u')
@@ -218,7 +220,7 @@ TIFFFdOpen(int ifd, const char* name, const char* mode)
break; break;
} }
} }
tif = TIFFClientOpen(name, mode, (thandle_t)ifd, tif = TIFFClientOpen(name, mode, fdh.h,
_tiffReadProc, _tiffWriteProc, _tiffReadProc, _tiffWriteProc,
_tiffSeekProc, _tiffCloseProc, _tiffSizeProc, _tiffSeekProc, _tiffCloseProc, _tiffSizeProc,
fSuppressMap ? _tiffDummyMapProc : _tiffMapProc, fSuppressMap ? _tiffDummyMapProc : _tiffMapProc,
@@ -237,7 +239,7 @@ TIFF*
TIFFOpen(const char* name, const char* mode) TIFFOpen(const char* name, const char* mode)
{ {
static const char module[] = "TIFFOpen"; static const char module[] = "TIFFOpen";
thandle_t fd; fd_as_handle_union_t fdh;
int m; int m;
DWORD dwMode; DWORD dwMode;
TIFF* tif; TIFF* tif;
@@ -253,19 +255,19 @@ TIFFOpen(const char* name, const char* mode)
default: return ((TIFF*)0); default: return ((TIFF*)0);
} }
fd = (thandle_t)CreateFileA(name, fdh.h = CreateFileA(name,
(m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE), (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE),
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode,
(m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL,
NULL); NULL);
if (fd == INVALID_HANDLE_VALUE) { if (fdh.h == INVALID_HANDLE_VALUE) {
TIFFErrorExt(0, module, "%s: Cannot open", name); TIFFErrorExt(0, module, "%s: Cannot open", name);
return ((TIFF *)0); return ((TIFF *)0);
} }
tif = TIFFFdOpen((int)fd, name, mode); tif = TIFFFdOpen(fdh.fd, name, mode);
if(!tif) if(!tif)
CloseHandle(fd); CloseHandle(fdh.h);
return tif; return tif;
} }
@@ -276,7 +278,7 @@ TIFF*
TIFFOpenW(const wchar_t* name, const char* mode) TIFFOpenW(const wchar_t* name, const char* mode)
{ {
static const char module[] = "TIFFOpenW"; static const char module[] = "TIFFOpenW";
thandle_t fd; fd_as_handle_union_t fdh;
int m; int m;
DWORD dwMode; DWORD dwMode;
int mbsize; int mbsize;
@@ -294,12 +296,12 @@ TIFFOpenW(const wchar_t* name, const char* mode)
default: return ((TIFF*)0); default: return ((TIFF*)0);
} }
fd = (thandle_t)CreateFileW(name, fdh.h = CreateFileW(name,
(m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE), (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE),
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode,
(m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL,
NULL); NULL);
if (fd == INVALID_HANDLE_VALUE) { if (fdh.h == INVALID_HANDLE_VALUE) {
TIFFErrorExt(0, module, "%S: Cannot open", name); TIFFErrorExt(0, module, "%S: Cannot open", name);
return ((TIFF *)0); return ((TIFF *)0);
} }
@@ -318,10 +320,10 @@ TIFFOpenW(const wchar_t* name, const char* mode)
NULL, NULL); NULL, NULL);
} }
tif = TIFFFdOpen((int)fd, tif = TIFFFdOpen(fdh.fd,
(mbname != NULL) ? mbname : "<unknown>", mode); (mbname != NULL) ? mbname : "<unknown>", mode);
if(!tif) if(!tif)
CloseHandle(fd); CloseHandle(fdh.h);
_TIFFfree(mbname); _TIFFfree(mbname);

View File

@@ -77,6 +77,17 @@ typedef struct client_info {
char *name; char *name;
} TIFFClientInfoLink; } TIFFClientInfoLink;
/*
* Union allowing to cast between the OS-specific handles and integer file
* descriptors without triggering compiler warnings, even if their types are
* not the same.
*/
typedef union fd_as_handle_union
{
int fd;
thandle_t h;
} fd_as_handle_union_t;
/* /*
* Typedefs for ``method pointers'' used internally. * Typedefs for ``method pointers'' used internally.
* these are depriciated and provided only for backwards compatibility * these are depriciated and provided only for backwards compatibility