]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sat, 19 Jan 2013 17:24:56 +0000 (17:24 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sat, 19 Jan 2013 17:24:56 +0000 (17:24 +0000)
MagickCore/cache.c
MagickCore/distribute-cache-private.h
MagickCore/distribute-cache.c

index e75a0753a6b213c5dd71ab08b2bbed7e98f78a9b..02f3f2398422f1fda38207861755be7ce3e4fd7a 100644 (file)
@@ -4403,15 +4403,15 @@ static MagickBooleanType ReadPixelCacheMetacontent(CacheInfo *cache_info,
     extent,
     length;
 
+  RectangleInfo
+    region;
+
   register ssize_t
     y;
 
   register unsigned char
     *restrict q;
 
-  size_t
-    rows;
-
   if (cache_info->metacontent_extent == 0)
     return(MagickFalse);
   if (IsPixelAuthentic(cache_info,nexus_info) != MagickFalse)
@@ -4420,8 +4420,9 @@ static MagickBooleanType ReadPixelCacheMetacontent(CacheInfo *cache_info,
     nexus_info->region.x;
   length=(MagickSizeType) nexus_info->region.width*
     cache_info->metacontent_extent;
-  rows=nexus_info->region.height;
-  extent=length*rows;
+  extent=length*nexus_info->region.height;
+  region=nexus_info->region;
+  y=0;
   q=(unsigned char *) nexus_info->metacontent;
   switch (cache_info->type)
   {
@@ -4438,11 +4439,11 @@ static MagickBooleanType ReadPixelCacheMetacontent(CacheInfo *cache_info,
           (extent == (MagickSizeType) ((size_t) extent)))
         {
           length=extent;
-          rows=1UL;
+          region.height=1UL;
         }
       p=(unsigned char *) cache_info->metacontent+offset*
         cache_info->metacontent_extent;
-      for (y=0; y < (ssize_t) rows; y++)
+      for (y=0; y < (ssize_t) region.height; y++)
       {
         (void) memcpy(q,p,(size_t) length);
         p+=cache_info->metacontent_extent*cache_info->columns;
@@ -4467,15 +4468,15 @@ static MagickBooleanType ReadPixelCacheMetacontent(CacheInfo *cache_info,
           (extent <= MagickMaxBufferExtent))
         {
           length=extent;
-          rows=1UL;
+          region.height=1UL;
         }
       extent=(MagickSizeType) cache_info->columns*cache_info->rows;
-      for (y=0; y < (ssize_t) rows; y++)
+      for (y=0; y < (ssize_t) region.height; y++)
       {
         count=ReadPixelCacheRegion(cache_info,cache_info->offset+extent*
           cache_info->number_channels*sizeof(Quantum)+offset*
           cache_info->metacontent_extent,length,(unsigned char *) q);
-        if ((MagickSizeType) count != length)
+        if (count != (MagickOffsetType) length)
           break;
         offset+=cache_info->columns;
         q+=cache_info->metacontent_extent*nexus_info->region.width;
@@ -4483,50 +4484,36 @@ static MagickBooleanType ReadPixelCacheMetacontent(CacheInfo *cache_info,
       if (IsFileDescriptorLimitExceeded() != MagickFalse)
         (void) ClosePixelCacheOnDisk(cache_info);
       UnlockSemaphoreInfo(cache_info->file_semaphore);
-      if (y < (ssize_t) rows)
-        {
-          ThrowFileException(exception,CacheError,"UnableToReadPixelCache",
-            cache_info->cache_filename);
-          return(MagickFalse);
-        }
       break;
     }
     case DistributedCache:
     {
-      MagickBooleanType
-        status;
-
-      RectangleInfo
-        region;
-
       /*
         Read metacontent from distributed cache.
       */
       LockSemaphoreInfo(cache_info->file_semaphore);
-      region=nexus_info->region;
-      region.height=1;
-      status=MagickTrue;
-      for (y=0; y < (ssize_t) rows; y++)
+      region.height=1UL;
+      for (y=0; y < (ssize_t) region.height; y++)
       {
-        status=ReadDistributePixelCachePixels(cache_info->server_info,&region,
+        count=ReadDistributePixelCachePixels(cache_info->server_info,&region,
           length,(unsigned char *) q);
-        if (status == MagickFalse)
+        if (count != (MagickOffsetType) length)
           break;
         q+=cache_info->metacontent_extent*nexus_info->region.width;
         region.y++;
       }
       UnlockSemaphoreInfo(cache_info->file_semaphore);
-      if (status == MagickFalse)
-        {
-          ThrowFileException(exception,CacheError,"UnableToReadPixelCache",
-            cache_info->cache_filename);
-          return(MagickFalse);
-        }
       break;
     }
     default:
       break;
   }
+  if (y < (ssize_t) region.height)
+    {
+      ThrowFileException(exception,CacheError,"UnableToReadPixelCache",
+        cache_info->cache_filename);
+      return(MagickFalse);
+    }
   if ((cache_info->debug != MagickFalse) &&
       (CacheTick(nexus_info->region.y,cache_info->rows) != MagickFalse))
     (void) LogMagickEvent(CacheEvent,GetMagickModule(),
@@ -4575,23 +4562,24 @@ static MagickBooleanType ReadPixelCachePixels(CacheInfo *cache_info,
     extent,
     length;
 
+  RectangleInfo
+    region;
+
   register Quantum
     *restrict q;
 
   register ssize_t
     y;
 
-  size_t
-    rows;
-
   if (IsPixelAuthentic(cache_info,nexus_info) != MagickFalse)
     return(MagickTrue);
   offset=(MagickOffsetType) nexus_info->region.y*cache_info->columns+
     nexus_info->region.x;
   length=(MagickSizeType) cache_info->number_channels*nexus_info->region.width*
     sizeof(Quantum);
-  rows=nexus_info->region.height;
-  extent=length*rows;
+  extent=length*nexus_info->region.height;
+  region=nexus_info->region;
+  y=0;
   q=nexus_info->pixels;
   switch (cache_info->type)
   {
@@ -4608,10 +4596,10 @@ static MagickBooleanType ReadPixelCachePixels(CacheInfo *cache_info,
           (extent == (MagickSizeType) ((size_t) extent)))
         {
           length=extent;
-          rows=1UL;
+          region.height=1UL;
         }
       p=cache_info->pixels+offset*cache_info->number_channels;
-      for (y=0; y < (ssize_t) rows; y++)
+      for (y=0; y < (ssize_t) region.height; y++)
       {
         (void) memcpy(q,p,(size_t) length);
         p+=cache_info->number_channels*cache_info->columns;
@@ -4636,13 +4624,13 @@ static MagickBooleanType ReadPixelCachePixels(CacheInfo *cache_info,
           (extent <= MagickMaxBufferExtent))
         {
           length=extent;
-          rows=1UL;
+          region.height=1UL;
         }
-      for (y=0; y < (ssize_t) rows; y++)
+      for (y=0; y < (ssize_t) region.height; y++)
       {
         count=ReadPixelCacheRegion(cache_info,cache_info->offset+offset*
           cache_info->number_channels*sizeof(*q),length,(unsigned char *) q);
-        if ((MagickSizeType) count != length)
+        if (count != (MagickOffsetType) length)
           break;
         offset+=cache_info->columns;
         q+=cache_info->number_channels*nexus_info->region.width;
@@ -4650,50 +4638,36 @@ static MagickBooleanType ReadPixelCachePixels(CacheInfo *cache_info,
       if (IsFileDescriptorLimitExceeded() != MagickFalse)
         (void) ClosePixelCacheOnDisk(cache_info);
       UnlockSemaphoreInfo(cache_info->file_semaphore);
-      if (y < (ssize_t) rows)
-        {
-          ThrowFileException(exception,CacheError,"UnableToReadPixelCache",
-            cache_info->cache_filename);
-          return(MagickFalse);
-        }
       break;
     }
     case DistributedCache:
     {
-      MagickBooleanType
-        status;
-
-      RectangleInfo
-        region;
-
       /*
         Read pixels from distributed cache.
       */
       LockSemaphoreInfo(cache_info->file_semaphore);
-      region=nexus_info->region;
-      region.height=1;
-      status=MagickTrue;
-      for (y=0; y < (ssize_t) rows; y++)
+      region.height=1UL;
+      for (y=0; y < (ssize_t) region.height; y++)
       {
-        status=ReadDistributePixelCachePixels(cache_info->server_info,&region,
+        count=ReadDistributePixelCachePixels(cache_info->server_info,&region,
           length,(unsigned char *) q);
-        if (status == MagickFalse)
+        if (count != (MagickOffsetType) length)
           break;
         q+=cache_info->number_channels*nexus_info->region.width;
         region.y++;
       }
       UnlockSemaphoreInfo(cache_info->file_semaphore);
-      if (status == MagickFalse)
-        {
-          ThrowFileException(exception,CacheError,"UnableToReadPixelCache",
-            cache_info->cache_filename);
-          return(MagickFalse);
-        }
       break;
     }
     default:
       break;
   }
+  if (y < (ssize_t) region.height)
+    {
+      ThrowFileException(exception,CacheError,"UnableToReadPixelCache",
+        cache_info->cache_filename);
+      return(MagickFalse);
+    }
   if ((cache_info->debug != MagickFalse) &&
       (CacheTick(nexus_info->region.y,cache_info->rows) != MagickFalse))
     (void) LogMagickEvent(CacheEvent,GetMagickModule(),
@@ -5319,6 +5293,7 @@ MagickPrivate MagickBooleanType SyncImagePixelCache(Image *image,
 
   assert(image != (Image *) NULL);
   assert(exception != (ExceptionInfo *) NULL);
+  cache_info=(CacheInfo *) image->cache;
   cache_info=(CacheInfo *) GetImagePixelCache(image,MagickTrue,exception);
   return(cache_info == (CacheInfo *) NULL ? MagickFalse : MagickTrue);
 }
@@ -5362,15 +5337,15 @@ static MagickBooleanType WritePixelCacheMetacontent(CacheInfo *cache_info,
     extent,
     length;
 
+  RectangleInfo
+    region;
+
   register const unsigned char
     *restrict p;
 
   register ssize_t
     y;
 
-  size_t
-    rows;
-
   if (cache_info->metacontent_extent == 0)
     return(MagickFalse);
   if (IsPixelAuthentic(cache_info,nexus_info) != MagickFalse)
@@ -5379,8 +5354,9 @@ static MagickBooleanType WritePixelCacheMetacontent(CacheInfo *cache_info,
     nexus_info->region.x;
   length=(MagickSizeType) nexus_info->region.width*
     cache_info->metacontent_extent;
-  rows=nexus_info->region.height;
-  extent=(MagickSizeType) length*rows;
+  extent=(MagickSizeType) length*nexus_info->region.height;
+  region=nexus_info->region;
+  y=0;
   p=(unsigned char *) nexus_info->metacontent;
   switch (cache_info->type)
   {
@@ -5397,11 +5373,11 @@ static MagickBooleanType WritePixelCacheMetacontent(CacheInfo *cache_info,
           (extent == (MagickSizeType) ((size_t) extent)))
         {
           length=extent;
-          rows=1UL;
+          region.height=1UL;
         }
       q=(unsigned char *) cache_info->metacontent+offset*
         cache_info->metacontent_extent;
-      for (y=0; y < (ssize_t) rows; y++)
+      for (y=0; y < (ssize_t) region.height; y++)
       {
         (void) memcpy(q,p,(size_t) length);
         p+=nexus_info->region.width*cache_info->metacontent_extent;
@@ -5426,15 +5402,15 @@ static MagickBooleanType WritePixelCacheMetacontent(CacheInfo *cache_info,
           (extent <= MagickMaxBufferExtent))
         {
           length=extent;
-          rows=1UL;
+          region.height=1UL;
         }
       extent=(MagickSizeType) cache_info->columns*cache_info->rows;
-      for (y=0; y < (ssize_t) rows; y++)
+      for (y=0; y < (ssize_t) region.height; y++)
       {
         count=WritePixelCacheRegion(cache_info,cache_info->offset+extent*
           cache_info->number_channels*sizeof(Quantum)+offset*
           cache_info->metacontent_extent,length,(const unsigned char *) p);
-        if ((MagickSizeType) count != length)
+        if (count != (MagickOffsetType) length)
           break;
         p+=cache_info->metacontent_extent*nexus_info->region.width;
         offset+=cache_info->columns;
@@ -5442,50 +5418,36 @@ static MagickBooleanType WritePixelCacheMetacontent(CacheInfo *cache_info,
       if (IsFileDescriptorLimitExceeded() != MagickFalse)
         (void) ClosePixelCacheOnDisk(cache_info);
       UnlockSemaphoreInfo(cache_info->file_semaphore);
-      if (y < (ssize_t) rows)
-        {
-          ThrowFileException(exception,CacheError,"UnableToWritePixelCache",
-            cache_info->cache_filename);
-          return(MagickFalse);
-        }
       break;
     }
     case DistributedCache:
     {
-      MagickBooleanType
-        status;
-
-      RectangleInfo
-        region;
-
       /*
         Write metacontent to distributed cache.
       */
       LockSemaphoreInfo(cache_info->file_semaphore);
-      region=nexus_info->region;
-      region.height=1;
-      status=MagickTrue;
-      for (y=0; y < (ssize_t) rows; y++)
+      region.height=1UL;
+      for (y=0; y < (ssize_t) region.height; y++)
       {
-        status=WriteDistributePixelCachePixels(cache_info->server_info,&region,
+        count=WriteDistributePixelCachePixels(cache_info->server_info,&region,
           length,(const unsigned char *) p);
-        if (status == MagickFalse)
+        if (count != (MagickOffsetType) length)
           break;
         p+=cache_info->metacontent_extent*nexus_info->region.width;
         region.y++;
       }
       UnlockSemaphoreInfo(cache_info->file_semaphore);
-      if (status == MagickFalse)
-        {
-          ThrowFileException(exception,CacheError,"UnableToWritePixelCache",
-            cache_info->cache_filename);
-          return(MagickFalse);
-        }
       break;
     }
     default:
       break;
   }
+  if (y < (ssize_t) region.height)
+    {
+      ThrowFileException(exception,CacheError,"UnableToWritePixelCache",
+        cache_info->cache_filename);
+      return(MagickFalse);
+    }
   if ((cache_info->debug != MagickFalse) &&
       (CacheTick(nexus_info->region.y,cache_info->rows) != MagickFalse))
     (void) LogMagickEvent(CacheEvent,GetMagickModule(),
@@ -5534,23 +5496,24 @@ static MagickBooleanType WritePixelCachePixels(CacheInfo *cache_info,
     extent,
     length;
 
+  RectangleInfo
+    region;
+
   register const Quantum
     *restrict p;
 
   register ssize_t
     y;
 
-  size_t
-    rows;
-
   if (IsPixelAuthentic(cache_info,nexus_info) != MagickFalse)
     return(MagickTrue);
   offset=(MagickOffsetType) nexus_info->region.y*cache_info->columns+
     nexus_info->region.x;
   length=(MagickSizeType) cache_info->number_channels*nexus_info->region.width*
     sizeof(Quantum);
-  rows=nexus_info->region.height;
-  extent=length*rows;
+  extent=length*nexus_info->region.height;
+  region=nexus_info->region;
+  y=0;
   p=nexus_info->pixels;
   switch (cache_info->type)
   {
@@ -5567,10 +5530,10 @@ static MagickBooleanType WritePixelCachePixels(CacheInfo *cache_info,
           (extent == (MagickSizeType) ((size_t) extent)))
         {
           length=extent;
-          rows=1UL;
+          region.height=1UL;
         }
       q=cache_info->pixels+offset*cache_info->number_channels;
-      for (y=0; y < (ssize_t) rows; y++)
+      for (y=0; y < (ssize_t) region.height; y++)
       {
         (void) memcpy(q,p,(size_t) length);
         p+=cache_info->number_channels*nexus_info->region.width;
@@ -5595,14 +5558,14 @@ static MagickBooleanType WritePixelCachePixels(CacheInfo *cache_info,
           (extent <= MagickMaxBufferExtent))
         {
           length=extent;
-          rows=1UL;
+          region.height=1UL;
         }
-      for (y=0; y < (ssize_t) rows; y++)
+      for (y=0; y < (ssize_t) region.height; y++)
       {
         count=WritePixelCacheRegion(cache_info,cache_info->offset+offset*
           cache_info->number_channels*sizeof(*p),length,(const unsigned char *)
           p);
-        if ((MagickSizeType) count != length)
+        if (count != (MagickOffsetType) length)
           break;
         p+=cache_info->number_channels*nexus_info->region.width;
         offset+=cache_info->columns;
@@ -5610,50 +5573,36 @@ static MagickBooleanType WritePixelCachePixels(CacheInfo *cache_info,
       if (IsFileDescriptorLimitExceeded() != MagickFalse)
         (void) ClosePixelCacheOnDisk(cache_info);
       UnlockSemaphoreInfo(cache_info->file_semaphore);
-      if (y < (ssize_t) rows)
-        {
-          ThrowFileException(exception,CacheError,"UnableToWritePixelCache",
-            cache_info->cache_filename);
-          return(MagickFalse);
-        }
       break;
     }
     case DistributedCache:
     {
-      MagickBooleanType
-        status;
-
-      RectangleInfo
-        region;
-
       /*
         Write pixels to distributed cache.
       */
       LockSemaphoreInfo(cache_info->file_semaphore);
-      region=nexus_info->region;
-      region.height=1;
-      status=MagickTrue;
-      for (y=0; y < (ssize_t) rows; y++)
+      region.height=1UL;
+      for (y=0; y < (ssize_t) region.height; y++)
       {
-        status=WriteDistributePixelCachePixels(cache_info->server_info,&region,
+        count=WriteDistributePixelCachePixels(cache_info->server_info,&region,
           length,(const unsigned char *) p);
-        if (status == MagickFalse)
+        if (count != (MagickOffsetType) length)
           break;
         p+=cache_info->number_channels*nexus_info->region.width;
         region.y++;
       }
       UnlockSemaphoreInfo(cache_info->file_semaphore);
-      if (status == MagickFalse)
-        {
-          ThrowFileException(exception,CacheError,"UnableToWritePixelCache",
-            cache_info->cache_filename);
-          return(MagickFalse);
-        }
       break;
     }
     default:
       break;
   }
+  if (y < (ssize_t) region.height)
+    {
+      ThrowFileException(exception,CacheError,"UnableToWritePixelCache",
+        cache_info->cache_filename);
+      return(MagickFalse);
+    }
   if ((cache_info->debug != MagickFalse) &&
       (CacheTick(nexus_info->region.y,cache_info->rows) != MagickFalse))
     (void) LogMagickEvent(CacheEvent,GetMagickModule(),
index 0f9e1dc3fa617db021354ad4c6c7b74eb7d3ad6d..36a6a57173bcdfa0a8dfa8adaf62322a463e09bb 100644 (file)
@@ -56,11 +56,13 @@ extern MagickPrivate int
 
 extern MagickPrivate MagickBooleanType
   OpenDistributePixelCache(DistributeCacheInfo *,Image *),
+  RelinquishDistributePixelCache(DistributeCacheInfo *);
+
+extern MagickPrivate MagickOffsetType
   ReadDistributePixelCacheMetacontent(DistributeCacheInfo *,
     const RectangleInfo *,const MagickSizeType,unsigned char *),
   ReadDistributePixelCachePixels(DistributeCacheInfo *,const RectangleInfo *,
     const MagickSizeType,unsigned char *),
-  RelinquishDistributePixelCache(DistributeCacheInfo *),
   WriteDistributePixelCacheMetacontent(DistributeCacheInfo *,
     const RectangleInfo *,const MagickSizeType,const unsigned char *),
   WriteDistributePixelCachePixels(DistributeCacheInfo *,const RectangleInfo *,
index 9a1c76ad559da417dc17b23e6e6e8155a51020a0..1c930ae8587eef2195b2f4fec8bbcc019886ef16 100644 (file)
@@ -991,7 +991,7 @@ MagickPrivate MagickBooleanType OpenDistributePixelCache(
 %
 %  The format of the ReadDistributePixelCacheMetacontents method is:
 %
-%      MagickBooleanType *ReadDistributePixelCacheMetacontents(
+%      MagickOffsetType ReadDistributePixelCacheMetacontents(
 %        DistributeCacheInfo *server_info,const RectangleInfo *region,
 %        const MagickSizeType length,unsigned char *metacontent)
 %
@@ -1008,19 +1008,19 @@ MagickPrivate MagickBooleanType OpenDistributePixelCache(
 %    o metacontent: read these metacontent from the pixel cache.
 %
 */
-MagickPrivate MagickBooleanType ReadDistributePixelCacheMetacontent(
+MagickPrivate MagickOffsetType ReadDistributePixelCacheMetacontent(
   DistributeCacheInfo *server_info,const RectangleInfo *region,
   const MagickSizeType length,unsigned char *metacontent)
 {
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    count;
+
   register unsigned char
     *p;
 
-  ssize_t
-    count;
-
   unsigned char
     buffer[MaxTextExtent];
 
@@ -1028,7 +1028,8 @@ MagickPrivate MagickBooleanType ReadDistributePixelCacheMetacontent(
   assert(server_info->signature == MagickSignature);
   assert(region != (RectangleInfo *) NULL);
   assert(metacontent != (unsigned char *) NULL);
-  assert(length == ((size_t) length));
+  if (length != (size_t) length)
+    return(-1);
   p=buffer;
   *p++='R';  /* read */
   (void) memcpy(p,&server_info->session_key,sizeof(server_info->session_key));
@@ -1043,16 +1044,17 @@ MagickPrivate MagickBooleanType ReadDistributePixelCacheMetacontent(
   p+=sizeof(region->y);
   (void) memcpy(p,&length,sizeof(length));
   p+=sizeof(length);
-  count=send(server_info->file,buffer,p-buffer,0);
-  if (count != (ssize_t) (p-buffer))
-    return(MagickFalse);
-  count=recv(server_info->file,(unsigned char *) metacontent,(size_t) length,0);
-  if (count != (ssize_t) length)
-    return(MagickFalse);
-  count=recv(server_info->file,&status,sizeof(status),0);
-  if (count != (ssize_t) sizeof(status))
-    return(MagickFalse);
-  return(status != 0 ? MagickTrue : MagickFalse);
+  count=(MagickOffsetType) send(server_info->file,buffer,p-buffer,0);
+  if (count != (MagickOffsetType) (p-buffer))
+    return(-1);
+  count=(MagickOffsetType) recv(server_info->file,(unsigned char *) metacontent,
+    (size_t) length,0);
+  if (count != (MagickOffsetType) length)
+    return(count);
+  count=(MagickOffsetType) recv(server_info->file,&status,sizeof(status),0);
+  if (count != (MagickOffsetType) sizeof(status))
+    return(-1);
+  return((MagickOffsetType) length);
 }
 \f
 /*
@@ -1071,7 +1073,7 @@ MagickPrivate MagickBooleanType ReadDistributePixelCacheMetacontent(
 %
 %  The format of the ReadDistributePixelCachePixels method is:
 %
-%      MagickBooleanType *ReadDistributePixelCachePixels(
+%      MagickOffsetType ReadDistributePixelCachePixels(
 %        DistributeCacheInfo *server_info,const RectangleInfo *region,
 %        const MagickSizeType length,unsigned char *pixels)
 %
@@ -1088,19 +1090,19 @@ MagickPrivate MagickBooleanType ReadDistributePixelCacheMetacontent(
 %    o pixels: read these pixels from the pixel cache.
 %
 */
-MagickPrivate MagickBooleanType ReadDistributePixelCachePixels(
+MagickPrivate MagickOffsetType ReadDistributePixelCachePixels(
   DistributeCacheInfo *server_info,const RectangleInfo *region,
   const MagickSizeType length,unsigned char *pixels)
 {
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    count;
+
   register unsigned char
     *p;
 
-  ssize_t
-    count;
-
   unsigned char
     buffer[MaxTextExtent];
 
@@ -1108,7 +1110,8 @@ MagickPrivate MagickBooleanType ReadDistributePixelCachePixels(
   assert(server_info->signature == MagickSignature);
   assert(region != (RectangleInfo *) NULL);
   assert(pixels != (unsigned char *) NULL);
-  assert(length == ((size_t) length));
+  if (length != (size_t) length)
+    return(-1);
   p=buffer;
   *p++='r';  /* read */
   (void) memcpy(p,&server_info->session_key,sizeof(server_info->session_key));
@@ -1123,16 +1126,17 @@ MagickPrivate MagickBooleanType ReadDistributePixelCachePixels(
   p+=sizeof(region->y);
   (void) memcpy(p,&length,sizeof(length));
   p+=sizeof(length);
-  count=send(server_info->file,buffer,p-buffer,0);
-  if (count != (ssize_t) (p-buffer))
-    return(MagickFalse);
-  count=recv(server_info->file,(unsigned char *) pixels,(size_t) length,0);
-  if (count != (ssize_t) length)
-    return(MagickFalse);
+  count=(MagickOffsetType) send(server_info->file,buffer,p-buffer,0);
+  if (count != (MagickOffsetType) (p-buffer))
+    return(-1);
+  count=(MagickOffsetType) recv(server_info->file,(unsigned char *) pixels,
+    (size_t) length,0);
+  if (count != (MagickOffsetType) length)
+    return(count);
   count=recv(server_info->file,&status,sizeof(status),0);
-  if (count != (ssize_t) sizeof(status))
-    return(MagickFalse);
-  return(status != 0 ? MagickTrue : MagickFalse);
+  if (count != (MagickOffsetType) sizeof(status))
+    return(-1);
+  return((MagickOffsetType) length);
 }
 \f
 /*
@@ -1197,10 +1201,9 @@ MagickPrivate MagickBooleanType RelinquishDistributePixelCache(
 %  WriteDistributePixelCacheMetacontents() writes image metacontent to the
 %  specified region of the distributed pixel cache.
 %
-%
 %  The format of the WriteDistributePixelCacheMetacontents method is:
 %
-%      MagickBooleanType *WriteDistributePixelCacheMetacontents(
+%      MagickOffsetType WriteDistributePixelCacheMetacontents(
 %        DistributeCacheInfo *server_info,const RectangleInfo *region,
 %        const MagickSizeType length,const unsigned char *metacontent)
 %
@@ -1217,19 +1220,19 @@ MagickPrivate MagickBooleanType RelinquishDistributePixelCache(
 %    o metacontent: write these metacontent to the pixel cache.
 %
 */
-MagickPrivate MagickBooleanType WriteDistributePixelCacheMetacontent(
+MagickPrivate MagickOffsetType WriteDistributePixelCacheMetacontent(
   DistributeCacheInfo *server_info,const RectangleInfo *region,
   const MagickSizeType length,const unsigned char *metacontent)
 {
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    count;
+
   register unsigned char
     *p;
 
-  ssize_t
-    count;
-
   unsigned char
     buffer[MaxTextExtent];
 
@@ -1237,7 +1240,8 @@ MagickPrivate MagickBooleanType WriteDistributePixelCacheMetacontent(
   assert(server_info->signature == MagickSignature);
   assert(region != (RectangleInfo *) NULL);
   assert(metacontent != (unsigned char *) NULL);
-  assert(length == ((size_t) length));
+  if (length != (size_t) length)
+    return(-1);
   p=buffer;
   *p++='W';  /* write */
   (void) memcpy(p,&server_info->session_key,sizeof(server_info->session_key));
@@ -1252,17 +1256,17 @@ MagickPrivate MagickBooleanType WriteDistributePixelCacheMetacontent(
   p+=sizeof(region->y);
   (void) memcpy(p,&length,sizeof(length));
   p+=sizeof(length);
-  count=send(server_info->file,buffer,p-buffer,0);
-  if (count != (ssize_t) (p-buffer))
-    return(MagickFalse);
-  count=send(server_info->file,(unsigned char *) metacontent,(size_t)
-    length,0);
+  count=(MagickOffsetType) send(server_info->file,buffer,p-buffer,0);
+  if (count != (MagickOffsetType) (p-buffer))
+    return(-1);
+  count=(MagickOffsetType) send(server_info->file,(unsigned char *) metacontent,
+    (size_t) length,0);
   if (count != (ssize_t) length)
-    return(MagickFalse);
+    return(count);
   count=recv(server_info->file,&status,sizeof(status),0);
   if (count != (ssize_t) sizeof(status))
-    return(MagickFalse);
-  return(status != 0 ? MagickTrue : MagickFalse);
+    return(-1);
+  return((MagickOffsetType) length);
 }
 \f
 /*
@@ -1279,10 +1283,9 @@ MagickPrivate MagickBooleanType WriteDistributePixelCacheMetacontent(
 %  WriteDistributePixelCachePixels() writes image pixels to the specified
 %  region of the distributed pixel cache.
 %
-%
 %  The format of the WriteDistributePixelCachePixels method is:
 %
-%      MagickBooleanType *WriteDistributePixelCachePixels(
+%      MagickBooleanType WriteDistributePixelCachePixels(
 %        DistributeCacheInfo *server_info,const RectangleInfo *region,
 %        const MagickSizeType length,const unsigned char *pixels)
 %
@@ -1299,19 +1302,19 @@ MagickPrivate MagickBooleanType WriteDistributePixelCacheMetacontent(
 %    o pixels: write these pixels to the pixel cache.
 %
 */
-MagickPrivate MagickBooleanType WriteDistributePixelCachePixels(
+MagickPrivate MagickOffsetType WriteDistributePixelCachePixels(
   DistributeCacheInfo *server_info,const RectangleInfo *region,
   const MagickSizeType length,const unsigned char *pixels)
 {
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    count;
+
   register unsigned char
     *p;
 
-  ssize_t
-    count;
-
   unsigned char
     buffer[MaxTextExtent];
 
@@ -1319,7 +1322,8 @@ MagickPrivate MagickBooleanType WriteDistributePixelCachePixels(
   assert(server_info->signature == MagickSignature);
   assert(region != (RectangleInfo *) NULL);
   assert(pixels != (const unsigned char *) NULL);
-  assert(length == ((size_t) length));
+  if (length != (size_t) length)
+    return(-1);
   p=buffer;
   *p++='w';  /* write */
   (void) memcpy(p,&server_info->session_key,sizeof(server_info->session_key));
@@ -1334,14 +1338,15 @@ MagickPrivate MagickBooleanType WriteDistributePixelCachePixels(
   p+=sizeof(region->y);
   (void) memcpy(p,&length,sizeof(length));
   p+=sizeof(length);
-  count=send(server_info->file,buffer,p-buffer,0);
-  if (count != (ssize_t) (p-buffer))
-    return(MagickFalse);
-  count=send(server_info->file,(unsigned char *) pixels,(size_t) length,0);
-  if (count != (ssize_t) length)
-    return(MagickFalse);
+  count=(MagickOffsetType) send(server_info->file,buffer,p-buffer,0);
+  if (count != (MagickOffsetType) (p-buffer))
+    return(-1);
+  count=(MagickOffsetType) send(server_info->file,(unsigned char *) pixels,
+    (size_t) length,0);
+  if (count != (MagickOffsetType) length)
+    return(count);
   count=recv(server_info->file,&status,sizeof(status),0);
   if (count != (ssize_t) sizeof(status))
-    return(MagickFalse);
-  return(status != 0 ? MagickTrue : MagickFalse);
+    return(-1);
+  return((MagickOffsetType) length);
 }