From: dirk Date: Sat, 22 Feb 2014 09:54:56 +0000 (+0000) Subject: Added MAGICK_GHOSTSCRIPT_PATH to define the location of gsdll32/64.dll. X-Git-Tag: 7.0.1-0~2655 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=192760709d3b834f5f9f72da6a3a2f0a808e20c8;p=imagemagick Added MAGICK_GHOSTSCRIPT_PATH to define the location of gsdll32/64.dll. Added MAGICK_GHOSTSCRIPT_FONT_PATH to define the location of ghostscript fonts. --- diff --git a/MagickCore/nt-base.c b/MagickCore/nt-base.c index 1d6f0216a..7dc2812ea 100644 --- a/MagickCore/nt-base.c +++ b/MagickCore/nt-base.c @@ -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])); + 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 + buffer[MaxTextExtent], + *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'; + directory=(char *) NULL; + if (LocaleCompare(name, "GS_DLL") == 0) + { + directory=GetEnvironmentValue("MAGICK_GHOSTSCRIPT_PATH"); + if (directory != (char *) NULL) + { + (void) FormatLocaleString(buffer,MaxTextExtent,"%s%sgsdll32.dll", + directory,DirectorySeparator); + if (IsPathAccessible(buffer) != MagickFalse) + { + (void) CopyMagickString(value,buffer,length); + if (is_64_bit != NULL) + *is_64_bit=FALSE; + return(TRUE); + } + (void) FormatLocaleString(buffer,MaxTextExtent,"%s%sgsdll64.dll", + directory,DirectorySeparator); + if (IsPathAccessible(buffer) != MagickFalse) + { + (void) CopyMagickString(value,buffer,length); + if (is_64_bit != NULL) + *is_64_bit=TRUE; + return(TRUE); + } + return(FALSE); + } + } 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'; + directory=GetEnvironmentValue("MAGICK_GHOSTSCRIPT_FONT_PATH"); + if (directory != (char *) NULL) + { + (void) CopyMagickString(buffer,directory,MaxTextExtent); + directory=DestroyString(directory); + } + else + { + if (NTGhostscriptGetString("GS_LIB",NULL,buffer,MaxTextExtent) == FALSE) + return(FALSE); + } 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); }