]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 30 Jun 2010 14:34:26 +0000 (14:34 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 30 Jun 2010 14:34:26 +0000 (14:34 +0000)
magick/module.c
magick/static.c

index 091c10061f40e903d363c14e6aa6b54b2b32f7d9..3134dd0e787d16839d4b37c42aade23769474e3c 100644 (file)
@@ -356,13 +356,15 @@ MagickExport const ModuleInfo **GetModuleInfoList(const char *pattern,
 %
 %  The format of the GetModuleList function is:
 %
-%      char **GetModuleList(const char *pattern,size_t *number_modules,
-%        ExceptionInfo *exception)
+%      char **GetModuleList(const char *pattern,const MagickModuleType type,
+%        size_t *number_modules,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
 %    o pattern: Specifies a pointer to a text string containing a pattern.
 %
+%    o type: choose from MagickImageCoderModule or MagickImageFilterModule.
+%
 %    o number_modules:  This integer returns the number of modules in the
 %      list.
 %
@@ -403,7 +405,7 @@ static inline int MagickReadDirectory(DIR *directory,struct dirent *entry,
 }
 
 MagickExport char **GetModuleList(const char *pattern,
-  size_t *number_modules,ExceptionInfo *exception)
+  const MagickModuleType type,size_t *number_modules,ExceptionInfo *exception)
 {
   char
     **modules,
@@ -428,11 +430,26 @@ MagickExport char **GetModuleList(const char *pattern,
     *entry;
 
   /*
-    Locate all modules in the coder path.
+    Locate all modules in the image coder or filter path.
   */
-  TagToCoderModuleName("magick",filename);
-  status=GetMagickModulePath(filename,MagickImageCoderModule,module_path,
-    exception);
+  switch (type)
+  {
+    case MagickImageCoderModule:
+    default:
+    {
+      TagToCoderModuleName("magick",filename);
+      status=GetMagickModulePath(filename,MagickImageCoderModule,module_path,
+        exception);
+      break;
+    }
+    case MagickImageFilterModule:
+    {
+      TagToFilterModuleName("analyze",filename);
+      status=GetMagickModulePath(filename,MagickImageFilterModule,module_path,
+        exception);
+      break;
+    }
+  }
   if (status == MagickFalse)
     return((char **) NULL);
   GetPathComponent(module_path,HeadPath,path);
@@ -476,7 +493,6 @@ MagickExport char **GetModuleList(const char *pattern,
     */
     modules[i]=AcquireString((char *) NULL);
     GetPathComponent(entry->d_name,BasePath,modules[i]);
-    LocaleUpper(modules[i]);
     if (LocaleNCompare("IM_MOD_",modules[i],7) == 0)
       {
         (void) CopyMagickString(modules[i],modules[i]+10,MaxTextExtent);
@@ -1048,8 +1064,11 @@ MagickExport MagickBooleanType InvokeDynamicImageFilter(const char *tag,
 MagickExport MagickBooleanType ListModuleInfo(FILE *file,
   ExceptionInfo *exception)
 {
-  const ModuleInfo
-    **module_info;
+  char
+    filename[MaxTextExtent],
+    module_path[MaxTextExtent],
+    **modules,
+    path[MaxTextExtent];
 
   register ssize_t
     i;
@@ -1059,30 +1078,58 @@ MagickExport MagickBooleanType ListModuleInfo(FILE *file,
 
   if (file == (const FILE *) NULL)
     file=stdout;
-  module_info=GetModuleInfoList("*",&number_modules,exception);
-  if (module_info == (const ModuleInfo **) NULL)
+  /*
+    List image coders.
+  */
+  modules=GetModuleList("*",MagickImageCoderModule,&number_modules,exception);
+  if (modules == (char **) NULL)
     return(MagickFalse);
-  if (module_info[0]->path != (char *) NULL)
-    {
-      char
-        path[MaxTextExtent];
-
-      GetPathComponent(module_info[0]->path,HeadPath,path);
-      (void) fprintf(file,"\nPath: %s\n\n",path);
-    }
-  (void) fprintf(file,"Module\n");
+  TagToCoderModuleName("magick",filename);
+  (void) GetMagickModulePath(filename,MagickImageCoderModule,module_path,
+    exception);
+  GetPathComponent(module_path,HeadPath,path);
+  (void) fprintf(file,"\nPath: %s\n\n",path);
+  (void) fprintf(file,"Image Coder\n");
   (void) fprintf(file,"-------------------------------------------------"
     "------------------------------\n");
   for (i=0; i < (ssize_t) number_modules; i++)
   {
-    if (module_info[i]->stealth != MagickFalse)
-      continue;
-    (void) fprintf(file,"%s",module_info[i]->tag);
+    (void) fprintf(file,"%s",modules[i]);
     (void) fprintf(file,"\n");
   }
   (void) fflush(file);
-  module_info=(const ModuleInfo **)
-    RelinquishMagickMemory((void *) module_info);
+  /*
+    Relinquish resources.
+  */
+  for (i=0; i < (ssize_t) number_modules; i++)
+    modules[i]=DestroyString(modules[i]);
+  modules=(char **) RelinquishMagickMemory(modules);
+  /*
+    List image filters.
+  */
+  modules=GetModuleList("*",MagickImageFilterModule,&number_modules,exception);
+  if (modules == (char **) NULL)
+    return(MagickFalse);
+  TagToFilterModuleName("analyze",filename);
+  (void) GetMagickModulePath(filename,MagickImageFilterModule,module_path,
+    exception);
+  GetPathComponent(module_path,HeadPath,path);
+  (void) fprintf(file,"\nPath: %s\n\n",path);
+  (void) fprintf(file,"Image Filter\n");
+  (void) fprintf(file,"-------------------------------------------------"
+    "------------------------------\n");
+  for (i=0; i < (ssize_t) number_modules; i++)
+  {
+    (void) fprintf(file,"%s",modules[i]);
+    (void) fprintf(file,"\n");
+  }
+  (void) fflush(file);
+  /*
+    Relinquish resources.
+  */
+  for (i=0; i < (ssize_t) number_modules; i++)
+    modules[i]=DestroyString(modules[i]);
+  modules=(char **) RelinquishMagickMemory(modules);
   return(MagickTrue);
 }
 \f
@@ -1314,7 +1361,7 @@ MagickExport MagickBooleanType OpenModules(ExceptionInfo *exception)
   */
   (void) GetMagickInfo((char *) NULL,exception);
   number_modules=0;
-  modules=GetModuleList("*",&number_modules,exception);
+  modules=GetModuleList("*",MagickImageCoderModule,&number_modules,exception);
   if (modules == (char **) NULL)
     return(MagickFalse);
   for (i=0; i < (ssize_t) number_modules; i++)
@@ -1569,27 +1616,57 @@ MagickExport MagickBooleanType ListModuleInfo(FILE *magick_unused(file),
 MagickExport MagickBooleanType InvokeDynamicImageFilter(const char *tag,
   Image **image,const int argc,const char **argv,ExceptionInfo *exception)
 {
-#if !defined(MAGICKCORE_BUILD_MODULES)
+  PolicyRights
+    rights;
+
+  assert(image != (Image **) NULL);
+  assert((*image)->signature == MagickSignature);
+  if ((*image)->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",(*image)->filename);
+  rights=ReadPolicyRights;
+  if (IsRightsAuthorized(FilterPolicyDomain,rights,tag) == MagickFalse)
+    {
+      errno=EPERM;
+      (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
+        "NotAuthorized","`%s'",tag);
+      return(MagickFalse);
+    }
+#if defined(MAGICKCORE_BUILD_MODULES)
+  (void) tag;
+  (void) argc;
+  (void) argv;
+  (void) exception;
+#else
   {
     extern size_t
-      analyzeImage(Image **,const int,const char **,ExceptionInfo *);
+      analyzeImage(Image **,const int,char **,ExceptionInfo *);
 
     ImageFilterHandler
       *image_filter;
 
     image_filter=(ImageFilterHandler *) NULL;
     if (LocaleCompare("analyze",tag) == 0)
-      image_filter=analyzeImage;
-    if (image_filter != (ImageFilterHandler *) NULL)
+      image_filter=(ImageFilterHandler *) analyzeImage;
+    if (image_filter == (ImageFilterHandler *) NULL)
+      (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
+        "UnableToLoadModule","`%s'",tag);
+    else
       {
         size_t
           signature;
 
+        if ((*image)->debug != MagickFalse)
+          (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+            "Invoking \"%s\" static image filter",tag);
         signature=image_filter(image,argc,argv,exception);
+        if ((*image)->debug != MagickFalse)
+          (void) LogMagickEvent(CoderEvent,GetMagickModule(),"\"%s\" completes",
+            tag);
         if (signature != MagickImageFilterSignature)
           {
             (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-              "ImageFilterSignatureMismatch","`%s': %8lx != %8lx",tag,signature,
+              "ImageFilterSignatureMismatch","`%s': %8lx != %8lx",tag,
+              (unsigned long) signature,(unsigned long)
               MagickImageFilterSignature);
             return(MagickFalse);
           }
index 4568c05db0f05c67f5dd62d2330c7b52a7f2d9bb..08a1c285fe8e6b5e2aa875c2931a5f3255a0c392 100644 (file)
@@ -116,7 +116,10 @@ MagickExport MagickBooleanType InvokeStaticImageFilter(const char *tag,
     image_filter=(ImageFilterHandler *) NULL;
     if (LocaleCompare("analyze",tag) == 0)
       image_filter=(ImageFilterHandler *) analyzeImage;
-    if (image_filter != (ImageFilterHandler *) NULL)
+    if (image_filter == (ImageFilterHandler *) NULL)
+      (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
+        "UnableToLoadModule","`%s'",tag);
+    else
       {
         size_t
           signature;