Ah, got it now. Does this look more complete ?

--- ImageMagick-6.2.5/magick/image.c.format-string-again	2005-10-22 12:17:39.000000000 -0400
+++ ImageMagick-6.2.5/magick/image.c	2006-01-09 10:09:33.000000000 -0500
@@ -2861,8 +2861,16 @@
             char
               format[MaxTextExtent];
 
+	    /* Extract first numeric format specifier */
             (void) CopyMagickString(format,p,MaxTextExtent);
+	    if (q-p+1 < MaxTextExtent)
+		    format[q-p+1]='\0';
+	    /* Expand format */
             (void) FormatMagickString(p,MaxTextExtent,format,image_info->scene);
+	    /* Copy rest of string verbatim without further expansion */
+	    (void) ConcatenateMagickString(filename,
+	                                   image_info->filename+(q-filename)+1,
+					   MaxTextExtent);
             break;
           }
       }
--- ImageMagick-6.2.5/magick/blob.c.format-string-again	2005-09-28 15:00:17.000000000 -0400
+++ ImageMagick-6.2.5/magick/blob.c	2006-01-09 10:09:33.000000000 -0500
@@ -2135,8 +2135,17 @@
             char
               format[MaxTextExtent];
 
+	    /* Extract first numeric format specifier */
             (void) CopyMagickString(format,p,MaxTextExtent);
+	    if (q-p+1 < MaxTextExtent)
+		    format[q-p+1]='\0';
+	    /* Expand format */
             (void) FormatMagickString(p,MaxTextExtent,format,image->scene);
+	    /* Copy rest of string verbatim without further expansion */
+	    (void) ConcatenateMagickString(filename,
+	                                   image_info->filename+(q-filename)+1,
+					   MaxTextExtent);
+
             break;
           }
       }
--- ImageMagick-6.2.5/magick/animate.c.format-string-again	2005-10-23 22:15:16.000000000 -0400
+++ ImageMagick-6.2.5/magick/animate.c	2006-01-09 10:15:17.000000000 -0500
@@ -606,8 +606,33 @@
               /*
                 Form filename for multi-part images.
               */
-              (void) FormatMagickString(filename,MaxTextExtent,
-                image_info->filename,scene);
+	      (void) CopyMagickString(filename,image->filename,MaxTextExtent);
+	      for (p=strchr(filename,'%'); p != (char *) NULL; p=strchr(p+1,'%'))
+		{
+		  char
+		    *q;
+		  
+		  q=p+1;
+		  if (*q == '0')
+		    (void) strtol(q,&q,10);
+		  if ((*q == '%') || (*q == 'd') || (*q == 'o') || (*q == 'x'))
+		    {
+		      char
+			format[MaxTextExtent];
+		      
+		      /* Extract first numeric format specifier */
+		      (void) CopyMagickString(format,p,MaxTextExtent);
+		      if (q-p+1 < MaxTextExtent)
+			format[q-p+1]='\0';
+		      /* Expand format */
+		      (void) FormatMagickString(p,MaxTextExtent,format,image->scene);
+		      /* Copy rest of string verbatim without further expansion */
+		      (void) ConcatenateMagickString(filename,
+						     image_info->filename+(q-filename)+1,
+						     MaxTextExtent);
+		      break;
+		    }
+		}	      
               if (LocaleCompare(filename,image_info->filename) == 0)
                 (void) FormatMagickString(filename,MaxTextExtent,"%s[%lu]",
                   image_info->filename,scene);

Reply via email to