diff --git a/magick/list.c b/magick/list.c
index 7a78986..7adb840 100644
--- a/magick/list.c
+++ b/magick/list.c
@@ -209,12 +209,12 @@
     *clone_images,
     *image;
 
-  long
+  ssize_t
     first,
     last,
     step;
 
-  register long
+  register ssize_t
     i;
 
   size_t
@@ -236,7 +236,7 @@
       p++;
     first=strtol(p,&p,10);
     if (first < 0)
-      first+=(long) length;
+      first+=(ssize_t) length;
     last=first;
     while (isspace((int) ((unsigned char) *p)) != 0)
       p++;
@@ -244,7 +244,7 @@
       {
         last=strtol(p+1,&p,10);
         if (last < 0)
-          last+=(long) length;
+          last+=(ssize_t) length;
       }
     for (step=first > last ? -1 : 1; first != (last+step); first+=step)
     {
@@ -343,14 +343,14 @@
   Image
     *image;
 
-  long
+  ssize_t
     first,
     last;
 
   MagickBooleanType
     *delete_list;
 
-  register long
+  register ssize_t
     i;
 
   size_t
@@ -375,7 +375,7 @@
       return;
     }
   image=(*images);
-  for (i=0; i < (long) length; i++)
+  for (i=0; i < (ssize_t) length; i++)
     delete_list[i]=MagickFalse;
   /*
     Note which images will be deleted, avoid duplicate deleted
@@ -386,7 +386,7 @@
       p++;
     first=strtol(p,&p,10);
     if (first < 0)
-      first+=(long) length;
+      first+=(ssize_t) length;
     last=first;
     while (isspace((int) ((unsigned char) *p)) != 0)
       p++;
@@ -394,19 +394,19 @@
       {
         last=strtol(p+1,&p,10);
         if (last < 0)
-          last+=(long) length;
+          last+=(ssize_t) length;
       }
     if (first > last)
       continue;
     for (i=first; i <= last; i++)
-      if ((i >= 0) && (i < (long) length))
+      if ((i >= 0) && (i < (ssize_t) length))
         delete_list[i]=MagickTrue;
   }
   /*
     Delete images marked for deletion, once only
   */
   image=(*images);
-  for (i=0; i < (long) length; i++)
+  for (i=0; i < (ssize_t) length; i++)
   {
     *images=image;
     image=GetNextImageInList(image);
@@ -501,7 +501,7 @@
 %
 %  The format of the GetImageFromList method is:
 %
-%      Image *GetImageFromList(const Image *images,const long index)
+%      Image *GetImageFromList(const Image *images,const ssize_t index)
 %
 %  A description of each parameter follows:
 %
@@ -510,15 +510,15 @@
 %    o index: the position within the list.
 %
 */
-MagickExport Image *GetImageFromList(const Image *images,const long index)
+MagickExport Image *GetImageFromList(const Image *images,const ssize_t index)
 {
-  long
+  ssize_t
     offset;
 
   register const Image
     *p;
 
-  register long
+  register ssize_t
     i;
 
   size_t
@@ -531,9 +531,9 @@
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
   for (p=images; p->previous != (Image *) NULL; p=p->previous) ;
   length=GetImageListLength(images);
-  for (offset=index; offset < 0; offset+=(long) length) ;
+  for (offset=index; offset < 0; offset+=(ssize_t) length) ;
   for (i=0; p != (Image *) NULL; p=p->next)
-    if (i++ == (long) (offset % length))
+    if (i++ == (ssize_t) (offset % length))
       break;
   if (p == (Image *) NULL)
     return((Image *) NULL);
@@ -555,16 +555,16 @@
 %
 %  The format of the GetImageIndexInList method is:
 %
-%      long GetImageIndexInList(const Image *images)
+%      ssize_t GetImageIndexInList(const Image *images)
 %
 %  A description of each parameter follows:
 %
 %    o images: the image list.
 %
 */
-MagickExport long GetImageIndexInList(const Image *images)
+MagickExport ssize_t GetImageIndexInList(const Image *images)
 {
-  register long
+  register ssize_t
     i;
 
   if (images == (const Image *) NULL)
@@ -591,16 +591,16 @@
 %
 %  The format of the GetImageListLength method is:
 %
-%      unsigned long GetImageListLength(const Image *images)
+%      size_t GetImageListLength(const Image *images)
 %
 %  A description of each parameter follows:
 %
 %    o images: the image list.
 %
 */
-MagickExport unsigned long GetImageListLength(const Image *images)
+MagickExport size_t GetImageListLength(const Image *images)
 {
-  register long
+  register ssize_t
     i;
 
   if (images == (Image *) NULL)
@@ -612,7 +612,7 @@
     images=images->previous;
   for (i=0; images != (Image *) NULL; images=images->next)
     i++;
-  return((unsigned long) i);
+  return((size_t) i);
 }
 
 /*
@@ -747,7 +747,7 @@
   Image
     **group;
 
-  register long
+  register ssize_t
     i;
 
   if (images == (Image *) NULL)
@@ -1136,7 +1136,7 @@
 %
 %  The format of the SpliceImageIntoList method is:
 %
-%      SpliceImageIntoList(Image **images,const unsigned long,
+%      SpliceImageIntoList(Image **images,const size_t,
 %        const Image *splice)
 %
 %  A description of each parameter follows:
@@ -1149,13 +1149,13 @@
 %
 */
 MagickExport Image *SpliceImageIntoList(Image **images,
-  const unsigned long length,const Image *splice)
+  const size_t length,const Image *splice)
 {
   Image
     *image,
     *split;
 
-  register unsigned long
+  register size_t
     i;
 
   assert(images != (Image **) NULL);