BigTIFF upgrade: unchecked and untested version of upgraded tif_unix.c
This commit is contained in:
parent
b2519675c3
commit
d78966c6cf
@ -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)
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user