diff --git a/CGAL_ImageIO/include/CGAL/ImageIO.h b/CGAL_ImageIO/include/CGAL/ImageIO.h index c296b99aa39..47344adb747 100644 --- a/CGAL_ImageIO/include/CGAL/ImageIO.h +++ b/CGAL_ImageIO/include/CGAL/ImageIO.h @@ -516,7 +516,7 @@ CGAL_IMAGEIO_EXPORT char *ImageIO_gets( const _image *im, char *str, int size ); /** replaces fseek function */ -CGAL_IMAGEIO_EXPORT int ImageIO_seek( const _image *im, long offset, int whence ); +CGAL_IMAGEIO_EXPORT long ImageIO_seek( const _image *im, long offset, int whence ); /** replaces ferror function */ diff --git a/CGAL_ImageIO/include/CGAL/ImageIO_impl.h b/CGAL_ImageIO/include/CGAL/ImageIO_impl.h index 31a7684aa3e..de4b743472b 100644 --- a/CGAL_ImageIO/include/CGAL/ImageIO_impl.h +++ b/CGAL_ImageIO/include/CGAL/ImageIO_impl.h @@ -111,6 +111,11 @@ void ImageIO_free(void *m) { +unsigned int ImageIO_limit_len(size_t to_be_read) +{ + return (unsigned int)(std::min)(to_be_read, size_t(1u<<30)); +} + /* mimics fwrite() function. According to _openWriteImage(), openMode will has one of the following value: @@ -120,6 +125,9 @@ void ImageIO_free(void *m) { */ CGAL_INLINE_FUNCTION size_t ImageIO_write(const _image *im, const void *buf, size_t len) { + size_t to_be_written = len; + int l = -1; + char *b = (char*)buf; switch(im->openMode) { default : @@ -127,23 +135,40 @@ size_t ImageIO_write(const _image *im, const void *buf, size_t len) { return 0; case OM_STD : #ifdef CGAL_USE_ZLIB - return gzwrite(im->fd, (void *) buf, len); + while ( (to_be_written > 0) && ((l = gzwrite(im->fd, (void *) b, ImageIO_limit_len(to_be_written))) > 0) ) { + to_be_written -= l; + b += l; + } #else - return fwrite(buf, 1, len, im->fd); + while ( (to_be_written > 0) && ((l = fwrite( b, 1, ImageIO_limit_len(to_be_written), im->fd )) > 0) ) { + to_be_written -= l; + b += l; + } #endif + return ( len - to_be_written ); #ifdef CGAL_USE_ZLIB case OM_GZ : - return gzwrite(im->fd, (void *) buf, len); + while ( (to_be_written > 0) && ((l = gzwrite(im->fd, (void *) b, ImageIO_limit_len(to_be_written))) > 0) ) { + to_be_written -= l; + b += l; + } + if(l<0) + { + int errnum; + fprintf(stderr, "zlib error: %s\n", gzerror(im->fd, &errnum)); + } + return ( len - to_be_written ); +#else + case OM_FILE : + while ( (to_be_written > 0) && ((l = fwrite( b, 1, ImageIO_limit_len(to_be_written), im->fd )) > 0) ) { + to_be_written -= l; + b += l; + } + return ( len - to_be_written ); #endif - case OM_FILE: - return fwrite(buf, 1, len, (FILE*)im->fd); } - //return 0; -} -size_t ImageIO_limit_read(size_t to_be_read) -{ - return (std::min)(to_be_read, size_t(1u<<30)); + //return 0; } /* mimics fread() function. @@ -165,12 +190,12 @@ size_t ImageIO_read(const _image *im, void *buf, size_t len) return 0; case OM_STD : #ifdef CGAL_USE_ZLIB - while ( (to_be_read > 0) && ((l = gzread(im->fd, (void *) b, ImageIO_limit_read(to_be_read))) > 0) ) { + while ( (to_be_read > 0) && ((l = gzread(im->fd, (void *) b, ImageIO_limit_len(to_be_read))) > 0) ) { to_be_read -= l; b += l; } #else - while ( (to_be_read > 0) && ((l = fread( b, 1, ImageIO_limit_read(to_be_read), im->fd )) > 0) ) { + while ( (to_be_read > 0) && ((l = fread( b, 1, ImageIO_limit_len(to_be_read), im->fd )) > 0) ) { to_be_read -= l; b += l; } @@ -178,7 +203,7 @@ size_t ImageIO_read(const _image *im, void *buf, size_t len) return ( len - to_be_read ); #ifdef CGAL_USE_ZLIB case OM_GZ : - while ( (to_be_read > 0) && ((l = gzread(im->fd, (void *) b, ImageIO_limit_read(to_be_read))) > 0) ) { + while ( (to_be_read > 0) && ((l = gzread(im->fd, (void *) b, ImageIO_limit_len(to_be_read))) > 0) ) { to_be_read -= l; b += l; } @@ -190,7 +215,7 @@ size_t ImageIO_read(const _image *im, void *buf, size_t len) return ( len - to_be_read ); #else case OM_FILE : - while ( (to_be_read > 0) && ((l = fread( b, 1, ImageIO_limit_read(to_be_read), im->fd )) > 0) ) { + while ( (to_be_read > 0) && ((l = fread( b, 1, ImageIO_limit_len(to_be_read), im->fd )) > 0) ) { to_be_read -= l; b += l; } @@ -240,7 +265,7 @@ char *ImageIO_gets( const _image *im, char *str, int size ) CGAL_INLINE_FUNCTION -int ImageIO_seek( const _image *im, long offset, int whence ) { +long ImageIO_seek( const _image *im, long offset, int whence ) { switch(im->openMode) { case OM_CLOSE : default : @@ -790,7 +815,7 @@ CGAL_INLINE_FUNCTION int _writeImage(_image *im, const char *name_to_be_written ) { int r = ImageIO_NO_ERROR; - int length = 0; + std::size_t length = 0; char *name = NULL; char *baseName = NULL; @@ -814,7 +839,7 @@ int _writeImage(_image *im, const char *name_to_be_written ) { if ( name == NULL ) { im->imageFormat = InrimageFormat; } else { - int i,extLength; + std::size_t i,extLength; PTRIMAGE_FORMAT f; char ext[IMAGE_FORMAT_NAME_LENGTH]; char *ptr; @@ -1054,11 +1079,11 @@ static void _swapImageData( _image *im ) unsigned char *ptr1, *ptr2, b[8]; unsigned short int si, *ptr3, *ptr4; unsigned int i, *ptr5, *ptr6; - int size, length; + std::size_t size, length; if( _getEndianness() != im->endianness) { - size = im->xdim * im->ydim * im->zdim * im->vdim * im->wdim; + size = std::size_t(im->xdim) * im->ydim * im->zdim * im->vdim * im->wdim; if ( size <= 0 ) return; length = size / im->wdim; diff --git a/CGAL_ImageIO/include/CGAL/Image_3_impl.h b/CGAL_ImageIO/include/CGAL/Image_3_impl.h index deeae53e950..fe07a2a0cf2 100644 --- a/CGAL_ImageIO/include/CGAL/Image_3_impl.h +++ b/CGAL_ImageIO/include/CGAL/Image_3_impl.h @@ -61,7 +61,7 @@ void Image_3::gl_draw(const float point_size, glColor3ub(r,g,b); glBegin(GL_POINTS); unsigned char *pData = (unsigned char*)image_ptr->data; - unsigned int xy = image_ptr->xdim * image_ptr->ydim; + std::size_t xy = image_ptr->xdim * image_ptr->ydim; for(unsigned int i=0;ixdim;i+=5) for(unsigned int j=0;jydim;j+=5) for(unsigned int k=0;kzdim;k+=5) diff --git a/CGAL_ImageIO/src/CGAL_ImageIO/analyze_impl.h b/CGAL_ImageIO/src/CGAL_ImageIO/analyze_impl.h index 4f923745450..2328ea36cba 100644 --- a/CGAL_ImageIO/src/CGAL_ImageIO/analyze_impl.h +++ b/CGAL_ImageIO/src/CGAL_ImageIO/analyze_impl.h @@ -790,9 +790,9 @@ writeAnalyzeHeader( const _image* im ) /* Writes the given image body in an already opened file.*/ CGAL_INLINE_FUNCTION int writeAnalyzeData(const _image *im) { - unsigned int lineSize = im->wdim * im->xdim * im->vdim ; - unsigned long size = lineSize * im->ydim * im->zdim; - unsigned int nwrt ; + std::size_t lineSize = std::size_t(im->wdim) * im->xdim * im->vdim ; + std::size_t size = lineSize * im->ydim * im->zdim; + std::size_t nwrt ; if(im->openMode != OM_CLOSE) { diff --git a/CGAL_ImageIO/src/CGAL_ImageIO/gif_impl.h b/CGAL_ImageIO/src/CGAL_ImageIO/gif_impl.h index ed9ac0b35d9..5545603d2cd 100644 --- a/CGAL_ImageIO/src/CGAL_ImageIO/gif_impl.h +++ b/CGAL_ImageIO/src/CGAL_ImageIO/gif_impl.h @@ -134,7 +134,7 @@ int gif89 = 0; byte ch, ch1; byte *ptr, *ptr1; int i, block; - int npixels, maxpixels, aspect, filesize; + int npixels, maxpixels, aspect; float normaspect; int OutCount = 0, /* Decompressor output 'stack count' */ RWidth, RHeight, /* screen dimensions */ @@ -186,7 +186,7 @@ int gif89 = 0; } /* find the size of the file */ fseek(fp, 0L, 2); - filesize = ftell(fp); + long filesize = ftell(fp); fseek(fp, 0L, 0); /* the +256's are so we can read truncated GIF files without fear of diff --git a/CGAL_ImageIO/src/CGAL_ImageIO/inr_impl.h b/CGAL_ImageIO/src/CGAL_ImageIO/inr_impl.h index dc672626634..b53ea5a141d 100644 --- a/CGAL_ImageIO/src/CGAL_ImageIO/inr_impl.h +++ b/CGAL_ImageIO/src/CGAL_ImageIO/inr_impl.h @@ -75,7 +75,7 @@ static void concatStringElement(const stringListHead *strhead, /* Writes the given inrimage header in an already opened file.*/ CGAL_INLINE_FUNCTION int _writeInrimageHeader(const _image *im, ENDIANNESS end) { - unsigned int pos, i; + std::size_t pos, i; char type[30], endianness[5], buf[257], scale[20]; std::ostringstream oss; diff --git a/CGAL_ImageIO/src/CGAL_ImageIO/pnm_impl.h b/CGAL_ImageIO/src/CGAL_ImageIO/pnm_impl.h index 58c5a98ca34..6953b259c98 100644 --- a/CGAL_ImageIO/src/CGAL_ImageIO/pnm_impl.h +++ b/CGAL_ImageIO/src/CGAL_ImageIO/pnm_impl.h @@ -565,9 +565,9 @@ int writePgmImage(char *name,_image *im ) ImageIO_write( im, string, strlen( string ) ); if ( im->dataMode == DM_ASCII ) { - int i, j, n, size; + std::size_t i, j, n, size; char *str = (char*)ImageIO_alloc( _LGTH_STRING_+1 ); - size = im->xdim * im->ydim * im->zdim * im->vdim; + size = std::size_t(im->xdim) * im->ydim * im->zdim * im->vdim; n = ( im->xdim < 16 ) ? im->xdim : 16; i = 0; switch( im->wdim ) { diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 32cb8508f6e..a8ec18de6bb 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -343,11 +343,11 @@ endif() # CGAL-4.6 : 11.0.0 (int->size_t in CGAL_ImageIO) # CGAL-4.7 : 11.0.1 (Nothing different in CGAL compiled libraries.) # CGAL-4.8 : 11.0.2 (Nothing different in CGAL compiled libraries.) -# CGAL-4.9 : 11.0.3 (Nothing different in CGAL compiled libraries.) +# CGAL-4.9 : 12.0.0 (Change the API/ABI in CGAL_ImageIO, but issue with 4GB images.) # ยน) According to http://upstream-tracker.org/versions/cgal.html -set( CGAL_SONAME_VERSION "11" ) -set( CGAL_SOVERSION "11.0.3" ) +set( CGAL_SONAME_VERSION "12" ) +set( CGAL_SOVERSION "12.0.0" ) message( STATUS "CGAL_SONAME_VERSION=${CGAL_SONAME_VERSION}" ) message( STATUS "CGAL_SOVERSION =${CGAL_SOVERSION}" )