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