string.c revision 8723e4bcd840478cecfd29891e792edb499cd0e9
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SSSSS TTTTT RRRR IIIII N N GGGG % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SS T R R I NN N G % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SSS T RRRR I N N N G GGG % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SS T R R I N NN G G % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SSSSS T R R IIIII N N GGGG % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickCore String Methods % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% John Cristy % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% August 2003 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 207e41fe84a841d7b9d7b36b245b65e9dcb3314943cristy% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 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" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/locale_.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/log.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/property.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/signature-private.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Static declarations. 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if !defined(MAGICKCORE_HAVE_STRCASECMP) || !defined(MAGICKCORE_HAVE_STRNCASECMP) 603ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic const unsigned char 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AsciiMap[] = 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xc0, 0xe1, 0xe2, 0xe3, 0xe4, 0xc5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf8, 0xf9, 0xfa, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xfc, 0xfd, 0xfe, 0xff, 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A c q u i r e S t r i n g % 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% AcquireString() allocates memory for a string and copies the source string 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to that memory location (and returns it). 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the AcquireString method is: 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *AcquireString(const char *source) 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *AcquireString(const char *source) 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=0; 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=strlen(source); 12254aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy if (~length < MaxTextExtent) 12354aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 12454aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination=(char *) AcquireQuantumMemory(length+MaxTextExtent, 12554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy sizeof(*destination)); 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 13054aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(destination,source,length*sizeof(*destination)); 13154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination[length]='\0'; 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A c q u i r e S t r i n g I n f o % 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% AcquireStringInfo() allocates the StringInfo structure. 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the AcquireStringInfo method is: 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *AcquireStringInfo(const size_t length) 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the string length. 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *AcquireStringInfo(const size_t length) 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16273bd4a51b419e914565bdf204bf1540dc4c8ee26cristy string_info=(StringInfo *) AcquireMagickMemory(sizeof(*string_info)); 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info == (StringInfo *) NULL) 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info,0,sizeof(*string_info)); 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->signature=MagickSignature; 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length=length; 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length != 0) 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) NULL; 17137e0b38220ae42c2f0aba086d2252b7cbebcd434cristy if (~string_info->length >= (MaxTextExtent-1)) 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) AcquireQuantumMemory( 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length+MaxTextExtent,sizeof(*string_info->datum)); 1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1858723e4bcd840478cecfd29891e792edb499cd0e9cristy% B l o b T o S t r i n g I n f o % 1868723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1878723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1888723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1898723e4bcd840478cecfd29891e792edb499cd0e9cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1908723e4bcd840478cecfd29891e792edb499cd0e9cristy% 1918723e4bcd840478cecfd29891e792edb499cd0e9cristy% BlobToStringInfo() returns the contents of a blob as a string. 1928723e4bcd840478cecfd29891e792edb499cd0e9cristy% 1938723e4bcd840478cecfd29891e792edb499cd0e9cristy% The format of the BlobToStringInfo method is: 1948723e4bcd840478cecfd29891e792edb499cd0e9cristy% 1958723e4bcd840478cecfd29891e792edb499cd0e9cristy% StringInfo *BlobToStringInfo(const void *blob,const size_t length) 1968723e4bcd840478cecfd29891e792edb499cd0e9cristy% 1978723e4bcd840478cecfd29891e792edb499cd0e9cristy% A description of each parameter follows: 1988723e4bcd840478cecfd29891e792edb499cd0e9cristy% 1998723e4bcd840478cecfd29891e792edb499cd0e9cristy% o blob: the blob. 2008723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2018723e4bcd840478cecfd29891e792edb499cd0e9cristy% o length: the length of the blob. 2028723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2038723e4bcd840478cecfd29891e792edb499cd0e9cristy*/ 2048723e4bcd840478cecfd29891e792edb499cd0e9cristyMagickExport StringInfo *BlobToStringInfo(const void *blob,const size_t length) 2058723e4bcd840478cecfd29891e792edb499cd0e9cristy{ 2068723e4bcd840478cecfd29891e792edb499cd0e9cristy StringInfo 2078723e4bcd840478cecfd29891e792edb499cd0e9cristy *string_info; 2088723e4bcd840478cecfd29891e792edb499cd0e9cristy 2098723e4bcd840478cecfd29891e792edb499cd0e9cristy string_info=AcquireStringInfo(0); 2108723e4bcd840478cecfd29891e792edb499cd0e9cristy string_info->datum=(unsigned char *) AcquireQuantumMemory(length, 2118723e4bcd840478cecfd29891e792edb499cd0e9cristy sizeof(*string_info->datum)); 2128723e4bcd840478cecfd29891e792edb499cd0e9cristy if (string_info->datum == (unsigned char *) NULL) 2138723e4bcd840478cecfd29891e792edb499cd0e9cristy { 2148723e4bcd840478cecfd29891e792edb499cd0e9cristy string_info=DestroyStringInfo(string_info); 2158723e4bcd840478cecfd29891e792edb499cd0e9cristy return((StringInfo *) NULL); 2168723e4bcd840478cecfd29891e792edb499cd0e9cristy } 2178723e4bcd840478cecfd29891e792edb499cd0e9cristy if (blob != (const void *) NULL) 2188723e4bcd840478cecfd29891e792edb499cd0e9cristy (void) memcpy(string_info->datum,blob,length); 2198723e4bcd840478cecfd29891e792edb499cd0e9cristy return(string_info); 2208723e4bcd840478cecfd29891e792edb499cd0e9cristy} 2218723e4bcd840478cecfd29891e792edb499cd0e9cristy 2228723e4bcd840478cecfd29891e792edb499cd0e9cristy/* 2238723e4bcd840478cecfd29891e792edb499cd0e9cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2248723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2258723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2268723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C l o n e S t r i n g % 2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CloneString() allocates memory for the destination string and copies 2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the source string to that memory location. 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CloneString method is: 2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *CloneString(char **destination,const char *source) 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: A pointer to a character string. 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *CloneString(char **destination,const char *source) 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char **) NULL); 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source == (const char *) NULL) 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination != (char *) NULL) 2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=DestroyString(*destination); 2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=AcquireString(source); 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(source); 2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < MaxTextExtent) 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=(char *) ResizeQuantumMemory(*destination,length+MaxTextExtent, 269b936f7089f8bd56bf771c7cb6017a9af98a4ffd5cristy sizeof(**destination)); 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 27254aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy if (length != 0) 273f7e6ab4637e31098c9cfd70546aed44870c27ee5cristy (void) memcpy(*destination,source,length*sizeof(**destination)); 274208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy (*destination)[length]='\0'; 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C l o n e S t r i n g I n f o % 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CloneStringInfo() clones a copy of the StringInfo structure. 2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CloneStringInfo method is: 2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *CloneStringInfo(const StringInfo *string_info) 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *CloneStringInfo(const StringInfo *string_info) 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *clone_info; 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy clone_info=AcquireStringInfo(string_info->length); 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length != 0) 31054aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(clone_info->datum,string_info->datum,string_info->length+1); 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(clone_info); 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o m p a r e S t r i n g I n f o % 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CompareStringInfo() compares the two datums target and source. It returns 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% an integer less than, equal to, or greater than zero if target is found, 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% respectively, to be less than, to match, or be greater than source. 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CompareStringInfo method is: 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% int CompareStringInfo(const StringInfo *target,const StringInfo *source) 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o target: the target string. 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic inline size_t MagickMin(const size_t x,const size_t y) 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < y) 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(x); 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(y); 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport int CompareStringInfo(const StringInfo *target, 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(target != (StringInfo *) NULL); 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(target->signature == MagickSignature); 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (StringInfo *) NULL); 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source->signature == MagickSignature); 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=memcmp(target->datum,source->datum,MagickMin(target->length, 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source->length)); 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != 0) 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target->length == source->length) 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(0); 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(target->length < source->length ? -1 : 1); 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e M a g i c k S t r i n g % 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateMagickString() concatenates the source string to the destination 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. The destination buffer is always null-terminated even if the 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string must be truncated. 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateMagickString method is: 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t ConcatenateMagickString(char *destination,const char *source, 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const size_t length) 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: the destination string. 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the length of the destination string. 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t ConcatenateMagickString(char *destination, 3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *source,const size_t length) 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char *) NULL); 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const char *) NULL); 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(length >= 1); 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=source; 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=destination; 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=length; 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((i-- != 0) && (*q != '\0')) 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=(size_t) (q-destination); 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=length-count; 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i == 0) 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count+strlen(p)); 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (*p != '\0') 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i != 1) 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i--; 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count+(p-source)); 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e S t r i n g % 4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateString() appends a copy of string source, including the 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% terminating null character, to the end of string destination. 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateString method is: 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType ConcatenateString(char **destination, 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *source) 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: A pointer to a character string. 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport MagickBooleanType ConcatenateString(char **destination, 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *source) 4653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 46754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination_length, 4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length, 4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_length; 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char **) NULL); 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source == (const char *) NULL) 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=AcquireString(source); 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 47954aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination_length=strlen(*destination); 4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_length=strlen(source); 48154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy length=destination_length; 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < source_length) 4833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=source_length; 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < MaxTextExtent) 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=(char *) ResizeQuantumMemory(*destination,length+MaxTextExtent, 488cf1667cdd8f64c3d41e5cf404bce8799e3b5da9bcristy sizeof(**destination)); 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 49154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy if (source_length != 0) 49254aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy((*destination)+destination_length,source,source_length); 49354aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (*destination)[length]='\0'; 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e S t r i n g I n f o % 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateStringInfo() concatenates the source string to the destination 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateStringInfo method is: 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void ConcatenateStringInfo(StringInfo *string_info, 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const StringInfo *source) 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void ConcatenateStringInfo(StringInfo *string_info, 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const StringInfo *) NULL); 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=string_info->length; 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < source->length) 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoLength(string_info,length+source->length); 53754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum+length,source->datum,source->length); 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 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 % 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConfigureFileToStringInfo() returns the contents of a configure file as a 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. 5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConfigureFileToStringInfo method is: 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *ConfigureFileToStringInfo(const char *filename) 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 5603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *ConfigureFileToStringInfo(const char *filename) 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string; 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file; 5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickOffsetType 5733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy offset; 5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map; 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=open(filename,O_RDONLY | O_BINARY); 5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (file == -1) 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 5887f31770d102a777269fa2452cc6a1ce304da4e12cristy offset=(MagickOffsetType) lseek(file,0,SEEK_END); 5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((offset < 0) || (offset != (MagickOffsetType) ((ssize_t) offset))) 5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) offset; 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) NULL; 59637e0b38220ae42c2f0aba086d2252b7cbebcd434cristy if (~length >= (MaxTextExtent-1)) 5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) AcquireQuantumMemory(length+MaxTextExtent,sizeof(*string)); 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string == (char *) NULL) 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map=MapBlob(file,ReadMode,0,length); 6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map != (void *) NULL) 6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60654aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string,map,length); 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) UnmapBlob(map,length); 6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ssize_t 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6177f31770d102a777269fa2452cc6a1ce304da4e12cristy (void) lseek(file,0,SEEK_SET); 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < length; i+=count) 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=read(file,string+i,(size_t) MagickMin(length-i,(size_t) 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SSIZE_MAX)); 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (count <= 0) 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=0; 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (errno != EINTR) 6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i < length) 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=DestroyString(string); 6333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string[length]='\0'; 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=AcquireStringInfo(0); 6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(string_info->path,filename,MaxTextExtent); 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length=length; 6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) string; 6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n s t a n t S t r i n g % 6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConstantString() allocates memory for a string and copies the source string 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to that memory location (and returns it). Use it for strings that you do 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% do not expect to change over its lifetime. 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConstantString method is: 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *ConstantString(const char *source) 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *ConstantString(const char *source) 6703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=0; 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=strlen(source); 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) NULL; 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length >= 1UL) 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) AcquireQuantumMemory(length+1UL,sizeof(*destination)); 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 68754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(destination,source,length*sizeof(*destination)); 68854aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination[length]='\0'; 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o p y M a g i c k S t r i n g % 6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CopyMagickString() copies the source string to the destination string. The 7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% destination buffer is always null-terminated even if the string must be 7053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% truncated. The return value is the minimum of the source string length 7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% or the length parameter. 7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CopyMagickString method is: 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t CopyMagickString(const char *destination,char *source, 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const size_t length) 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: the destination string. 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the length of the destination string. 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7223ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t CopyMagickString(char *destination,const char *source, 7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t length) 7243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy n; 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=source; 7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=destination; 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (n=length; n > 4; n-=4) 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (n != 0) 7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (n--; n != 0; n--) 7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (length != 0) 7643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g % 7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyString() destroys memory associated with a string. 7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyString method is: 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *DestroyString(char *string) 7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: the string. 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *DestroyString(char *string) 7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) RelinquishMagickMemory(string)); 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g I n f o % 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyStringInfo() destroys memory associated with the StringInfo structure. 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyStringInfo method is: 8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *DestroyStringInfo(StringInfo *string_info) 8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *DestroyStringInfo(StringInfo *string_info) 8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum != (unsigned char *) NULL) 8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) RelinquishMagickMemory( 8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum); 8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->signature=(~MagickSignature); 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=(StringInfo *) RelinquishMagickMemory(string_info); 8273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g L i s t % 8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyStringList() zeros memory associated with a string list. 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyStringList method is: 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **DestroyStringList(char **list) 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o list: the string list. 8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **DestroyStringList(char **list) 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 854bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(list != (char **) NULL); 8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; list[i] != (char *) NULL; i++) 8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list[i]=DestroyString(list[i]); 8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list=(char **) RelinquishMagickMemory(list); 8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(list); 8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% E s c a p e S t r i n g % 8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% EscapeString() allocates memory for a backslash-escaped version of a 8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% source text string, copies the escaped version of the text to that 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% memory location while adding backslash characters, and returns the 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% escaped string. 8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the EscapeString method is: 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *EscapeString(const char *source,const char escape) 8833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o allocate_string: Method EscapeString returns the escaped string. 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o escape: the quoted string termination character to escape (e.g. '"'). 8913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *EscapeString(const char *source,const char escape) 8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 8993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const char *) NULL); 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(source); 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=source; *p != '\0'; p++) 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\\') || (*p == escape)) 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < 1) 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString"); 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length++; 9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) NULL; 91837e0b38220ae42c2f0aba086d2252b7cbebcd434cristy if (~length >= (MaxTextExtent-1)) 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) AcquireQuantumMemory(length+MaxTextExtent, 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*destination)); 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString"); 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=destination; 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=source; *p != '\0'; p++) 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\\') || (*p == escape)) 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='\\'; 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F i l e T o S t r i n g % 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FileToString() returns the contents of a file as a string. 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FileToString method is: 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *FileToString(const char *filename,const size_t extent, 9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o extent: Maximum length of the string. 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *FileToString(const char *filename,const size_t extent, 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo *exception) 9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 9693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 9703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 9723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename); 9733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) FileToBlob(filename,extent,&length,exception)); 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F i l e T o S t r i n g I n f o % 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FileToStringInfo() returns the contents of a file as a string. 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FileToStringInfo method is: 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *FileToStringInfo(const char *filename,const size_t extent, 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o extent: Maximum length of the string. 10003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *FileToStringInfo(const char *filename, 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t extent,ExceptionInfo *exception) 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 10083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename); 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=AcquireStringInfo(0); 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(string_info->path,filename,MaxTextExtent); 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=FileToBlob(filename,extent,&string_info->length,exception); 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=DestroyStringInfo(string_info); 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 10223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F o r m a t M a g i c k S i z e % 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FormatMagickSize() converts a size to a human readable format, for example, 10362ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy% 14k, 234m, 2.7g, or 3.0t. Scaling is done by repetitively dividing by 1037c15ce496469497409afa4e9b67f135726e720ac3cristy% 1000. 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FormatMagickSize method is: 10403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1041bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% ssize_t FormatMagickSize(const MagickSizeType size,char *format) 10423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o size: convert this size to a human readable format. 10463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1047b9080c9660565c4ab556254f276bfeca3d4edf02cristy% o bi: use power of two rather than power of ten. 1048b9080c9660565c4ab556254f276bfeca3d4edf02cristy% 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o format: human readable format. 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1052bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristyMagickExport ssize_t FormatMagickSize(const MagickSizeType size, 1053b9080c9660565c4ab556254f276bfeca3d4edf02cristy const MagickBooleanType bi,char *format) 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1055b9080c9660565c4ab556254f276bfeca3d4edf02cristy const char 1056b9080c9660565c4ab556254f276bfeca3d4edf02cristy **units; 1057b9080c9660565c4ab556254f276bfeca3d4edf02cristy 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 1059b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes, 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1062bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 10633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 10653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10669d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 10679d314ff2c17a77996c05413c2013880387e50f0ecristy count; 10689d314ff2c17a77996c05413c2013880387e50f0ecristy 10693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 1070b9080c9660565c4ab556254f276bfeca3d4edf02cristy *bi_units[] = 1071b9080c9660565c4ab556254f276bfeca3d4edf02cristy { 10722ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy "", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi", (char *) NULL 1073b9080c9660565c4ab556254f276bfeca3d4edf02cristy }, 1074b9080c9660565c4ab556254f276bfeca3d4edf02cristy *traditional_units[] = 10759bf9da36285c017ede08022f833c722ac503aff1cristy { 10762ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy "", "K", "M", "G", "T", "P", "E", "Z", "Y", (char *) NULL 10779bf9da36285c017ede08022f833c722ac503aff1cristy }; 10783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1079b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes=1000.0; 1080b9080c9660565c4ab556254f276bfeca3d4edf02cristy units=traditional_units; 1081b9080c9660565c4ab556254f276bfeca3d4edf02cristy if (bi != MagickFalse) 1082b9080c9660565c4ab556254f276bfeca3d4edf02cristy { 1083b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes=1024.0; 1084b9080c9660565c4ab556254f276bfeca3d4edf02cristy units=bi_units; 1085b9080c9660565c4ab556254f276bfeca3d4edf02cristy } 10863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(_MSC_VER) && (_MSC_VER == 1200) 10873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(double) ((MagickOffsetType) size); 10883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 10893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(double) size; 10903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1091b9080c9660565c4ab556254f276bfeca3d4edf02cristy for (i=0; (length >= bytes) && (units[i+1] != (const char *) NULL); i++) 1092b9080c9660565c4ab556254f276bfeca3d4edf02cristy length/=bytes; 10939bf9da36285c017ede08022f833c722ac503aff1cristy for (j=2; j < 12; j++) 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1095b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy count=FormatLocaleString(format,MaxTextExtent,"%.*g%sB",(int) (i+j),length, 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy units[i]); 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (strchr(format,'+') == (char *) NULL) 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count); 11013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F o r m a t M a g i c k T i m e % 11093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FormatMagickTime() returns the specified time in the Internet date/time 11153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% format and the length of the timestamp. 11163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FormatMagickTime method is: 11183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1119bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% ssize_t FormatMagickTime(const time_t time,const size_t length, 11203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *timestamp) 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 11233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o time: the time since the Epoch (00:00:00 UTC, January 1, 1970), 11253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% measured in seconds. 11263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the maximum length of the string. 11283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o timestamp: Return the Internet date/time here. 11303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1132bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristyMagickExport ssize_t FormatMagickTime(const time_t time,const size_t length, 11333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char *timestamp) 11343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1135bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 11363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 11373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy struct tm 11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gm_time, 11403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time; 11413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy time_t 11433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timezone; 11443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(timestamp != (char *) NULL); 11463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&local_time,0,sizeof(local_time)); 11473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&gm_time,0,sizeof(gm_time)); 11483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_LOCALTIME_R) 11493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) localtime_r(&time,&local_time); 11503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 11513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1152bc3392ad730a0886c1fabc9ae546b4de30a98526cristy struct tm 11533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *my_time; 11543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy my_time=localtime(&time); 11563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (my_time != (struct tm *) NULL) 11573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) memcpy(&local_time,my_time,sizeof(local_time)); 11583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 11603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_GMTIME_R) 11613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) gmtime_r(&time,&gm_time); 11623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 11633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1164bc3392ad730a0886c1fabc9ae546b4de30a98526cristy struct tm 11653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *my_time; 11663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy my_time=gmtime(&time); 11683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (my_time != (struct tm *) NULL) 11693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) memcpy(&gm_time,my_time,sizeof(gm_time)); 11703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 11723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timezone=(time_t) ((local_time.tm_min-gm_time.tm_min)/60+ 11733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time.tm_hour-gm_time.tm_hour+24*((local_time.tm_year- 11743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gm_time.tm_year) != 0 ? (local_time.tm_year-gm_time.tm_year) : 11753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (local_time.tm_yday-gm_time.tm_yday))); 1176b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy count=FormatLocaleString(timestamp,length, 11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%04d-%02d-%02dT%02d:%02d:%02d%+03ld:00",local_time.tm_year+1900, 11783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time.tm_mon+1,local_time.tm_mday,local_time.tm_hour, 1179f1d91246f9ab47d524abc076c6ead91e5cc27d03cristy local_time.tm_min,local_time.tm_sec,(long) timezone); 11803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count); 11813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 11843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t E n v i r o n m e n t V a l u e % 11893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetEnvironmentValue() returns the environment string that matches the 11953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% specified name. 11963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetEnvironmentValue method is: 11983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *GetEnvironmentValue(const char *name) 12003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: the environment name. 12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12063ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *GetEnvironmentValue(const char *name) 12073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 12093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *environment; 12103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy environment=getenv(name); 12123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (environment == (const char *) NULL) 12133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) NULL); 12143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(ConstantString(environment)); 12153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o D a t u m % 12233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoDatum() returns the datum associated with the string. 12293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoDatum method is: 12313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% unsigned char *GetStringInfoDatum(const StringInfo *string_info) 12333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 12373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12393ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport unsigned char *GetStringInfoDatum(const StringInfo *string_info) 12403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 12423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 12433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->datum); 12443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o L e n g t h % 12523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoLength() returns the string length. 12583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoLength method is: 12603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t GetStringInfoLength(const StringInfo *string_info) 12623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 12663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12683ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t GetStringInfoLength(const StringInfo *string_info) 12693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 12713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 12723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->length); 12733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o P a t h % 12813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoPath() returns the path associated with the string. 12873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoPath method is: 12893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *GetStringInfoPath(const StringInfo *string_info) 12913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 12953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12973ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport const char *GetStringInfoPath(const StringInfo *string_info) 12983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 13003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 13013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->path); 13023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 13053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o c a l e C o m p a r e % 13103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleCompare() performs a case-insensitive comparison of two strings 13163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% byte-by-byte, according to the ordering of the current locale encoding. 13173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleCompare returns an integer greater than, equal to, or less than 0, 13183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% if the string pointed to by p is greater than, equal to, or less than the 13193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string pointed to by q respectively. The sign of a non-zero return value 13207a40ba8d8dae1086103297305d7cd8825ea59fa9cristy% is determined by the sign of the difference between the values of the first 13217a40ba8d8dae1086103297305d7cd8825ea59fa9cristy% pair of bytes that differ in the strings being compared. 13223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LocaleCompare method is: 13243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1325de58b416b4e5170fd208f357abd6f06c8b6672e8cristy% int LocaleCompare(const char *p,const char *q) 13263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 13283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o p: A pointer to a character string. 13303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o q: A pointer to a character string to compare to p. 13323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1334de58b416b4e5170fd208f357abd6f06c8b6672e8cristyMagickExport int LocaleCompare(const char *p,const char *q) 13353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((p == (char *) NULL) && (q == (char *) NULL)) 13373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(0); 13383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (char *) NULL) 13393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(-1); 13403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q == (char *) NULL) 13413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(1); 13423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_STRCASECMP) 134327397b2a1c8338aae3601fcb4b4b2030107819abcristy return(strcasecmp(p,q)); 13443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 13453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1346de58b416b4e5170fd208f357abd6f06c8b6672e8cristy register int 13473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c, 1348a72c2d141539fbcdfb4fe293a3c95f4202ce0371cristy d; 13493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1350a72c2d141539fbcdfb4fe293a3c95f4202ce0371cristy for ( ; ; ) 13513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1352de58b416b4e5170fd208f357abd6f06c8b6672e8cristy c=(int) *((unsigned char *) p); 1353de58b416b4e5170fd208f357abd6f06c8b6672e8cristy d=(int) *((unsigned char *) q); 1354de58b416b4e5170fd208f357abd6f06c8b6672e8cristy if ((c == 0) || (AsciiMap[c] != AsciiMap[d])) 13553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1356a72c2d141539fbcdfb4fe293a3c95f4202ce0371cristy p++; 1357a72c2d141539fbcdfb4fe293a3c95f4202ce0371cristy q++; 13583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1359de58b416b4e5170fd208f357abd6f06c8b6672e8cristy return(AsciiMap[c]-(int) AsciiMap[d]); 13603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 13623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 13653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o c a l e L o w e r % 13703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleLower() transforms all of the characters in the supplied 13763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% null-terminated string, changing all uppercase letters to lowercase. 13773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LocaleLower method is: 13793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void LocaleLower(char *string) 13813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 13833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: A pointer to the string to convert to lower-case Locale. 13853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 13873ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void LocaleLower(char *string) 13883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 13903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 13913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string != (char *) NULL); 13933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=string; *q != '\0'; q++) 13943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(char) tolower((int) *q); 13953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 13983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o c a l e N C o m p a r e % 14033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleNCompare() performs a case-insensitive comparison of two 14093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% strings byte-by-byte, according to the ordering of the current locale 14103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% encoding. LocaleNCompare returns an integer greater than, equal to, or 14113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% less than 0, if the string pointed to by p is greater than, equal to, or 14123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% less than the string pointed to by q respectively. The sign of a non-zero 14133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% return value is determined by the sign of the difference between the 14143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% values of the first pair of bytes that differ in the strings being 14153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% compared. The LocaleNCompare method makes the same comparison as 14163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleCompare but looks at a maximum of n bytes. Bytes following a 14173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% null byte are not compared. 14183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LocaleNCompare method is: 14203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1421de58b416b4e5170fd208f357abd6f06c8b6672e8cristy% int LocaleNCompare(const char *p,const char *q,const size_t n) 14223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 14243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o p: A pointer to a character string. 14263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o q: A pointer to a character string to compare to p. 14283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14297a40ba8d8dae1086103297305d7cd8825ea59fa9cristy% o length: the number of characters to compare in strings p and q. 14303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1432de58b416b4e5170fd208f357abd6f06c8b6672e8cristyMagickExport int LocaleNCompare(const char *p,const char *q,const size_t length) 14333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 14343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (char *) NULL) 14353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(-1); 14363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q == (char *) NULL) 14373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(1); 14383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_STRNCASECMP) 143927397b2a1c8338aae3601fcb4b4b2030107819abcristy return(strncasecmp(p,q,length)); 14403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 14413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1442de58b416b4e5170fd208f357abd6f06c8b6672e8cristy register int 14433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c, 14443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d; 14453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1446b6af4a59b2597fbbedca1c2d388a48a917fa7e72cristy register size_t 1447c4cded1326b13304ea1084f15c44653a8fa2744dcristy i; 1448b6af4a59b2597fbbedca1c2d388a48a917fa7e72cristy 1449c4cded1326b13304ea1084f15c44653a8fa2744dcristy for (i=length; i != 0; i--) 14503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1451de58b416b4e5170fd208f357abd6f06c8b6672e8cristy c=(int) *((unsigned char *) p); 1452de58b416b4e5170fd208f357abd6f06c8b6672e8cristy d=(int) *((unsigned char *) q); 14533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (AsciiMap[c] != AsciiMap[d]) 1454de58b416b4e5170fd208f357abd6f06c8b6672e8cristy return(AsciiMap[c]-(int) AsciiMap[d]); 1455de58b416b4e5170fd208f357abd6f06c8b6672e8cristy if (c == 0) 1456de58b416b4e5170fd208f357abd6f06c8b6672e8cristy return(0); 14573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 14583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 14593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1460de58b416b4e5170fd208f357abd6f06c8b6672e8cristy return(0); 14613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 14633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 14643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 14663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o c a l e U p p e r % 14713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleUpper() transforms all of the characters in the supplied 14773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% null-terminated string, changing all lowercase letters to uppercase. 14783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LocaleUpper method is: 14803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void LocaleUpper(char *string) 14823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 14843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: A pointer to the string to convert to upper-case Locale. 14863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 14883ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void LocaleUpper(char *string) 14893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 14903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 14913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 14923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string != (char *) NULL); 14943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=string; *q != '\0'; q++) 14953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(char) toupper((int) *q); 14963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 14973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 14993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P r i n t S t r i n g I n f o % 15043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% PrintStringInfo() prints the string. 15103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the PrintStringInfo method is: 15123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void PrintStringInfo(FILE *file,const char *id, 15143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const StringInfo *string_info) 15153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 15173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o file: the file, typically stdout. 15193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o id: the string id. 15213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 15233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 15253ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void PrintStringInfo(FILE *file,const char *id, 15263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *string_info) 15273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 15283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 15293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 15303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 15323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 15333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 15343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(id != (const char *) NULL); 15363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",id); 15373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 15383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 15393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) string_info->datum; 15403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < string_info->length; i++) 15413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (((int) ((unsigned char) *p) < 32) && 15433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (isspace((int) ((unsigned char) *p)) == 0)) 15443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 15463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i == string_info->length) 15483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputs((char *) string_info->datum,file); 15503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('\n',file); 15513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 15523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 15543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to a HEX list. 15553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 15563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) string_info->datum; 15573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < string_info->length; i+=0x14) 15583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1559b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"0x%08lx: ",(unsigned long) (0x14*i)); 15603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=1; j <= MagickMin(string_info->length-i,0x14); j++) 15613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1562b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"%02lx",(unsigned long) (*(p+j)) & 0xff); 15633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 15643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; j <= 0x14; j++) 15673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 15713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 15743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=1; j <= MagickMin(string_info->length-i,0x14); j++) 15753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isprint((int) ((unsigned char) *p)) != 0) 15773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(*p,file); 15783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 15793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('-',file); 15803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 15813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('\n',file); 15833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 15853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 15873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R e s e t S t r i n g I n f o % 15923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ResetStringInfo() reset the string to all null bytes. 15983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ResetStringInfo method is: 16003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void ResetStringInfo(StringInfo *string_info) 16023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 16063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 16083ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void ResetStringInfo(StringInfo *string_info) 16093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 16103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 16113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 16123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 16133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info->datum,0,string_info->length); 16143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o % 16223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfo() copies the source string to the destination string. 16283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfo method is: 16303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfo(StringInfo *string_info,const StringInfo *source) 16323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 16363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 16383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 16403ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfo(StringInfo *string_info, 16413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 16423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 16433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 16443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 16453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 16463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (StringInfo *) NULL); 16473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source->signature == MagickSignature); 16483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length == 0) 16493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 16503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info->datum,0,string_info->length); 165154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum,source->datum,MagickMin(string_info->length, 165254aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy source->length)); 16533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o D a t u m % 16613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoDatum() copies bytes from the source string for the length of 16673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the destination string. 16683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoDatum method is: 16703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoDatum(StringInfo *string_info, 16723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const unsigned char *source) 16733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 16773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 16793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 16813ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoDatum(StringInfo *string_info, 16823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const unsigned char *source) 16833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 16843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 16853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 16863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 16873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length != 0) 168854aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum,source,string_info->length); 16893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o L e n g t h % 16973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoLength() set the string length to the specified value. 17033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoLength method is: 17053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoLength(StringInfo *string_info,const size_t length) 17073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 17113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the string length. 17133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17153ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoLength(StringInfo *string_info, 17163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t length) 17173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 17193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 17203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 17213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < MaxTextExtent) 17223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 17233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length=length; 17243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 17253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) AcquireQuantumMemory(length+ 17263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent,sizeof(*string_info->datum)); 17273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 17283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) ResizeQuantumMemory(string_info->datum, 17293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+MaxTextExtent,sizeof(*string_info->datum)); 17303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 17313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 17323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o D a t u m % 17403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoPath() sets the path associated with the string. 17463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoPath method is: 17483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoPath(StringInfo *string_info,const char *path) 17503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 17543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o path: the path. 17563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17583ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoPath(StringInfo *string_info,const char *path) 17593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 17613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 17623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 17633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(path != (const char *) NULL); 17643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(string_info->path,path,MaxTextExtent); 17653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S p l i t S t r i n g I n f o % 17733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SplitStringInfo() splits a string into two and returns it. 17793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SplitStringInfo method is: 17813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *SplitStringInfo(StringInfo *string_info,const size_t offset) 17833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 17873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17893ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *SplitStringInfo(StringInfo *string_info, 17903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t offset) 17913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 17933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *split_info; 17943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 17963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 17973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 17983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (offset > string_info->length) 17993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 18003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy split_info=AcquireStringInfo(offset); 18013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfo(split_info,string_info); 18021bd862cf6e1ac2d4d43eac8fb35eeb96a24f1cbacristy (void) memmove(string_info->datum,string_info->datum+offset, 18033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length-offset+MaxTextExtent); 18043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoLength(string_info,string_info->length-offset); 18053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(split_info); 18063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g I n f o T o S t r i n g % 18143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfoToString() converts a string info string to a C string. 18203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringInfoToString method is: 18223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *StringInfoToString(const StringInfo *string_info) 18243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string. 18283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18303ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *StringInfoToString(const StringInfo *string_info) 18313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 18333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string; 18343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 18363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 18373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) NULL; 18393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=string_info->length; 184037e0b38220ae42c2f0aba086d2252b7cbebcd434cristy if (~length >= (MaxTextExtent-1)) 18413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) AcquireQuantumMemory(length+MaxTextExtent,sizeof(*string)); 1842208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy if (string == (char *) NULL) 1843208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy return((char *) NULL); 184454aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string,(char *) string_info->datum,length*sizeof(*string)); 1845208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy string[length]='\0'; 18463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string); 18473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o A r g v % 18553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringToArgv() converts a text string into command line arguments. 18613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToArgv method is: 18633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **StringToArgv(const char *text,int *argc) 18653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o argv: Method StringToArgv returns the string list unless an error 18693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% occurs, otherwise NULL. 18703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text: Specifies the string to segment into a list. 18723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o argc: This integer pointer returns the number of arguments in the 18743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% list. 18753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18773ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **StringToArgv(const char *text,int *argc) 18783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 18803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **argv; 18813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 18833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 18843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 18853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1886bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 18873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 18883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *argc=0; 18903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 18913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 18923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 18933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine the number of arguments. 18943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 18953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; ) 18963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 18973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 18983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 1899a20c904a6f3e3a11939d5260485be72d5c849c63cristy if (*p == '\0') 190074895d33fcb55c51dd9205984fadb102e20bae16cristy break; 19013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*argc)++; 19023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '"') 19033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p++; (*p != '"') && (*p != '\0'); p++) ; 19043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\'') 19053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p++; (*p != '\'') && (*p != '\0'); p++) ; 19063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *p)) == 0) && (*p != '\0')) 19073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 19083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*argc)++; 19101b26e1f30a41ec15901231d6baba7345e2d3cd50cristy argv=(char **) AcquireQuantumMemory((size_t) (*argc+1UL),sizeof(*argv)); 19113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (argv == (char **) NULL) 19123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertStringToARGV"); 19133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to an ASCII list. 19153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 19163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[0]=AcquireString("magick"); 19173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 1918bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=1; i < (ssize_t) *argc; i++) 19193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 19213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 19223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=p; 19233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '"') 19243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 19263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q++; (*q != '"') && (*q != '\0'); q++) ; 19273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 19293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\'') 19303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 193106b15f4383540e74d93dbe58488e193619b09df7cristy p++; 19323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q++; (*q != '\'') && (*q != '\0'); q++) ; 19333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 19353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *q)) == 0) && (*q != '\0')) 19363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 19373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+MaxTextExtent, 19383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(**argv)); 19393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (argv[i] == (char *) NULL) 19403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i--; i >= 0; i--) 19423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]=DestroyString(argv[i]); 19433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv=(char **) RelinquishMagickMemory(argv); 19443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError, 19453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToConvertStringToARGV"); 19463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 194754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(argv[i],p,(size_t) (q-p)); 1948208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy argv[i][q-p]='\0'; 19493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=q; 19503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *p)) == 0) && (*p != '\0')) 19513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 19523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]=(char *) NULL; 19543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(argv); 19553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 19563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 19583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g I n f o T o H e x S t r i n g % 19633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfoToHexString() converts a string info string to a C string. 19693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringInfoToHexString method is: 19713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *StringInfoToHexString(const StringInfo *string_info) 19733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 19753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string. 19773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 19793ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *StringInfoToHexString(const StringInfo *string_info) 19803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 19813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 19823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string; 19833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const unsigned char 19853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 19863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1987bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 19883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 19893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned char 19913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 19923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 19943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 19953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 19973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[16]; 19983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=string_info->length; 20003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < MaxTextExtent) 20013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 20023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) AcquireQuantumMemory(length+MaxTextExtent,2*sizeof(*string)); 20033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string == (char *) NULL) 20043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 20053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[0]='0'; 20063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[1]='1'; 20073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[2]='2'; 20083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[3]='3'; 20093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[4]='4'; 20103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[5]='5'; 20113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[6]='6'; 20123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[7]='7'; 20133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[8]='8'; 20143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[9]='9'; 20153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[10]='a'; 20163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[11]='b'; 20173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[12]='c'; 20183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[13]='d'; 20193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[14]='e'; 20203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_digits[15]='f'; 20213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=string_info->datum; 20223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(unsigned char *) string; 2023bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) string_info->length; i++) 20243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=hex_digits[(*p >> 4) & 0x0f]; 20263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=hex_digits[*p & 0x0f]; 20273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 20283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 20303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string); 20313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 20323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 20343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o k e n % 20393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringToken() extracts a token a from the string. 20453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToken method is: 20473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *StringToken(const char *delimiters,char **string) 20493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 20513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o delimiters: one or more delimiters. 20533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: return the first token in the string. If none is found, return 20553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% NULL. 20563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 20583ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *StringToken(const char *delimiters,char **string) 20593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 20603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 20613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 20623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 20643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 20653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 20673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *r; 20683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 20703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c, 20713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d; 20723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(*string); 20743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (char *) NULL) 20753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) NULL); 20763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=p; ; ) 20773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c=(*p++); 20793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy r=delimiters; 20803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 20813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d=(*r++); 20833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (c == d) 20843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (c == '\0') 20863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) NULL; 20873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 20883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p[-1]='\0'; 20893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string=p; 20903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(q); 20913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while (d != '\0'); 20933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 20953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 20973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o L i s t % 21023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringToList() converts a text string into a list by segmenting the text 21083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string at each carriage return discovered. The list is converted to HEX 21093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% characters if any control characters are discovered within the text string. 21103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToList method is: 21123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **StringToList(const char *text) 21143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 21163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text: Specifies the string to segment into a list. 21183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 21203ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **StringToList(const char *text) 21213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 21223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 21233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **textlist; 21243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 21263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 21273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2128bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 21293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 21303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2131bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 21323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines; 21333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 21353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 21363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; p++) 21373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (((int) ((unsigned char) *p) < 32) && 21383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (isspace((int) ((unsigned char) *p)) == 0)) 21393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\0') 21413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 21433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 21443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to an ASCII list. 21473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines=1; 21493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; p++) 21503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\n') 21513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines++; 21523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist=(char **) AcquireQuantumMemory((size_t) lines+1UL, 21533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*textlist)); 21543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist == (char **) NULL) 21553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 21563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 2157bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) lines; i++) 21583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=p; *q != '\0'; q++) 21603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*q == '\r') || (*q == '\n')) 21613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+MaxTextExtent, 21632e25ee6694d278f85b4b3b9169fe0017aac8ab8ecristy sizeof(**textlist)); 21643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist[i] == (char *) NULL) 21653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 216654aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(textlist[i],p,(size_t) (q-p)); 2167208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy textlist[i][q-p]='\0'; 21683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\r') 21693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 21703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=q+1; 21713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 21743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 21763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_string[MaxTextExtent]; 21773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 21793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 21803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2181bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 21823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 21833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to a HEX list. 21863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2187bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy lines=(size_t) (strlen(text)/0x14)+1; 21883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist=(char **) AcquireQuantumMemory((size_t) lines+1UL, 21893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*textlist)); 21903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist == (char **) NULL) 21913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 21923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 2193bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) lines; i++) 21943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist[i]=(char *) AcquireQuantumMemory(2UL*MaxTextExtent, 21962e25ee6694d278f85b4b3b9169fe0017aac8ab8ecristy sizeof(**textlist)); 21973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist[i] == (char *) NULL) 21983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 2199b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(textlist[i],MaxTextExtent,"0x%08lx: ", 2200f1d91246f9ab47d524abc076c6ead91e5cc27d03cristy (long) (0x14*i)); 22013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=textlist[i]+strlen(textlist[i]); 2202bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=1; j <= (ssize_t) MagickMin(strlen(p),0x14); j++) 22033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2204b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(hex_string,MaxTextExtent,"%02x",*(p+j)); 22053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(q,hex_string,MaxTextExtent); 22063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=2; 22073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 22083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 22093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; j <= 0x14; j++) 22113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 22133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 22143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 22153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 22163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 2218bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=1; j <= (ssize_t) MagickMin(strlen(p),0x14); j++) 22193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isprint((int) ((unsigned char) *p)) != 0) 22213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 22223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='-'; 22243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 22253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 22273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist[i]=(char *) NULL; 22303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(textlist); 22313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 22323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 22343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o S t r i n g I n f o % 22393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2244bca58f3e54324602dbfe91102715646f23a2ad99cristy% StringToStringInfo() converts a string to a StringInfo type. 22453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToStringInfo method is: 22473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *StringToStringInfo(const char *string) 22493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 22513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: The string. 22533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 22553ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *StringToStringInfo(const char *string) 22563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 22573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 22583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 22593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 22613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string != (const char *) NULL); 2262bca58f3e54324602dbfe91102715646f23a2ad99cristy string_info=AcquireStringInfo(strlen(string)); 22633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoDatum(string_info,(const unsigned char *) string); 22643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 22653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 22663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 22683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i p S t r i n g % 22733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StripString() strips any whitespace or quotes from the beginning and end of 22793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% a string of characters. 22803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StripString method is: 22823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void StripString(char *message) 22843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 22863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o message: Specifies an array of characters. 22883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 22903ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void StripString(char *message) 22913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 22923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 22933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 22943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 22953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 22973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 22983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(message != (char *) NULL); 23003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*message == '\0') 23013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 23023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(message); 23033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=message; 23043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 23053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 23063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\'') || (*p == '"')) 23073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 23083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=message+length-1; 23093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *q)) != 0) && (q > p)) 23103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q--; 23113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q > p) 23123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*q == '\'') || (*q == '"')) 23133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q--; 2314a63c1ba89fd24334d128308e74acbcaee52f4ba3cristy (void) memmove(message,p,(size_t) (q-p+1)); 23153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy message[q-p+1]='\0'; 23163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=message; *p != '\0'; p++) 23173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\n') 23183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p=' '; 23193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 23203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 23233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S u b s t i t u t e S t r i n g % 23273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 23313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2332f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% SubstituteString() performs string substitution on a string, replacing the 2333f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% string with the substituted version. Buffer must be allocated from the heap. 2334bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% If the string is matched and status, MagickTrue is returned otherwise 2335bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% MagickFalse. 23363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SubstituteString method is: 23383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2339f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% MagickBooleanType SubstituteString(char **string,const char *search, 23403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *replace) 23413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 23433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2344f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% o string: the string to perform replacements on; replaced with new 23453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% allocation if a replacement is made. 23463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2347bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% o search: search for this string. 23483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2349bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% o replace: replace any matches with this string. 23503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2352f1b72c1946e0ea84ad884f358cbcc595ab162b10cristyMagickExport MagickBooleanType SubstituteString(char **string, 23533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *search,const char *replace) 23543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2355bc3392ad730a0886c1fabc9ae546b4de30a98526cristy MagickBooleanType 2356bc3392ad730a0886c1fabc9ae546b4de30a98526cristy status; 23573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2358bc3392ad730a0886c1fabc9ae546b4de30a98526cristy register char 2359bc3392ad730a0886c1fabc9ae546b4de30a98526cristy *p; 23603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 2362bc3392ad730a0886c1fabc9ae546b4de30a98526cristy extent, 2363bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent, 2364bc3392ad730a0886c1fabc9ae546b4de30a98526cristy search_extent; 2365bc3392ad730a0886c1fabc9ae546b4de30a98526cristy 2366f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy ssize_t 2367f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy offset; 2368f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy 2369bc3392ad730a0886c1fabc9ae546b4de30a98526cristy status=MagickFalse; 2370bc3392ad730a0886c1fabc9ae546b4de30a98526cristy search_extent=0, 2371bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent=0; 2372f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy for (p=strchr(*string,*search); p != (char *) NULL; p=strchr(p+1,*search)) 23733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2374f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (search_extent == 0) 2375f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy search_extent=strlen(search); 2376f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (strncmp(p,search,search_extent) != 0) 2377bc3392ad730a0886c1fabc9ae546b4de30a98526cristy continue; 23783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2379bc3392ad730a0886c1fabc9ae546b4de30a98526cristy We found a match. 23803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2381f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy status=MagickTrue; 2382bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (replace_extent == 0) 2383bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent=strlen(replace); 2384bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (replace_extent > search_extent) 23853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2386bc3392ad730a0886c1fabc9ae546b4de30a98526cristy /* 2387bc3392ad730a0886c1fabc9ae546b4de30a98526cristy Make room for the replacement string. 2388bc3392ad730a0886c1fabc9ae546b4de30a98526cristy */ 2389de58b416b4e5170fd208f357abd6f06c8b6672e8cristy offset=(ssize_t) (p-(*string)); 2390e08c3b83ee93ae67d66b8a8163b2165bc389b7d7cristy extent=strlen(*string)+replace_extent-search_extent+1; 2391f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy *string=(char *) ResizeQuantumMemory(*string,extent+MaxTextExtent, 2392f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy sizeof(*p)); 2393f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (*string == (char *) NULL) 23943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 2395f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy p=(*string)+offset; 23963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2398bc3392ad730a0886c1fabc9ae546b4de30a98526cristy Replace string. 23993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2400bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (search_extent != replace_extent) 24010a9b3721bfaf93092820843450387092e7c30b0bcristy (void) CopyMagickMemory(p+replace_extent,p+search_extent, 24020a9b3721bfaf93092820843450387092e7c30b0bcristy strlen(p+search_extent)+1); 24030a9b3721bfaf93092820843450387092e7c30b0bcristy (void) CopyMagickMemory(p,replace,replace_extent); 2404f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy p+=replace_extent-1; 24053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2406bc3392ad730a0886c1fabc9ae546b4de30a98526cristy return(status); 24073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2408