]> granicus.if.org Git - imagemagick/commitdiff
Added MAGICK_GHOSTSCRIPT_PATH to define the location of gsdll32/64.dll.
authordirk <dirk@git.imagemagick.org>
Sat, 22 Feb 2014 09:54:56 +0000 (09:54 +0000)
committerdirk <dirk@git.imagemagick.org>
Sat, 22 Feb 2014 09:54:56 +0000 (09:54 +0000)
Added MAGICK_GHOSTSCRIPT_FONT_PATH to define the location of ghostscript fonts.

MagickCore/nt-base.c

index 1d6f0216a815c5edeb4b2c78ee3c46000f9b06d9..7dc2812ead12ee418f9439b9136b96654debc62e 100644 (file)
@@ -988,7 +988,8 @@ static int NTLocateGhostscript(DWORD flags,int *root_index,
       mode;
 
     (void) FormatLocaleString(key,MaxTextExtent,"SOFTWARE\\%s",products[i]);
-    for (j=0; j < 2; j++)
+    for (j=0; j < (ssize_t) (sizeof(registry_roots)/sizeof(registry_roots[0]));\r
+         j++)
     {
       mode=KEY_READ | flags;
       if (RegOpenKeyExA(registry_roots[j].hkey,key,0,mode,&hkey) ==
@@ -1041,8 +1042,9 @@ static int NTLocateGhostscript(DWORD flags,int *root_index,
 static int NTGhostscriptGetString(const char *name,BOOL *is_64_bit,
   char *value,const size_t length)
 {
-  char
-    key[MaxTextExtent];
+  char\r
+    buffer[MaxTextExtent],\r
+    *directory;
 
   int
     extent;
@@ -1062,46 +1064,73 @@ static int NTGhostscriptGetString(const char *name,BOOL *is_64_bit,
   /*
     Get a string from the installed Ghostscript.
   */
-  *value='\0';
+  *value='\0';\r
+  directory=(char *) NULL;\r
+  if (LocaleCompare(name, "GS_DLL") == 0)\r
+    {\r
+      directory=GetEnvironmentValue("MAGICK_GHOSTSCRIPT_PATH");\r
+      if (directory != (char *) NULL)\r
+        {\r
+          (void) FormatLocaleString(buffer,MaxTextExtent,"%s%sgsdll32.dll",\r
+            directory,DirectorySeparator);\r
+          if (IsPathAccessible(buffer) != MagickFalse)\r
+            {\r
+              (void) CopyMagickString(value,buffer,length);\r
+              if (is_64_bit != NULL)\r
+                *is_64_bit=FALSE;\r
+              return(TRUE);\r
+            }\r
+          (void) FormatLocaleString(buffer,MaxTextExtent,"%s%sgsdll64.dll",\r
+            directory,DirectorySeparator);\r
+          if (IsPathAccessible(buffer) != MagickFalse)\r
+            {\r
+              (void) CopyMagickString(value,buffer,length);\r
+              if (is_64_bit != NULL)\r
+                *is_64_bit=TRUE;\r
+              return(TRUE);\r
+            }\r
+          return(FALSE);\r
+        }\r
+    }
   if (product_family == NULL)
-  {
-    flags=0;
+    {
+      flags=0;
 #if defined(KEY_WOW64_32KEY)
 #if defined(_WIN64)
-    flags=KEY_WOW64_64KEY;
+      flags=KEY_WOW64_64KEY;
 #else
-    flags=KEY_WOW64_32KEY;
+      flags=KEY_WOW64_32KEY;
 #endif
-    (void) NTLocateGhostscript(flags,&root_index,&product_family,
-      &major_version,&minor_version);
-    if (product_family == NULL)
+      (void) NTLocateGhostscript(flags,&root_index,&product_family,
+        &major_version,&minor_version);
+      if (product_family == NULL)
 #if defined(_WIN64)
-      flags=KEY_WOW64_32KEY;
-    else
-      is_64_bit_version=TRUE;
+        flags=KEY_WOW64_32KEY;
+      else
+        is_64_bit_version=TRUE;
 #else
       flags=KEY_WOW64_64KEY;
 #endif
 #endif
-  }
+    }
   if (product_family == NULL)
-  {
-    (void) NTLocateGhostscript(flags,&root_index,&product_family,
+    {
+      (void) NTLocateGhostscript(flags,&root_index,&product_family,
       &major_version,&minor_version);
-  }
+    }
   if (product_family == NULL)
     return(FALSE);
   if (is_64_bit != NULL)
     *is_64_bit=is_64_bit_version;
-  (void) FormatLocaleString(key,MaxTextExtent,"SOFTWARE\\%s\\%d.%02d",
+  (void) FormatLocaleString(buffer,MaxTextExtent,"SOFTWARE\\%s\\%d.%02d",
     product_family,major_version,minor_version);
   extent=(int) length;
-  if (NTGetRegistryValue(registry_roots[root_index].hkey,key,flags,name,value,
-     &extent) == 0)
+  if (NTGetRegistryValue(registry_roots[root_index].hkey,buffer,flags,name,
+    value,&extent) == 0)
     {
       (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
-        "registry: \"%s\\%s\\%s\"=\"%s\"",registry_roots[root_index].name,key,
-        name,value);
+        "registry: \"%s\\%s\\%s\"=\"%s\"",registry_roots[root_index].name,
+        buffer,name,value);
       return(TRUE);
     }
   return(FALSE);
@@ -1241,15 +1270,25 @@ MagickPrivate int NTGhostscriptFonts(char *path,int length)
 {
   char
     buffer[MaxTextExtent],
+    *directory,
     filename[MaxTextExtent];
 
   register char
     *p,
     *q;
 
-  *path='\0';
-  if (NTGhostscriptGetString("GS_LIB",NULL,buffer,MaxTextExtent) == FALSE)
-    return(FALSE);
+  *path='\0';\r
+  directory=GetEnvironmentValue("MAGICK_GHOSTSCRIPT_FONT_PATH");\r
+  if (directory != (char *) NULL)\r
+    {\r
+      (void) CopyMagickString(buffer,directory,MaxTextExtent);\r
+      directory=DestroyString(directory);\r
+    }\r
+  else\r
+    {\r
+      if (NTGhostscriptGetString("GS_LIB",NULL,buffer,MaxTextExtent) == FALSE)\r
+        return(FALSE);\r
+    }
   for (p=buffer-1; p != (char *) NULL; p=strchr(p+1,DirectoryListSeparator))
   {
     (void) CopyMagickString(path,p+1,length+1);
@@ -1261,10 +1300,6 @@ MagickPrivate int NTGhostscriptFonts(char *path,int length)
     if (IsPathAccessible(filename) != MagickFalse)
       return(TRUE);
   }
-  (void) FormatLocaleString(filename,MaxTextExtent,"c:%sgs%sfonts%sfonts.dir",
-    DirectorySeparator,DirectorySeparator,DirectorySeparator);
-  if (IsPathAccessible(filename) != MagickFalse)
-    return(TRUE);
   return(FALSE);
 }
 \f