From: cristy Date: Tue, 18 Dec 2012 21:12:17 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~4562 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=38e35f43a634aa9834ca9a61cb9bb10fb0a2dda1;p=imagemagick --- diff --git a/MagickCore/blob.c b/MagickCore/blob.c index 19e03c874..b00e2b16d 100644 --- a/MagickCore/blob.c +++ b/MagickCore/blob.c @@ -3733,25 +3733,24 @@ MagickPrivate MagickBooleanType SetBlobExtent(Image *image, return(MagickFalse); case FileStream: { + MagickOffsetType + offset; + + ssize_t + count; + if (extent != (MagickSizeType) ((off_t) extent)) return(MagickFalse); -#if !defined(MAGICKCORE_HAVE_POSIX_FALLOCATE) + offset=SeekBlob(image,0,SEEK_END); + if (offset < 0) + return(MagickFalse); + if ((MagickSizeType) offset >= extent) + break; + offset=SeekBlob(image,(MagickOffsetType) extent-1,SEEK_SET); + count=fwrite((const unsigned char *) "",1,1,image->blob->file_info.file); + offset=SeekBlob(image,offset,SEEK_SET); + if (count != (MagickOffsetType) 1) return(MagickFalse); -#else - { - int - status; - - MagickOffsetType - offset; - - offset=TellBlob(image); - status=posix_fallocate(fileno(image->blob->file_info.file),offset, - extent-offset); - if (status != 0) - return(MagickFalse); - } -#endif break; } case PipeStream: @@ -3763,37 +3762,37 @@ MagickPrivate MagickBooleanType SetBlobExtent(Image *image, return(MagickFalse); case BlobStream: { + if (extent != (MagickSizeType) ((size_t) extent)) + return(MagickFalse); if (image->blob->mapped != MagickFalse) { - if (image->blob->file_info.file == (FILE *) NULL) - return(MagickFalse); - (void) UnmapBlob(image->blob->data,image->blob->length); -#if !defined(MAGICKCORE_HAVE_POSIX_FALLOCATE) - return(MagickFalse); -#else - { - int - status; + MagickOffsetType + offset; - MagickOffsetType - offset; + ssize_t + count; - offset=TellBlob(image); - status=posix_fallocate(fileno(image->blob->file_info.file),offset, - extent-offset); - if (status != 0) - return(MagickFalse); - } + (void) UnmapBlob(image->blob->data,image->blob->length); + if (extent != (MagickSizeType) ((off_t) extent)) + return(MagickFalse); + offset=SeekBlob(image,0,SEEK_END); + if (offset < 0) + return(MagickFalse); + if ((MagickSizeType) offset >= extent) + break; + offset=SeekBlob(image,(MagickOffsetType) extent-1,SEEK_SET); + count=fwrite((const unsigned char *) "",1,1, + image->blob->file_info.file); + offset=SeekBlob(image,offset,SEEK_SET); + if (count != (MagickOffsetType) 1) + return(MagickTrue); image->blob->data=(unsigned char*) MapBlob(fileno( 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); break; -#endif } - if (extent != (MagickSizeType) ((size_t) extent)) - return(MagickFalse); image->blob->extent=(size_t) extent; image->blob->data=(unsigned char *) ResizeQuantumMemory(image->blob->data, image->blob->extent+1,sizeof(*image->blob->data));