13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SSSSS TTTTT RRRR IIIII N N GGGG % 7670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SS T R R I NN N G % 8670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SSS T RRRR I N N N G GGG % 9670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SS T R R I N NN G G % 10670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SSSSS T R R IIIII N N GGGG % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% MagickCore String Methods % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% Software Design % 16de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy% Cristy % 17670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% August 2003 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 207ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% You may not use this file except in compliance with the license. You may % 2499bbf2c9e414ade263949978671025728413c1c9cristy% obtain a copy of the license at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2899bbf2c9e414ade263949978671025728413c1c9cristy% unless required by applicable law or agreed to in writing, software % 2999bbf2c9e414ade263949978671025728413c1c9cristy% distributed under the license is distributed on an "as is" basis, % 3099bbf2c9e414ade263949978671025728413c1c9cristy% without warranties or conditions of any kind, either express or implied. % 31670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% See the license for the specific language governing permissions and % 3299bbf2c9e414ade263949978671025728413c1c9cristy% limitations under the license. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4099bbf2c9e414ade263949978671025728413c1c9cristy include declarations. 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 47007e925e29fea767305ade6e1d635e5e517a13b3dirk#include "MagickCore/image-private.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/locale_.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/log.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 52d2d11ec3ae6f94d5b49cbaf90e7f9ca18c252d29cristy#include "MagickCore/nt-base-private.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/property.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/signature-private.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 57b1d483a6a6a5678173db9d60bec52dd5a37826beanthony#include "MagickCore/string-private.h" 5818c6c27bc513a8c73a5bc4a2c157afb19c3e24b9cristy#include "MagickCore/utility-private.h" 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6199bbf2c9e414ade263949978671025728413c1c9cristy static declarations. 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 639125cd55db81cd4269ea998e0aa724b93e89ccf4Cristy#ifdef __VMS 649125cd55db81cd4269ea998e0aa724b93e89ccf4Cristy#define asciimap AsciiMap 659125cd55db81cd4269ea998e0aa724b93e89ccf4Cristy#endif 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if !defined(MAGICKCORE_HAVE_STRCASECMP) || !defined(MAGICKCORE_HAVE_STRNCASECMP) 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic const unsigned char 688e7a461ec2538f7cb4adfeef811cb5dd07e8da83cristy AsciiMap[] = 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xc0, 0xe1, 0xe2, 0xe3, 0xe4, 0xc5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf8, 0xf9, 0xfa, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xfc, 0xfd, 0xfe, 0xff, 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A c q u i r e S t r i n g % 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 106104f8932a48379d3355160642b3de6f0611a7d19anthony% AcquireString() returns an new extented string, containing a clone of the 107104f8932a48379d3355160642b3de6f0611a7d19anthony% given string. 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 109151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy% An extended string is the string length, plus an extra MagickPathExtent space 1105364f9cfe8b3e8765f5a05663ae075abe6236c93cristy% to allow for the string to be actively worked on. 111104f8932a48379d3355160642b3de6f0611a7d19anthony% 112104f8932a48379d3355160642b3de6f0611a7d19anthony% The returned string shoud be freed using DestoryString(). 113b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the AcquireString method is: 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *AcquireString(const char *source) 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *AcquireString(const char *source) 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=0; 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=strlen(source); 134151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length < MagickPathExtent) 13554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 136151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy destination=(char *) AcquireQuantumMemory(length+MagickPathExtent, 13754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy sizeof(*destination)); 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 14254aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(destination,source,length*sizeof(*destination)); 14354aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination[length]='\0'; 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A c q u i r e S t r i n g I n f o % 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% AcquireStringInfo() allocates the StringInfo structure. 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the AcquireStringInfo method is: 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *AcquireStringInfo(const size_t length) 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the string length. 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *AcquireStringInfo(const size_t length) 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17473bd4a51b419e914565bdf204bf1540dc4c8ee26cristy string_info=(StringInfo *) AcquireMagickMemory(sizeof(*string_info)); 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info == (StringInfo *) NULL) 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info,0,sizeof(*string_info)); 178e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy string_info->signature=MagickCoreSignature; 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length=length; 1808a68c249442d46dd785dba54a03fb9242574ed63cristy string_info->datum=(unsigned char *) NULL; 181151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~string_info->length >= (MagickPathExtent-1)) 1828a68c249442d46dd785dba54a03fb9242574ed63cristy string_info->datum=(unsigned char *) AcquireQuantumMemory( 183151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy string_info->length+MagickPathExtent,sizeof(*string_info->datum)); 1848a68c249442d46dd785dba54a03fb9242574ed63cristy if (string_info->datum == (unsigned char *) NULL) 1858a68c249442d46dd785dba54a03fb9242574ed63cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1948723e4bcd840478cecfd29891e792edb499cd0e9cristy% B l o b T o S t r i n g I n f o % 1958723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1968723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1978723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1988723e4bcd840478cecfd29891e792edb499cd0e9cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1998723e4bcd840478cecfd29891e792edb499cd0e9cristy% 200104f8932a48379d3355160642b3de6f0611a7d19anthony% BlobToStringInfo() returns the contents of a blob as a StringInfo structure 201151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy% with MagickPathExtent extra space. 2028723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2038723e4bcd840478cecfd29891e792edb499cd0e9cristy% The format of the BlobToStringInfo method is: 2048723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2058723e4bcd840478cecfd29891e792edb499cd0e9cristy% StringInfo *BlobToStringInfo(const void *blob,const size_t length) 2068723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2078723e4bcd840478cecfd29891e792edb499cd0e9cristy% A description of each parameter follows: 2088723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2098723e4bcd840478cecfd29891e792edb499cd0e9cristy% o blob: the blob. 2108723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2118723e4bcd840478cecfd29891e792edb499cd0e9cristy% o length: the length of the blob. 2128723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2138723e4bcd840478cecfd29891e792edb499cd0e9cristy*/ 2148723e4bcd840478cecfd29891e792edb499cd0e9cristyMagickExport StringInfo *BlobToStringInfo(const void *blob,const size_t length) 2158723e4bcd840478cecfd29891e792edb499cd0e9cristy{ 2168723e4bcd840478cecfd29891e792edb499cd0e9cristy StringInfo 2178723e4bcd840478cecfd29891e792edb499cd0e9cristy *string_info; 2188723e4bcd840478cecfd29891e792edb499cd0e9cristy 2198723e4bcd840478cecfd29891e792edb499cd0e9cristy string_info=AcquireStringInfo(0); 220151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length < MagickPathExtent) 2215ce7dacfa253b94e098b33c97b2b3eca8397edcccristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 222f83163456f47ac94ba9b1e83d540f3f08d9e7f1ccristy string_info->length=length; 2235ce7dacfa253b94e098b33c97b2b3eca8397edcccristy if (string_info->datum == (unsigned char *) NULL) 2245ce7dacfa253b94e098b33c97b2b3eca8397edcccristy string_info->datum=(unsigned char *) AcquireQuantumMemory(length+ 225151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent,sizeof(*string_info->datum)); 2265ce7dacfa253b94e098b33c97b2b3eca8397edcccristy else 2275ce7dacfa253b94e098b33c97b2b3eca8397edcccristy string_info->datum=(unsigned char *) ResizeQuantumMemory(string_info->datum, 228151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy length+MagickPathExtent,sizeof(*string_info->datum)); 2298723e4bcd840478cecfd29891e792edb499cd0e9cristy if (string_info->datum == (unsigned char *) NULL) 2308723e4bcd840478cecfd29891e792edb499cd0e9cristy { 2318723e4bcd840478cecfd29891e792edb499cd0e9cristy string_info=DestroyStringInfo(string_info); 2328723e4bcd840478cecfd29891e792edb499cd0e9cristy return((StringInfo *) NULL); 2338723e4bcd840478cecfd29891e792edb499cd0e9cristy } 2348723e4bcd840478cecfd29891e792edb499cd0e9cristy if (blob != (const void *) NULL) 2358723e4bcd840478cecfd29891e792edb499cd0e9cristy (void) memcpy(string_info->datum,blob,length); 2368723e4bcd840478cecfd29891e792edb499cd0e9cristy return(string_info); 2378723e4bcd840478cecfd29891e792edb499cd0e9cristy} 2388723e4bcd840478cecfd29891e792edb499cd0e9cristy 2398723e4bcd840478cecfd29891e792edb499cd0e9cristy/* 2408723e4bcd840478cecfd29891e792edb499cd0e9cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2418723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2428723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2438723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C l o n e S t r i n g % 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 250104f8932a48379d3355160642b3de6f0611a7d19anthony% CloneString() replaces or frees the destination string to make it 251a42df255c73726a530ac51cc6867bb71a8d23370cristy% a clone of the input string plus MagickPathExtent more space so the string 252a42df255c73726a530ac51cc6867bb71a8d23370cristy% may be worked on. 25372feaa664126c198b9ccd072b6ef181338a76c6canthony% 254104f8932a48379d3355160642b3de6f0611a7d19anthony% If source is a NULL pointer the destination string will be freed and set to 255104f8932a48379d3355160642b3de6f0611a7d19anthony% a NULL pointer. A pointer to the stored in the destination is also returned. 25672feaa664126c198b9ccd072b6ef181338a76c6canthony% 257104f8932a48379d3355160642b3de6f0611a7d19anthony% When finished the non-NULL string should be freed using DestoryString() 258104f8932a48379d3355160642b3de6f0611a7d19anthony% or using CloneString() with a NULL pointed for the source. 259067622389550e83c76724917c7e5c55b0887d153anthony% 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CloneString method is: 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *CloneString(char **destination,const char *source) 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: A pointer to a character string. 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *CloneString(char **destination,const char *source) 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char **) NULL); 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source == (const char *) NULL) 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination != (char *) NULL) 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=DestroyString(*destination); 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=AcquireString(source); 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(source); 289151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length < MagickPathExtent) 2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 291a42df255c73726a530ac51cc6867bb71a8d23370cristy *destination=(char *) ResizeQuantumMemory(*destination,length+ 292a42df255c73726a530ac51cc6867bb71a8d23370cristy MagickPathExtent,sizeof(**destination)); 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 29554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy if (length != 0) 296f7e6ab4637e31098c9cfd70546aed44870c27ee5cristy (void) memcpy(*destination,source,length*sizeof(**destination)); 297208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy (*destination)[length]='\0'; 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C l o n e S t r i n g I n f o % 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CloneStringInfo() clones a copy of the StringInfo structure. 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CloneStringInfo method is: 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *CloneStringInfo(const StringInfo *string_info) 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *CloneStringInfo(const StringInfo *string_info) 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *clone_info; 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 329e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy clone_info=AcquireStringInfo(string_info->length); 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length != 0) 33254aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(clone_info->datum,string_info->datum,string_info->length+1); 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(clone_info); 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o m p a r e S t r i n g I n f o % 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CompareStringInfo() compares the two datums target and source. It returns 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% an integer less than, equal to, or greater than zero if target is found, 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% respectively, to be less than, to match, or be greater than source. 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CompareStringInfo method is: 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% int CompareStringInfo(const StringInfo *target,const StringInfo *source) 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o target: the target string. 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport int CompareStringInfo(const StringInfo *target, 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(target != (StringInfo *) NULL); 370e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(target->signature == MagickCoreSignature); 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (StringInfo *) NULL); 372e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(source->signature == MagickCoreSignature); 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=memcmp(target->datum,source->datum,MagickMin(target->length, 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source->length)); 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != 0) 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target->length == source->length) 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(0); 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(target->length < source->length ? -1 : 1); 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e M a g i c k S t r i n g % 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateMagickString() concatenates the source string to the destination 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. The destination buffer is always null-terminated even if the 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string must be truncated. 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateMagickString method is: 3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t ConcatenateMagickString(char *destination,const char *source, 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const size_t length) 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: the destination string. 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the length of the destination string. 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t ConcatenateMagickString(char *destination, 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *source,const size_t length) 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char *) NULL); 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const char *) NULL); 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(length >= 1); 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=source; 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=destination; 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=length; 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((i-- != 0) && (*q != '\0')) 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=(size_t) (q-destination); 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=length-count; 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i == 0) 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count+strlen(p)); 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (*p != '\0') 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i != 1) 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i--; 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count+(p-source)); 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e S t r i n g % 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateString() appends a copy of string source, including the 4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% terminating null character, to the end of string destination. 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateString method is: 4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType ConcatenateString(char **destination, 4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *source) 4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: A pointer to a character string. 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport MagickBooleanType ConcatenateString(char **destination, 4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *source) 4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 48154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination_length, 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length, 4833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_length; 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char **) NULL); 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source == (const char *) NULL) 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=AcquireString(source); 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49354aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination_length=strlen(*destination); 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_length=strlen(source); 49554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy length=destination_length; 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < source_length) 4973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=source_length; 499151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length < MagickPathExtent) 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 501a42df255c73726a530ac51cc6867bb71a8d23370cristy *destination=(char *) ResizeQuantumMemory(*destination,length+ 502a42df255c73726a530ac51cc6867bb71a8d23370cristy MagickPathExtent,sizeof(**destination)); 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 50554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy if (source_length != 0) 50654aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy((*destination)+destination_length,source,source_length); 50754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (*destination)[length]='\0'; 5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e S t r i n g I n f o % 5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateStringInfo() concatenates the source string to the destination 5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateStringInfo method is: 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void ConcatenateStringInfo(StringInfo *string_info, 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const StringInfo *source) 5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void ConcatenateStringInfo(StringInfo *string_info, 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 5393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 544e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const StringInfo *) NULL); 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=string_info->length; 5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < source->length) 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoLength(string_info,length+source->length); 55054aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum+length,source->datum,source->length); 5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n f i g u r e F i l e T o S t r i n g I n f o % 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConfigureFileToStringInfo() returns the contents of a configure file as a 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. 5663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConfigureFileToStringInfo method is: 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *ConfigureFileToStringInfo(const char *filename) 5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 5733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 57799bbf2c9e414ade263949978671025728413c1c9cristyMagickExport StringInfo *ConfigureFileToStringInfo(const char *filename) 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string; 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file; 5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickOffsetType 5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy offset; 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map; 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 59818c6c27bc513a8c73a5bc4a2c157afb19c3e24b9cristy file=open_utf8(filename,O_RDONLY | O_BINARY,0); 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (file == -1) 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6017f31770d102a777269fa2452cc6a1ce304da4e12cristy offset=(MagickOffsetType) lseek(file,0,SEEK_END); 6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((offset < 0) || (offset != (MagickOffsetType) ((ssize_t) offset))) 6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) offset; 6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) NULL; 609151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length >= (MagickPathExtent-1)) 610a42df255c73726a530ac51cc6867bb71a8d23370cristy string=(char *) AcquireQuantumMemory(length+MagickPathExtent, 611a42df255c73726a530ac51cc6867bb71a8d23370cristy sizeof(*string)); 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string == (char *) NULL) 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map=MapBlob(file,ReadMode,0,length); 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map != (void *) NULL) 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62054aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string,map,length); 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) UnmapBlob(map,length); 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ssize_t 6293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6317f31770d102a777269fa2452cc6a1ce304da4e12cristy (void) lseek(file,0,SEEK_SET); 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < length; i+=count) 6333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=read(file,string+i,(size_t) MagickMin(length-i,(size_t) 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SSIZE_MAX)); 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (count <= 0) 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=0; 6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (errno != EINTR) 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i < length) 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=DestroyString(string); 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string[length]='\0'; 6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=AcquireStringInfo(0); 653cecec52e2776178c2aa65a2c500fdc4eb175aa1fdirk string_info->path=ConstantString(filename); 6545ce7dacfa253b94e098b33c97b2b3eca8397edcccristy string_info->length=length; 6557fb9fc1a2796365be394aa5927e7773ca07f10eecristy if (string_info->datum != (unsigned char *) NULL) 6567fb9fc1a2796365be394aa5927e7773ca07f10eecristy string_info->datum=(unsigned char *) RelinquishMagickMemory( 6577fb9fc1a2796365be394aa5927e7773ca07f10eecristy string_info->datum); 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) string; 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n s t a n t S t r i n g % 6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 673104f8932a48379d3355160642b3de6f0611a7d19anthony% ConstantString() allocates exactly the needed memory for a string and 674104f8932a48379d3355160642b3de6f0611a7d19anthony% copies the source string to that memory location. A NULL string pointer 675104f8932a48379d3355160642b3de6f0611a7d19anthony% will allocate an empty string containing just the NUL character. 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 677104f8932a48379d3355160642b3de6f0611a7d19anthony% When finished the string should be freed using DestoryString() 678067622389550e83c76724917c7e5c55b0887d153anthony% 6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConstantString method is: 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *ConstantString(const char *source) 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *ConstantString(const char *source) 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=0; 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=strlen(source); 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) NULL; 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length >= 1UL) 7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) AcquireQuantumMemory(length+1UL,sizeof(*destination)); 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 7053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 70654aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(destination,source,length*sizeof(*destination)); 70754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination[length]='\0'; 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o p y M a g i c k S t r i n g % 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 722067622389550e83c76724917c7e5c55b0887d153anthony% CopyMagickString() copies the source string to the destination string, with 723067622389550e83c76724917c7e5c55b0887d153anthony% out exceeding the given pre-declared length. 724067622389550e83c76724917c7e5c55b0887d153anthony% 725067622389550e83c76724917c7e5c55b0887d153anthony% The destination buffer is always null-terminated even if the string must be 726067622389550e83c76724917c7e5c55b0887d153anthony% truncated. The return value is the minimum of the source string length or 727067622389550e83c76724917c7e5c55b0887d153anthony% the length parameter. 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CopyMagickString method is: 7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t CopyMagickString(const char *destination,char *source, 7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const size_t length) 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: the destination string. 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the length of the destination string. 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t CopyMagickString(char *destination,const char *source, 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t length) 7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy n; 7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75577e3fcc5964bb24d44e3a362a82a80bca4f9d43bcristy if (source == (const char *) NULL) 75677e3fcc5964bb24d44e3a362a82a80bca4f9d43bcristy return(0); 7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=source; 7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=destination; 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (n=length; n > 4; n-=4) 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (n != 0) 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (n--; n != 0; n--) 7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (length != 0) 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g % 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyString() destroys memory associated with a string. 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyString method is: 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *DestroyString(char *string) 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: the string. 8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *DestroyString(char *string) 8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) RelinquishMagickMemory(string)); 8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g I n f o % 8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyStringInfo() destroys memory associated with the StringInfo structure. 8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyStringInfo method is: 8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *DestroyStringInfo(StringInfo *string_info) 8343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *DestroyStringInfo(StringInfo *string_info) 8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 843e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum != (unsigned char *) NULL) 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) RelinquishMagickMemory( 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum); 847cecec52e2776178c2aa65a2c500fdc4eb175aa1fdirk if (string_info->path != (char *) NULL) 8481e7a6d0970f5a12914cb512407d14c9e605f62a7dirk string_info->path=DestroyString(string_info->path); 849e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy string_info->signature=(~MagickCoreSignature); 8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=(StringInfo *) RelinquishMagickMemory(string_info); 8513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g L i s t % 8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyStringList() zeros memory associated with a string list. 8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyStringList method is: 8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **DestroyStringList(char **list) 8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o list: the string list. 8743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **DestroyStringList(char **list) 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 878bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(list != (char **) NULL); 8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; list[i] != (char *) NULL; i++) 8833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list[i]=DestroyString(list[i]); 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list=(char **) RelinquishMagickMemory(list); 8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(list); 8863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% E s c a p e S t r i n g % 8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% EscapeString() allocates memory for a backslash-escaped version of a 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% source text string, copies the escaped version of the text to that 9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% memory location while adding backslash characters, and returns the 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% escaped string. 9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the EscapeString method is: 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *EscapeString(const char *source,const char escape) 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o allocate_string: Method EscapeString returns the escaped string. 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o escape: the quoted string termination character to escape (e.g. '"'). 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *EscapeString(const char *source,const char escape) 9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const char *) NULL); 93234838f589a9c3dff858321d07926c66f7f7fa2f7Cristy length=0; 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=source; *p != '\0'; p++) 93434838f589a9c3dff858321d07926c66f7f7fa2f7Cristy { 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\\') || (*p == escape)) 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < 1) 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString"); 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length++; 9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94134838f589a9c3dff858321d07926c66f7f7fa2f7Cristy length++; 94234838f589a9c3dff858321d07926c66f7f7fa2f7Cristy } 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) NULL; 944151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length >= (MagickPathExtent-1)) 945151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy destination=(char *) AcquireQuantumMemory(length+MagickPathExtent, 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*destination)); 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString"); 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 9504662a13513c15a6545b44bead832ebcbdcf522cacristy q=destination; 9514662a13513c15a6545b44bead832ebcbdcf522cacristy for (p=source; *p != '\0'; p++) 9524662a13513c15a6545b44bead832ebcbdcf522cacristy { 9534662a13513c15a6545b44bead832ebcbdcf522cacristy if ((*p == '\\') || (*p == escape)) 9544662a13513c15a6545b44bead832ebcbdcf522cacristy *q++='\\'; 9554662a13513c15a6545b44bead832ebcbdcf522cacristy *q++=(*p); 9564662a13513c15a6545b44bead832ebcbdcf522cacristy } 9574662a13513c15a6545b44bead832ebcbdcf522cacristy *q='\0'; 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F i l e T o S t r i n g % 9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FileToString() returns the contents of a file as a string. 9733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FileToString method is: 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *FileToString(const char *filename,const size_t extent, 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o extent: Maximum length of the string. 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9883ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *FileToString(const char *filename,const size_t extent, 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo *exception) 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename); 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) FileToBlob(filename,extent,&length,exception)); 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F i l e T o S t r i n g I n f o % 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FileToStringInfo() returns the contents of a file as a string. 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FileToStringInfo method is: 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *FileToStringInfo(const char *filename,const size_t extent, 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o extent: Maximum length of the string. 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 10253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *FileToStringInfo(const char *filename, 10283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t extent,ExceptionInfo *exception) 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 10343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename); 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=AcquireStringInfo(0); 1037cecec52e2776178c2aa65a2c500fdc4eb175aa1fdirk string_info->path=ConstantString(filename); 10387fb9fc1a2796365be394aa5927e7773ca07f10eecristy if (string_info->datum != (unsigned char *) NULL) 10397fb9fc1a2796365be394aa5927e7773ca07f10eecristy string_info->datum=(unsigned char *) RelinquishMagickMemory( 10407fb9fc1a2796365be394aa5927e7773ca07f10eecristy string_info->datum); 1041cecec52e2776178c2aa65a2c500fdc4eb175aa1fdirk string_info->datum=(unsigned char *) FileToBlob(filename,extent, 1042cecec52e2776178c2aa65a2c500fdc4eb175aa1fdirk &string_info->length,exception); 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=DestroyStringInfo(string_info); 10463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 10473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F o r m a t M a g i c k S i z e % 10573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FormatMagickSize() converts a size to a human readable format, for example, 10632ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy% 14k, 234m, 2.7g, or 3.0t. Scaling is done by repetitively dividing by 1064c15ce496469497409afa4e9b67f135726e720ac3cristy% 1000. 10653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FormatMagickSize method is: 10673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 106840937044c58de334456bbfb2b6fed5ab03fd2946cristy% ssize_t FormatMagickSize(const MagickSizeType size,const char *suffix, 1069d4618c0bfed02b00a0b112dfc619da885355e189cristy% const size_t length,char *format) 10703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 10723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o size: convert this size to a human readable format. 10743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1075b9080c9660565c4ab556254f276bfeca3d4edf02cristy% o bi: use power of two rather than power of ten. 1076b9080c9660565c4ab556254f276bfeca3d4edf02cristy% 107740937044c58de334456bbfb2b6fed5ab03fd2946cristy% o suffix: append suffix, typically B or P. 107840937044c58de334456bbfb2b6fed5ab03fd2946cristy% 1079d4618c0bfed02b00a0b112dfc619da885355e189cristy% o length: the maximum length of the string. 1080d4618c0bfed02b00a0b112dfc619da885355e189cristy% 10813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o format: human readable format. 10823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 108499bbf2c9e414ade263949978671025728413c1c9cristyMagickExport ssize_t FormatMagickSize(const MagickSizeType size, 1085d4618c0bfed02b00a0b112dfc619da885355e189cristy const MagickBooleanType bi,const char *suffix,const size_t length, 1086d4618c0bfed02b00a0b112dfc619da885355e189cristy char *format) 10873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1088b9080c9660565c4ab556254f276bfeca3d4edf02cristy const char 1089b9080c9660565c4ab556254f276bfeca3d4edf02cristy **units; 1090b9080c9660565c4ab556254f276bfeca3d4edf02cristy 10913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 1092b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes, 1093d4618c0bfed02b00a0b112dfc619da885355e189cristy extent; 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1095bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10999d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 11009d314ff2c17a77996c05413c2013880387e50f0ecristy count; 11019d314ff2c17a77996c05413c2013880387e50f0ecristy 11023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 1103b9080c9660565c4ab556254f276bfeca3d4edf02cristy *bi_units[] = 1104b9080c9660565c4ab556254f276bfeca3d4edf02cristy { 11052ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy "", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi", (char *) NULL 1106b9080c9660565c4ab556254f276bfeca3d4edf02cristy }, 1107b9080c9660565c4ab556254f276bfeca3d4edf02cristy *traditional_units[] = 11089bf9da36285c017ede08022f833c722ac503aff1cristy { 11092ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy "", "K", "M", "G", "T", "P", "E", "Z", "Y", (char *) NULL 11109bf9da36285c017ede08022f833c722ac503aff1cristy }; 11113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1112b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes=1000.0; 1113b9080c9660565c4ab556254f276bfeca3d4edf02cristy units=traditional_units; 1114b9080c9660565c4ab556254f276bfeca3d4edf02cristy if (bi != MagickFalse) 1115b9080c9660565c4ab556254f276bfeca3d4edf02cristy { 1116b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes=1024.0; 1117b9080c9660565c4ab556254f276bfeca3d4edf02cristy units=bi_units; 1118b9080c9660565c4ab556254f276bfeca3d4edf02cristy } 11193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(_MSC_VER) && (_MSC_VER == 1200) 1120d4618c0bfed02b00a0b112dfc619da885355e189cristy extent=(double) ((MagickOffsetType) size); 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 1122d4618c0bfed02b00a0b112dfc619da885355e189cristy extent=(double) size; 11233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1124d4618c0bfed02b00a0b112dfc619da885355e189cristy for (i=0; (extent >= bytes) && (units[i+1] != (const char *) NULL); i++) 1125d4618c0bfed02b00a0b112dfc619da885355e189cristy extent/=bytes; 1126c3b9b36ae7d6ec7ef880abfcf3fae7dd4bdb51f7cristy count=0; 11279bf9da36285c017ede08022f833c722ac503aff1cristy for (j=2; j < 12; j++) 11283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 112940937044c58de334456bbfb2b6fed5ab03fd2946cristy if (suffix == (const char *) NULL) 1130d4618c0bfed02b00a0b112dfc619da885355e189cristy count=FormatLocaleString(format,length,"%.*g%s",(int) (i+j),extent, 1131d4618c0bfed02b00a0b112dfc619da885355e189cristy units[i]); 113240937044c58de334456bbfb2b6fed5ab03fd2946cristy else 1133d4618c0bfed02b00a0b112dfc619da885355e189cristy count=FormatLocaleString(format,length,"%.*g%s%s",(int) (i+j),extent, 1134d4618c0bfed02b00a0b112dfc619da885355e189cristy units[i],suffix); 11353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (strchr(format,'+') == (char *) NULL) 11363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count); 11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 11423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F o r m a t M a g i c k T i m e % 11473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FormatMagickTime() returns the specified time in the Internet date/time 11533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% format and the length of the timestamp. 11543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FormatMagickTime method is: 11563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1157bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% ssize_t FormatMagickTime(const time_t time,const size_t length, 11583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *timestamp) 11593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 11613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1162d4618c0bfed02b00a0b112dfc619da885355e189cristy% o time: the time since the Epoch (00:00:00 UTC, January 1, 1970), 1163d4618c0bfed02b00a0b112dfc619da885355e189cristy% measured in seconds. 11643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1165d4618c0bfed02b00a0b112dfc619da885355e189cristy% o length: the maximum length of the string. 11663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1167d4618c0bfed02b00a0b112dfc619da885355e189cristy% o timestamp: Return the Internet date/time here. 11683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1170bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristyMagickExport ssize_t FormatMagickTime(const time_t time,const size_t length, 11713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char *timestamp) 11723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1173bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 11743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 11753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy struct tm 11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gm_time, 11783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time; 11793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy time_t 11813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timezone; 11823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(timestamp != (char *) NULL); 11843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&local_time,0,sizeof(local_time)); 11853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&gm_time,0,sizeof(gm_time)); 11863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_LOCALTIME_R) 11873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) localtime_r(&time,&local_time); 11883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 11893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1190bc3392ad730a0886c1fabc9ae546b4de30a98526cristy struct tm 11913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *my_time; 11923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy my_time=localtime(&time); 11943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (my_time != (struct tm *) NULL) 11953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) memcpy(&local_time,my_time,sizeof(local_time)); 11963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 11983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_GMTIME_R) 11993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) gmtime_r(&time,&gm_time); 12003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 12013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1202bc3392ad730a0886c1fabc9ae546b4de30a98526cristy struct tm 12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *my_time; 12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy my_time=gmtime(&time); 12063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (my_time != (struct tm *) NULL) 12073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) memcpy(&gm_time,my_time,sizeof(gm_time)); 12083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 12103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timezone=(time_t) ((local_time.tm_min-gm_time.tm_min)/60+ 12113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time.tm_hour-gm_time.tm_hour+24*((local_time.tm_year- 12123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gm_time.tm_year) != 0 ? (local_time.tm_year-gm_time.tm_year) : 12133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (local_time.tm_yday-gm_time.tm_yday))); 1214b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy count=FormatLocaleString(timestamp,length, 12153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%04d-%02d-%02dT%02d:%02d:%02d%+03ld:00",local_time.tm_year+1900, 12163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time.tm_mon+1,local_time.tm_mday,local_time.tm_hour, 1217f1d91246f9ab47d524abc076c6ead91e5cc27d03cristy local_time.tm_min,local_time.tm_sec,(long) timezone); 12183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count); 12193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t E n v i r o n m e n t V a l u e % 12273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetEnvironmentValue() returns the environment string that matches the 12333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% specified name. 12343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetEnvironmentValue method is: 12363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *GetEnvironmentValue(const char *name) 12383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: the environment name. 12423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 124499bbf2c9e414ade263949978671025728413c1c9cristyMagickExport char *GetEnvironmentValue(const char *name) 12453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 12473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *environment; 12483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy environment=getenv(name); 12503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (environment == (const char *) NULL) 12513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) NULL); 12523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(ConstantString(environment)); 12533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o D a t u m % 12613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoDatum() returns the datum associated with the string. 12673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoDatum method is: 12693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% unsigned char *GetStringInfoDatum(const StringInfo *string_info) 12713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 12753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12773ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport unsigned char *GetStringInfoDatum(const StringInfo *string_info) 12783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1280e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 12813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->datum); 12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o L e n g t h % 12903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoLength() returns the string length. 12963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoLength method is: 12983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t GetStringInfoLength(const StringInfo *string_info) 13003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 13023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 13043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 13063ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t GetStringInfoLength(const StringInfo *string_info) 13073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1309e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 13103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->length); 13113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 13143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o P a t h % 13193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoPath() returns the path associated with the string. 13253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoPath method is: 13273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *GetStringInfoPath(const StringInfo *string_info) 13293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 13313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 13333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 13353ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport const char *GetStringInfoPath(const StringInfo *string_info) 13363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1338e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 13393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->path); 13403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 13433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1347dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy+ I n t e r p r e t S i P r e f i x V a l u e % 1348dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1349dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1350dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1351dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1352dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1353dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% InterpretSiPrefixValue() converts the initial portion of the string to a 1354dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% double representation. It also recognizes SI prefixes (e.g. B, KB, MiB, 1355dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% etc.). 1356dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1357dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% The format of the InterpretSiPrefixValue method is: 1358dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1359dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% double InterpretSiPrefixValue(const char *value,char **sentinal) 1360dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1361dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% A description of each parameter follows: 1362dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1363dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% o value: the string value. 1364dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1365dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% o sentinal: if sentinal is not NULL, return a pointer to the character 1366dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% after the last character used in the conversion. 1367dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1368dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy*/ 136905d2ff7ebf21f659f5b11e45afb294e152f4330cdirkMagickExport double InterpretSiPrefixValue(const char *magick_restrict string, 137005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk char **magick_restrict sentinal) 1371dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy{ 1372dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy char 1373dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy *q; 1374dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy 1375dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy double 1376dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy value; 1377dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy 1378dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy value=InterpretLocaleValue(string,&q); 1379dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if (q != string) 1380dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1381dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if ((*q >= 'E') && (*q <= 'z')) 1382dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1383dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy double 1384dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy e; 1385dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy 13860c2684f14358e568d33818fd9182c3aad93c4c0dcristy switch ((int) ((unsigned char) *q)) 13870c2684f14358e568d33818fd9182c3aad93c4c0dcristy { 13880c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'y': e=(-24.0); break; 13890c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'z': e=(-21.0); break; 13900c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'a': e=(-18.0); break; 13910c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'f': e=(-15.0); break; 13920c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'p': e=(-12.0); break; 13930c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'n': e=(-9.0); break; 13940c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'u': e=(-6.0); break; 13950c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'm': e=(-3.0); break; 13960c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'c': e=(-2.0); break; 13970c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'd': e=(-1.0); break; 13980c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'h': e=2.0; break; 13990c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'k': e=3.0; break; 14000c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'K': e=3.0; break; 14010c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'M': e=6.0; break; 14020c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'G': e=9.0; break; 14030c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'T': e=12.0; break; 14040c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'P': e=15.0; break; 14050c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'E': e=18.0; break; 14060c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'Z': e=21.0; break; 14070c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'Y': e=24.0; break; 14080c2684f14358e568d33818fd9182c3aad93c4c0dcristy default: e=0.0; break; 14090c2684f14358e568d33818fd9182c3aad93c4c0dcristy } 1410dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if (e >= MagickEpsilon) 1411dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1412dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if (q[1] == 'i') 1413dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1414dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy value*=pow(2.0,e/0.3); 1415dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy q+=2; 1416dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1417dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy else 1418dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1419dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy value*=pow(10.0,e); 1420dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy q++; 1421dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1422dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1423dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 142440937044c58de334456bbfb2b6fed5ab03fd2946cristy if ((*q == 'B') || (*q == 'P')) 1425099a73566dcb0cddef83ca4e94fe3e2534e6b19ecristy q++; 1426dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1427dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if (sentinal != (char **) NULL) 1428dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy *sentinal=q; 1429dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy return(value); 1430dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy} 1431dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy 1432dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy/* 1433dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1434dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1435dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1436dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 14376f2013165d72f7d8ef5f66bb9453126d88113809anthony% I s S t r i n g T r u e % 14386f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14396f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14406f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14416f2013165d72f7d8ef5f66bb9453126d88113809anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14426f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14436f2013165d72f7d8ef5f66bb9453126d88113809anthony% IsStringTrue() returns MagickTrue if the value is "true", "on", "yes" or 14446f2013165d72f7d8ef5f66bb9453126d88113809anthony% "1". Any other string or undefined returns MagickFalse. 14456f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14466f2013165d72f7d8ef5f66bb9453126d88113809anthony% Typically this is used to look at strings (options or artifacts) which 14476f2013165d72f7d8ef5f66bb9453126d88113809anthony% has a default value of "false", when not defined. 14486f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14496f2013165d72f7d8ef5f66bb9453126d88113809anthony% The format of the IsStringTrue method is: 14506f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14516f2013165d72f7d8ef5f66bb9453126d88113809anthony% MagickBooleanType IsStringTrue(const char *value) 14526f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14536f2013165d72f7d8ef5f66bb9453126d88113809anthony% A description of each parameter follows: 14546f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14556f2013165d72f7d8ef5f66bb9453126d88113809anthony% o value: Specifies a pointer to a character array. 14566f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14576f2013165d72f7d8ef5f66bb9453126d88113809anthony*/ 14586f2013165d72f7d8ef5f66bb9453126d88113809anthonyMagickExport MagickBooleanType IsStringTrue(const char *value) 14596f2013165d72f7d8ef5f66bb9453126d88113809anthony{ 14606f2013165d72f7d8ef5f66bb9453126d88113809anthony if (value == (const char *) NULL) 14616f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 14626f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"true") == 0) 14636f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14646f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"on") == 0) 14656f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14666f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"yes") == 0) 14676f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14686f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"1") == 0) 14696f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14706f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 14716f2013165d72f7d8ef5f66bb9453126d88113809anthony} 14726f2013165d72f7d8ef5f66bb9453126d88113809anthony 14736f2013165d72f7d8ef5f66bb9453126d88113809anthony/* 14746f2013165d72f7d8ef5f66bb9453126d88113809anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14756f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14766f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14776f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14789a846de2088aabf3d58a275d2157b40c53d8597ddirk% I s S t r i n g F a l s e % 14796f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14806f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14816f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14826f2013165d72f7d8ef5f66bb9453126d88113809anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14836f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14849a846de2088aabf3d58a275d2157b40c53d8597ddirk% IsStringFalse() returns MagickTrue if the value is "false", "off", "no" or 14859a846de2088aabf3d58a275d2157b40c53d8597ddirk% "0". Any other string or undefined returns MagickFalse. 14866f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14876f2013165d72f7d8ef5f66bb9453126d88113809anthony% Typically this is used to look at strings (options or artifacts) which 14886f2013165d72f7d8ef5f66bb9453126d88113809anthony% has a default value of "true", when it has not been defined. 14896f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14909a846de2088aabf3d58a275d2157b40c53d8597ddirk% The format of the IsStringFalse method is: 14916f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14929a846de2088aabf3d58a275d2157b40c53d8597ddirk% MagickBooleanType IsStringFalse(const char *value) 14936f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14946f2013165d72f7d8ef5f66bb9453126d88113809anthony% A description of each parameter follows: 14956f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14966f2013165d72f7d8ef5f66bb9453126d88113809anthony% o value: Specifies a pointer to a character array. 14976f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14986f2013165d72f7d8ef5f66bb9453126d88113809anthony*/ 14999a846de2088aabf3d58a275d2157b40c53d8597ddirkMagickExport MagickBooleanType IsStringFalse(const char *value) 15006f2013165d72f7d8ef5f66bb9453126d88113809anthony{ 15016f2013165d72f7d8ef5f66bb9453126d88113809anthony if (value == (const char *) NULL) 15026f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 15039a846de2088aabf3d58a275d2157b40c53d8597ddirk if (LocaleCompare(value,"false") == 0) 15049a846de2088aabf3d58a275d2157b40c53d8597ddirk return(MagickTrue); 15056f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"off") == 0) 15069a846de2088aabf3d58a275d2157b40c53d8597ddirk return(MagickTrue); 15076f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"no") == 0) 15089a846de2088aabf3d58a275d2157b40c53d8597ddirk return(MagickTrue); 15096f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"0") == 0) 15109a846de2088aabf3d58a275d2157b40c53d8597ddirk return(MagickTrue); 15119a846de2088aabf3d58a275d2157b40c53d8597ddirk return(MagickFalse); 15126f2013165d72f7d8ef5f66bb9453126d88113809anthony} 15136f2013165d72f7d8ef5f66bb9453126d88113809anthony 15146f2013165d72f7d8ef5f66bb9453126d88113809anthony/* 15156f2013165d72f7d8ef5f66bb9453126d88113809anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15166f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 15176f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 15186f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 15193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P r i n t S t r i n g I n f o % 15203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% PrintStringInfo() prints the string. 15263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the PrintStringInfo method is: 15283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void PrintStringInfo(FILE *file,const char *id, 15303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const StringInfo *string_info) 15313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 15333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o file: the file, typically stdout. 15353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o id: the string id. 15373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 15393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 15413ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void PrintStringInfo(FILE *file,const char *id, 15423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *string_info) 15433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 15443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 15453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 15463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 15483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 15493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 15503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(id != (const char *) NULL); 15523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1553e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 15543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) string_info->datum; 15553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < string_info->length; i++) 15563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (((int) ((unsigned char) *p) < 32) && 15583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (isspace((int) ((unsigned char) *p)) == 0)) 15593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 15613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15622d8723c6c8513a97ec8ba8bd1dd971ea28d9e13dcristy (void) FormatLocaleFile(file,"%s(%.20g): ",id,(double) string_info->length); 15633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i == string_info->length) 15643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 156553ea28bdea98fe4b2cbd5811ef61b2ac4fa5d721cristy for (i=0; i < string_info->length; i++) 156653ea28bdea98fe4b2cbd5811ef61b2ac4fa5d721cristy (void) fputc(string_info->datum[i],file); 15673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('\n',file); 15683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 15693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 15713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to a HEX list. 15723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 15733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) string_info->datum; 15743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < string_info->length; i+=0x14) 15753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1576b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"0x%08lx: ",(unsigned long) (0x14*i)); 15773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=1; j <= MagickMin(string_info->length-i,0x14); j++) 15783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1579b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"%02lx",(unsigned long) (*(p+j)) & 0xff); 15803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 15813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; j <= 0x14; j++) 15843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 15883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=1; j <= MagickMin(string_info->length-i,0x14); j++) 15923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isprint((int) ((unsigned char) *p)) != 0) 15943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(*p,file); 15953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 15963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('-',file); 15973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 15983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('\n',file); 16003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R e s e t S t r i n g I n f o % 16093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ResetStringInfo() reset the string to all null bytes. 16153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ResetStringInfo method is: 16173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void ResetStringInfo(StringInfo *string_info) 16193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 16233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 16253ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void ResetStringInfo(StringInfo *string_info) 16263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 16273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1628e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 16293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info->datum,0,string_info->length); 16303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 163440639d173aa8c76b850d625c630b711fee4dcfb8Cristy% % 163540639d173aa8c76b850d625c630b711fee4dcfb8Cristy% % 163640639d173aa8c76b850d625c630b711fee4dcfb8Cristy% % 163740639d173aa8c76b850d625c630b711fee4dcfb8Cristy% S a n t i z e S t r i n g % 163840639d173aa8c76b850d625c630b711fee4dcfb8Cristy% % 163940639d173aa8c76b850d625c630b711fee4dcfb8Cristy% % 164040639d173aa8c76b850d625c630b711fee4dcfb8Cristy% % 164140639d173aa8c76b850d625c630b711fee4dcfb8Cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 164240639d173aa8c76b850d625c630b711fee4dcfb8Cristy% 164340639d173aa8c76b850d625c630b711fee4dcfb8Cristy% SanitizeString() returns an new string removes all characters except 164440639d173aa8c76b850d625c630b711fee4dcfb8Cristy% letters, digits and !#$%&'*+-=?^_`{|}~@.[]. 164540639d173aa8c76b850d625c630b711fee4dcfb8Cristy% 164640639d173aa8c76b850d625c630b711fee4dcfb8Cristy% The returned string shoud be freed using DestoryString(). 164740639d173aa8c76b850d625c630b711fee4dcfb8Cristy% 164840639d173aa8c76b850d625c630b711fee4dcfb8Cristy% The format of the SanitizeString method is: 164940639d173aa8c76b850d625c630b711fee4dcfb8Cristy% 165040639d173aa8c76b850d625c630b711fee4dcfb8Cristy% char *SanitizeString(const char *source) 165140639d173aa8c76b850d625c630b711fee4dcfb8Cristy% 165240639d173aa8c76b850d625c630b711fee4dcfb8Cristy% A description of each parameter follows: 165340639d173aa8c76b850d625c630b711fee4dcfb8Cristy% 165440639d173aa8c76b850d625c630b711fee4dcfb8Cristy% o source: A character string. 165540639d173aa8c76b850d625c630b711fee4dcfb8Cristy% 165640639d173aa8c76b850d625c630b711fee4dcfb8Cristy*/ 165740639d173aa8c76b850d625c630b711fee4dcfb8CristyMagickExport char *SanitizeString(const char *source) 165840639d173aa8c76b850d625c630b711fee4dcfb8Cristy{ 165940639d173aa8c76b850d625c630b711fee4dcfb8Cristy char 166040639d173aa8c76b850d625c630b711fee4dcfb8Cristy *sanitize_source; 166140639d173aa8c76b850d625c630b711fee4dcfb8Cristy 166240639d173aa8c76b850d625c630b711fee4dcfb8Cristy const char 166340639d173aa8c76b850d625c630b711fee4dcfb8Cristy *q; 166440639d173aa8c76b850d625c630b711fee4dcfb8Cristy 166540639d173aa8c76b850d625c630b711fee4dcfb8Cristy register char 166640639d173aa8c76b850d625c630b711fee4dcfb8Cristy *p; 166740639d173aa8c76b850d625c630b711fee4dcfb8Cristy 166840639d173aa8c76b850d625c630b711fee4dcfb8Cristy static char 166940639d173aa8c76b850d625c630b711fee4dcfb8Cristy whitelist[] = 167040639d173aa8c76b850d625c630b711fee4dcfb8Cristy "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " 167140639d173aa8c76b850d625c630b711fee4dcfb8Cristy "$-_.+!*'(),{}|\\^~[]`\"><#%;/?:@&="; 167240639d173aa8c76b850d625c630b711fee4dcfb8Cristy 167340639d173aa8c76b850d625c630b711fee4dcfb8Cristy sanitize_source=AcquireString(source); 167440639d173aa8c76b850d625c630b711fee4dcfb8Cristy p=sanitize_source; 167540639d173aa8c76b850d625c630b711fee4dcfb8Cristy q=sanitize_source+strlen(sanitize_source); 167640639d173aa8c76b850d625c630b711fee4dcfb8Cristy for (p+=strspn(p,whitelist); p != q; p+=strspn(p,whitelist)) 167740639d173aa8c76b850d625c630b711fee4dcfb8Cristy *p='_'; 167840639d173aa8c76b850d625c630b711fee4dcfb8Cristy return(sanitize_source); 167940639d173aa8c76b850d625c630b711fee4dcfb8Cristy} 168040639d173aa8c76b850d625c630b711fee4dcfb8Cristy 168140639d173aa8c76b850d625c630b711fee4dcfb8Cristy/* 168240639d173aa8c76b850d625c630b711fee4dcfb8Cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o % 16873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfo() copies the source string to the destination string. 16933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfo method is: 16953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfo(StringInfo *string_info,const StringInfo *source) 16973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 17013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 17033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17053ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfo(StringInfo *string_info, 17063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 17073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1709e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 17103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (StringInfo *) NULL); 1711e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(source->signature == MagickCoreSignature); 17123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length == 0) 17133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 17143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info->datum,0,string_info->length); 171554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum,source->datum,MagickMin(string_info->length, 171654aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy source->length)); 17173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o D a t u m % 17253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoDatum() copies bytes from the source string for the length of 17313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the destination string. 17323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoDatum method is: 17343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoDatum(StringInfo *string_info, 17363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const unsigned char *source) 17373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 17413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 17433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17453ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoDatum(StringInfo *string_info, 17463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const unsigned char *source) 17473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1749e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 17503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length != 0) 175154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum,source,string_info->length); 17523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o L e n g t h % 17603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoLength() set the string length to the specified value. 17663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoLength method is: 17683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoLength(StringInfo *string_info,const size_t length) 17703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 17743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the string length. 17763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17783ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoLength(StringInfo *string_info, 17793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t length) 17803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1782e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 1783151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length < MagickPathExtent) 17843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 17853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length=length; 17863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 17873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) AcquireQuantumMemory(length+ 1788151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent,sizeof(*string_info->datum)); 17893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 17903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) ResizeQuantumMemory(string_info->datum, 1791151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy length+MagickPathExtent,sizeof(*string_info->datum)); 17923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 17933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 17943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o D a t u m % 18023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoPath() sets the path associated with the string. 18083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoPath method is: 18103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoPath(StringInfo *string_info,const char *path) 18123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 18163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o path: the path. 18183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18203ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoPath(StringInfo *string_info,const char *path) 18213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1823e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 18243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(path != (const char *) NULL); 1825cecec52e2776178c2aa65a2c500fdc4eb175aa1fdirk string_info->path=ConstantString(path); 18263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S p l i t S t r i n g I n f o % 18343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SplitStringInfo() splits a string into two and returns it. 18403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SplitStringInfo method is: 18423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *SplitStringInfo(StringInfo *string_info,const size_t offset) 18443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 18483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18503ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *SplitStringInfo(StringInfo *string_info, 18513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t offset) 18523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 18543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *split_info; 18553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 1857e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(string_info->signature == MagickCoreSignature); 18583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (offset > string_info->length) 18593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 18603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy split_info=AcquireStringInfo(offset); 18613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfo(split_info,string_info); 18621bd862cf6e1ac2d4d43eac8fb35eeb96a24f1cbacristy (void) memmove(string_info->datum,string_info->datum+offset, 1863151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy string_info->length-offset+MagickPathExtent); 18643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoLength(string_info,string_info->length-offset); 18653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(split_info); 18663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g I n f o T o S t r i n g % 18743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfoToString() converts a string info string to a C string. 18803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringInfoToString method is: 18823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *StringInfoToString(const StringInfo *string_info) 18843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string. 18883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18903ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *StringInfoToString(const StringInfo *string_info) 18913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 18933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string; 18943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 18963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 18973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) NULL; 18993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=string_info->length; 1900151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length >= (MagickPathExtent-1)) 1901a42df255c73726a530ac51cc6867bb71a8d23370cristy string=(char *) AcquireQuantumMemory(length+MagickPathExtent, 1902a42df255c73726a530ac51cc6867bb71a8d23370cristy sizeof(*string)); 1903208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy if (string == (char *) NULL) 1904208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy return((char *) NULL); 190554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string,(char *) string_info->datum,length*sizeof(*string)); 1906208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy string[length]='\0'; 19073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string); 19083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 19093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 19113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1915b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% S t r i n g I n f o T o H e x S t r i n g % 1916b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 1917b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 1918b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 1919b1d483a6a6a5678173db9d60bec52dd5a37826beanthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1920b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 1921b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% StringInfoToHexString() converts a string info string to a C string. 1922b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 1923b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% The format of the StringInfoToHexString method is: 1924b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 1925b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% char *StringInfoToHexString(const StringInfo *string_info) 1926b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 1927b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% A description of each parameter follows: 1928b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 1929b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% o string_info: the string. 1930b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 1931b1d483a6a6a5678173db9d60bec52dd5a37826beanthony*/ 1932b1d483a6a6a5678173db9d60bec52dd5a37826beanthonyMagickExport char *StringInfoToHexString(const StringInfo *string_info) 1933b1d483a6a6a5678173db9d60bec52dd5a37826beanthony{ 1934b1d483a6a6a5678173db9d60bec52dd5a37826beanthony char 1935b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *string; 1936b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 1937b1d483a6a6a5678173db9d60bec52dd5a37826beanthony register const unsigned char 1938b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *p; 1939b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 1940b1d483a6a6a5678173db9d60bec52dd5a37826beanthony register ssize_t 1941b1d483a6a6a5678173db9d60bec52dd5a37826beanthony i; 1942b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 1943b1d483a6a6a5678173db9d60bec52dd5a37826beanthony register unsigned char 1944b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q; 1945b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 1946b1d483a6a6a5678173db9d60bec52dd5a37826beanthony size_t 1947b1d483a6a6a5678173db9d60bec52dd5a37826beanthony length; 1948b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 1949b1d483a6a6a5678173db9d60bec52dd5a37826beanthony unsigned char 1950b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[16]; 1951b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 1952b1d483a6a6a5678173db9d60bec52dd5a37826beanthony length=string_info->length; 1953151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length < MagickPathExtent) 1954b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 1955a42df255c73726a530ac51cc6867bb71a8d23370cristy string=(char *) AcquireQuantumMemory(length+MagickPathExtent,2* 1956a42df255c73726a530ac51cc6867bb71a8d23370cristy sizeof(*string)); 1957b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (string == (char *) NULL) 1958b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 1959b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[0]='0'; 1960b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[1]='1'; 1961b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[2]='2'; 1962b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[3]='3'; 1963b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[4]='4'; 1964b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[5]='5'; 1965b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[6]='6'; 1966b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[7]='7'; 1967b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[8]='8'; 1968b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[9]='9'; 1969b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[10]='a'; 1970b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[11]='b'; 1971b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[12]='c'; 1972b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[13]='d'; 1973b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[14]='e'; 1974b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[15]='f'; 1975b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p=string_info->datum; 1976b1d483a6a6a5678173db9d60bec52dd5a37826beanthony q=(unsigned char *) string; 1977b1d483a6a6a5678173db9d60bec52dd5a37826beanthony for (i=0; i < (ssize_t) string_info->length; i++) 1978b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 1979b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q++=hex_digits[(*p >> 4) & 0x0f]; 1980b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q++=hex_digits[*p & 0x0f]; 1981b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p++; 1982b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 1983b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q='\0'; 1984b1d483a6a6a5678173db9d60bec52dd5a37826beanthony return(string); 1985b1d483a6a6a5678173db9d60bec52dd5a37826beanthony} 1986b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 1987b1d483a6a6a5678173db9d60bec52dd5a37826beanthony/* 1988b1d483a6a6a5678173db9d60bec52dd5a37826beanthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1989b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 1990b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 1991b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 19923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o A r g v % 19933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringToArgv() converts a text string into command line arguments. 199931f1bf7bb6ee2698a2afab42ee0329b11663636canthony% The 'argv' array of arguments, is returned while the number of arguments 200031f1bf7bb6ee2698a2afab42ee0329b11663636canthony% is returned via the provided integer variable pointer. 200131f1bf7bb6ee2698a2afab42ee0329b11663636canthony% 200231f1bf7bb6ee2698a2afab42ee0329b11663636canthony% Simple 'word' tokenizer, which allows for each word to be optionally 200331f1bf7bb6ee2698a2afab42ee0329b11663636canthony% quoted. However it will not allow use of partial quotes, or escape 200431f1bf7bb6ee2698a2afab42ee0329b11663636canthony% characters. 20053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToArgv method is: 20073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **StringToArgv(const char *text,int *argc) 20093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 20113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o argv: Method StringToArgv returns the string list unless an error 20133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% occurs, otherwise NULL. 20143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text: Specifies the string to segment into a list. 20163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o argc: This integer pointer returns the number of arguments in the 20183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% list. 20193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 20213ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **StringToArgv(const char *text,int *argc) 20223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 20233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 20243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **argv; 20253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 20273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 20283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 20293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2030bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 20313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 20323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *argc=0; 20343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 20353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 20363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine the number of arguments. 20383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; ) 20403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 20423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 2043a20c904a6f3e3a11939d5260485be72d5c849c63cristy if (*p == '\0') 204474895d33fcb55c51dd9205984fadb102e20bae16cristy break; 20453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*argc)++; 20463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '"') 20473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p++; (*p != '"') && (*p != '\0'); p++) ; 20483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\'') 20493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p++; (*p != '\'') && (*p != '\0'); p++) ; 20503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *p)) == 0) && (*p != '\0')) 20513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 20523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*argc)++; 20541b26e1f30a41ec15901231d6baba7345e2d3cd50cristy argv=(char **) AcquireQuantumMemory((size_t) (*argc+1UL),sizeof(*argv)); 20553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (argv == (char **) NULL) 20563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertStringToARGV"); 20573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to an ASCII list. 20593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[0]=AcquireString("magick"); 20613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 2062bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=1; i < (ssize_t) *argc; i++) 20633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 20653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 20663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=p; 20673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '"') 20683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 20703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q++; (*q != '"') && (*q != '\0'); q++) ; 20713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 20733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\'') 20743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 207506b15f4383540e74d93dbe58488e193619b09df7cristy p++; 20763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q++; (*q != '\'') && (*q != '\0'); q++) ; 20773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 20793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *q)) == 0) && (*q != '\0')) 20803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 2081151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy argv[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+MagickPathExtent, 20823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(**argv)); 20833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (argv[i] == (char *) NULL) 20843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i--; i >= 0; i--) 20863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]=DestroyString(argv[i]); 20873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv=(char **) RelinquishMagickMemory(argv); 20883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError, 20893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToConvertStringToARGV"); 20903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 209154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(argv[i],p,(size_t) (q-p)); 2092208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy argv[i][q-p]='\0'; 20933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=q; 20943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *p)) == 0) && (*p != '\0')) 20953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 20963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]=(char *) NULL; 20983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(argv); 20993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 21003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 21023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2106b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% S t r i n g T o A r r a y O f D o u b l e s % 21073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21126ab8238b93100582301c2b2f4de26b17537c43d3glennrp% StringToArrayOfDoubles() converts a string of space or comma separated 2113b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% numbers into array of floating point numbers (doubles). Any number that 2114b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% failes to parse properly will produce a syntax error. As will two commas 2115b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% without a number between them. However a final comma at the end will 2116b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% not be regarded as an error so as to simplify automatic list generation. 21173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2118b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% A NULL value is returned on syntax or memory errors. 21193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2120b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% Use RelinquishMagickMemory() to free returned array when finished. 2121b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2122b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% The format of the StringToArrayOfDoubles method is: 2123b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 212466336b0d0c7625c8df9601a1f4b8af36759b5776cristy% double *StringToArrayOfDoubles(const char *string,size_t *count, 212566336b0d0c7625c8df9601a1f4b8af36759b5776cristy% ExceptionInfo *exception) 21263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 21283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21296ab8238b93100582301c2b2f4de26b17537c43d3glennrp% o string: the string containing the comma/space separated values. 2130b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2131b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% o count: returns number of arguments in returned array 2132b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2133520857341848779f2abe19f520c3213c4e315a5dcristy% o exception: return any errors or warnings in this structure. 2134520857341848779f2abe19f520c3213c4e315a5dcristy% 21353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2136520857341848779f2abe19f520c3213c4e315a5dcristyMagickExport double *StringToArrayOfDoubles(const char *string,ssize_t *count, 2137520857341848779f2abe19f520c3213c4e315a5dcristy ExceptionInfo *exception) 21383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 21393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 2140b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q; 21413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21420a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy const char 21430a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy *p; 21440a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy 2145b1d483a6a6a5678173db9d60bec52dd5a37826beanthony double 2146b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *array; 21473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2148bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 21493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 21503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21510a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy /* 21520a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy Determine count of values, and check syntax. 21530a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy */ 2154b0de93fdedaac769cb08e15b3ec176d4c9078907cristy assert(exception != (ExceptionInfo *) NULL); 2155e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(exception->signature == MagickCoreSignature); 2156b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *count=0; 2157b1d483a6a6a5678173db9d60bec52dd5a37826beanthony i=0; 21580a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy p=string; 21590a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy while (*p != '\0') 2160b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 21610a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy (void) StringToDouble(p,&q); /* get value - ignores leading space */ 21620a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy if (p == q) 21630a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy return((double *) NULL); /* no value found */ 21640a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy p=q; 21650a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy i++; /* increment value count */ 21660a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy while (isspace((int) ((unsigned char) *p)) != 0) 21670a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy p++; /* skip spaces */ 21680a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy if (*p == ',') 21690a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy p++; /* skip comma */ 21700a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy while (isspace((int) ((unsigned char) *p)) != 0) 21710a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy p++; /* and more spaces */ 2172b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 21730a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy /* 21740a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy Allocate floating point argument list. 21750a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy */ 2176b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *count=i; 21770a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy array=(double *) AcquireQuantumMemory((size_t) i,sizeof(*array)); 21780a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy if (array == (double *) NULL) 217970ca022b682f119009b341432aecd7a1662138afcristy { 218070ca022b682f119009b341432aecd7a1662138afcristy (void) ThrowMagickException(exception,GetMagickModule(), 218170ca022b682f119009b341432aecd7a1662138afcristy ResourceLimitError,"MemoryAllocationFailed","`%s'",""); 218270ca022b682f119009b341432aecd7a1662138afcristy return((double *) NULL); 218370ca022b682f119009b341432aecd7a1662138afcristy } 21840a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy /* 21850a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy Fill in the floating point values. 21860a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy */ 2187b1d483a6a6a5678173db9d60bec52dd5a37826beanthony i=0; 21880a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy p=string; 21890a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy while ((*p != '\0') && (i < *count)) 21900a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy { 2191b1d483a6a6a5678173db9d60bec52dd5a37826beanthony array[i++]=StringToDouble(p,&q); 2192b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p=q; 21930a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy while ((isspace((int) ((unsigned char) *p)) != 0) || (*p == ',')) 21940a887dc2ac15d4a89a9237401f06c2f748e0ec2bcristy p++; 21953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2196b1d483a6a6a5678173db9d60bec52dd5a37826beanthony return(array); 21973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 21983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 22003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2204b1d483a6a6a5678173db9d60bec52dd5a37826beanthony+ S t r i n g T o k e n % 22053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 221066336b0d0c7625c8df9601a1f4b8af36759b5776cristy% StringToken() looks for any one of given delimiters and splits the string 2211b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% into two separate strings by replacing the delimiter character found with a 2212b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% nul character. 2213b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2214b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% The given string pointer is changed to point to the string following the 2215b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% delimiter character found, or NULL. A pointer to the start of the 2216b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% string is returned, representing the token before the delimiter. 2217b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2218b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% In may ways this is equivent to the strtok() C library function, but with 2219b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% multiple delimiter characters rather than a delimiter string. 22203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToken method is: 22223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *StringToken(const char *delimiters,char **string) 22243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 22263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o delimiters: one or more delimiters. 22283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: return the first token in the string. If none is found, return 22303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% NULL. 22313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 22333ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *StringToken(const char *delimiters,char **string) 22343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 22353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 22363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 22373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 22393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 22403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 22423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *r; 22433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 22453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c, 22463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d; 22473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(*string); 22493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (char *) NULL) 22503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) NULL); 2251b1d483a6a6a5678173db9d60bec52dd5a37826beanthony q=p; 2252b1d483a6a6a5678173db9d60bec52dd5a37826beanthony for ( ; ; ) 22533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c=(*p++); 22553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy r=delimiters; 22563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 22573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d=(*r++); 22593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (c == d) 22603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (c == '\0') 22623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) NULL; 22633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p[-1]='\0'; 22653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string=p; 22663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(q); 22673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while (d != '\0'); 22693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 22713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 22733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o L i s t % 22783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringToList() converts a text string into a list by segmenting the text 22843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string at each carriage return discovered. The list is converted to HEX 22853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% characters if any control characters are discovered within the text string. 22863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToList method is: 22883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **StringToList(const char *text) 22903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 22923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text: Specifies the string to segment into a list. 22943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 22963ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **StringToList(const char *text) 22973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 22983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 22993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **textlist; 23003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 23023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 23033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2304bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 23053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 23063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2307bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 23083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines; 23093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 23113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 23123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; p++) 23133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (((int) ((unsigned char) *p) < 32) && 23143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (isspace((int) ((unsigned char) *p)) == 0)) 23153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 23163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\0') 23173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 23193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 23203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to an ASCII list. 23233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines=1; 23253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; p++) 23263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\n') 23273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines++; 23283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist=(char **) AcquireQuantumMemory((size_t) lines+1UL, 23293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*textlist)); 23303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist == (char **) NULL) 23313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 23323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 2333bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) lines; i++) 23343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=p; *q != '\0'; q++) 23363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*q == '\r') || (*q == '\n')) 23373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 2338a42df255c73726a530ac51cc6867bb71a8d23370cristy textlist[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+ 2339a42df255c73726a530ac51cc6867bb71a8d23370cristy MagickPathExtent,sizeof(**textlist)); 23403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist[i] == (char *) NULL) 23413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 234254aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(textlist[i],p,(size_t) (q-p)); 2343208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy textlist[i][q-p]='\0'; 23443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\r') 23453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 23463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=q+1; 23473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 23503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 2352151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy hex_string[MagickPathExtent]; 23533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 23553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 23563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2357bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 23583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 23593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to a HEX list. 23623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2363bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy lines=(size_t) (strlen(text)/0x14)+1; 23643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist=(char **) AcquireQuantumMemory((size_t) lines+1UL, 23653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*textlist)); 23663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist == (char **) NULL) 23673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 23683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 2369bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) lines; i++) 23703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2371151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy textlist[i]=(char *) AcquireQuantumMemory(2UL*MagickPathExtent, 23722e25ee6694d278f85b4b3b9169fe0017aac8ab8ecristy sizeof(**textlist)); 23733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist[i] == (char *) NULL) 23743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 2375151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(textlist[i],MagickPathExtent,"0x%08lx: ", 2376f1d91246f9ab47d524abc076c6ead91e5cc27d03cristy (long) (0x14*i)); 23773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=textlist[i]+strlen(textlist[i]); 2378bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=1; j <= (ssize_t) MagickMin(strlen(p),0x14); j++) 23793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2380151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(hex_string,MagickPathExtent,"%02x",*(p+j)); 2381151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(q,hex_string,MagickPathExtent); 23823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=2; 23833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 23843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 23853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; j <= 0x14; j++) 23873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 23893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 23903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 23913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 23923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 2394bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=1; j <= (ssize_t) MagickMin(strlen(p),0x14); j++) 23953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isprint((int) ((unsigned char) *p)) != 0) 23973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 23983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 23993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='-'; 24003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 24013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 24033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist[i]=(char *) NULL; 24063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(textlist); 24073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 24083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 24103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 24113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o S t r i n g I n f o % 24153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 24193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2420bca58f3e54324602dbfe91102715646f23a2ad99cristy% StringToStringInfo() converts a string to a StringInfo type. 24213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToStringInfo method is: 24233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *StringToStringInfo(const char *string) 24253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 24273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: The string. 24293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 24313ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *StringToStringInfo(const char *string) 24323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 24333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 24343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 24353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string != (const char *) NULL); 2437bca58f3e54324602dbfe91102715646f23a2ad99cristy string_info=AcquireStringInfo(strlen(string)); 24383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoDatum(string_info,(const unsigned char *) string); 24393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 24403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 24413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 24433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 24443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i p S t r i n g % 24483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 24523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StripString() strips any whitespace or quotes from the beginning and end of 24543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% a string of characters. 24553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StripString method is: 24573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void StripString(char *message) 24593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 24613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o message: Specifies an array of characters. 24633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 24653ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void StripString(char *message) 24663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 24673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 24683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 24693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 24703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 24723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 24733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(message != (char *) NULL); 24753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*message == '\0') 24763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 24773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(message); 24783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=message; 24793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 24803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 24813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\'') || (*p == '"')) 24823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 24833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=message+length-1; 24843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *q)) != 0) && (q > p)) 24853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q--; 24863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q > p) 24873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*q == '\'') || (*q == '"')) 24883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q--; 2489a63c1ba89fd24334d128308e74acbcaee52f4ba3cristy (void) memmove(message,p,(size_t) (q-p+1)); 24903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy message[q-p+1]='\0'; 24913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=message; *p != '\0'; p++) 24923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\n') 24933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p=' '; 24943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 24953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 24973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 24983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S u b s t i t u t e S t r i n g % 25023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2507f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% SubstituteString() performs string substitution on a string, replacing the 2508f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% string with the substituted version. Buffer must be allocated from the heap. 2509bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% If the string is matched and status, MagickTrue is returned otherwise 2510bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% MagickFalse. 25113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SubstituteString method is: 25133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2514f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% MagickBooleanType SubstituteString(char **string,const char *search, 25153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *replace) 25163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 25183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2519f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% o string: the string to perform replacements on; replaced with new 25203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% allocation if a replacement is made. 25213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2522bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% o search: search for this string. 25233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2524bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% o replace: replace any matches with this string. 25253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2527f1b72c1946e0ea84ad884f358cbcc595ab162b10cristyMagickExport MagickBooleanType SubstituteString(char **string, 25283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *search,const char *replace) 25293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2530bc3392ad730a0886c1fabc9ae546b4de30a98526cristy MagickBooleanType 2531bc3392ad730a0886c1fabc9ae546b4de30a98526cristy status; 25323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2533bc3392ad730a0886c1fabc9ae546b4de30a98526cristy register char 2534bc3392ad730a0886c1fabc9ae546b4de30a98526cristy *p; 25353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 2537bc3392ad730a0886c1fabc9ae546b4de30a98526cristy extent, 2538bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent, 2539bc3392ad730a0886c1fabc9ae546b4de30a98526cristy search_extent; 2540bc3392ad730a0886c1fabc9ae546b4de30a98526cristy 2541f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy ssize_t 2542f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy offset; 2543f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy 2544bc3392ad730a0886c1fabc9ae546b4de30a98526cristy status=MagickFalse; 2545bc3392ad730a0886c1fabc9ae546b4de30a98526cristy search_extent=0, 2546bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent=0; 2547f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy for (p=strchr(*string,*search); p != (char *) NULL; p=strchr(p+1,*search)) 25483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2549f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (search_extent == 0) 2550f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy search_extent=strlen(search); 2551f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (strncmp(p,search,search_extent) != 0) 2552bc3392ad730a0886c1fabc9ae546b4de30a98526cristy continue; 25533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2554bc3392ad730a0886c1fabc9ae546b4de30a98526cristy We found a match. 25553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2556f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy status=MagickTrue; 2557bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (replace_extent == 0) 2558bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent=strlen(replace); 2559bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (replace_extent > search_extent) 25603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2561bc3392ad730a0886c1fabc9ae546b4de30a98526cristy /* 2562bc3392ad730a0886c1fabc9ae546b4de30a98526cristy Make room for the replacement string. 2563bc3392ad730a0886c1fabc9ae546b4de30a98526cristy */ 2564de58b416b4e5170fd208f357abd6f06c8b6672e8cristy offset=(ssize_t) (p-(*string)); 2565e08c3b83ee93ae67d66b8a8163b2165bc389b7d7cristy extent=strlen(*string)+replace_extent-search_extent+1; 2566151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy *string=(char *) ResizeQuantumMemory(*string,extent+MagickPathExtent, 2567f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy sizeof(*p)); 2568f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (*string == (char *) NULL) 25693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 2570f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy p=(*string)+offset; 25713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2573bc3392ad730a0886c1fabc9ae546b4de30a98526cristy Replace string. 25743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2575bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (search_extent != replace_extent) 25760a9b3721bfaf93092820843450387092e7c30b0bcristy (void) CopyMagickMemory(p+replace_extent,p+search_extent, 25770a9b3721bfaf93092820843450387092e7c30b0bcristy strlen(p+search_extent)+1); 25780a9b3721bfaf93092820843450387092e7c30b0bcristy (void) CopyMagickMemory(p,replace,replace_extent); 2579f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy p+=replace_extent-1; 25803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2581bc3392ad730a0886c1fabc9ae546b4de30a98526cristy return(status); 25823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2583