BigTIFF upgrade: unchecked and untested version of upgraded tif_unix.c

This commit is contained in:
Joris Van Damme 2007-06-28 01:34:01 +00:00
parent b2519675c3
commit d78966c6cf
3 changed files with 134 additions and 76 deletions

View File

@ -1,4 +1,4 @@
/* $Id: tif_dirread.c,v 1.122 2007-06-27 16:09:58 joris Exp $ */
/* $Id: tif_dirread.c,v 1.123 2007-06-28 01:34:01 joris Exp $ */
/*
* Copyright (c) 1988-1997 Sam Leffler
@ -3871,9 +3871,9 @@ TIFFReadDirectoryCheckOrder(TIFF* tif, TIFFDirEntry* dir, uint16 dircount)
static TIFFDirEntry*
TIFFReadDirectoryFindEntry(TIFF* tif, TIFFDirEntry* dir, uint16 dircount, uint16 tagid)
{
(void) tif;
TIFFDirEntry* m;
uint16 n;
(void) tif;
for (m=dir, n=0; n<dircount; m++, n++)
{
if (m->tdir_tag==tagid)

View File

@ -1,26 +1,26 @@
/* $Id: tif_unix.c,v 1.14 2007-06-26 10:41:28 joris Exp $ */
/* $Id: tif_unix.c,v 1.15 2007-06-28 01:34:01 joris Exp $ */
/*
* Copyright (c) 1988-1997 Sam Leffler
* Copyright (c) 1991-1997 Silicon Graphics, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and
* Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that (i) the above copyright notices and this permission notice appear in
* all copies of the software and related documentation, and (ii) the names of
* Sam Leffler and Silicon Graphics may not be used in any advertising or
* publicity relating to the software without the specific, prior written
* permission of Sam Leffler and Silicon Graphics.
*
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
*
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*/
@ -28,6 +28,9 @@
* TIFF Library UNIX-specific Routines. These are should also work with the
* Windows Common RunTime Library.
*/
#define _LARGE_FILE_API
#include "tif_config.h"
#ifdef HAVE_SYS_TYPES_H
@ -52,45 +55,96 @@
#include "tiffiop.h"
COMPILATION SHOULD FAIL
This file is not yet updated to reflect changes in LibTiff 4.0. If you have
the opportunity to update and test this file, please contact LibTiff folks
for all assistance you may require and contribute the results
static tsize_t
_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
static tmsize_t
_tiffReadProc(thandle_t fd, void* buf, tmsize_t size)
{
return ((tsize_t) read((int) fd, buf, (size_t) size));
/* tmsize_t is 64bit on 64bit systems, but the standard library read takes
* signed 32bit sizes, so we loop through the data in suitable 32bit sized
* chunks */
uint8* ma;
uint64 mb;
size_t n;
ssize_t o;
tmsize_t p;
ma=(uint8*)buf;
mb=size;
p=0;
while (mb>0)
{
n=SSIZE_MAX;
if ((uint64)n>mb)
n=(size_t)mb;
o=read((int)fd,(void*)ma,n);
if (o<0)
return(0);
ma+=o;
mb-=o;
p+=o;
if ((size_t)o!=n)
break;
}
return(p);
}
static tsize_t
_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
static tmsize_t
_tiffWriteProc(thandle_t fd, void* buf, tmsize_t size)
{
return ((tsize_t) write((int) fd, buf, (size_t) size));
/* tmsize_t is 64bit on 64bit systems, but the standard library write takes
* signed 32bit sizes, so we loop through the data in suitable 32bit sized
* chunks */
uint8* ma;
uint64 mb;
size_t n;
ssize_t o;
tmsize_t p;
ma=(uint8*)buf;
mb=size;
p=0;
while (mb>0)
{
n=SSIZE_MAX;
if ((uint64)n>mb)
n=(size_t)mb;
o=write((int)fd,(void*)ma,n);
if (o<0)
return(0);
ma+=o;
mb-=o;
p+=o;
if ((size_t)o!=n)
break;
}
return(p);
}
static toff_t
_tiffSeekProc(thandle_t fd, toff_t off, int whence)
static uint64
_tiffSeekProc(thandle_t fd, uint64 off, int whence)
{
return ((toff_t) lseek((int) fd, (off_t) off, whence));
return((uint64)lseek64((int)fd,(off64_t)off,whence));
}
static int
_tiffCloseProc(thandle_t fd)
{
return (close((int) fd));
return(close((int)fd));
}
static toff_t
static uint64
_tiffSizeProc(thandle_t fd)
{
#ifdef _AM29K
long fsize;
return ((fsize = lseek((int) fd, 0, SEEK_END)) < 0 ? 0 : fsize);
off64_t fsize;
fsize=lseek64((int)fd,0,SEEK_END);
if (fsize==(off64_t)(-1))
return(0);
else
return((uint64)fsize);
#else
struct stat sb;
return (toff_t) (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size);
struct stat64 sb;
if (fstat64((int)fd,&sb)<0)
return(0);
else
return((uint64)sb.st_size);
#endif
}
@ -98,14 +152,15 @@ _tiffSizeProc(thandle_t fd)
#include <sys/mman.h>
static int
_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
_tiffMapProc(thandle_t fd, void** pbase, tmsize_t* psize)
{
toff_t size = _tiffSizeProc(fd);
if (size != (toff_t) -1) {
*pbase = (tdata_t)
mmap(0, size, PROT_READ, MAP_SHARED, (int) fd, 0);
if (*pbase != (tdata_t) -1) {
*psize = size;
uint64 size64 = _tiffSizeProc(fd);
tmsize_t sizem = (tmsize_t)size64;
if ((uint64)sizem==size64) {
*pbase = (void*)
mmap(0, (size_t)sizem, PROT_READ, MAP_SHARED, (int) fd, 0);
if (*pbase != (void*) -1) {
*psize = (tmsize_t)sizem;
return (1);
}
}
@ -113,21 +168,21 @@ _tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
}
static void
_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
_tiffUnmapProc(thandle_t fd, void* base, tmsize_t size)
{
(void) fd;
(void) munmap(base, (off_t) size);
}
#else /* !HAVE_MMAP */
static int
_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
_tiffMapProc(thandle_t fd, void** pbase, tmsize_t* psize)
{
(void) fd; (void) pbase; (void) psize;
return (0);
}
static void
_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
_tiffUnmapProc(thandle_t fd, void* base, tmsize_t size)
{
(void) fd; (void) base; (void) size;
}
@ -141,7 +196,7 @@ TIFFFdOpen(int fd, const char* name, const char* mode)
{
TIFF* tif;
tif = TIFFClientOpen(name, mode, ddd
tif = TIFFClientOpen(name, mode,
(thandle_t) fd,
_tiffReadProc, _tiffWriteProc,
_tiffSeekProc, _tiffCloseProc, _tiffSizeProc,
@ -159,17 +214,19 @@ TIFFOpen(const char* name, const char* mode)
{
static const char module[] = "TIFFOpen";
int m, fd;
TIFF* tif;
TIFF* tif;
m = _TIFFgetMode(mode, module);
if (m == -1)
return ((TIFF*)0);
/* for cygwin and mingw */
/* for cygwin and mingw */
#ifdef O_BINARY
m |= O_BINARY;
#endif
m |= O_BINARY;
#endif
m |= O_LARGEFILE;
#ifdef _AM29K
fd = open(name, m);
#else
@ -204,11 +261,14 @@ TIFFOpenW(const wchar_t* name, const char* mode)
if (m == -1)
return ((TIFF*)0);
/* for cygwin and mingw */
/* for cygwin and mingw */
#ifdef O_BINARY
m |= O_BINARY;
#endif
m |= O_BINARY;
#endif
m |= O_LARGEFILE;
fd = _wopen(name, m, 0666);
if (fd < 0) {
TIFFErrorExt(0, module, "%s: Cannot open", name);
@ -241,37 +301,37 @@ TIFFOpenW(const wchar_t* name, const char* mode)
#endif
void*
_TIFFmalloc(tsize_t s)
_TIFFmalloc(tmsize_t s)
{
return (malloc((size_t) s));
}
void
_TIFFfree(tdata_t p)
_TIFFfree(void* p)
{
free(p);
}
void*
_TIFFrealloc(tdata_t p, tsize_t s)
_TIFFrealloc(void* p, tmsize_t s)
{
return (realloc(p, (size_t) s));
}
void
_TIFFmemset(tdata_t p, int v, tsize_t c)
_TIFFmemset(void* p, int v, tmsize_t c)
{
memset(p, v, (size_t) c);
}
void
_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
_TIFFmemcpy(void* d, const void* s, tmsize_t c)
{
memcpy(d, s, (size_t) c);
}
int
_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
_TIFFmemcmp(const void* p1, const void* p2, tmsize_t c)
{
return (memcmp(p1, p2, (size_t) c));
}

View File

@ -1,4 +1,4 @@
/* $Id: tif_win32.c,v 1.29 2007-06-27 16:09:58 joris Exp $ */
/* $Id: tif_win32.c,v 1.30 2007-06-28 01:34:01 joris Exp $ */
/*
* Copyright (c) 1988-1997 Sam Leffler
@ -59,7 +59,7 @@ _tiffReadProc(thandle_t fd, void* buf, tmsize_t size)
if (o!=n)
break;
}
return ((tmsize_t)p);
return(p);
}
static tmsize_t
@ -89,7 +89,7 @@ _tiffWriteProc(thandle_t fd, void* buf, tmsize_t size)
if (o!=n)
break;
}
return ((tmsize_t)p);
return(p);
}
static uint64
@ -97,25 +97,23 @@ _tiffSeekProc(thandle_t fd, uint64 off, int whence)
{
LARGE_INTEGER off_in, off_out;
DWORD dwMoveMethod;
off_in.QuadPart = off;
switch(whence)
{
case SEEK_SET:
dwMoveMethod = FILE_BEGIN;
break;
case SEEK_CUR:
dwMoveMethod = FILE_CURRENT;
break;
case SEEK_END:
dwMoveMethod = FILE_END;
break;
default:
dwMoveMethod = FILE_BEGIN;
break;
case SEEK_SET:
dwMoveMethod = FILE_BEGIN;
break;
case SEEK_CUR:
dwMoveMethod = FILE_CURRENT;
break;
case SEEK_END:
dwMoveMethod = FILE_END;
break;
default:
dwMoveMethod = FILE_BEGIN;
break;
}
if (SetFilePointerEx(fd, off_in, &off_out, dwMoveMethod)==0)
if (SetFilePointerEx(fd,off_in,&off_out,dwMoveMethod)==0)
off_out.QuadPart=0;
return(off_out.QuadPart);
}