]> granicus.if.org Git - imagemagick/blobdiff - magick/blob.c
(no commit message)
[imagemagick] / magick / blob.c
index d78ef8a6d35aefecac70beb2ec09816593f5a72c..f3b5458bdb466e63fe0ead453344b0fe7c1f4c23 100644 (file)
@@ -59,8 +59,9 @@
 #include "magick/semaphore.h"
 #include "magick/string_.h"
 #include "magick/string-private.h"
+#include "magick/token.h"
 #include "magick/utility.h"
-#if defined(MAGICKCORE_HAVE_MMAP_FILEIO) && !defined(__WINDOWS__)
+#if defined(MAGICKCORE_HAVE_MMAP_FILEIO) && !defined(MAGICKCORE_WINDOWS_SUPPORT)
 # include <sys/mman.h>
 #endif
 #if defined(MAGICKCORE_ZLIB_DELEGATE)
@@ -2040,6 +2041,10 @@ MagickExport unsigned char *MapBlob(int file,const MapMode mode,
       flags|=MAP_SHARED;
       map=(unsigned char *) mmap((char *) NULL,length,protection,flags,file,
         (off_t) offset);
+#if defined(MAGICKCORE_HAVE_POSIX_MADVISE)
+      (void) posix_madvise(map,length,POSIX_MADV_SEQUENTIAL |
+        POSIX_MADV_WILLNEED);
+#endif
       break;
     }
     case IOMode:
@@ -2258,7 +2263,7 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
       ((*filename == '\0') && (image_info->file == (FILE *) NULL)))
     {
       image->blob->file=(*type == 'r') ? stdin : stdout;
-#if defined(__WINDOWS__) || defined(__OS2__)
+#if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__OS2__)
       if (strchr(type,'b') != (char *) NULL)
         setmode(_fileno(image->blob->file),_O_BINARY);
 #endif
@@ -2274,7 +2279,7 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
       *mode=(*type);
       mode[1]='\0';
       image->blob->file=fdopen(StringToLong(filename+3),mode);
-#if defined(__WINDOWS__) || defined(__OS2__)
+#if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__OS2__)
       if (strchr(type,'b') != (char *) NULL)
         setmode(_fileno(image->blob->file),_O_BINARY);
 #endif
@@ -2326,7 +2331,8 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
   if (*type == 'w')
     {
       (void) CopyMagickString(filename,image->filename,MaxTextExtent);
-      if (image_info->adjoin == MagickFalse)
+      if ((image_info->adjoin == MagickFalse) ||
+          (IsGlob(filename) != MagickFalse))
         {
           /*
             Form filename for multi-part images.
@@ -2441,8 +2447,8 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
         ExceptionInfo
           *sans_exception;
 
-       struct stat
-         *properties;
+        struct stat
+          *properties;
 
         sans_exception=AcquireExceptionInfo();
         magick_info=GetMagickInfo(image_info->magick,sans_exception);
@@ -4261,6 +4267,50 @@ MagickExport ssize_t WriteBlobMSBLong(Image *image,const unsigned int value)
 %                                                                             %
 %                                                                             %
 %                                                                             %
++  W r i t e B l o b M S B L o n g L o n g                                    %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  WriteBlobMSBLongLong() writes a long long value as a 64-bit quantity in
+%  most-significant byte first order.
+%
+%  The format of the WriteBlobMSBLongLong method is:
+%
+%      ssize_t WriteBlobMSBLongLong(Image *image,const MagickSizeType value)
+%
+%  A description of each parameter follows.
+%
+%    o value:  Specifies the value to write.
+%
+%    o image: the image.
+%
+*/
+MagickExport ssize_t WriteBlobMSBLongLong(Image *image,
+  const MagickSizeType value)
+{
+  unsigned char
+    buffer[8];
+
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickSignature);
+  buffer[0]=(unsigned char) (value >> 56);
+  buffer[1]=(unsigned char) (value >> 48);
+  buffer[2]=(unsigned char) (value >> 40);
+  buffer[3]=(unsigned char) (value >> 32);
+  buffer[4]=(unsigned char) (value >> 24);
+  buffer[5]=(unsigned char) (value >> 16);
+  buffer[6]=(unsigned char) (value >> 8);
+  buffer[7]=(unsigned char) value;
+  return(WriteBlobStream(image,8,buffer));
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 +  W r i t e B l o b M S B S h o r t                                          %
 %                                                                             %
 %                                                                             %