diff --git a/MagickCore/blob.c b/MagickCore/blob.c
index 703b820..aa05f61 100644
--- a/MagickCore/blob.c
+++ b/MagickCore/blob.c
@@ -2775,7 +2775,24 @@
break;
case StandardStream:
{
- count=(ssize_t) read(fileno(image->blob->file_info.file),q,length);
+ register ssize_t
+ i;
+
+ count=0;
+ for (i=0; i < (ssize_t) length; i+=count)
+ {
+ count=read(fileno(image->blob->file_info.file),q+i,(size_t)
+ MagickMin(length-i,(MagickSizeType) SSIZE_MAX));
+ if (count > 0)
+ continue;
+ count=0;
+ if (errno != EINTR)
+ {
+ i=(-1);
+ break;
+ }
+ }
+ count=i;
break;
}
case FileStream:
@@ -4028,7 +4045,24 @@
break;
case StandardStream:
{
- count=(ssize_t) write(fileno(image->blob->file_info.file),data,length);
+ register ssize_t
+ i;
+
+ count=0;
+ for (i=0; i < (MagickOffsetType) length; i+=count)
+ {
+ count=write(fileno(image->blob->file_info.file),data+i,(size_t)
+ MagickMin(length-i,(MagickSizeType) SSIZE_MAX));
+ if (count > 0)
+ continue;
+ count=0;
+ if (errno != EINTR)
+ {
+ i=(-1);
+ break;
+ }
+ }
+ count=i;
break;
}
case FileStream: