/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % % L o a d T y p e L i s t s % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % LoadTypeList() loads one or more type configuration files which provides a % mapping between type attributes and a type name. % % The format of the LoadTypeLists method is: % % MagickBooleanType LoadTypeLists(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 LoadTypeLists(const char *filename, ExceptionInfo *exception) { #if defined(MAGICKCORE_ZERO_CONFIGURATION_SUPPORT) return(LoadTypeList(TypeMap,"built-in",0,exception)); #else char *font_path, path[MaxTextExtent]; const StringInfo *option; LinkedListInfo *options; MagickStatusType status; status=MagickFalse; *path='\0'; options=GetConfigureOptions(filename,exception); option=(const StringInfo *) GetNextValueInLinkedList(options); while (option != (const StringInfo *) NULL) { (void) CopyMagickString(path,GetStringInfoPath(option),MaxTextExtent); status&=LoadTypeList((const char *) GetStringInfoDatum(option), GetStringInfoPath(option),0,exception); option=(const StringInfo *) GetNextValueInLinkedList(options); } options=DestroyConfigureOptions(options); font_path=GetEnvironmentValue("MAGICK_FONT_PATH"); if (font_path != (char *) NULL) { char *option; /* Search MAGICK_FONT_PATH. */ (void) FormatLocaleString(path,MaxTextExtent,"%s%s%s",font_path, DirectorySeparator,filename); option=FileToString(path,~0UL,exception); if (option != (void *) NULL) { status&=LoadTypeList(option,path,0,exception); option=DestroyString(option); } font_path=DestroyString(font_path); } if ((type_list == (SplayTreeInfo *) NULL) || (GetNumberOfNodesInSplayTree(type_list) == 0)) status&=LoadTypeList(TypeMap,"built-in",0,exception); return(status != 0 ? MagickTrue : MagickFalse); #endif }
/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % + I n i t i a l i z e L o c a l e L i s t % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % InitializeLocaleList() initializes the locale list. % % The format of the InitializeLocaleList method is: % % MagickBooleanType InitializeLocaleList(ExceptionInfo *exception) % % A description of each parameter follows. % % o exception: return any errors or warnings in this structure. % */ static MagickBooleanType InitializeLocaleList(ExceptionInfo *exception) { if ((locale_list == (SplayTreeInfo *) NULL) && (instantiate_locale == MagickFalse)) { if (locale_semaphore == (SemaphoreInfo *) NULL) AcquireSemaphoreInfo(&locale_semaphore); LockSemaphoreInfo(locale_semaphore); if ((locale_list == (SplayTreeInfo *) NULL) && (instantiate_locale == MagickFalse)) { char *locale; register const char *p; locale=(char *) NULL; p=setlocale(LC_CTYPE,(const char *) NULL); if (p != (const char *) NULL) locale=ConstantString(p); if (locale == (char *) NULL) locale=GetEnvironmentValue("LC_ALL"); if (locale == (char *) NULL) locale=GetEnvironmentValue("LC_MESSAGES"); if (locale == (char *) NULL) locale=GetEnvironmentValue("LC_CTYPE"); if (locale == (char *) NULL) locale=GetEnvironmentValue("LANG"); if (locale == (char *) NULL) locale=ConstantString("C"); (void) LoadLocaleLists(LocaleFilename,locale,exception); locale=DestroyString(locale); instantiate_locale=MagickTrue; } UnlockSemaphoreInfo(locale_semaphore); } return(locale_list != (SplayTreeInfo *) NULL ? MagickTrue : MagickFalse); }
MagickPrivate MagickBooleanType ResourceComponentGenesis(void) { char *limit; MagickSizeType memory; ssize_t files, pages, pagesize; /* Set Magick resource limits. */ AcquireSemaphoreInfo(&resource_semaphore); pagesize=GetMagickPageSize(); pages=(-1); #if defined(MAGICKCORE_HAVE_SYSCONF) && defined(_SC_PHYS_PAGES) pages=(ssize_t) sysconf(_SC_PHYS_PAGES); #endif memory=(MagickSizeType) pages*pagesize; if ((pagesize <= 0) || (pages <= 0)) memory=2048UL*1024UL*1024UL; #if defined(PixelCacheThreshold) memory=PixelCacheThreshold; #endif (void) SetMagickResourceLimit(AreaResource,2*memory); (void) SetMagickResourceLimit(MemoryResource,memory); (void) SetMagickResourceLimit(MapResource,2*memory); limit=GetEnvironmentValue("MAGICK_AREA_LIMIT"); if (limit == (char *) NULL) limit=GetPolicyValue("area"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(AreaResource,StringToSizeType(limit,100.0)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_MEMORY_LIMIT"); if (limit == (char *) NULL) limit=GetPolicyValue("memory"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(MemoryResource, StringToSizeType(limit,100.0)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_MAP_LIMIT"); if (limit == (char *) NULL) limit=GetPolicyValue("map"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(MapResource,StringToSizeType(limit,100.0)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_DISK_LIMIT"); if (limit == (char *) NULL) limit=GetPolicyValue("disk"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(DiskResource,StringToSizeType(limit,100.0)); limit=DestroyString(limit); } files=(-1); #if defined(MAGICKCORE_HAVE_SYSCONF) && defined(_SC_OPEN_MAX) files=(ssize_t) sysconf(_SC_OPEN_MAX); #endif #if defined(MAGICKCORE_HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE) if (files < 0) { struct rlimit resources; if (getrlimit(RLIMIT_NOFILE,&resources) != -1) files=(ssize_t) resources.rlim_cur; } #endif #if defined(MAGICKCORE_HAVE_GETDTABLESIZE) && defined(MAGICKCORE_POSIX_SUPPORT) if (files < 0) files=(ssize_t) getdtablesize(); #endif if (files < 0) files=64; (void) SetMagickResourceLimit(FileResource,MagickMax((size_t) (3*files/4),64)); limit=GetEnvironmentValue("MAGICK_FILE_LIMIT"); if (limit == (char *) NULL) limit=GetPolicyValue("file"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(FileResource,StringToSizeType(limit, 100.0)); limit=DestroyString(limit); } (void) SetMagickResourceLimit(ThreadResource,GetOpenMPMaximumThreads()); limit=GetEnvironmentValue("MAGICK_THREAD_LIMIT"); if (limit == (char *) NULL) limit=GetPolicyValue("thread"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(ThreadResource,StringToSizeType(limit, 100.0)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_TIME_LIMIT"); if (limit == (char *) NULL) limit=GetPolicyValue("time"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(TimeResource,StringToSizeType(limit,100.0)); limit=DestroyString(limit); } return(MagickTrue); }
static MagickBooleanType GetPathTemplate(char *path) { char *directory; ExceptionInfo *exception; MagickBooleanType status; register char *p; struct stat attributes; (void) CopyMagickString(path,"magick-XXXXXXXX",MaxTextExtent); exception=AcquireExceptionInfo(); directory=(char *) GetImageRegistry(StringRegistryType,"temporary-path", exception); exception=DestroyExceptionInfo(exception); if (directory == (char *) NULL) directory=GetEnvironmentValue("MAGICK_TEMPORARY_PATH"); if (directory == (char *) NULL) directory=GetEnvironmentValue("MAGICK_TMPDIR"); if (directory == (char *) NULL) directory=GetPolicyValue("temporary-path"); if (directory == (char *) NULL) directory=GetEnvironmentValue("TMPDIR"); #if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__OS2__) if (directory == (char *) NULL) directory=GetEnvironmentValue("TMP"); if (directory == (char *) NULL) directory=GetEnvironmentValue("TEMP"); #endif #if defined(__VMS) if (directory == (char *) NULL) directory=GetEnvironmentValue("MTMPDIR"); #endif #if defined(P_tmpdir) if (directory == (char *) NULL) directory=ConstantString(P_tmpdir); #endif if (directory == (char *) NULL) return(MagickTrue); if (strlen(directory) > (MaxTextExtent-15)) { directory=DestroyString(directory); return(MagickTrue); } status=GetPathAttributes(directory,&attributes); if ((status == MagickFalse) || !S_ISDIR(attributes.st_mode)) { directory=DestroyString(directory); return(MagickTrue); } if (directory[strlen(directory)-1] == *DirectorySeparator) (void) FormatLocaleString(path,MaxTextExtent,"%smagick-XXXXXXXX",directory); else (void) FormatLocaleString(path,MaxTextExtent,"%s%smagick-XXXXXXXX", directory,DirectorySeparator); directory=DestroyString(directory); if (*DirectorySeparator != '/') for (p=path; *p != '\0'; p++) if (*p == *DirectorySeparator) *p='/'; return(MagickTrue); }
/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % % G e t C o n f i g u r e P a t h s % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % GetConfigurePaths() returns any Magick configuration paths associated % with the specified filename. % % The format of the GetConfigurePaths method is: % % LinkedListInfo *GetConfigurePaths(const char *filename, % ExceptionInfo *exception) % % A description of each parameter follows: % % o filename: the configure file name. % % o exception: return any errors or warnings in this structure. % */ MagickExport LinkedListInfo *GetConfigurePaths(const char *filename, ExceptionInfo *exception) { #define RegistryKey "ConfigurePath" #define MagickCoreDLL "CORE_RL_magick_.dll" #define MagickCoreDebugDLL "CORE_DB_magick_.dll" char path[MaxTextExtent]; LinkedListInfo *paths; assert(filename != (const char *) NULL); (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename); assert(exception != (ExceptionInfo *) NULL); (void) CopyMagickString(path,filename,MaxTextExtent); paths=NewLinkedList(0); { char *configure_path; /* Search $MAGICK_CONFIGURE_PATH. */ configure_path=GetEnvironmentValue("MAGICK_CONFIGURE_PATH"); if (configure_path != (char *) NULL) { register char *p, *q; for (p=configure_path-1; p != (char *) NULL; ) { (void) CopyMagickString(path,p+1,MaxTextExtent); q=strchr(path,DirectoryListSeparator); if (q != (char *) NULL) *q='\0'; q=path+strlen(path)-1; if ((q >= path) && (*q != *DirectorySeparator)) (void) ConcatenateMagickString(path,DirectorySeparator, MaxTextExtent); (void) AppendValueToLinkedList(paths,ConstantString(path)); p=strchr(p+1,DirectoryListSeparator); } configure_path=DestroyString(configure_path); } } #if defined(MAGICKCORE_INSTALLED_SUPPORT) #if defined(MAGICKCORE_SHARE_PATH) (void) AppendValueToLinkedList(paths,ConstantString(MAGICKCORE_SHARE_PATH)); #endif #if defined(MAGICKCORE_SHAREARCH_PATH) (void) AppendValueToLinkedList(paths,ConstantString( MAGICKCORE_SHAREARCH_PATH)); #endif #if defined(MAGICKCORE_CONFIGURE_PATH) (void) AppendValueToLinkedList(paths,ConstantString( MAGICKCORE_CONFIGURE_PATH)); #endif #if defined(MAGICKCORE_DOCUMENTATION_PATH) (void) AppendValueToLinkedList(paths,ConstantString( MAGICKCORE_DOCUMENTATION_PATH)); #endif #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !(defined(MAGICKCORE_CONFIGURE_PATH) || defined(MAGICKCORE_SHARE_PATH)) { unsigned char *key_value; /* Locate file via registry key. */ key_value=NTRegistryKeyLookup(RegistryKey); if (key_value != (unsigned char *) NULL) { (void) FormatLocaleString(path,MaxTextExtent,"%s%s",(char *) key_value, DirectorySeparator); (void) AppendValueToLinkedList(paths,ConstantString(path)); key_value=(unsigned char *) RelinquishMagickMemory(key_value); } } #endif #else { char *home; /* Search under MAGICK_HOME. */ home=GetEnvironmentValue("MAGICK_HOME"); if (home != (char *) NULL) { #if !defined(MAGICKCORE_POSIX_SUPPORT) (void) FormatLocaleString(path,MaxTextExtent,"%s%s",home, DirectorySeparator); (void) AppendValueToLinkedList(paths,ConstantString(path)); #else (void) FormatLocaleString(path,MaxTextExtent,"%s/etc/%s/",home, MAGICKCORE_CONFIGURE_RELATIVE_PATH); (void) AppendValueToLinkedList(paths,ConstantString(path)); (void) FormatLocaleString(path,MaxTextExtent,"%s/share/%s/",home, MAGICKCORE_SHARE_RELATIVE_PATH); (void) AppendValueToLinkedList(paths,ConstantString(path)); #endif home=DestroyString(home); } } if (*GetClientPath() != '\0') { #if !defined(MAGICKCORE_POSIX_SUPPORT) (void) FormatLocaleString(path,MaxTextExtent,"%s%s",GetClientPath(), DirectorySeparator); (void) AppendValueToLinkedList(paths,ConstantString(path)); #else char prefix[MaxTextExtent]; /* Search based on executable directory if directory is known. */ (void) CopyMagickString(prefix,GetClientPath(),MaxTextExtent); ChopPathComponents(prefix,1); (void) FormatLocaleString(path,MaxTextExtent,"%s/etc/%s/",prefix, MAGICKCORE_CONFIGURE_RELATIVE_PATH); (void) AppendValueToLinkedList(paths,ConstantString(path)); (void) FormatLocaleString(path,MaxTextExtent,"%s/share/%s/",prefix, MAGICKCORE_SHARE_RELATIVE_PATH); (void) AppendValueToLinkedList(paths,ConstantString(path)); #endif } /* Search current directory. */ (void) AppendValueToLinkedList(paths,ConstantString("")); #endif { char *home; home=GetEnvironmentValue("HOME"); if (home == (char *) NULL) home=GetEnvironmentValue("USERPROFILE"); if (home != (char *) NULL) { /* Search $HOME/.magick. */ (void) FormatLocaleString(path,MaxTextExtent,"%s%s.magick%s",home, DirectorySeparator,DirectorySeparator); (void) AppendValueToLinkedList(paths,ConstantString(path)); home=DestroyString(home); } } #if defined(MAGICKCORE_WINDOWS_SUPPORT) { char module_path[MaxTextExtent]; if ((NTGetModulePath(MagickCoreDLL,module_path) != MagickFalse) || (NTGetModulePath(MagickCoreDebugDLL,module_path) != MagickFalse)) { unsigned char *key_value; /* Search module path. */ (void) FormatLocaleString(path,MaxTextExtent,"%s%s",module_path, DirectorySeparator); key_value=NTRegistryKeyLookup(RegistryKey); if (key_value == (unsigned char *) NULL) (void) AppendValueToLinkedList(paths,ConstantString(path)); else key_value=(unsigned char *) RelinquishMagickMemory(key_value); } if (NTGetModulePath("Magick.dll",module_path) != MagickFalse) { /* Search PerlMagick module path. */ (void) FormatLocaleString(path,MaxTextExtent,"%s%s",module_path, DirectorySeparator); (void) AppendValueToLinkedList(paths,ConstantString(path)); (void) FormatLocaleString(path,MaxTextExtent,"%s%s",module_path, "\\inc\\lib\\auto\\Image\\Magick\\"); (void) AppendValueToLinkedList(paths,ConstantString(path)); } } #endif return(paths); }
static SplayTreeInfo *AcquireTypeCache(const char *filename, ExceptionInfo *exception) { MagickStatusType status; SplayTreeInfo *type_cache; type_cache=NewSplayTree(CompareSplayTreeString,(void *(*)(void *)) NULL, DestroyTypeNode); if (type_cache == (SplayTreeInfo *) NULL) ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); status=MagickTrue; #if !defined(MAGICKCORE_ZERO_CONFIGURATION_SUPPORT) { char *font_path, path[MaxTextExtent]; const StringInfo *option; LinkedListInfo *options; *path='\0'; options=GetConfigureOptions(filename,exception); option=(const StringInfo *) GetNextValueInLinkedList(options); while (option != (const StringInfo *) NULL) { (void) CopyMagickString(path,GetStringInfoPath(option),MaxTextExtent); status&=LoadTypeCache(type_cache,(const char *) GetStringInfoDatum(option),GetStringInfoPath(option),0,exception); option=(const StringInfo *) GetNextValueInLinkedList(options); } options=DestroyConfigureOptions(options); font_path=GetEnvironmentValue("MAGICK_FONT_PATH"); if (font_path != (char *) NULL) { char *option; /* Search MAGICK_FONT_PATH. */ (void) FormatLocaleString(path,MaxTextExtent,"%s%s%s",font_path, DirectorySeparator,filename); option=FileToString(path,~0UL,exception); if (option != (void *) NULL) { status&=LoadTypeCache(type_cache,option,path,0,exception); option=DestroyString(option); } font_path=DestroyString(font_path); } } #endif if (GetNumberOfNodesInSplayTree(type_cache) == 0) status&=LoadTypeCache(type_cache,TypeMap,"built-in",0,exception); return(type_cache); }
MagickExport MagickBooleanType GetPathTemplate(char *path) { char *directory, *value; ExceptionInfo *exception; MagickBooleanType status; struct stat attributes; (void) FormatLocaleString(path,MagickPathExtent,"magick-%.20gXXXXXXXXXXXX", (double) getpid()); exception=AcquireExceptionInfo(); directory=(char *) GetImageRegistry(StringRegistryType,"temporary-path", exception); exception=DestroyExceptionInfo(exception); if (directory == (char *) NULL) directory=GetEnvironmentValue("MAGICK_TEMPORARY_PATH"); if (directory == (char *) NULL) directory=GetEnvironmentValue("MAGICK_TMPDIR"); if (directory == (char *) NULL) directory=GetEnvironmentValue("TMPDIR"); #if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__OS2__) || defined(__CYGWIN__) if (directory == (char *) NULL) directory=GetEnvironmentValue("TMP"); if (directory == (char *) NULL) directory=GetEnvironmentValue("TEMP"); #endif #if defined(__VMS) if (directory == (char *) NULL) directory=GetEnvironmentValue("MTMPDIR"); #endif #if defined(P_tmpdir) if (directory == (char *) NULL) directory=ConstantString(P_tmpdir); #endif if (directory == (char *) NULL) return(MagickTrue); value=GetPolicyValue("temporary-path"); if (value != (char *) NULL) (void) CloneString(&directory,value); if (strlen(directory) > (MagickPathExtent-25)) { directory=DestroyString(directory); return(MagickFalse); } status=GetPathAttributes(directory,&attributes); if ((status == MagickFalse) || !S_ISDIR(attributes.st_mode)) { directory=DestroyString(directory); return(MagickFalse); } if (directory[strlen(directory)-1] == *DirectorySeparator) (void) FormatLocaleString(path,MagickPathExtent, "%smagick-%.20gXXXXXXXXXXXX",directory,(double) getpid()); else (void) FormatLocaleString(path,MagickPathExtent, "%s%smagick-%.20gXXXXXXXXXXXX",directory,DirectorySeparator,(double) getpid()); directory=DestroyString(directory); #if defined(MAGICKCORE_WINDOWS_SUPPORT) { register char *p; /* Ghostscript does not like backslashes so we need to replace them. The forward slash also works under Windows. */ for (p=(path[1] == *DirectorySeparator ? path+2 : path); *p != '\0'; p++) if (*p == *DirectorySeparator) *p='/'; } #endif return(MagickTrue); }
int main(int argc, char *argv[]) { char address[MAX_MACHINE_NAME + 1]; IPAddress addresses[MAX_ADDRESSES]; unsigned int addressesCount; char addressList[255 + 1]; const char *c; char errorFile[127 + 1]; char logFile[127 + 1]; struct host_desc memoryDesc; double nextBeatTime; struct host_desc nsDesc; double now; int opt; extern char *optarg; char password[127 + 1]; const char *USAGE = "nws_memory [-D] [-a name] [-d dir] [-el file] [-N host] [-p port] [-s size]"; /* Set up default values that will be overwritten by command line args. */ addressList[0] = '\0'; errorFile[0] = '\0'; fileSize = atoi(GetEnvironmentValue("MEMORY_SIZE", "~", ".nwsrc", DEFAULT_MEMORY_SIZE)); journalFileSize = atoi(GetEnvironmentValue("JOURNAL_SIZE", "~", ".nwsrc", DEFAULT_JOURNAL_SIZE)); logFile[0] = '\0'; HostDValue(MyMachineName(), DefaultHostPort(MEMORY_HOST), &memoryDesc); SAFESTRCPY(memoryDir, GetEnvironmentValue("MEMORY_DIR", "~", ".nwsrc", DEFAULT_MEMORY_DIR));; SAFESTRCPY(nsDesc.host_name, GetEnvironmentValue("NAME_SERVER", "~", ".nwsrc", "noname")); HostDValue(nsDesc.host_name, DefaultHostPort(NAME_SERVER_HOST), &nsDesc); password[0] = '\0'; memLogLocation.loc_type = MEMORY_LOG_LOCAL; debug = 0; while((int)(opt = getopt(argc, argv, SWITCHES)) != EOF) { switch(opt) { case 'a': SAFESTRCPY(addressList, optarg); break; case 'D': debug = 1; break; case 'd': SAFESTRCPY(memoryDir, optarg); break; case 'e': SAFESTRCPY(errorFile, optarg); break; case 'l': SAFESTRCPY(logFile, optarg); break; case 'N': HostDValue(optarg, DefaultHostPort(NAME_SERVER_HOST), &nsDesc); break; case 'p': memoryDesc.port = atoi(optarg); break; case 'P': fprintf(stdout, "Password? "); fscanf(stdin, "%s", password); break; case 's': fileSize = atoi(optarg); break; case 'j': journalFileSize = atoi(optarg); break; #if defined(ENABLE_CACHE) case 'C': RC_entries = atoi(optarg); break; #endif default: fprintf(stderr, "nws_memory: unrecognized switch\n%s\n", USAGE); exit(1); break; } } #if defined(ENABLE_CACHE) /* * WARNING: these two had better be the same or the cache and backing * store could be inconsistent */ RCMemorySize = fileSize; /* * make sure entries value is sane */ if(RC_entries <= 0) RC_entries = 0; #endif if (debug) { DirectDiagnostics(DIAGINFO, stdout); DirectDiagnostics(DIAGLOG, stdout); DirectDiagnostics(DIAGWARN, stderr); DirectDiagnostics(DIAGERROR, stderr); DirectDiagnostics(DIAGFATAL, stderr); } for(addressesCount = 0, c = addressList; GETTOK(address, c, ",", &c); addressesCount++) { if(!IPAddressValue(address, &addresses[addressesCount])) { ABORT1("Unable to convert '%s' into an IP address\n", address); } } addressesCount += IPAddressValues(memoryDesc.host_name, &addresses[addressesCount], MAX_ADDRESSES - addressesCount); if(memoryDir[strlen(memoryDir) - 1] != '/') { strcat(memoryDir, "/"); } if(!MakeDirectory(memoryDir, 0775, 1)) { ABORT1("Unable to establish %s as state directory\n", memoryDir); } SAFESTRCPY(memLogLocation.path,memoryDir); if(!EstablishHost(NameOfHost(&memoryDesc), MEMORY_HOST, addresses, addressesCount, memoryDesc.port, errorFile, logFile, password, &nsDesc, NULL)) { exit(1); } vstrncpy(journalPath, sizeof(journalPath), 4, memoryDir, EstablishedRegistration(), ".", JOURNAL); fclose(stdin); signal(SIGPIPE, SocketFailure); RegisterListener(STORE_STATE, "STORE_STATE", &ProcessRequest); RegisterListener(FETCH_STATE, "FETCH_STATE", &ProcessRequest); RegisterListener(AUTOFETCH_BEGIN, "AUTOFETCH_BEGIN", &ProcessRequest); RegisterListener(MEMORY_CLEAN, "MEMORY_CLEAN", &ProcessRequest); #ifdef WITH_NETLOGGER RegisterListener(MEMORY_LOGDEST, "MEMORY_LOGDEST", &ProcessRequest); #endif NotifyOnDisconnection(&EndAutoFetch); nextBeatTime = CurrentTime(); /* main service loop */ while(1) { now = CurrentTime(); if(now >= nextBeatTime) { RegisterHost(DEFAULT_HOST_BEAT * 2); nextBeatTime = now + (HostHealthy() ? DEFAULT_HOST_BEAT : SHORT_HOST_BEAT); } ListenForMessages(nextBeatTime - now); } /* return(0); Never reached */ }
MagickExport void InitializeMagickResources(void) { char *limit; long files, pages, pagesize; MagickSizeType memory; /* Set Magick resource limits. */ pagesize=(-1); #if defined(MAGICKCORE_HAVE_SYSCONF) && defined(_SC_PAGESIZE) pagesize=sysconf(_SC_PAGESIZE); #elif defined(MAGICKCORE_HAVE_GETPAGESIZE) && defined(MAGICKCORE_POSIX_SUPPORT) pagesize=getpagesize(); #endif pages=(-1); #if defined(MAGICKCORE_HAVE_SYSCONF) && defined(_SC_PHYS_PAGES) pages=sysconf(_SC_PHYS_PAGES); #endif memory=(MagickSizeType) pages*pagesize; if ((pagesize <= 0) || (pages <= 0)) memory=2048UL*1024UL*1024UL; #if defined(PixelCacheThreshold) memory=PixelCacheThreshold; #endif (void) SetMagickResourceLimit(AreaResource,2UL*memory); (void) SetMagickResourceLimit(MemoryResource,3UL*memory/2UL); (void) SetMagickResourceLimit(MapResource,4UL*memory); limit=GetEnvironmentValue("MAGICK_AREA_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(AreaResource,(MagickSizeType) StringToDouble(limit,100.0)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_MEMORY_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(MemoryResource,(MagickSizeType) StringToDouble(limit,100.0)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_MAP_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(MapResource,(MagickSizeType) StringToDouble(limit,100.0)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_DISK_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(DiskResource,(MagickSizeType) StringToDouble(limit,100.0)); limit=DestroyString(limit); } files=(-1); #if defined(MAGICKCORE_HAVE_SYSCONF) && defined(_SC_OPEN_MAX) files=sysconf(_SC_OPEN_MAX); #elif defined(MAGICKCORE_HAVE_GETDTABLESIZE) && defined(MAGICKCORE_POSIX_SUPPORT) files=getdtablesize(); #endif (void) SetMagickResourceLimit(FileResource,MagickMax(3UL*files/4UL,64UL)); limit=GetEnvironmentValue("MAGICK_FILE_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(FileResource,(MagickSizeType) StringToDouble(limit,100.0)); limit=DestroyString(limit); } }
static MagickBooleanType GetPathTemplate(char *path) { char *directory; const char *temporary_path; ExceptionInfo *exception; int status; register char *p; struct stat file_info; (void) CopyMagickString(path,"magick-XXXXXXXX",MaxTextExtent); directory=(char *) NULL; exception=AcquireExceptionInfo(); temporary_path=(const char *) GetImageRegistry(StringRegistryType, "temporary-path",exception); exception=DestroyExceptionInfo(exception); if (temporary_path != (char *) NULL) directory=ConstantString(temporary_path); if (directory == (char *) NULL) directory=GetEnvironmentValue("MAGICK_TMPDIR"); if (directory == (char *) NULL) directory=GetEnvironmentValue("TMPDIR"); #if defined(__WINDOWS__) if (directory == (char *) NULL) directory=GetEnvironmentValue("TMP"); if (directory == (char *) NULL) directory=GetEnvironmentValue("TEMP"); #endif #if defined(__VMS) if (directory == (char *) NULL) directory=GetEnvironmentValue("MTMPDIR"); #endif #if defined(P_tmpdir) if (directory == (char *) NULL) directory=ConstantString(P_tmpdir); #endif if (directory == (char *) NULL) return(MagickTrue); if (strlen(directory) > (MaxTextExtent-15)) { directory=DestroyString(directory); return(MagickTrue); } status=stat(directory,&file_info); if ((status != 0) || !S_ISDIR(file_info.st_mode)) { directory=DestroyString(directory); return(MagickTrue); } if (directory[strlen(directory)-1] == *DirectorySeparator) (void) FormatMagickString(path,MaxTextExtent,"%smagick-XXXXXXXX",directory); else (void) FormatMagickString(path,MaxTextExtent,"%s%smagick-XXXXXXXX", directory,DirectorySeparator); directory=DestroyString(directory); if (*DirectorySeparator != '/') for (p=path; *p != '\0'; p++) if (*p == *DirectorySeparator) *p='/'; return(MagickTrue); }
MagickExport void InitializeMagickResources(void) { char *limit; long files, pages, pagesize; unsigned long memory; /* Set Magick resource limits. */ pagesize=(-1); #if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE) pagesize=sysconf(_SC_PAGESIZE); #elif defined(HAVE_GETPAGESIZE) && defined(POSIX) pagesize=getpagesize(); #endif pages=(-1); #if defined(HAVE_SYSCONF) && defined(_SC_PHYS_PAGES) pages=sysconf(_SC_PHYS_PAGES); #endif memory=(unsigned long) ((pages+512)/1024)*((pagesize+512)/1024); if ((pagesize <= 0) || (pages <= 0)) memory=2048UL; #if defined(PixelCacheThreshold) memory=PixelCacheThreshold; #endif (void) SetMagickResourceLimit(AreaResource,2*memory); (void) SetMagickResourceLimit(MemoryResource,3*memory/2); (void) SetMagickResourceLimit(MapResource,4*memory); limit=GetEnvironmentValue("MAGICK_AREA_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(AreaResource,(unsigned long) atol(limit)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_MEMORY_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(MemoryResource,(unsigned long) atol(limit)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_MAP_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(MapResource,(unsigned long) atol(limit)); limit=DestroyString(limit); } limit=GetEnvironmentValue("MAGICK_DISK_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(DiskResource,(unsigned long) atol(limit)); limit=DestroyString(limit); } files=(-1); #if defined(HAVE_SYSCONF) && defined(_SC_OPEN_MAX) files=sysconf(_SC_OPEN_MAX); #elif defined(HAVE_GETDTABLESIZE) && defined(POSIX) files=getdtablesize(); #endif (void) SetMagickResourceLimit(FileResource,(unsigned long) MagickMax(3L*files/4L,64L)); limit=GetEnvironmentValue("MAGICK_FILE_LIMIT"); if (limit != (char *) NULL) { (void) SetMagickResourceLimit(FileResource,(unsigned long) atol(limit)); limit=DestroyString(limit); } }
/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % % G e t C o n f i g u r e P a t h s % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % GetConfigurePaths() returns any Wizard configuration paths associated % with the specified filename. % % The format of the GetConfigurePaths method is: % % LinkedListInfo *GetConfigurePaths(const char *filename, % ExceptionInfo *exception) % % A description of each parameter follows: % % o filename: The configure file name. % % o exception: Return any errors or warnings in this structure. % */ WizardExport LinkedListInfo *GetConfigurePaths(const char *filename, ExceptionInfo *exception) { #define RegistryKey "ConfigurePath" #define WizardsToolkitDLL "Wizard's Toolkit.dll" char path[WizardPathExtent]; LinkedListInfo *paths; assert(filename != (const char *) NULL); (void) LogWizardEvent(TraceEvent,GetWizardModule(),"%s",filename); assert(exception != (ExceptionInfo *) NULL); (void) CopyWizardString(path,filename,WizardPathExtent); paths=NewLinkedList(0); { char *configure_path; register char *q; register const char *p; /* Search WIZARD_CONFIGURE_PATH. */ configure_path=GetEnvironmentValue("WIZARD_CONFIGURE_PATH"); if (configure_path != (char *) NULL) { for (p=configure_path-1; p != (char *) NULL; ) { (void) CopyWizardString(path,p+1,WizardPathExtent); q=strchr(path,DirectoryListSeparator); if (q != (char *) NULL) *q='\0'; q=path+strlen(path)-1; if ((q >= path) && (*q != *DirectorySeparator)) (void) ConcatenateWizardString(path,DirectorySeparator, WizardPathExtent); (void) AppendValueToLinkedList(paths,AcquireString(path)); p=strchr(p+1,DirectoryListSeparator); } configure_path=(char *) RelinquishWizardMemory(configure_path); } } #if defined(WIZARDSTOOLKIT_INSTALLED_SUPPORT) #if defined(WIZARDSTOOLKIT_CONFIGURE_PATH) (void) AppendValueToLinkedList(paths,AcquireString( WIZARDSTOOLKIT_CONFIGURE_PATH)); #endif #if defined(WIZARDSTOOLKIT_SHARE_PATH) (void) AppendValueToLinkedList(paths,AcquireString( WIZARDSTOOLKIT_SHARE_PATH)); #endif #if defined(WIZARDSTOOLKIT_SHAREARCH_PATH) (void) AppendValueToLinkedList(paths,ConstantString( WIZARDSTOOLKIT_SHAREARCH_PATH)); #endif #if defined(WIZARDSTOOLKIT_DOCUMENTATION_PATH) (void) AppendValueToLinkedList(paths,AcquireString( WIZARDSTOOLKIT_DOCUMENTATION_PATH)); #endif #if defined(WIZARDSTOOLKIT_SHARE_PATH) (void) AppendValueToLinkedList(paths,AcquireString( WIZARDSTOOLKIT_SHARE_PATH)); #endif #if defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT) && !(defined(WIZARDSTOOLKIT_CONFIGURE_PATH) || defined(WIZARDSTOOLKIT_SHARE_PATH)) { unsigned char *key_value; /* Locate file via registry key. */ key_value=NTRegistryKeyLookup(RegistryKey); if (key_value != (unsigned char *) NULL) { (void) FormatLocaleString(path,WizardPathExtent,"%s%s",(char *) key_value, DirectorySeparator); (void) AppendValueToLinkedList(paths,ConstantString(path)); key_value=(unsigned char *) RelinquishWizardMemory(key_value); } } #endif #else { char *home; /* Search under WIZARD_HOME. */ home=GetEnvironmentValue("WIZARD_HOME"); if (home != (char *) NULL) { #if !defined(WIZARDSTOOLKIT_POSIX_SUPPORT) (void) FormatLocaleString(path,WizardPathExtent, "%s%s.config%sWizardsToolkit%s",home,DirectorySeparator, DirectorySeparator,DirectorySeparator); (void) AppendValueToLinkedList(paths,AcquireString(path)); #else (void) FormatLocaleString(path,WizardPathExtent,"%s/etc/%s/",home, WIZARDSTOOLKIT_CONFIGURE_RELATIVE_PATH); (void) AppendValueToLinkedList(paths,AcquireString(path)); (void) FormatLocaleString(path,WizardPathExtent,"%s/share/%s/",home, WIZARDSTOOLKIT_SHARE_RELATIVE_PATH); (void) AppendValueToLinkedList(paths,AcquireString(path)); (void) FormatLocaleString(path,WizardPathExtent,"%s", WIZARDSTOOLKIT_SHAREARCH_PATH); (void) AppendValueToLinkedList(paths,AcquireString(path)); #endif home=(char *) RelinquishWizardMemory(home); } } if (*GetClientPath() != '\0') { #if !defined(WIZARDSTOOLKIT_POSIX_SUPPORT) (void) FormatLocaleString(path,WizardPathExtent,"%s%s",GetClientPath(), DirectorySeparator); (void) AppendValueToLinkedList(paths,AcquireString(path)); #else char prefix[WizardPathExtent]; /* Search based on executable directory if directory is known. */ (void) CopyWizardString(prefix,GetClientPath(),WizardPathExtent); ChopPathComponents(prefix,1); (void) FormatLocaleString(path,WizardPathExtent,"%s/etc/%s/",prefix, WIZARDSTOOLKIT_CONFIGURE_RELATIVE_PATH); (void) AppendValueToLinkedList(paths,AcquireString(path)); (void) FormatLocaleString(path,WizardPathExtent,"%s/share/%s/",prefix, WIZARDSTOOLKIT_SHARE_RELATIVE_PATH); (void) AppendValueToLinkedList(paths,AcquireString(path)); (void) FormatLocaleString(path,WizardPathExtent,"%s", WIZARDSTOOLKIT_SHAREARCH_PATH); (void) AppendValueToLinkedList(paths,AcquireString(path)); #endif } /* Search current directory. */ (void) AppendValueToLinkedList(paths,AcquireString("")); #endif { char *home; home=GetEnvironmentValue("XDG_CONFIG_HOME"); if (home == (char *) NULL) home=GetEnvironmentValue("LOCALAPPDATA"); if (home == (char *) NULL) home=GetEnvironmentValue("APPDATA"); if (home == (char *) NULL) home=GetEnvironmentValue("USERPROFILE"); if (home != (char *) NULL) { /* Search $XDG_CONFIG_HOME/ImageMagick. */ (void) FormatLocaleString(path,WizardPathExtent, "%s%sWizardsToolkit%s%s",home,DirectorySeparator,DirectorySeparator, filename); (void) AppendValueToLinkedList(paths,ConstantString(path)); home=DestroyString(home); } home=GetEnvironmentValue("HOME"); if (home != (char *) NULL) { /* Search $HOME/.config/WizardsToolkit. */ (void) FormatLocaleString(path,WizardPathExtent, "%s%s.config%sWizardsToolkit%s",home,DirectorySeparator, DirectorySeparator,DirectorySeparator); (void) AppendValueToLinkedList(paths,AcquireString(path)); home=(char *) RelinquishWizardMemory(home); } } #if defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT) { char module_path[WizardPathExtent]; if (NTGetModulePath(WizardsToolkitDLL,module_path) != WizardFalse) { unsigned char *key_value; /* Search module path. */ (void) FormatLocaleString(path,WizardPathExtent,"%s%s",module_path, DirectorySeparator); key_value=NTRegistryKeyLookup(RegistryKey); if (key_value == (unsigned char *) NULL) (void) AppendValueToLinkedList(paths,ConstantString(path)); else key_value=(unsigned char *) RelinquishWizardMemory(key_value); } } #endif return(paths); }