Alien-FreeImage
view release on metacpan or search on metacpan
src/Source/LibTIFF4/tif_dirwrite.c view on Meta::CPAN
return(TIFFWriteDirectoryTagCheckedIfdArray(tif,ndir,dir,tag,count,value));
}
#ifdef notdef
static int
TIFFWriteDirectoryTagIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
{
if (dir==NULL)
{
(*ndir)++;
return(1);
}
return(TIFFWriteDirectoryTagCheckedIfd8Array(tif,ndir,dir,tag,count,value));
}
#endif
static int
TIFFWriteDirectoryTagShortLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value)
{
if (dir==NULL)
{
(*ndir)++;
return(1);
}
if (value<=0xFFFF)
return(TIFFWriteDirectoryTagCheckedShort(tif,ndir,dir,tag,(uint16)value));
else
return(TIFFWriteDirectoryTagCheckedLong(tif,ndir,dir,tag,value));
}
/************************************************************************/
/* TIFFWriteDirectoryTagLongLong8Array() */
/* */
/* Write out LONG8 array as LONG8 for BigTIFF or LONG for */
/* Classic TIFF with some checking. */
/************************************************************************/
static int
TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
{
static const char module[] = "TIFFWriteDirectoryTagLongLong8Array";
uint64* ma;
uint32 mb;
uint32* p;
uint32* q;
int o;
/* is this just a counting pass? */
if (dir==NULL)
{
(*ndir)++;
return(1);
}
/* We always write LONG8 for BigTIFF, no checking needed. */
if( tif->tif_flags&TIFF_BIGTIFF )
return TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir,
tag,count,value);
/*
** For classic tiff we want to verify everything is in range for LONG
** and convert to long format.
*/
p = _TIFFmalloc(count*sizeof(uint32));
if (p==NULL)
{
TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
return(0);
}
for (q=p, ma=value, mb=0; mb<count; ma++, mb++, q++)
{
if (*ma>0xFFFFFFFF)
{
TIFFErrorExt(tif->tif_clientdata,module,
"Attempt to write value larger than 0xFFFFFFFF in Classic TIFF file.");
_TIFFfree(p);
return(0);
}
*q= (uint32)(*ma);
}
o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,p);
_TIFFfree(p);
return(o);
}
/************************************************************************/
/* TIFFWriteDirectoryTagIfdIfd8Array() */
/* */
/* Write either IFD8 or IFD array depending on file type. */
/************************************************************************/
static int
TIFFWriteDirectoryTagIfdIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
{
static const char module[] = "TIFFWriteDirectoryTagIfdIfd8Array";
uint64* ma;
uint32 mb;
uint32* p;
uint32* q;
int o;
/* is this just a counting pass? */
if (dir==NULL)
{
(*ndir)++;
return(1);
}
/* We always write IFD8 for BigTIFF, no checking needed. */
if( tif->tif_flags&TIFF_BIGTIFF )
return TIFFWriteDirectoryTagCheckedIfd8Array(tif,ndir,dir,
tag,count,value);
/*
** For classic tiff we want to verify everything is in range for IFD
** and convert to long format.
*/
p = _TIFFmalloc(count*sizeof(uint32));
if (p==NULL)
{
TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
return(0);
}
for (q=p, ma=value, mb=0; mb<count; ma++, mb++, q++)
{
if (*ma>0xFFFFFFFF)
{
TIFFErrorExt(tif->tif_clientdata,module,
"Attempt to write value larger than 0xFFFFFFFF in Classic TIFF file.");
_TIFFfree(p);
return(0);
}
*q= (uint32)(*ma);
}
o=TIFFWriteDirectoryTagCheckedIfdArray(tif,ndir,dir,tag,count,p);
_TIFFfree(p);
return(o);
}
#ifdef notdef
static int
TIFFWriteDirectoryTagShortLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
{
static const char module[] = "TIFFWriteDirectoryTagShortLongLong8Array";
uint64* ma;
uint32 mb;
uint8 n;
int o;
if (dir==NULL)
{
(*ndir)++;
return(1);
}
n=0;
for (ma=value, mb=0; mb<count; ma++, mb++)
{
if ((n==0)&&(*ma>0xFFFF))
n=1;
if ((n==1)&&(*ma>0xFFFFFFFF))
{
n=2;
break;
}
}
if (n==0)
{
uint16* p;
uint16* q;
p=_TIFFmalloc(count*sizeof(uint16));
if (p==NULL)
{
( run in 0.464 second using v1.01-cache-2.11-cpan-119454b85a5 )