]> granicus.if.org Git - imagemagick/blobdiff - magick/blob.c
(no commit message)
[imagemagick] / magick / blob.c
index af7044564169060b3347dbd8c522256204cf334c..98cd9fe7744aa30b22c5671e3b2fc66f1ef57b57 100644 (file)
@@ -51,6 +51,7 @@
 #include "magick/exception-private.h"
 #include "magick/image-private.h"
 #include "magick/list.h"
+#include "magick/locale_.h"
 #include "magick/log.h"
 #include "magick/magick.h"
 #include "magick/memory_.h"
   Define declarations.
 */
 #define MagickMaxBlobExtent  65541
-#if defined(MAGICKCORE_HAVE_FSEEKO)
-# define fseek  fseeko
-# define ftell  ftello
-#endif
 #if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
 # define MAP_ANONYMOUS  MAP_ANON
 #endif
@@ -227,7 +224,8 @@ MagickExport void AttachBlob(BlobInfo *blob_info,const void *blob,
 %
 */
 
-static inline size_t MagickMin(const size_t x,const size_t y)
+static inline MagickSizeType MagickMin(const MagickSizeType x,
+  const MagickSizeType y)
 {
   if (x < y)
     return(x);
@@ -260,8 +258,8 @@ MagickExport MagickBooleanType BlobToFile(char *filename,const void *blob,
     }
   for (i=0; i < length; i+=count)
   {
-    count=(ssize_t) write(file,(const char *) blob+i,MagickMin(length-i,(size_t)
-      SSIZE_MAX));
+    count=(ssize_t) write(file,(const char *) blob+i,(size_t) MagickMin(length-
+      i,(MagickSizeType) SSIZE_MAX));
     if (count <= 0)
       {
         count=0;
@@ -380,7 +378,7 @@ MagickExport Image *BlobToImage(const ImageInfo *image_info,const void *blob,
       return((Image *) NULL);
     }
   clone_info=CloneImageInfo(blob_info);
-  (void) FormatMagickString(clone_info->filename,MaxTextExtent,"%s:%s",
+  (void) FormatLocaleString(clone_info->filename,MaxTextExtent,"%s:%s",
     blob_info->magick,blob_info->filename);
   image=ReadImage(clone_info,exception);
   clone_info=DestroyImageInfo(clone_info);
@@ -714,7 +712,7 @@ static inline const unsigned char *ReadBlobStream(Image *image,
       return(data);
     }
   data=image->blob->data+image->blob->offset;
-  *count=(ssize_t) MagickMin(length,(size_t) (image->blob->length-
+  *count=(ssize_t) MagickMin(length,(MagickSizeType) (image->blob->length-
     image->blob->offset));
   image->blob->offset+=(*count);
   if (*count != (ssize_t) length)
@@ -723,9 +721,9 @@ static inline const unsigned char *ReadBlobStream(Image *image,
 }
 
 MagickExport MagickBooleanType DiscardBlobBytes(Image *image,
-  const size_t length)
+  const MagickSizeType length)
 {
-  register ssize_t
+  register MagickOffsetType
     i;
 
   size_t
@@ -740,9 +738,9 @@ MagickExport MagickBooleanType DiscardBlobBytes(Image *image,
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   count=0;
-  for (i=0; i < (ssize_t) length; i+=count)
+  for (i=0; i < (MagickOffsetType) length; i+=count)
   {
-    quantum=MagickMin(length-i,sizeof(buffer));
+    quantum=(size_t) MagickMin(length-i,sizeof(buffer));
     (void) ReadBlobStream(image,quantum,buffer,&count);
     if (count <= 0)
       {
@@ -751,7 +749,7 @@ MagickExport MagickBooleanType DiscardBlobBytes(Image *image,
           break;
       }
   }
-  return(i < (ssize_t) length ? MagickFalse : MagickTrue);
+  return(i < (MagickOffsetType) length ? MagickFalse : MagickTrue);
 }
 \f
 /*
@@ -928,7 +926,7 @@ MagickExport unsigned char *FileToBlob(const char *filename,const size_t extent,
       ThrowFileException(exception,BlobError,"UnableToOpenFile",filename);
       return((unsigned char *) NULL);
     }
-  offset=(MagickOffsetType) MagickSeek(file,0,SEEK_END);
+  offset=(MagickOffsetType) lseek(file,0,SEEK_END);
   count=0;
   if ((offset < 0) || (offset != (MagickOffsetType) ((ssize_t) offset)))
     {
@@ -943,7 +941,8 @@ MagickExport unsigned char *FileToBlob(const char *filename,const size_t extent,
       */
       quantum=(size_t) MagickMaxBufferExtent;
       if ((fstat(file,&file_info) == 0) && (file_info.st_size != 0))
-        quantum=MagickMin((size_t) file_info.st_size,MagickMaxBufferExtent);
+        quantum=(size_t) MagickMin((MagickSizeType) file_info.st_size,
+          MagickMaxBufferExtent);
       blob=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*blob));
       for (i=0; blob != (unsigned char *) NULL; i+=count)
       {
@@ -978,13 +977,13 @@ MagickExport unsigned char *FileToBlob(const char *filename,const size_t extent,
           ThrowFileException(exception,BlobError,"UnableToReadBlob",filename);
           return((unsigned char *) NULL);
         }
-      *length=MagickMin(i+count,extent);
+      *length=(size_t) MagickMin(i+count,extent);
       blob[*length]='\0';
       return(blob);
     }
-  *length=MagickMin((size_t) offset,extent);
+  *length=(size_t) MagickMin((MagickSizeType) offset,extent);
   blob=(unsigned char *) NULL;
-  if (~(*length) >= MaxTextExtent)
+  if (~(*length) >= (MaxTextExtent-1))
     blob=(unsigned char *) AcquireQuantumMemory(*length+MaxTextExtent,
       sizeof(*blob));
   if (blob == (unsigned char *) NULL)
@@ -1002,11 +1001,11 @@ MagickExport unsigned char *FileToBlob(const char *filename,const size_t extent,
     }
   else
     {
-      (void) MagickSeek(file,0,SEEK_SET);
+      (void) lseek(file,0,SEEK_SET);
       for (i=0; i < *length; i+=count)
       {
-        count=(ssize_t) read(file,blob+i,MagickMin(*length-i,(size_t)
-          SSIZE_MAX));
+        count=(ssize_t) read(file,blob+i,(size_t) MagickMin(*length-i,
+          (MagickSizeType) SSIZE_MAX));
         if (count <= 0)
           {
             count=0;
@@ -1119,7 +1118,7 @@ MagickExport MagickBooleanType FileToImage(Image *image,const char *filename)
     }
   quantum=(size_t) MagickMaxBufferExtent;
   if ((fstat(file,&file_info) == 0) && (file_info.st_size != 0))
-    quantum=MagickMin((size_t) file_info.st_size,MagickMaxBufferExtent);
+    quantum=(size_t) MagickMin(file_info.st_size,MagickMaxBufferExtent);
   blob=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*blob));
   if (blob == (unsigned char *) NULL)
     {
@@ -1429,7 +1428,7 @@ MagickExport StreamHandler GetBlobStreamHandler(const Image *image)
 %
 %  ImageToBlob() implements direct to memory image formats.  It returns the
 %  image as a formatted blob and its length.  The magick member of the Image
-%  structure %  determines the format of the returned blob (GIF, JPEG, PNG,
+%  structure determines the format of the returned blob (GIF, JPEG, PNG,
 %  etc.).  This method is the equivalent of WriteImage(), but writes the
 %  formatted "file" to a memory buffer rather than to an actual file.
 %
@@ -1539,7 +1538,7 @@ MagickExport unsigned char *ImageToBlob(const ImageInfo *image_info,
           blob_info->file=fdopen(file,"wb");
           if (blob_info->file != (FILE *) NULL)
             {
-              (void) FormatMagickString(image->filename,MaxTextExtent,"%s:%s",
+              (void) FormatLocaleString(image->filename,MaxTextExtent,"%s:%s",
                 image->magick,unique);
               status=WriteImage(blob_info,image);
               (void) fclose(blob_info->file);
@@ -1629,7 +1628,8 @@ MagickExport MagickBooleanType ImageToFile(Image *image,char *filename,
     }
   quantum=(size_t) MagickMaxBufferExtent;
   if ((fstat(file,&file_info) == 0) && (file_info.st_size != 0))
-    quantum=MagickMin((size_t) file_info.st_size,MagickMaxBufferExtent);
+    quantum=(size_t) MagickMin((MagickSizeType) file_info.st_size,
+      MagickMaxBufferExtent);
   buffer=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*buffer));
   if (buffer == (unsigned char *) NULL)
     {
@@ -1797,7 +1797,7 @@ MagickExport unsigned char *ImagesToBlob(const ImageInfo *image_info,
           blob_info->file=fdopen(file,"wb");
           if (blob_info->file != (FILE *) NULL)
             {
-              (void) FormatMagickString(filename,MaxTextExtent,"%s:%s",
+              (void) FormatLocaleString(filename,MaxTextExtent,"%s:%s",
                 images->magick,unique);
               status=WriteImages(blob_info,images,filename,exception);
               (void) fclose(blob_info->file);
@@ -1911,7 +1911,7 @@ MagickExport MagickBooleanType InjectImageBlob(const ImageInfo *image_info,
       (void) RelinquishUniqueFileResource(filename);
       return(MagickFalse);
     }
-  (void) FormatMagickString(byte_image->filename,MaxTextExtent,"%s:%s",format,
+  (void) FormatLocaleString(byte_image->filename,MaxTextExtent,"%s:%s",format,
     filename);
   DestroyBlob(byte_image);
   byte_image->blob=CloneBlobInfo((BlobInfo *) NULL);
@@ -1939,7 +1939,7 @@ MagickExport MagickBooleanType InjectImageBlob(const ImageInfo *image_info,
     }
   quantum=(size_t) MagickMaxBufferExtent;
   if ((fstat(file,&file_info) == 0) && (file_info.st_size != 0))
-    quantum=MagickMin((size_t) file_info.st_size,MagickMaxBufferExtent);
+    quantum=(size_t) MagickMin(file_info.st_size,MagickMaxBufferExtent);
   buffer=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*buffer));
   if (buffer == (unsigned char *) NULL)
     {
@@ -2425,7 +2425,7 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
     {
       (void) CopyMagickString(filename,image->filename,MaxTextExtent);
       if ((image_info->adjoin == MagickFalse) ||
-          (IsGlob(filename) != MagickFalse))
+          (strchr(filename,'%') != (char *) NULL))
         {
           /*
             Form filename for multi-part images.
@@ -2441,10 +2441,10 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
 
               GetPathComponent(image->filename,RootPath,path);
               if (*extension == '\0')
-                (void) FormatMagickString(filename,MaxTextExtent,"%s-%.20g",
+                (void) FormatLocaleString(filename,MaxTextExtent,"%s-%.20g",
                   path,(double) image->scene);
               else
-                (void) FormatMagickString(filename,MaxTextExtent,"%s-%.20g.%s",
+                (void) FormatLocaleString(filename,MaxTextExtent,"%s-%.20g.%s",
                   path,(double) image->scene,extension);
             }
           (void) CopyMagickString(image->filename,filename,MaxTextExtent);
@@ -2815,8 +2815,7 @@ MagickExport ssize_t ReadBlob(Image *image,const size_t length,
           break;
         }
       p=image->blob->data+image->blob->offset;
-      count=(ssize_t) MagickMin(length,(size_t) (image->blob->length-
-        image->blob->offset));
+      count=(ssize_t) MagickMin(length,image->blob->length-image->blob->offset);
       image->blob->offset+=count;
       if (count != (ssize_t) length)
         image->blob->eof=MagickTrue;
@@ -3517,7 +3516,7 @@ MagickExport MagickOffsetType SeekBlob(Image *image,
       break;
     case FileStream:
     {
-      if (fseek(image->blob->file,(long) offset,whence) < 0)
+      if (fseek(image->blob->file,offset,whence) < 0)
         return(-1);
       image->blob->offset=TellBlob(image);
       break;