#include "MagickCore/magick.h"
#include "MagickCore/memory_.h"
#include "MagickCore/nt-base-private.h"
+#include "MagickCore/option.h"
#include "MagickCore/policy.h"
#include "MagickCore/resource_.h"
#include "MagickCore/semaphore.h"
% o mode: the mode for opening the file.
%
*/
+
+static inline MagickBooleanType SetStreamBuffering(const ImageInfo *image_info,
+ Image *image)
+{
+ const char
+ *option;
+
+ int
+ status;
+
+ size_t
+ size;
+
+ size=16384;
+ option=GetImageOption(image_info,"stream:buffer-size");
+ if (option != (const char *) NULL)
+ size=StringToUnsignedLong(option);
+ status=setvbuf(image->blob->file_info.file,(char *) NULL,size == 0 ?
+ _IONBF : _IOFBF,size);
+ return(status == 0 ? MagickTrue : MagickFalse);
+}
+
MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
Image *image,const BlobMode mode,ExceptionInfo *exception)
{
#endif
image->blob->type=StandardStream;
image->blob->exempt=MagickTrue;
- return(MagickTrue);
+ return(SetStreamBuffering(image_info,image));
}
if (LocaleNCompare(filename,"fd:",3) == 0)
{
#endif
image->blob->type=StandardStream;
image->blob->exempt=MagickTrue;
- return(MagickTrue);
+ return(SetStreamBuffering(image_info,image));
}
#if defined(MAGICKCORE_HAVE_POPEN)
if (*filename == '|')
}
image->blob->type=PipeStream;
image->blob->exempt=MagickTrue;
- return(MagickTrue);
+ return(SetStreamBuffering(image_info,image));
}
#endif
status=GetPathAttributes(filename,&image->blob->properties);
}
image->blob->type=FileStream;
image->blob->exempt=MagickTrue;
- return(MagickTrue);
+ return(SetStreamBuffering(image_info,image));
}
#endif
GetPathComponent(image->filename,ExtensionPath,extension);
magick[3];
image->blob->type=FileStream;
-#if defined(MAGICKCORE_HAVE_SETVBUF)
- (void) setvbuf(image->blob->file_info.file,(char *) NULL,(int)
- _IOFBF,16384);
-#endif
+ (void) SetStreamBuffering(image_info,image);
(void) ResetMagickMemory(magick,0,sizeof(magick));
count=fread(magick,1,sizeof(magick),image->blob->file_info.file);
(void) fseek(image->blob->file_info.file,-((off_t) count),SEEK_CUR);
if (image->blob->file_info.file != (FILE *) NULL)
{
image->blob->type=FileStream;
-#if defined(MAGICKCORE_HAVE_SETVBUF)
- (void) setvbuf(image->blob->file_info.file,(char *) NULL,(int)
- _IOFBF,16384);
-#endif
+ (void) SetStreamBuffering(image_info,image);
}
}
image->blob->status=MagickFalse;