From: cristy Date: Sun, 17 Jun 2012 13:59:06 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~5421 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e7b28373601bb01711ed20b7a14feb19742c5558;p=imagemagick --- diff --git a/MagickCore/blob.c b/MagickCore/blob.c index 4abd4d56b..0ebe62996 100644 --- a/MagickCore/blob.c +++ b/MagickCore/blob.c @@ -95,6 +95,22 @@ /* Typedef declarations. */ +typedef union FileInfo +{ + FILE + *file; + +#if defined(MAGICKCORE_ZLIB_DELEGATE) + gzFile + gzfile; +#endif + +#if defined(MAGICKCORE_BZLIB_DELEGATE) + BZFILE + *bzfile; +#endif +} FileInfo; + struct _BlobInfo { size_t @@ -121,20 +137,8 @@ struct _BlobInfo StreamType type; - union _stream_info { - FILE - *file; - -#if defined(MAGICKCORE_ZLIB_DELEGATE) - gzFile - gzfile; -#endif - -#if defined(MAGICKCORE_BZLIB_DELEGATE) - BZFILE - *bzfile; -#endif - } stream_info; + FileInfo + file_info; struct stat properties; @@ -202,7 +206,7 @@ MagickExport void AttachBlob(BlobInfo *blob_info,const void *blob, blob_info->quantum=(size_t) MagickMaxBlobExtent; blob_info->offset=0; blob_info->type=BlobStream; - blob_info->stream_info.file=(FILE *) NULL; + blob_info->file_info.file=(FILE *) NULL; blob_info->data=(unsigned char *) blob; blob_info->mapped=MagickFalse; } @@ -464,7 +468,7 @@ MagickExport BlobInfo *CloneBlobInfo(const BlobInfo *blob_info) clone_info->status=blob_info->status; clone_info->temporary=blob_info->temporary; clone_info->type=blob_info->type; - clone_info->stream_info.file=blob_info->stream_info.file; + clone_info->file_info.file=blob_info->file_info.file; clone_info->properties=blob_info->properties; clone_info->stream=blob_info->stream; clone_info->data=blob_info->data; @@ -529,20 +533,20 @@ MagickExport MagickBooleanType CloseBlob(Image *image) case StandardStream: case PipeStream: { - status=ferror(image->blob->stream_info.file); + status=ferror(image->blob->file_info.file); break; } case ZipStream: { #if defined(MAGICKCORE_ZLIB_DELEGATE) - (void) gzerror(image->blob->stream_info.gzfile,&status); + (void) gzerror(image->blob->file_info.gzfile,&status); #endif break; } case BZipStream: { #if defined(MAGICKCORE_BZLIB_DELEGATE) - (void) BZ2_bzerror(image->blob->stream_info.bzfile,&status); + (void) BZ2_bzerror(image->blob->file_info.bzfile,&status); #endif break; } @@ -560,30 +564,30 @@ MagickExport MagickBooleanType CloseBlob(Image *image) { if (image->blob->synchronize != MagickFalse) { - status=fflush(image->blob->stream_info.file); - status=fsync(fileno(image->blob->stream_info.file)); + status=fflush(image->blob->file_info.file); + status=fsync(fileno(image->blob->file_info.file)); } - status=fclose(image->blob->stream_info.file); + status=fclose(image->blob->file_info.file); break; } case PipeStream: { #if defined(MAGICKCORE_HAVE_PCLOSE) - status=pclose(image->blob->stream_info.file); + status=pclose(image->blob->file_info.file); #endif break; } case ZipStream: { #if defined(MAGICKCORE_ZLIB_DELEGATE) - status=gzclose(image->blob->stream_info.gzfile); + status=gzclose(image->blob->file_info.gzfile); #endif break; } case BZipStream: { #if defined(MAGICKCORE_BZLIB_DELEGATE) - BZ2_bzclose(image->blob->stream_info.bzfile); + BZ2_bzclose(image->blob->file_info.bzfile); #endif break; } @@ -591,11 +595,11 @@ MagickExport MagickBooleanType CloseBlob(Image *image) break; case BlobStream: { - if (image->blob->stream_info.file != (FILE *) NULL) + if (image->blob->file_info.file != (FILE *) NULL) { if (image->blob->synchronize != MagickFalse) - (void) fsync(fileno(image->blob->stream_info.file)); - status=fclose(image->blob->stream_info.file); + (void) fsync(fileno(image->blob->file_info.file)); + status=fclose(image->blob->file_info.file); } break; } @@ -694,7 +698,7 @@ MagickExport unsigned char *DetachBlob(BlobInfo *blob_info) blob_info->eof=MagickFalse; blob_info->exempt=MagickFalse; blob_info->type=UndefinedStream; - blob_info->stream_info.file=(FILE *) NULL; + blob_info->file_info.file=(FILE *) NULL; data=blob_info->data; blob_info->data=(unsigned char *) NULL; blob_info->stream=(StreamHandler) NULL; @@ -858,7 +862,7 @@ MagickExport int EOFBlob(const Image *image) case StandardStream: case PipeStream: { - image->blob->eof=feof(image->blob->stream_info.file) != 0 ? MagickTrue : + image->blob->eof=feof(image->blob->file_info.file) != 0 ? MagickTrue : MagickFalse; break; } @@ -874,7 +878,7 @@ MagickExport int EOFBlob(const Image *image) status; status=0; - (void) BZ2_bzerror(image->blob->stream_info.bzfile,&status); + (void) BZ2_bzerror(image->blob->file_info.bzfile,&status); image->blob->eof=status == BZ_UNEXPECTED_EOF ? MagickTrue : MagickFalse; #endif break; @@ -966,14 +970,14 @@ MagickExport unsigned char *FileToBlob(const char *filename,const size_t extent, quantum; struct stat - file_info; + file_stats; /* Stream is not seekable. */ quantum=(size_t) MagickMaxBufferExtent; - if ((fstat(file,&file_info) == 0) && (file_info.st_size != 0)) - quantum=(size_t) MagickMin((MagickSizeType) file_info.st_size, + if ((fstat(file,&file_stats) == 0) && (file_stats.st_size != 0)) + quantum=(size_t) MagickMin((MagickSizeType) file_stats.st_size, MagickMaxBufferExtent); blob=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*blob)); for (i=0; blob != (unsigned char *) NULL; i+=count) @@ -1133,7 +1137,7 @@ MagickExport MagickBooleanType FileToImage(Image *image,const char *filename, count; struct stat - file_info; + file_stats; unsigned char *blob; @@ -1149,8 +1153,8 @@ MagickExport MagickBooleanType FileToImage(Image *image,const char *filename, return(MagickFalse); } quantum=(size_t) MagickMaxBufferExtent; - if ((fstat(file,&file_info) == 0) && (file_info.st_size != 0)) - quantum=(size_t) MagickMin(file_info.st_size,MagickMaxBufferExtent); + if ((fstat(file,&file_stats) == 0) && (file_stats.st_size != 0)) + quantum=(size_t) MagickMin(file_stats.st_size,MagickMaxBufferExtent); blob=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*blob)); if (blob == (unsigned char *) NULL) { @@ -1240,7 +1244,7 @@ MagickExport FILE *GetBlobFileHandle(const Image *image) { assert(image != (const Image *) NULL); assert(image->signature == MagickSignature); - return(image->blob->stream_info.file); + return(image->blob->file_info.file); } /* @@ -1353,7 +1357,7 @@ MagickExport MagickSizeType GetBlobSize(const Image *image) } case FileStream: { - if (fstat(fileno(image->blob->stream_info.file),&image->blob->properties) == 0) + if (fstat(fileno(image->blob->file_info.file),&image->blob->properties) == 0) extent=(MagickSizeType) image->blob->properties.st_size; break; } @@ -1628,7 +1632,7 @@ MagickExport MagickBooleanType ImageToFile(Image *image,char *filename, count; struct stat - file_info; + file_stats; unsigned char *buffer; @@ -1653,8 +1657,8 @@ MagickExport MagickBooleanType ImageToFile(Image *image,char *filename, return(MagickFalse); } quantum=(size_t) MagickMaxBufferExtent; - if ((fstat(file,&file_info) == 0) && (file_info.st_size != 0)) - quantum=(size_t) MagickMin((MagickSizeType) file_info.st_size, + if ((fstat(file,&file_stats) == 0) && (file_stats.st_size != 0)) + quantum=(size_t) MagickMin((MagickSizeType) file_stats.st_size, MagickMaxBufferExtent); buffer=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*buffer)); if (buffer == (unsigned char *) NULL) @@ -1898,7 +1902,7 @@ MagickExport MagickBooleanType InjectImageBlob(const ImageInfo *image_info, count; struct stat - file_info; + file_stats; unsigned char *buffer; @@ -1960,8 +1964,8 @@ MagickExport MagickBooleanType InjectImageBlob(const ImageInfo *image_info, return(MagickFalse); } quantum=(size_t) MagickMaxBufferExtent; - if ((fstat(file,&file_info) == 0) && (file_info.st_size != 0)) - quantum=(size_t) MagickMin(file_info.st_size,MagickMaxBufferExtent); + if ((fstat(file,&file_stats) == 0) && (file_stats.st_size != 0)) + quantum=(size_t) MagickMin(file_stats.st_size,MagickMaxBufferExtent); buffer=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*buffer)); if (buffer == (unsigned char *) NULL) { @@ -2389,10 +2393,10 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, if ((LocaleCompare(filename,"-") == 0) || ((*filename == '\0') && (image_info->file == (FILE *) NULL))) { - image->blob->stream_info.file=(*type == 'r') ? stdin : stdout; + image->blob->file_info.file=(*type == 'r') ? stdin : stdout; #if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__OS2__) if (strchr(type,'b') != (char *) NULL) - setmode(_fileno(image->blob->stream_info.file),_O_BINARY); + setmode(_fileno(image->blob->file_info.file),_O_BINARY); #endif image->blob->type=StandardStream; image->blob->exempt=MagickTrue; @@ -2405,10 +2409,10 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, *mode=(*type); mode[1]='\0'; - image->blob->stream_info.file=fdopen(StringToLong(filename+3),mode); + image->blob->file_info.file=fdopen(StringToLong(filename+3),mode); #if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__OS2__) if (strchr(type,'b') != (char *) NULL) - setmode(_fileno(image->blob->stream_info.file),_O_BINARY); + setmode(_fileno(image->blob->file_info.file),_O_BINARY); #endif image->blob->type=StandardStream; image->blob->exempt=MagickTrue; @@ -2429,8 +2433,8 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, #endif *mode=(*type); mode[1]='\0'; - image->blob->stream_info.file=(FILE *) popen_utf8(filename+1,mode); - if (image->blob->stream_info.file == (FILE *) NULL) + image->blob->file_info.file=(FILE *) popen_utf8(filename+1,mode); + if (image->blob->file_info.file == (FILE *) NULL) { ThrowFileException(exception,BlobError,"UnableToOpenBlob",filename); return(MagickFalse); @@ -2444,8 +2448,8 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, #if defined(S_ISFIFO) if ((status == MagickTrue) && S_ISFIFO(image->blob->properties.st_mode)) { - image->blob->stream_info.file=(FILE *) fopen_utf8(filename,type); - if (image->blob->stream_info.file == (FILE *) NULL) + image->blob->file_info.file=(FILE *) fopen_utf8(filename,type); + if (image->blob->file_info.file == (FILE *) NULL) { ThrowFileException(exception,BlobError,"UnableToOpenBlob",filename); return(MagickFalse); @@ -2490,15 +2494,15 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, } if (image_info->file != (FILE *) NULL) { - image->blob->stream_info.file=image_info->file; + image->blob->file_info.file=image_info->file; image->blob->type=FileStream; image->blob->exempt=MagickTrue; } else if (*type == 'r') { - image->blob->stream_info.file=(FILE *) fopen_utf8(filename,type); - if (image->blob->stream_info.file != (FILE *) NULL) + image->blob->file_info.file=(FILE *) fopen_utf8(filename,type); + if (image->blob->file_info.file != (FILE *) NULL) { size_t count; @@ -2508,30 +2512,30 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, image->blob->type=FileStream; #if defined(MAGICKCORE_HAVE_SETVBUF) - (void) setvbuf(image->blob->stream_info.file,(char *) NULL, + (void) setvbuf(image->blob->file_info.file,(char *) NULL, (int) _IOFBF,16384); #endif (void) ResetMagickMemory(magick,0,sizeof(magick)); - count=fread(magick,1,sizeof(magick),image->blob->stream_info.file); - (void) rewind(image->blob->stream_info.file); + count=fread(magick,1,sizeof(magick),image->blob->file_info.file); + (void) rewind(image->blob->file_info.file); (void) LogMagickEvent(BlobEvent,GetMagickModule(), " read %.20g magic header bytes",(double) count); #if defined(MAGICKCORE_ZLIB_DELEGATE) if (((int) magick[0] == 0x1F) && ((int) magick[1] == 0x8B) && ((int) magick[2] == 0x08)) { - (void) fclose(image->blob->stream_info.file); - image->blob->stream_info.gzfile=gzopen(filename,type); - if (image->blob->stream_info.gzfile != (gzFile) NULL) + (void) fclose(image->blob->file_info.file); + image->blob->file_info.gzfile=gzopen(filename,type); + if (image->blob->file_info.gzfile != (gzFile) NULL) image->blob->type=ZipStream; } #endif #if defined(MAGICKCORE_BZLIB_DELEGATE) if (strncmp((char *) magick,"BZh",3) == 0) { - (void) fclose(image->blob->stream_info.file); - image->blob->stream_info.bzfile=BZ2_bzopen(filename,type); - if (image->blob->stream_info.bzfile != (BZFILE *) NULL) + (void) fclose(image->blob->file_info.file); + image->blob->file_info.bzfile=BZ2_bzopen(filename,type); + if (image->blob->file_info.bzfile != (BZFILE *) NULL) image->blob->type=BZipStream; } #endif @@ -2561,7 +2565,7 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, *blob; length=(size_t) properties->st_size; - blob=MapBlob(fileno(image->blob->stream_info.file),ReadMode, + blob=MapBlob(fileno(image->blob->file_info.file),ReadMode, 0,length); if (blob != (void *) NULL) { @@ -2572,8 +2576,8 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, image->blob->exempt=MagickFalse; else { - (void) fclose(image->blob->stream_info.file); - image->blob->stream_info.file=(FILE *) NULL; + (void) fclose(image->blob->file_info.file); + image->blob->file_info.file=(FILE *) NULL; } AttachBlob(image->blob,blob,length); image->blob->mapped=MagickTrue; @@ -2591,8 +2595,8 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, { if (mode == WriteBinaryBlobMode) type="wb"; - image->blob->stream_info.gzfile=gzopen(filename,type); - if (image->blob->stream_info.gzfile != (gzFile) NULL) + image->blob->file_info.gzfile=gzopen(filename,type); + if (image->blob->file_info.gzfile != (gzFile) NULL) image->blob->type=ZipStream; } else @@ -2600,19 +2604,19 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info, #if defined(MAGICKCORE_BZLIB_DELEGATE) if (LocaleCompare(extension,"bz2") == 0) { - image->blob->stream_info.bzfile=BZ2_bzopen(filename,type); - if (image->blob->stream_info.bzfile != (BZFILE *) NULL) + image->blob->file_info.bzfile=BZ2_bzopen(filename,type); + if (image->blob->file_info.bzfile != (BZFILE *) NULL) image->blob->type=BZipStream; } else #endif { - image->blob->stream_info.file=(FILE *) fopen_utf8(filename,type); - if (image->blob->stream_info.file != (FILE *) NULL) + image->blob->file_info.file=(FILE *) fopen_utf8(filename,type); + if (image->blob->file_info.file != (FILE *) NULL) { image->blob->type=FileStream; #if defined(MAGICKCORE_HAVE_SETVBUF) - (void) setvbuf(image->blob->stream_info.file,(char *) NULL,(int) _IOFBF, + (void) setvbuf(image->blob->file_info.file,(char *) NULL,(int) _IOFBF, 16384); #endif } @@ -2776,12 +2780,12 @@ MagickExport ssize_t ReadBlob(Image *image,const size_t length, { default: { - count=(ssize_t) fread(q,1,length,image->blob->stream_info.file); + count=(ssize_t) fread(q,1,length,image->blob->file_info.file); break; } case 2: { - c=getc(image->blob->stream_info.file); + c=getc(image->blob->file_info.file); if (c == EOF) break; *q++=(unsigned char) c; @@ -2789,7 +2793,7 @@ MagickExport ssize_t ReadBlob(Image *image,const size_t length, } case 1: { - c=getc(image->blob->stream_info.file); + c=getc(image->blob->file_info.file); if (c == EOF) break; *q++=(unsigned char) c; @@ -2807,13 +2811,13 @@ MagickExport ssize_t ReadBlob(Image *image,const size_t length, { default: { - count=(ssize_t) gzread(image->blob->stream_info.gzfile,q, + count=(ssize_t) gzread(image->blob->file_info.gzfile,q, (unsigned int) length); break; } case 2: { - c=gzgetc(image->blob->stream_info.gzfile); + c=gzgetc(image->blob->file_info.gzfile); if (c == EOF) break; *q++=(unsigned char) c; @@ -2821,7 +2825,7 @@ MagickExport ssize_t ReadBlob(Image *image,const size_t length, } case 1: { - c=gzgetc(image->blob->stream_info.gzfile); + c=gzgetc(image->blob->file_info.gzfile); if (c == EOF) break; *q++=(unsigned char) c; @@ -2836,7 +2840,7 @@ MagickExport ssize_t ReadBlob(Image *image,const size_t length, case BZipStream: { #if defined(MAGICKCORE_BZLIB_DELEGATE) - count=(ssize_t) BZ2_bzread(image->blob->stream_info.bzfile,q, + count=(ssize_t) BZ2_bzread(image->blob->file_info.bzfile,q, (int) length); #endif break; @@ -2854,7 +2858,8 @@ MagickExport ssize_t ReadBlob(Image *image,const size_t length, break; } p=image->blob->data+image->blob->offset; - count=(ssize_t) MagickMin(length,image->blob->length-image->blob->offset); + count=(ssize_t) MagickMin(length,(MagickSizeType) (image->blob->length- + image->blob->offset)); image->blob->offset+=count; if (count != (ssize_t) length) image->blob->eof=MagickTrue; @@ -3555,7 +3560,7 @@ MagickExport MagickOffsetType SeekBlob(Image *image, break; case FileStream: { - if (fseek(image->blob->stream_info.file,offset,whence) < 0) + if (fseek(image->blob->file_info.file,offset,whence) < 0) return(-1); image->blob->offset=TellBlob(image); break; @@ -3565,7 +3570,7 @@ MagickExport MagickOffsetType SeekBlob(Image *image, case ZipStream: { #if defined(MAGICKCORE_ZLIB_DELEGATE) - if (gzseek(image->blob->stream_info.gzfile,(off_t) offset,whence) < 0) + if (gzseek(image->blob->file_info.gzfile,(off_t) offset,whence) < 0) return(-1); #endif image->blob->offset=TellBlob(image); @@ -3716,7 +3721,7 @@ MagickPrivate MagickBooleanType SetBlobExtent(Image *image, offset; offset=TellBlob(image); - status=posix_fallocate(fileno(image->blob->stream_info.file), + status=posix_fallocate(fileno(image->blob->file_info.file), (off_t) offset,(off_t) (extent-offset)); if (status != 0) return(MagickFalse); @@ -3736,7 +3741,7 @@ MagickPrivate MagickBooleanType SetBlobExtent(Image *image, { if (image->blob->mapped != MagickFalse) { - if (image->blob->stream_info.file == (FILE *) NULL) + if (image->blob->file_info.file == (FILE *) NULL) return(MagickFalse); (void) UnmapBlob(image->blob->data,image->blob->length); #if !defined(MAGICKCORE_POSIX_FALLOCATE) @@ -3750,13 +3755,13 @@ MagickPrivate MagickBooleanType SetBlobExtent(Image *image, offset; offset=TellBlob(image); - status=posix_fallocate(fileno(image->blob->stream_info.file), + status=posix_fallocate(fileno(image->blob->file_info.file), (off_t) offset,(off_t) (extent-offset)); if (status != 0) return(MagickFalse); } image->blob->data=(unsigned char*) MapBlob(fileno( - image->blob->stream_info.file),WriteMode,0,(size_t) extent); + image->blob->file_info.file),WriteMode,0,(size_t) extent); image->blob->extent=(size_t) extent; image->blob->length=(size_t) extent; (void) SyncBlob(image); @@ -3823,20 +3828,20 @@ static int SyncBlob(Image *image) case StandardStream: case PipeStream: { - status=fflush(image->blob->stream_info.file); + status=fflush(image->blob->file_info.file); break; } case ZipStream: { #if defined(MAGICKCORE_ZLIB_DELEGATE) - status=gzflush(image->blob->stream_info.gzfile,Z_SYNC_FLUSH); + status=gzflush(image->blob->file_info.gzfile,Z_SYNC_FLUSH); #endif break; } case BZipStream: { #if defined(MAGICKCORE_BZLIB_DELEGATE) - status=BZ2_bzflush(image->blob->stream_info.bzfile); + status=BZ2_bzflush(image->blob->file_info.bzfile); #endif break; } @@ -3894,7 +3899,7 @@ MagickExport MagickOffsetType TellBlob(const Image *image) break; case FileStream: { - offset=ftell(image->blob->stream_info.file); + offset=ftell(image->blob->file_info.file); break; } case StandardStream: @@ -3903,7 +3908,7 @@ MagickExport MagickOffsetType TellBlob(const Image *image) case ZipStream: { #if defined(MAGICKCORE_ZLIB_DELEGATE) - offset=(MagickOffsetType) gztell(image->blob->stream_info.gzfile); + offset=(MagickOffsetType) gztell(image->blob->file_info.gzfile); #endif break; } @@ -4023,19 +4028,19 @@ MagickExport ssize_t WriteBlob(Image *image,const size_t length, default: { count=(ssize_t) fwrite((const char *) data,1,length, - image->blob->stream_info.file); + image->blob->file_info.file); break; } case 2: { - c=putc((int) *p++,image->blob->stream_info.file); + c=putc((int) *p++,image->blob->file_info.file); if (c == EOF) break; count++; } case 1: { - c=putc((int) *p++,image->blob->stream_info.file); + c=putc((int) *p++,image->blob->file_info.file); if (c == EOF) break; count++; @@ -4052,20 +4057,20 @@ MagickExport ssize_t WriteBlob(Image *image,const size_t length, { default: { - count=(ssize_t) gzwrite(image->blob->stream_info.gzfile,(void *) data, + count=(ssize_t) gzwrite(image->blob->file_info.gzfile,(void *) data, (unsigned int) length); break; } case 2: { - c=gzputc(image->blob->stream_info.gzfile,(int) *p++); + c=gzputc(image->blob->file_info.gzfile,(int) *p++); if (c == EOF) break; count++; } case 1: { - c=gzputc(image->blob->stream_info.gzfile,(int) *p++); + c=gzputc(image->blob->file_info.gzfile,(int) *p++); if (c == EOF) break; count++; @@ -4079,7 +4084,7 @@ MagickExport ssize_t WriteBlob(Image *image,const size_t length, case BZipStream: { #if defined(MAGICKCORE_BZLIB_DELEGATE) - count=(ssize_t) BZ2_bzwrite(image->blob->stream_info.bzfile,(void *) data, + count=(ssize_t) BZ2_bzwrite(image->blob->file_info.bzfile,(void *) data, (int) length); #endif break;