]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/coder.c
Update web pages
[imagemagick] / MagickCore / coder.c
index f4def8f17ae6dbaf2a75530268c800c89b0d9724..3b94c06c4cfa3161367e4f30337d76c028105e09 100644 (file)
@@ -17,7 +17,7 @@
 %                                 May 2001                                    %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -59,6 +59,7 @@
 #include "MagickCore/utility.h"
 #include "MagickCore/utility-private.h"
 #include "MagickCore/xml-tree.h"
+#include "MagickCore/xml-tree-private.h"
 \f
 /*
   Define declarations.
@@ -98,16 +99,21 @@ static const CoderMapInfo
     { "B", "RAW" },
     { "BRF", "BRAILLE" },
     { "BGRA", "BGR" },
+    { "BGRO", "BGR" },
     { "CMYKA", "CMYK" },
     { "C", "RAW" },
     { "CAL", "CALS" },
     { "CANVAS", "XC" },
+    { "CMYKA", "CMYK" },
     { "CR2", "DNG" },
     { "CRW", "DNG" },
     { "CUR", "ICON" },
+    { "DATA", "INLINE" },
     { "DCR", "DNG" },
     { "DCX", "PCX" },
     { "DFONT", "TTF" },
+    { "DXT1", "DDS" },
+    { "DXT5", "DDS" },
     { "EPDF", "PDF" },
     { "EPI", "PS" },
     { "EPS2", "PS2" },
@@ -129,6 +135,10 @@ static const CoderMapInfo
     { "GRANITE", "MAGICK" },
     { "GROUP4", "TIFF" },
     { "GV", "DOT" },
+    { "HTM", "HTML" },
+    { "ICB", "TGA" },
+    { "ICO", "ICON" },
+    { "IIQ", "DNG" },
     { "K25", "DNG" },
     { "KDC", "DNG" },
     { "H", "MAGICK" },
@@ -147,15 +157,26 @@ static const CoderMapInfo
     { "JBG", "JBIG" },
     { "JNG", "PNG" },
     { "JPC", "JP2" },
+    { "JPT", "JP2" },
+    { "JPM", "JP2" },
     { "J2C", "JP2" },
     { "J2K", "JP2" },
+    { "JNG", "PNG" },
+    { "JPE", "JPEG" },
     { "JPG", "JPEG" },
+    { "JPM", "JP2" },
+    { "JPS", "JPEG" },
+    { "JPT", "JP2" },
     { "JPX", "JP2" },
     { "K", "RAW" },
+    { "K25", "DNG" },
+    { "KDC", "DNG" },
     { "LOGO", "MAGICK" },
+    { "M", "RAW" },
     { "M2V", "MPEG" },
     { "M4V", "MPEG" },
-    { "M", "RAW" },
+    { "MEF", "DNG" },
+    { "MKV", "MPEG" },
     { "MNG", "PNG" },
     { "MOV", "MPEG" },
     { "MP4", "MPEG" },
@@ -175,6 +196,7 @@ static const CoderMapInfo
     { "PAM", "PNM" },
     { "PBM", "PNM" },
     { "PCDS", "PCD" },
+    { "PCT", "PICT" },
     { "PDFA", "PDF" },
     { "PEF", "DNG" },
     { "PEF", "DNG" },
@@ -186,22 +208,27 @@ static const CoderMapInfo
     { "PICON", "XPM" },
     { "PJPEG", "JPEG" },
     { "PM", "XPM" },
+    { "PNG00", "PNG" },
     { "PNG24", "PNG" },
     { "PNG32", "PNG" },
+    { "PNG48", "PNG" },
+    { "PNG64", "PNG" },
     { "PNG8", "PNG" },
     { "PPM", "PNM" },
     { "PSB", "PSD" },
     { "PTIF", "TIFF" },
+    { "R", "RAW" },
     { "RADIAL-GRADIENT", "GRADIENT" },
     { "RAF", "DNG" },
     { "RAS", "SUN" },
+    { "RAW", "DNG" },
     { "RGBA", "RGB" },
     { "RGBO", "RGB" },
     { "RMF", "DNG" },
-    { "R", "RAW" },
     { "ROSE", "MAGICK" },
     { "RW2", "DNG" },
     { "SHTML", "HTML" },
+    { "SIX", "SIXEL" },
     { "SPARSE-COLOR", "TXT" },
     { "SR2", "DNG" },
     { "SRF", "DNG" },
@@ -234,14 +261,129 @@ static SemaphoreInfo
   *coder_semaphore = (SemaphoreInfo *) NULL;
 
 static SplayTreeInfo
-  *coder_list = (SplayTreeInfo *) NULL;
+  *coder_cache = (SplayTreeInfo *) NULL;
 \f
 /*
   Forward declarations.
 */
 static MagickBooleanType
   IsCoderTreeInstantiated(ExceptionInfo *),
-  LoadCoderLists(const char *,ExceptionInfo *);
+  LoadCoderCache(SplayTreeInfo *,const char *,const char *,const size_t,
+    ExceptionInfo *);
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
++  A c q u i r e C o d e r C a c h e                                          %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  AcquireCoderCache() caches one or more coder configurations which provides a
+%  mapping between coder attributes and a coder name.
+%
+%  The format of the AcquireCoderCache coder is:
+%
+%      SplayTreeInfo *AcquireCoderCache(const char *filename,
+%        ExceptionInfo *exception)
+%
+%  A description of each parameter follows:
+%
+%    o filename: the font file name.
+%
+%    o exception: return any errors or warnings in this structure.
+%
+*/
+
+static void *DestroyCoderNode(void *coder_info)
+{
+  register CoderInfo
+    *p;
+
+  p=(CoderInfo *) coder_info;
+  if (p->exempt == MagickFalse)
+    {
+      if (p->path != (char *) NULL)
+        p->path=DestroyString(p->path);
+      if (p->name != (char *) NULL)
+        p->name=DestroyString(p->name);
+      if (p->magick != (char *) NULL)
+        p->magick=DestroyString(p->magick);
+    }
+  return(RelinquishMagickMemory(p));
+}
+
+static SplayTreeInfo *AcquireCoderCache(const char *filename,
+  ExceptionInfo *exception)
+{
+  const StringInfo
+    *option;
+
+  LinkedListInfo
+    *options;
+
+  MagickStatusType
+    status;
+
+  register ssize_t
+    i;
+
+  SplayTreeInfo
+    *coder_cache;
+
+  /*
+    Load external coder map.
+  */
+  coder_cache=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
+    DestroyCoderNode);
+  if (coder_cache == (SplayTreeInfo *) NULL)
+    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+  status=MagickTrue;
+  options=GetConfigureOptions(filename,exception);
+  option=(const StringInfo *) GetNextValueInLinkedList(options);
+  while (option != (const StringInfo *) NULL)
+  {
+    status&=LoadCoderCache(coder_cache,(const char *)
+      GetStringInfoDatum(option),GetStringInfoPath(option),0,exception);
+    option=(const StringInfo *) GetNextValueInLinkedList(options);
+  }
+  options=DestroyConfigureOptions(options);
+  /*
+    Load built-in coder map.
+  */
+  for (i=0; i < (ssize_t) (sizeof(CoderMap)/sizeof(*CoderMap)); i++)
+  {
+    CoderInfo
+      *coder_info;
+
+    register const CoderMapInfo
+      *p;
+
+    p=CoderMap+i;
+    coder_info=(CoderInfo *) AcquireMagickMemory(sizeof(*coder_info));
+    if (coder_info == (CoderInfo *) NULL)
+      {
+        (void) ThrowMagickException(exception,GetMagickModule(),
+          ResourceLimitError,"MemoryAllocationFailed","`%s'",p->name);
+        continue;
+      }
+    (void) ResetMagickMemory(coder_info,0,sizeof(*coder_info));
+    coder_info->path=(char *) "[built-in]";
+    coder_info->magick=(char *) p->magick;
+    coder_info->name=(char *) p->name;
+    coder_info->exempt=MagickTrue;
+    coder_info->signature=MagickCoreSignature;
+    status&=AddValueToSplayTree(coder_cache,ConstantString(coder_info->magick),
+      coder_info);
+    if (status == MagickFalse)
+      (void) ThrowMagickException(exception,GetMagickModule(),
+        ResourceLimitError,"MemoryAllocationFailed","`%s'",coder_info->name);
+  }
+  return(coder_cache);
+}
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -263,7 +405,8 @@ static MagickBooleanType
 */
 MagickPrivate MagickBooleanType CoderComponentGenesis(void)
 {
-  coder_semaphore=AcquireSemaphoreInfo();
+  if (coder_semaphore == (SemaphoreInfo *) NULL)
+    coder_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 \f
@@ -290,8 +433,8 @@ MagickPrivate void CoderComponentTerminus(void)
   if (coder_semaphore == (SemaphoreInfo *) NULL)
     ActivateSemaphoreInfo(&coder_semaphore);
   LockSemaphoreInfo(coder_semaphore);
-  if (coder_list != (SplayTreeInfo *) NULL)
-    coder_list=DestroySplayTree(coder_list);
+  if (coder_cache != (SplayTreeInfo *) NULL)
+    coder_cache=DestroySplayTree(coder_cache);
   UnlockSemaphoreInfo(coder_semaphore);
   RelinquishSemaphoreInfo(&coder_semaphore);
 }
@@ -324,15 +467,23 @@ MagickPrivate void CoderComponentTerminus(void)
 MagickExport const CoderInfo *GetCoderInfo(const char *name,
   ExceptionInfo *exception)
 {
+  const CoderInfo
+    *coder_info;
+
   assert(exception != (ExceptionInfo *) NULL);
   if (IsCoderTreeInstantiated(exception) == MagickFalse)
     return((const CoderInfo *) NULL);
+  LockSemaphoreInfo(coder_semaphore);
   if ((name == (const char *) NULL) || (LocaleCompare(name,"*") == 0))
     {
-      ResetSplayTreeIterator(coder_list);
-      return((const CoderInfo *) GetNextValueInSplayTree(coder_list));
+      ResetSplayTreeIterator(coder_cache);
+      coder_info=(const CoderInfo *) GetNextValueInSplayTree(coder_cache);
+      UnlockSemaphoreInfo(coder_semaphore);
+      return(coder_info);
     }
-  return((const CoderInfo *) GetValueFromSplayTree(coder_list,name));
+  coder_info=(const CoderInfo *) GetValueFromSplayTree(coder_cache,name);
+  UnlockSemaphoreInfo(coder_semaphore);
+  return(coder_info);
 }
 \f
 /*
@@ -398,21 +549,21 @@ MagickExport const CoderInfo **GetCoderInfoList(const char *pattern,
   if (p == (const CoderInfo *) NULL)
     return((const CoderInfo **) NULL);
   coder_map=(const CoderInfo **) AcquireQuantumMemory((size_t)
-    GetNumberOfNodesInSplayTree(coder_list)+1UL,sizeof(*coder_map));
+    GetNumberOfNodesInSplayTree(coder_cache)+1UL,sizeof(*coder_map));
   if (coder_map == (const CoderInfo **) NULL)
     return((const CoderInfo **) NULL);
   /*
     Generate coder list.
   */
   LockSemaphoreInfo(coder_semaphore);
-  ResetSplayTreeIterator(coder_list);
-  p=(const CoderInfo *) GetNextValueInSplayTree(coder_list);
+  ResetSplayTreeIterator(coder_cache);
+  p=(const CoderInfo *) GetNextValueInSplayTree(coder_cache);
   for (i=0; p != (const CoderInfo *) NULL; )
   {
     if ((p->stealth == MagickFalse) &&
         (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse))
       coder_map[i++]=p;
-    p=(const CoderInfo *) GetNextValueInSplayTree(coder_list);
+    p=(const CoderInfo *) GetNextValueInSplayTree(coder_cache);
   }
   UnlockSemaphoreInfo(coder_semaphore);
   qsort((void *) coder_map,(size_t) i,sizeof(*coder_map),CoderInfoCompare);
@@ -483,21 +634,21 @@ MagickExport char **GetCoderList(const char *pattern,
   if (p == (const CoderInfo *) NULL)
     return((char **) NULL);
   coder_map=(char **) AcquireQuantumMemory((size_t)
-    GetNumberOfNodesInSplayTree(coder_list)+1UL,sizeof(*coder_map));
+    GetNumberOfNodesInSplayTree(coder_cache)+1UL,sizeof(*coder_map));
   if (coder_map == (char **) NULL)
     return((char **) NULL);
   /*
     Generate coder list.
   */
   LockSemaphoreInfo(coder_semaphore);
-  ResetSplayTreeIterator(coder_list);
-  p=(const CoderInfo *) GetNextValueInSplayTree(coder_list);
+  ResetSplayTreeIterator(coder_cache);
+  p=(const CoderInfo *) GetNextValueInSplayTree(coder_cache);
   for (i=0; p != (const CoderInfo *) NULL; )
   {
     if ((p->stealth == MagickFalse) &&
         (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse))
       coder_map[i++]=ConstantString(p->name);
-    p=(const CoderInfo *) GetNextValueInSplayTree(coder_list);
+    p=(const CoderInfo *) GetNextValueInSplayTree(coder_cache);
   }
   UnlockSemaphoreInfo(coder_semaphore);
   qsort((void *) coder_map,(size_t) i,sizeof(*coder_map),CoderCompare);
@@ -517,8 +668,8 @@ MagickExport char **GetCoderList(const char *pattern,
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  IsCoderTreeInstantiated() determines if the coder tree is instantiated.
-%  If not, it instantiates the tree and returns it.
+%  IsCoderTreeInstantiated() determines if the coder tree is instantiated.  If
+%  not, it instantiates the tree and returns it.
 %
 %  The format of the IsCoderInstantiated method is:
 %
@@ -531,13 +682,16 @@ MagickExport char **GetCoderList(const char *pattern,
 */
 static MagickBooleanType IsCoderTreeInstantiated(ExceptionInfo *exception)
 {
-  if (coder_semaphore == (SemaphoreInfo *) NULL)
-    ActivateSemaphoreInfo(&coder_semaphore);
-  LockSemaphoreInfo(coder_semaphore);
-  if (coder_list == (SplayTreeInfo *) NULL)
-    (void) LoadCoderLists(MagickCoderFilename,exception);
-  UnlockSemaphoreInfo(coder_semaphore);
-  return(coder_list != (SplayTreeInfo *) NULL ? MagickTrue : MagickFalse);
+  if (coder_cache == (SplayTreeInfo *) NULL)
+    {
+      if (coder_semaphore == (SemaphoreInfo *) NULL)
+        ActivateSemaphoreInfo(&coder_semaphore);
+      LockSemaphoreInfo(coder_semaphore);
+      if (coder_cache == (SplayTreeInfo *) NULL)
+        coder_cache=AcquireCoderCache(MagickCoderFilename,exception);
+      UnlockSemaphoreInfo(coder_semaphore);
+    }
+  return(coder_cache != (SplayTreeInfo *) NULL ? MagickTrue : MagickFalse);
 }
 \f
 /*
@@ -626,13 +780,14 @@ MagickExport MagickBooleanType ListCoderInfo(FILE *file,
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  LoadCoderList() loads the coder configuration file which provides a
+%  LoadCoderCache() loads the coder configurations which provides a
 %  mapping between coder attributes and a coder name.
 %
-%  The format of the LoadCoderList coder is:
+%  The format of the LoadCoderCache coder is:
 %
-%      MagickBooleanType LoadCoderList(const char *xml,const char *filename,
-%        const size_t depth,ExceptionInfo *exception)
+%      MagickBooleanType LoadCoderCache(SplayTreeInfo *coder_cache,
+%        const char *xml,const char *filename,const size_t depth,
+%        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -645,30 +800,12 @@ MagickExport MagickBooleanType ListCoderInfo(FILE *file,
 %    o exception: return any errors or warnings in this structure.
 %
 */
-
-static void *DestroyCoderNode(void *coder_info)
-{
-  register CoderInfo
-    *p;
-
-  p=(CoderInfo *) coder_info;
-  if (p->exempt == MagickFalse)
-    {
-      if (p->path != (char *) NULL)
-        p->path=DestroyString(p->path);
-      if (p->name != (char *) NULL)
-        p->name=DestroyString(p->name);
-      if (p->magick != (char *) NULL)
-        p->magick=DestroyString(p->magick);
-    }
-  return(RelinquishMagickMemory(p));
-}
-
-static MagickBooleanType LoadCoderList(const char *xml,const char *filename,
-  const size_t depth,ExceptionInfo *exception)
+static MagickBooleanType LoadCoderCache(SplayTreeInfo *coder_cache,
+  const char *xml,const char *filename,const size_t depth,
+  ExceptionInfo *exception)
 {
   char
-    keyword[MaxTextExtent],
+    keyword[MagickPathExtent],
     *token;
 
   const char
@@ -677,7 +814,7 @@ static MagickBooleanType LoadCoderList(const char *xml,const char *filename,
   CoderInfo
     *coder_info;
 
-  MagickBooleanType
+  MagickStatusType
     status;
 
   /*
@@ -687,17 +824,6 @@ static MagickBooleanType LoadCoderList(const char *xml,const char *filename,
     "Loading coder configuration file \"%s\" ...",filename);
   if (xml == (const char *) NULL)
     return(MagickFalse);
-  if (coder_list == (SplayTreeInfo *) NULL)
-    {
-      coder_list=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
-        DestroyCoderNode);
-      if (coder_list == (SplayTreeInfo *) NULL)
-        {
-          ThrowFileException(exception,ResourceLimitError,
-            "MemoryAllocationFailed",filename);
-          return(MagickFalse);
-        }
-    }
   status=MagickTrue;
   coder_info=(CoderInfo *) NULL;
   token=AcquireString(xml);
@@ -709,7 +835,7 @@ static MagickBooleanType LoadCoderList(const char *xml,const char *filename,
     GetMagickToken(q,&q,token);
     if (*token == '\0')
       break;
-    (void) CopyMagickString(keyword,token,MaxTextExtent);
+    (void) CopyMagickString(keyword,token,MagickPathExtent);
     if (LocaleNCompare(keyword,"<!DOCTYPE",9) == 0)
       {
         /*
@@ -735,7 +861,7 @@ static MagickBooleanType LoadCoderList(const char *xml,const char *filename,
         */
         while (((*token != '/') && (*(token+1) != '>')) && (*q != '\0'))
         {
-          (void) CopyMagickString(keyword,token,MaxTextExtent);
+          (void) CopyMagickString(keyword,token,MagickPathExtent);
           GetMagickToken(q,&q,token);
           if (*token != '=')
             continue;
@@ -748,21 +874,22 @@ static MagickBooleanType LoadCoderList(const char *xml,const char *filename,
               else
                 {
                   char
-                    path[MaxTextExtent],
+                    path[MagickPathExtent],
                     *xml;
 
                   GetPathComponent(filename,HeadPath,path);
                   if (*path != '\0')
                     (void) ConcatenateMagickString(path,DirectorySeparator,
-                      MaxTextExtent);
+                      MagickPathExtent);
                   if (*token == *DirectorySeparator)
-                    (void) CopyMagickString(path,token,MaxTextExtent);
+                    (void) CopyMagickString(path,token,MagickPathExtent);
                   else
-                    (void) ConcatenateMagickString(path,token,MaxTextExtent);
-                  xml=FileToString(path,~0UL,exception);
+                    (void) ConcatenateMagickString(path,token,MagickPathExtent);
+                  xml=FileToXML(path,~0UL);
                   if (xml != (char *) NULL)
                     {
-                      status=LoadCoderList(xml,path,depth+1,exception);
+                      status&=LoadCoderCache(coder_cache,xml,path,depth+1,
+                        exception);
                       xml=(char *) RelinquishMagickMemory(xml);
                     }
                 }
@@ -781,14 +908,14 @@ static MagickBooleanType LoadCoderList(const char *xml,const char *filename,
         (void) ResetMagickMemory(coder_info,0,sizeof(*coder_info));
         coder_info->path=ConstantString(filename);
         coder_info->exempt=MagickFalse;
-        coder_info->signature=MagickSignature;
+        coder_info->signature=MagickCoreSignature;
         continue;
       }
     if (coder_info == (CoderInfo *) NULL)
       continue;
     if (LocaleCompare(keyword,"/>") == 0)
       {
-        status=AddValueToSplayTree(coder_list,ConstantString(
+        status=AddValueToSplayTree(coder_cache,ConstantString(
           coder_info->magick),coder_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
@@ -839,104 +966,5 @@ static MagickBooleanType LoadCoderList(const char *xml,const char *filename,
     }
   }
   token=(char *) RelinquishMagickMemory(token);
-  return(status);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%  L o a d C o d e r L i s t s                                                %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  LoadCoderLists() loads one or more coder configuration file which
-%  provides a mapping between coder attributes and a coder name.
-%
-%  The format of the LoadCoderLists coder is:
-%
-%      MagickBooleanType LoadCoderLists(const char *filename,
-%        ExceptionInfo *exception)
-%
-%  A description of each parameter follows:
-%
-%    o filename: the font file name.
-%
-%    o exception: return any errors or warnings in this structure.
-%
-*/
-static MagickBooleanType LoadCoderLists(const char *filename,
-  ExceptionInfo *exception)
-{
-  const StringInfo
-    *option;
-
-  LinkedListInfo
-    *options;
-
-  MagickStatusType
-    status;
-
-  register ssize_t
-    i;
-
-  /*
-    Load external coder map.
-  */
-  if (coder_list == (SplayTreeInfo *) NULL)
-    {
-      coder_list=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
-        DestroyCoderNode);
-      if (coder_list == (SplayTreeInfo *) NULL)
-        {
-          ThrowFileException(exception,ResourceLimitError,
-            "MemoryAllocationFailed",filename);
-          return(MagickFalse);
-        }
-    }
-  status=MagickTrue;
-  options=GetConfigureOptions(filename,exception);
-  option=(const StringInfo *) GetNextValueInLinkedList(options);
-  while (option != (const StringInfo *) NULL)
-  {
-    status&=LoadCoderList((const char *) GetStringInfoDatum(option),
-      GetStringInfoPath(option),0,exception);
-    option=(const StringInfo *) GetNextValueInLinkedList(options);
-  }
-  options=DestroyConfigureOptions(options);
-  /*
-    Load built-in coder map.
-  */
-  for (i=0; i < (ssize_t) (sizeof(CoderMap)/sizeof(*CoderMap)); i++)
-  {
-    CoderInfo
-      *coder_info;
-
-    register const CoderMapInfo
-      *p;
-
-    p=CoderMap+i;
-    coder_info=(CoderInfo *) AcquireMagickMemory(sizeof(*coder_info));
-    if (coder_info == (CoderInfo *) NULL)
-      {
-        (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",p->name);
-        continue;
-      }
-    (void) ResetMagickMemory(coder_info,0,sizeof(*coder_info));
-    coder_info->path=(char *) "[built-in]";
-    coder_info->magick=(char *) p->magick;
-    coder_info->name=(char *) p->name;
-    coder_info->exempt=MagickTrue;
-    coder_info->signature=MagickSignature;
-    status&=AddValueToSplayTree(coder_list,ConstantString(coder_info->magick),
-      coder_info);
-    if (status == MagickFalse)
-      (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",coder_info->name);
-  }
   return(status != 0 ? MagickTrue : MagickFalse);
 }