string.c revision 067622389550e83c76724917c7e5c55b0887d153
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SSSSS TTTTT RRRR IIIII N N GGGG % 7670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SS T R R I NN N G % 8670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SSS T RRRR I N N N G GGG % 9670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SS T R R I N NN G G % 10670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% SSSSS T R R IIIII N N GGGG % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% MagickCore String Methods % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% Software Design % 16670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% John Cristy % 17670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% August 2003 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 201454be7db7a897f42cd40e4165f945d77196a6f8cristy% Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% You may not use this file except in compliance with the license. You may % 2499bbf2c9e414ade263949978671025728413c1c9cristy% obtain a copy of the license at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2899bbf2c9e414ade263949978671025728413c1c9cristy% unless required by applicable law or agreed to in writing, software % 2999bbf2c9e414ade263949978671025728413c1c9cristy% distributed under the license is distributed on an "as is" basis, % 3099bbf2c9e414ade263949978671025728413c1c9cristy% without warranties or conditions of any kind, either express or implied. % 31670aa3c328eb7d97a3edd44ef7b4244d2effa935cristy% See the license for the specific language governing permissions and % 3299bbf2c9e414ade263949978671025728413c1c9cristy% limitations under the license. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4099bbf2c9e414ade263949978671025728413c1c9cristy include declarations. 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/locale_.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/log.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 51d2d11ec3ae6f94d5b49cbaf90e7f9ca18c252d29cristy#include "MagickCore/nt-base-private.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/property.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/signature-private.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 56b1d483a6a6a5678173db9d60bec52dd5a37826beanthony#include "MagickCore/string-private.h" 5718c6c27bc513a8c73a5bc4a2c157afb19c3e24b9cristy#include "MagickCore/utility-private.h" 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6099bbf2c9e414ade263949978671025728413c1c9cristy static declarations. 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if !defined(MAGICKCORE_HAVE_STRCASECMP) || !defined(MAGICKCORE_HAVE_STRNCASECMP) 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic const unsigned char 6499bbf2c9e414ade263949978671025728413c1c9cristy asciimap[] = 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xc0, 0xe1, 0xe2, 0xe3, 0xe4, 0xc5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf8, 0xf9, 0xfa, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xfc, 0xfd, 0xfe, 0xff, 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A c q u i r e S t r i n g % 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% AcquireString() allocates memory for a string and copies the source string 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to that memory location (and returns it). 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 105b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% The returned string shoud be freed using DestoryString() or 106b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% RelinquishMagickMemory() when finished. 107b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the AcquireString method is: 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *AcquireString(const char *source) 1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *AcquireString(const char *source) 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=0; 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=strlen(source); 12854aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy if (~length < MaxTextExtent) 12954aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 13054aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination=(char *) AcquireQuantumMemory(length+MaxTextExtent, 13154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy sizeof(*destination)); 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 13654aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(destination,source,length*sizeof(*destination)); 13754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination[length]='\0'; 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A c q u i r e S t r i n g I n f o % 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% AcquireStringInfo() allocates the StringInfo structure. 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the AcquireStringInfo method is: 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *AcquireStringInfo(const size_t length) 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the string length. 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *AcquireStringInfo(const size_t length) 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16873bd4a51b419e914565bdf204bf1540dc4c8ee26cristy string_info=(StringInfo *) AcquireMagickMemory(sizeof(*string_info)); 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info == (StringInfo *) NULL) 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info,0,sizeof(*string_info)); 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->signature=MagickSignature; 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length=length; 1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length != 0) 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) NULL; 17737e0b38220ae42c2f0aba086d2252b7cbebcd434cristy if (~string_info->length >= (MaxTextExtent-1)) 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) AcquireQuantumMemory( 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length+MaxTextExtent,sizeof(*string_info->datum)); 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1918723e4bcd840478cecfd29891e792edb499cd0e9cristy% B l o b T o S t r i n g I n f o % 1928723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1938723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1948723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 1958723e4bcd840478cecfd29891e792edb499cd0e9cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1968723e4bcd840478cecfd29891e792edb499cd0e9cristy% 1978723e4bcd840478cecfd29891e792edb499cd0e9cristy% BlobToStringInfo() returns the contents of a blob as a string. 1988723e4bcd840478cecfd29891e792edb499cd0e9cristy% 1998723e4bcd840478cecfd29891e792edb499cd0e9cristy% The format of the BlobToStringInfo method is: 2008723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2018723e4bcd840478cecfd29891e792edb499cd0e9cristy% StringInfo *BlobToStringInfo(const void *blob,const size_t length) 2028723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2038723e4bcd840478cecfd29891e792edb499cd0e9cristy% A description of each parameter follows: 2048723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2058723e4bcd840478cecfd29891e792edb499cd0e9cristy% o blob: the blob. 2068723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2078723e4bcd840478cecfd29891e792edb499cd0e9cristy% o length: the length of the blob. 2088723e4bcd840478cecfd29891e792edb499cd0e9cristy% 2098723e4bcd840478cecfd29891e792edb499cd0e9cristy*/ 2108723e4bcd840478cecfd29891e792edb499cd0e9cristyMagickExport StringInfo *BlobToStringInfo(const void *blob,const size_t length) 2118723e4bcd840478cecfd29891e792edb499cd0e9cristy{ 2128723e4bcd840478cecfd29891e792edb499cd0e9cristy StringInfo 2138723e4bcd840478cecfd29891e792edb499cd0e9cristy *string_info; 2148723e4bcd840478cecfd29891e792edb499cd0e9cristy 2158723e4bcd840478cecfd29891e792edb499cd0e9cristy string_info=AcquireStringInfo(0); 216f83163456f47ac94ba9b1e83d540f3f08d9e7f1ccristy string_info->length=length; 217a10e07483be74957a2b75f4ae0776bff433947a4cristy if (~string_info->length >= (MaxTextExtent-1)) 218f83163456f47ac94ba9b1e83d540f3f08d9e7f1ccristy string_info->datum=(unsigned char *) AcquireQuantumMemory( 219f83163456f47ac94ba9b1e83d540f3f08d9e7f1ccristy string_info->length+MaxTextExtent,sizeof(*string_info->datum)); 2208723e4bcd840478cecfd29891e792edb499cd0e9cristy if (string_info->datum == (unsigned char *) NULL) 2218723e4bcd840478cecfd29891e792edb499cd0e9cristy { 2228723e4bcd840478cecfd29891e792edb499cd0e9cristy string_info=DestroyStringInfo(string_info); 2238723e4bcd840478cecfd29891e792edb499cd0e9cristy return((StringInfo *) NULL); 2248723e4bcd840478cecfd29891e792edb499cd0e9cristy } 2258723e4bcd840478cecfd29891e792edb499cd0e9cristy if (blob != (const void *) NULL) 2268723e4bcd840478cecfd29891e792edb499cd0e9cristy (void) memcpy(string_info->datum,blob,length); 2278723e4bcd840478cecfd29891e792edb499cd0e9cristy return(string_info); 2288723e4bcd840478cecfd29891e792edb499cd0e9cristy} 2298723e4bcd840478cecfd29891e792edb499cd0e9cristy 2308723e4bcd840478cecfd29891e792edb499cd0e9cristy/* 2318723e4bcd840478cecfd29891e792edb499cd0e9cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2328723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2338723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2348723e4bcd840478cecfd29891e792edb499cd0e9cristy% % 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C l o n e S t r i n g % 2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CloneString() allocates memory for the destination string and copies 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the source string to that memory location. 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24472feaa664126c198b9ccd072b6ef181338a76c6canthony% If source is a NULL pointer the destination will also be set to a NULL 24572feaa664126c198b9ccd072b6ef181338a76c6canthony% point (any existing string is freed). Otherwise the memory is allocated 24672feaa664126c198b9ccd072b6ef181338a76c6canthony% (or resized) and the source string copied into it. 24772feaa664126c198b9ccd072b6ef181338a76c6canthony% 24872feaa664126c198b9ccd072b6ef181338a76c6canthony% A pointer to the copy of the source string, or NULL is returned. 24972feaa664126c198b9ccd072b6ef181338a76c6canthony% 250067622389550e83c76724917c7e5c55b0887d153anthony% Free the string using DestoryString(). 251067622389550e83c76724917c7e5c55b0887d153anthony% 2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CloneString method is: 2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *CloneString(char **destination,const char *source) 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: A pointer to a character string. 2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *CloneString(char **destination,const char *source) 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char **) NULL); 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source == (const char *) NULL) 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination != (char *) NULL) 2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=DestroyString(*destination); 2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=AcquireString(source); 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(source); 2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < MaxTextExtent) 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=(char *) ResizeQuantumMemory(*destination,length+MaxTextExtent, 285b936f7089f8bd56bf771c7cb6017a9af98a4ffd5cristy sizeof(**destination)); 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 28854aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy if (length != 0) 289f7e6ab4637e31098c9cfd70546aed44870c27ee5cristy (void) memcpy(*destination,source,length*sizeof(**destination)); 290208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy (*destination)[length]='\0'; 2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*destination); 2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C l o n e S t r i n g I n f o % 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CloneStringInfo() clones a copy of the StringInfo structure. 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CloneStringInfo method is: 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *CloneStringInfo(const StringInfo *string_info) 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *CloneStringInfo(const StringInfo *string_info) 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *clone_info; 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy clone_info=AcquireStringInfo(string_info->length); 3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length != 0) 32654aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(clone_info->datum,string_info->datum,string_info->length+1); 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(clone_info); 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o m p a r e S t r i n g I n f o % 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CompareStringInfo() compares the two datums target and source. It returns 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% an integer less than, equal to, or greater than zero if target is found, 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% respectively, to be less than, to match, or be greater than source. 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CompareStringInfo method is: 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% int CompareStringInfo(const StringInfo *target,const StringInfo *source) 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o target: the target string. 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic inline size_t MagickMin(const size_t x,const size_t y) 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < y) 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(x); 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(y); 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport int CompareStringInfo(const StringInfo *target, 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(target != (StringInfo *) NULL); 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(target->signature == MagickSignature); 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (StringInfo *) NULL); 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source->signature == MagickSignature); 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=memcmp(target->datum,source->datum,MagickMin(target->length, 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source->length)); 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != 0) 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target->length == source->length) 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(0); 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(target->length < source->length ? -1 : 1); 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e M a g i c k S t r i n g % 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateMagickString() concatenates the source string to the destination 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. The destination buffer is always null-terminated even if the 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string must be truncated. 3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateMagickString method is: 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t ConcatenateMagickString(char *destination,const char *source, 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const size_t length) 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: the destination string. 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the length of the destination string. 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t ConcatenateMagickString(char *destination, 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *source,const size_t length) 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char *) NULL); 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const char *) NULL); 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(length >= 1); 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=source; 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=destination; 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=length; 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((i-- != 0) && (*q != '\0')) 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=(size_t) (q-destination); 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=length-count; 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i == 0) 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count+strlen(p)); 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (*p != '\0') 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i != 1) 4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i--; 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count+(p-source)); 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e S t r i n g % 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateString() appends a copy of string source, including the 4653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% terminating null character, to the end of string destination. 4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateString method is: 4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType ConcatenateString(char **destination, 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *source) 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: A pointer to a character string. 4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport MagickBooleanType ConcatenateString(char **destination, 4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *source) 4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 48354aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination_length, 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length, 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_length; 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(destination != (char **) NULL); 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source == (const char *) NULL) 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=AcquireString(source); 4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination_length=strlen(*destination); 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_length=strlen(source); 49754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy length=destination_length; 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < source_length) 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=source_length; 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < MaxTextExtent) 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination=(char *) ResizeQuantumMemory(*destination,length+MaxTextExtent, 504cf1667cdd8f64c3d41e5cf404bce8799e3b5da9bcristy sizeof(**destination)); 5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*destination == (char *) NULL) 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 50754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy if (source_length != 0) 50854aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy((*destination)+destination_length,source,source_length); 50954aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (*destination)[length]='\0'; 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n c a t e n a t e S t r i n g I n f o % 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConcatenateStringInfo() concatenates the source string to the destination 5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConcatenateStringInfo method is: 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void ConcatenateStringInfo(StringInfo *string_info, 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const StringInfo *source) 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5393ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void ConcatenateStringInfo(StringInfo *string_info, 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const StringInfo *) NULL); 5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=string_info->length; 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < source->length) 5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString"); 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoLength(string_info,length+source->length); 55354aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum+length,source->datum,source->length); 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 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 % 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConfigureFileToStringInfo() returns the contents of a configure file as a 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. 5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConfigureFileToStringInfo method is: 5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *ConfigureFileToStringInfo(const char *filename) 5733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 58099bbf2c9e414ade263949978671025728413c1c9cristyMagickExport StringInfo *ConfigureFileToStringInfo(const char *filename) 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string; 5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file; 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickOffsetType 5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy offset; 5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map; 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 60118c6c27bc513a8c73a5bc4a2c157afb19c3e24b9cristy file=open_utf8(filename,O_RDONLY | O_BINARY,0); 6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (file == -1) 6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6047f31770d102a777269fa2452cc6a1ce304da4e12cristy offset=(MagickOffsetType) lseek(file,0,SEEK_END); 6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((offset < 0) || (offset != (MagickOffsetType) ((ssize_t) offset))) 6063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) offset; 6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) NULL; 61237e0b38220ae42c2f0aba086d2252b7cbebcd434cristy if (~length >= (MaxTextExtent-1)) 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) AcquireQuantumMemory(length+MaxTextExtent,sizeof(*string)); 6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string == (char *) NULL) 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map=MapBlob(file,ReadMode,0,length); 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map != (void *) NULL) 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62254aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string,map,length); 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) UnmapBlob(map,length); 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 6293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ssize_t 6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6337f31770d102a777269fa2452cc6a1ce304da4e12cristy (void) lseek(file,0,SEEK_SET); 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < length; i+=count) 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=read(file,string+i,(size_t) MagickMin(length-i,(size_t) 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SSIZE_MAX)); 6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (count <= 0) 6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count=0; 6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (errno != EINTR) 6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i < length) 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=DestroyString(string); 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string[length]='\0'; 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=close(file)-1; 6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=AcquireStringInfo(0); 6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(string_info->path,filename,MaxTextExtent); 6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length=length; 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) string; 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o n s t a n t S t r i n g % 6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ConstantString() allocates memory for a string and copies the source string 6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to that memory location (and returns it). Use it for strings that you do 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% do not expect to change over its lifetime. 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 676067622389550e83c76724917c7e5c55b0887d153anthony% When finished free the string using DestoryString(). 677067622389550e83c76724917c7e5c55b0887d153anthony% 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ConstantString method is: 6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *ConstantString(const char *source) 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *ConstantString(const char *source) 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=0; 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+=strlen(source); 6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) NULL; 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length >= 1UL) 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) AcquireQuantumMemory(length+1UL,sizeof(*destination)); 7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 70554aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(destination,source,length*sizeof(*destination)); 70654aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy destination[length]='\0'; 7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C o p y M a g i c k S t r i n g % 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 721067622389550e83c76724917c7e5c55b0887d153anthony% CopyMagickString() copies the source string to the destination string, with 722067622389550e83c76724917c7e5c55b0887d153anthony% out exceeding the given pre-declared length. 723067622389550e83c76724917c7e5c55b0887d153anthony% 724067622389550e83c76724917c7e5c55b0887d153anthony% The destination buffer is always null-terminated even if the string must be 725067622389550e83c76724917c7e5c55b0887d153anthony% truncated. The return value is the minimum of the source string length or 726067622389550e83c76724917c7e5c55b0887d153anthony% the length parameter. 7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CopyMagickString method is: 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t CopyMagickString(const char *destination,char *source, 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const size_t length) 7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o destination: the destination string. 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the length of the destination string. 7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t CopyMagickString(char *destination,const char *source, 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t length) 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy n; 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75477e3fcc5964bb24d44e3a362a82a80bca4f9d43bcristy if (source == (const char *) NULL) 75577e3fcc5964bb24d44e3a362a82a80bca4f9d43bcristy return(0); 7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=source; 7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=destination; 7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (n=length; n > 4; n-=4) 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (n != 0) 7783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (n--; n != 0; n--) 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*p++); 7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\0') 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (length != 0) 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((size_t) (p-source-1)); 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g % 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyString() destroys memory associated with a string. 8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyString method is: 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *DestroyString(char *string) 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: the string. 8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *DestroyString(char *string) 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) RelinquishMagickMemory(string)); 8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g I n f o % 8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyStringInfo() destroys memory associated with the StringInfo structure. 8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyStringInfo method is: 8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *DestroyStringInfo(StringInfo *string_info) 8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *DestroyStringInfo(StringInfo *string_info) 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum != (unsigned char *) NULL) 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) RelinquishMagickMemory( 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum); 8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->signature=(~MagickSignature); 8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=(StringInfo *) RelinquishMagickMemory(string_info); 8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y S t r i n g L i s t % 8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyStringList() zeros memory associated with a string list. 8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyStringList method is: 8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **DestroyStringList(char **list) 8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o list: the string list. 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8743ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **DestroyStringList(char **list) 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 876bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(list != (char **) NULL); 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; list[i] != (char *) NULL; i++) 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list[i]=DestroyString(list[i]); 8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list=(char **) RelinquishMagickMemory(list); 8833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(list); 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% E s c a p e S t r i n g % 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% EscapeString() allocates memory for a backslash-escaped version of a 8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% source text string, copies the escaped version of the text to that 8993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% memory location while adding backslash characters, and returns the 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% escaped string. 9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the EscapeString method is: 9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *EscapeString(const char *source,const char escape) 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o allocate_string: Method EscapeString returns the escaped string. 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: A character string. 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o escape: the quoted string termination character to escape (e.g. '"'). 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *EscapeString(const char *source,const char escape) 9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination; 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (const char *) NULL); 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(source); 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=source; *p != '\0'; p++) 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\\') || (*p == escape)) 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < 1) 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString"); 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length++; 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) NULL; 94037e0b38220ae42c2f0aba086d2252b7cbebcd434cristy if (~length >= (MaxTextExtent-1)) 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination=(char *) AcquireQuantumMemory(length+MaxTextExtent, 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*destination)); 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination == (char *) NULL) 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString"); 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination='\0'; 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source != (char *) NULL) 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=destination; 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=source; *p != '\0'; p++) 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\\') || (*p == escape)) 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='\\'; 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(destination); 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F i l e T o S t r i n g % 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FileToString() returns the contents of a file as a string. 9723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FileToString method is: 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *FileToString(const char *filename,const size_t extent, 9763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o extent: Maximum length of the string. 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 9853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *FileToString(const char *filename,const size_t extent, 9883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo *exception) 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename); 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) FileToBlob(filename,extent,&length,exception)); 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F i l e T o S t r i n g I n f o % 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FileToStringInfo() returns the contents of a file as a string. 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FileToStringInfo method is: 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *FileToStringInfo(const char *filename,const size_t extent, 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 10183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the filename. 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o extent: Maximum length of the string. 10223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 10243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *FileToStringInfo(const char *filename, 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t extent,ExceptionInfo *exception) 10283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (const char *) NULL); 10333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename); 10343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=AcquireStringInfo(0); 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(string_info->path,filename,MaxTextExtent); 10373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=FileToBlob(filename,extent,&string_info->length,exception); 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 10393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info=DestroyStringInfo(string_info); 10413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 10423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F o r m a t M a g i c k S i z e % 10523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FormatMagickSize() converts a size to a human readable format, for example, 10582ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy% 14k, 234m, 2.7g, or 3.0t. Scaling is done by repetitively dividing by 1059c15ce496469497409afa4e9b67f135726e720ac3cristy% 1000. 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FormatMagickSize method is: 10623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1063bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% ssize_t FormatMagickSize(const MagickSizeType size,char *format) 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 10663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o size: convert this size to a human readable format. 10683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1069b9080c9660565c4ab556254f276bfeca3d4edf02cristy% o bi: use power of two rather than power of ten. 1070b9080c9660565c4ab556254f276bfeca3d4edf02cristy% 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o format: human readable format. 10723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 107499bbf2c9e414ade263949978671025728413c1c9cristyMagickExport ssize_t FormatMagickSize(const MagickSizeType size, 1075b9080c9660565c4ab556254f276bfeca3d4edf02cristy const MagickBooleanType bi,char *format) 10763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1077b9080c9660565c4ab556254f276bfeca3d4edf02cristy const char 1078b9080c9660565c4ab556254f276bfeca3d4edf02cristy **units; 1079b9080c9660565c4ab556254f276bfeca3d4edf02cristy 10803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 1081b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes, 10823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 10833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1084bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 10853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 10863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 10873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10889d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 10899d314ff2c17a77996c05413c2013880387e50f0ecristy count; 10909d314ff2c17a77996c05413c2013880387e50f0ecristy 10913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 1092b9080c9660565c4ab556254f276bfeca3d4edf02cristy *bi_units[] = 1093b9080c9660565c4ab556254f276bfeca3d4edf02cristy { 10942ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy "", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi", (char *) NULL 1095b9080c9660565c4ab556254f276bfeca3d4edf02cristy }, 1096b9080c9660565c4ab556254f276bfeca3d4edf02cristy *traditional_units[] = 10979bf9da36285c017ede08022f833c722ac503aff1cristy { 10982ce15c9745c0b3318a7d32e7c63fee9ab4913c6bcristy "", "K", "M", "G", "T", "P", "E", "Z", "Y", (char *) NULL 10999bf9da36285c017ede08022f833c722ac503aff1cristy }; 11003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1101b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes=1000.0; 1102b9080c9660565c4ab556254f276bfeca3d4edf02cristy units=traditional_units; 1103b9080c9660565c4ab556254f276bfeca3d4edf02cristy if (bi != MagickFalse) 1104b9080c9660565c4ab556254f276bfeca3d4edf02cristy { 1105b9080c9660565c4ab556254f276bfeca3d4edf02cristy bytes=1024.0; 1106b9080c9660565c4ab556254f276bfeca3d4edf02cristy units=bi_units; 1107b9080c9660565c4ab556254f276bfeca3d4edf02cristy } 11083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(_MSC_VER) && (_MSC_VER == 1200) 11093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(double) ((MagickOffsetType) size); 11103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 11113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(double) size; 11123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1113b9080c9660565c4ab556254f276bfeca3d4edf02cristy for (i=0; (length >= bytes) && (units[i+1] != (const char *) NULL); i++) 1114b9080c9660565c4ab556254f276bfeca3d4edf02cristy length/=bytes; 11159bf9da36285c017ede08022f833c722ac503aff1cristy for (j=2; j < 12; j++) 11163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1117b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy count=FormatLocaleString(format,MaxTextExtent,"%.*g%sB",(int) (i+j),length, 11183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy units[i]); 11193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (strchr(format,'+') == (char *) NULL) 11203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count); 11233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 11263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F o r m a t M a g i c k T i m e % 11313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FormatMagickTime() returns the specified time in the Internet date/time 11373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% format and the length of the timestamp. 11383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FormatMagickTime method is: 11403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1141bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% ssize_t FormatMagickTime(const time_t time,const size_t length, 11423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *timestamp) 11433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 11453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o time: the time since the Epoch (00:00:00 UTC, January 1, 1970), 11473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% measured in seconds. 11483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the maximum length of the string. 11503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o timestamp: Return the Internet date/time here. 11523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1154bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristyMagickExport ssize_t FormatMagickTime(const time_t time,const size_t length, 11553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char *timestamp) 11563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1157bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 11583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 11593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy struct tm 11613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gm_time, 11623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time; 11633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy time_t 11653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timezone; 11663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(timestamp != (char *) NULL); 11683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&local_time,0,sizeof(local_time)); 11693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&gm_time,0,sizeof(gm_time)); 11703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_LOCALTIME_R) 11713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) localtime_r(&time,&local_time); 11723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 11733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1174bc3392ad730a0886c1fabc9ae546b4de30a98526cristy struct tm 11753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *my_time; 11763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy my_time=localtime(&time); 11783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (my_time != (struct tm *) NULL) 11793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) memcpy(&local_time,my_time,sizeof(local_time)); 11803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 11823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_GMTIME_R) 11833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) gmtime_r(&time,&gm_time); 11843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 11853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1186bc3392ad730a0886c1fabc9ae546b4de30a98526cristy struct tm 11873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *my_time; 11883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy my_time=gmtime(&time); 11903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (my_time != (struct tm *) NULL) 11913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) memcpy(&gm_time,my_time,sizeof(gm_time)); 11923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 11943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timezone=(time_t) ((local_time.tm_min-gm_time.tm_min)/60+ 11953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time.tm_hour-gm_time.tm_hour+24*((local_time.tm_year- 11963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gm_time.tm_year) != 0 ? (local_time.tm_year-gm_time.tm_year) : 11973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (local_time.tm_yday-gm_time.tm_yday))); 1198b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy count=FormatLocaleString(timestamp,length, 11993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%04d-%02d-%02dT%02d:%02d:%02d%+03ld:00",local_time.tm_year+1900, 12003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy local_time.tm_mon+1,local_time.tm_mday,local_time.tm_hour, 1201f1d91246f9ab47d524abc076c6ead91e5cc27d03cristy local_time.tm_min,local_time.tm_sec,(long) timezone); 12023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(count); 12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t E n v i r o n m e n t V a l u e % 12113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetEnvironmentValue() returns the environment string that matches the 12173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% specified name. 12183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetEnvironmentValue method is: 12203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *GetEnvironmentValue(const char *name) 12223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: the environment name. 12263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 122899bbf2c9e414ade263949978671025728413c1c9cristyMagickExport char *GetEnvironmentValue(const char *name) 12293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 12313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *environment; 12323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy environment=getenv(name); 12343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (environment == (const char *) NULL) 12353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) NULL); 12363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(ConstantString(environment)); 12373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o D a t u m % 12453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoDatum() returns the datum associated with the string. 12513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoDatum method is: 12533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% unsigned char *GetStringInfoDatum(const StringInfo *string_info) 12553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 12593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12613ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport unsigned char *GetStringInfoDatum(const StringInfo *string_info) 12623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 12643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 12653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->datum); 12663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o L e n g t h % 12743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoLength() returns the string length. 12803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoLength method is: 12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size_t GetStringInfoLength(const StringInfo *string_info) 12843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 12883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12903ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport size_t GetStringInfoLength(const StringInfo *string_info) 12913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 12943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->length); 12953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t S t r i n g I n f o P a t h % 13033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetStringInfoPath() returns the path associated with the string. 13093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetStringInfoPath method is: 13113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *GetStringInfoPath(const StringInfo *string_info) 13133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 13153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 13173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 13193ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport const char *GetStringInfoPath(const StringInfo *string_info) 13203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 13223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 13233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info->path); 13243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 13273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 13303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1331dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy+ I n t e r p r e t S i P r e f i x V a l u e % 1332dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1333dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1334dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1335dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1336dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1337dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% InterpretSiPrefixValue() converts the initial portion of the string to a 1338dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% double representation. It also recognizes SI prefixes (e.g. B, KB, MiB, 1339dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% etc.). 1340dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1341dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% The format of the InterpretSiPrefixValue method is: 1342dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1343dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% double InterpretSiPrefixValue(const char *value,char **sentinal) 1344dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1345dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% A description of each parameter follows: 1346dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1347dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% o value: the string value. 1348dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1349dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% o sentinal: if sentinal is not NULL, return a pointer to the character 1350dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% after the last character used in the conversion. 1351dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% 1352dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy*/ 1353dbdd0e35efc03c9bccda644f5407db38b7c17eeccristyMagickExport double InterpretSiPrefixValue(const char *restrict string, 1354dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy char **restrict sentinal) 1355dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy{ 1356dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy char 1357dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy *q; 1358dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy 1359dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy double 1360dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy value; 1361dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy 1362dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy value=InterpretLocaleValue(string,&q); 1363dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if (q != string) 1364dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1365dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if ((*q >= 'E') && (*q <= 'z')) 1366dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1367dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy double 1368dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy e; 1369dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy 13700c2684f14358e568d33818fd9182c3aad93c4c0dcristy switch ((int) ((unsigned char) *q)) 13710c2684f14358e568d33818fd9182c3aad93c4c0dcristy { 13720c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'y': e=(-24.0); break; 13730c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'z': e=(-21.0); break; 13740c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'a': e=(-18.0); break; 13750c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'f': e=(-15.0); break; 13760c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'p': e=(-12.0); break; 13770c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'n': e=(-9.0); break; 13780c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'u': e=(-6.0); break; 13790c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'm': e=(-3.0); break; 13800c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'c': e=(-2.0); break; 13810c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'd': e=(-1.0); break; 13820c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'h': e=2.0; break; 13830c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'k': e=3.0; break; 13840c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'K': e=3.0; break; 13850c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'M': e=6.0; break; 13860c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'G': e=9.0; break; 13870c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'T': e=12.0; break; 13880c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'P': e=15.0; break; 13890c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'E': e=18.0; break; 13900c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'Z': e=21.0; break; 13910c2684f14358e568d33818fd9182c3aad93c4c0dcristy case 'Y': e=24.0; break; 13920c2684f14358e568d33818fd9182c3aad93c4c0dcristy default: e=0.0; break; 13930c2684f14358e568d33818fd9182c3aad93c4c0dcristy } 1394dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if (e >= MagickEpsilon) 1395dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1396dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if (q[1] == 'i') 1397dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1398dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy value*=pow(2.0,e/0.3); 1399dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy q+=2; 1400dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1401dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy else 1402dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy { 1403dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy value*=pow(10.0,e); 1404dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy q++; 1405dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1406dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1407dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1408c0f1ed139581fbc6f0200243db6ccd87532e1644cristy if (*q == 'B') 1409099a73566dcb0cddef83ca4e94fe3e2534e6b19ecristy q++; 1410dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy } 1411dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy if (sentinal != (char **) NULL) 1412dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy *sentinal=q; 1413dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy return(value); 1414dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy} 1415dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy 1416dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy/* 1417dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1418dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1419dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 1420dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy% % 14216f2013165d72f7d8ef5f66bb9453126d88113809anthony% I s S t r i n g T r u e % 14226f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14236f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14246f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14256f2013165d72f7d8ef5f66bb9453126d88113809anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14266f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14276f2013165d72f7d8ef5f66bb9453126d88113809anthony% IsStringTrue() returns MagickTrue if the value is "true", "on", "yes" or 14286f2013165d72f7d8ef5f66bb9453126d88113809anthony% "1". Any other string or undefined returns MagickFalse. 14296f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14306f2013165d72f7d8ef5f66bb9453126d88113809anthony% Typically this is used to look at strings (options or artifacts) which 14316f2013165d72f7d8ef5f66bb9453126d88113809anthony% has a default value of "false", when not defined. 14326f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14336f2013165d72f7d8ef5f66bb9453126d88113809anthony% The format of the IsStringTrue method is: 14346f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14356f2013165d72f7d8ef5f66bb9453126d88113809anthony% MagickBooleanType IsStringTrue(const char *value) 14366f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14376f2013165d72f7d8ef5f66bb9453126d88113809anthony% A description of each parameter follows: 14386f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14396f2013165d72f7d8ef5f66bb9453126d88113809anthony% o value: Specifies a pointer to a character array. 14406f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14416f2013165d72f7d8ef5f66bb9453126d88113809anthony*/ 14426f2013165d72f7d8ef5f66bb9453126d88113809anthonyMagickExport MagickBooleanType IsStringTrue(const char *value) 14436f2013165d72f7d8ef5f66bb9453126d88113809anthony{ 14446f2013165d72f7d8ef5f66bb9453126d88113809anthony if (value == (const char *) NULL) 14456f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 14466f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"true") == 0) 14476f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14486f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"on") == 0) 14496f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14506f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"yes") == 0) 14516f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14526f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"1") == 0) 14536f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14546f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 14556f2013165d72f7d8ef5f66bb9453126d88113809anthony} 14566f2013165d72f7d8ef5f66bb9453126d88113809anthony 14576f2013165d72f7d8ef5f66bb9453126d88113809anthony/* 14586f2013165d72f7d8ef5f66bb9453126d88113809anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14596f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14606f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14616f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14626f2013165d72f7d8ef5f66bb9453126d88113809anthony% I s S t r i n g N o t F a l s e % 14636f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14646f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14656f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 14666f2013165d72f7d8ef5f66bb9453126d88113809anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14676f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14686f2013165d72f7d8ef5f66bb9453126d88113809anthony% IsStringNotFalse() returns MagickTrue, unless the string specifically 14696f2013165d72f7d8ef5f66bb9453126d88113809anthony% has a value that makes this false. that is if it has a value of 14706f2013165d72f7d8ef5f66bb9453126d88113809anthony% "false", "off", "no" or "0". 14716f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14726f2013165d72f7d8ef5f66bb9453126d88113809anthony% Typically this is used to look at strings (options or artifacts) which 14736f2013165d72f7d8ef5f66bb9453126d88113809anthony% has a default value of "true", when it has not been defined. 14746f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14756f2013165d72f7d8ef5f66bb9453126d88113809anthony% The format of the IsStringNotFalse method is: 14766f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14776f2013165d72f7d8ef5f66bb9453126d88113809anthony% MagickBooleanType IsStringNotFalse(const char *value) 14786f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14796f2013165d72f7d8ef5f66bb9453126d88113809anthony% A description of each parameter follows: 14806f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14816f2013165d72f7d8ef5f66bb9453126d88113809anthony% o value: Specifies a pointer to a character array. 14826f2013165d72f7d8ef5f66bb9453126d88113809anthony% 14836f2013165d72f7d8ef5f66bb9453126d88113809anthony*/ 14846f2013165d72f7d8ef5f66bb9453126d88113809anthonyMagickExport MagickBooleanType IsStringNotFalse(const char *value) 14856f2013165d72f7d8ef5f66bb9453126d88113809anthony{ 14866f2013165d72f7d8ef5f66bb9453126d88113809anthony if (value == (const char *) NULL) 14876f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14886f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"false") == 0) 14896f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 14906f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"off") == 0) 14916f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 14926f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"no") == 0) 14936f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 14946f2013165d72f7d8ef5f66bb9453126d88113809anthony if (LocaleCompare(value,"0") == 0) 14956f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickFalse); 14966f2013165d72f7d8ef5f66bb9453126d88113809anthony return(MagickTrue); 14976f2013165d72f7d8ef5f66bb9453126d88113809anthony} 14986f2013165d72f7d8ef5f66bb9453126d88113809anthony 14996f2013165d72f7d8ef5f66bb9453126d88113809anthony/* 15006f2013165d72f7d8ef5f66bb9453126d88113809anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15016f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 15026f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 15036f2013165d72f7d8ef5f66bb9453126d88113809anthony% % 15043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o c a l e C o m p a r e % 15053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleCompare() performs a case-insensitive comparison of two strings 15113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% byte-by-byte, according to the ordering of the current locale encoding. 15123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleCompare returns an integer greater than, equal to, or less than 0, 15133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% if the string pointed to by p is greater than, equal to, or less than the 15143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string pointed to by q respectively. The sign of a non-zero return value 15157a40ba8d8dae1086103297305d7cd8825ea59fa9cristy% is determined by the sign of the difference between the values of the first 15167a40ba8d8dae1086103297305d7cd8825ea59fa9cristy% pair of bytes that differ in the strings being compared. 15173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LocaleCompare method is: 15193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1520de58b416b4e5170fd208f357abd6f06c8b6672e8cristy% int LocaleCompare(const char *p,const char *q) 15213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 15233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o p: A pointer to a character string. 15253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o q: A pointer to a character string to compare to p. 15273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1529de58b416b4e5170fd208f357abd6f06c8b6672e8cristyMagickExport int LocaleCompare(const char *p,const char *q) 15303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 15313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((p == (char *) NULL) && (q == (char *) NULL)) 15323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(0); 15333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (char *) NULL) 15343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(-1); 15353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q == (char *) NULL) 15363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(1); 15373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_STRCASECMP) 153827397b2a1c8338aae3601fcb4b4b2030107819abcristy return(strcasecmp(p,q)); 15393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 15403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1541de58b416b4e5170fd208f357abd6f06c8b6672e8cristy register int 15423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c, 1543a72c2d141539fbcdfb4fe293a3c95f4202ce0371cristy d; 15443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1545a72c2d141539fbcdfb4fe293a3c95f4202ce0371cristy for ( ; ; ) 15463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1547de58b416b4e5170fd208f357abd6f06c8b6672e8cristy c=(int) *((unsigned char *) p); 1548de58b416b4e5170fd208f357abd6f06c8b6672e8cristy d=(int) *((unsigned char *) q); 1549de58b416b4e5170fd208f357abd6f06c8b6672e8cristy if ((c == 0) || (AsciiMap[c] != AsciiMap[d])) 15503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1551a72c2d141539fbcdfb4fe293a3c95f4202ce0371cristy p++; 1552a72c2d141539fbcdfb4fe293a3c95f4202ce0371cristy q++; 15533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1554de58b416b4e5170fd208f357abd6f06c8b6672e8cristy return(AsciiMap[c]-(int) AsciiMap[d]); 15553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 15573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 15583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 15603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o c a l e L o w e r % 15653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleLower() transforms all of the characters in the supplied 15713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% null-terminated string, changing all uppercase letters to lowercase. 15723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LocaleLower method is: 15743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void LocaleLower(char *string) 15763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 15783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: A pointer to the string to convert to lower-case Locale. 15803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 15823ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void LocaleLower(char *string) 15833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 15843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 15853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 15863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string != (char *) NULL); 15883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=string; *q != '\0'; q++) 15893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(char) tolower((int) *q); 15903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 15913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 15933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o c a l e N C o m p a r e % 15983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1603067622389550e83c76724917c7e5c55b0887d153anthony% LocaleNCompare() performs a case-insensitive comparison of two strings 1604067622389550e83c76724917c7e5c55b0887d153anthony% byte-by-byte, according to the ordering of the current locale encoding. 1605067622389550e83c76724917c7e5c55b0887d153anthony% 1606067622389550e83c76724917c7e5c55b0887d153anthony% LocaleNCompare returns an integer greater than, equal to, or less than 0, 1607067622389550e83c76724917c7e5c55b0887d153anthony% if the string pointed to by p is greater than, equal to, or less than the 1608067622389550e83c76724917c7e5c55b0887d153anthony% string pointed to by q respectively. The sign of a non-zero return value 1609067622389550e83c76724917c7e5c55b0887d153anthony% is determined by the sign of the difference between the values of the first 1610067622389550e83c76724917c7e5c55b0887d153anthony% pair of bytes that differ in the strings being compared. 1611067622389550e83c76724917c7e5c55b0887d153anthony% 1612067622389550e83c76724917c7e5c55b0887d153anthony% The LocaleNCompare method makes the same comparison as LocaleCompare but 1613067622389550e83c76724917c7e5c55b0887d153anthony% looks at a maximum of n bytes. Bytes following a null byte are not 1614067622389550e83c76724917c7e5c55b0887d153anthony% compared. 16153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LocaleNCompare method is: 16173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1618de58b416b4e5170fd208f357abd6f06c8b6672e8cristy% int LocaleNCompare(const char *p,const char *q,const size_t n) 16193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o p: A pointer to a character string. 16233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o q: A pointer to a character string to compare to p. 16253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16267a40ba8d8dae1086103297305d7cd8825ea59fa9cristy% o length: the number of characters to compare in strings p and q. 16273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1629de58b416b4e5170fd208f357abd6f06c8b6672e8cristyMagickExport int LocaleNCompare(const char *p,const char *q,const size_t length) 16303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 163178c2169582d169faeb7fc02a06b5188b6dbd970ecristy if ((p == (char *) NULL) && (q == (char *) NULL)) 163278c2169582d169faeb7fc02a06b5188b6dbd970ecristy return(0); 16333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (char *) NULL) 16343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(-1); 16353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q == (char *) NULL) 16363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(1); 16373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_STRNCASECMP) 163827397b2a1c8338aae3601fcb4b4b2030107819abcristy return(strncasecmp(p,q,length)); 16393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 16403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1641de58b416b4e5170fd208f357abd6f06c8b6672e8cristy register int 16423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c, 16433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d; 16443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1645b6af4a59b2597fbbedca1c2d388a48a917fa7e72cristy register size_t 1646c4cded1326b13304ea1084f15c44653a8fa2744dcristy i; 1647b6af4a59b2597fbbedca1c2d388a48a917fa7e72cristy 1648c4cded1326b13304ea1084f15c44653a8fa2744dcristy for (i=length; i != 0; i--) 16493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1650de58b416b4e5170fd208f357abd6f06c8b6672e8cristy c=(int) *((unsigned char *) p); 1651de58b416b4e5170fd208f357abd6f06c8b6672e8cristy d=(int) *((unsigned char *) q); 16523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (AsciiMap[c] != AsciiMap[d]) 1653de58b416b4e5170fd208f357abd6f06c8b6672e8cristy return(AsciiMap[c]-(int) AsciiMap[d]); 1654de58b416b4e5170fd208f357abd6f06c8b6672e8cristy if (c == 0) 1655de58b416b4e5170fd208f357abd6f06c8b6672e8cristy return(0); 16563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 16573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 16583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1659de58b416b4e5170fd208f357abd6f06c8b6672e8cristy return(0); 16603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 16623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o c a l e U p p e r % 16703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LocaleUpper() transforms all of the characters in the supplied 16763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% null-terminated string, changing all lowercase letters to uppercase. 16773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LocaleUpper method is: 16793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void LocaleUpper(char *string) 16813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: A pointer to the string to convert to upper-case Locale. 16853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 16873ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void LocaleUpper(char *string) 16883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 16893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 16903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 16913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string != (char *) NULL); 16933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=string; *q != '\0'; q++) 16943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(char) toupper((int) *q); 16953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P r i n t S t r i n g I n f o % 17033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% PrintStringInfo() prints the string. 17093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the PrintStringInfo method is: 17113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void PrintStringInfo(FILE *file,const char *id, 17133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const StringInfo *string_info) 17143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o file: the file, typically stdout. 17183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o id: the string id. 17203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 17223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17243ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void PrintStringInfo(FILE *file,const char *id, 17253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *string_info) 17263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 17283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 17293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register size_t 17313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 17323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 17333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(id != (const char *) NULL); 17353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",id); 17363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 17373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 17383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) string_info->datum; 17393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < string_info->length; i++) 17403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (((int) ((unsigned char) *p) < 32) && 17423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (isspace((int) ((unsigned char) *p)) == 0)) 17433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 17443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 17453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i == string_info->length) 17473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputs((char *) string_info->datum,file); 17493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('\n',file); 17503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 17513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 17533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to a HEX list. 17543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 17553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) string_info->datum; 17563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < string_info->length; i+=0x14) 17573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1758b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"0x%08lx: ",(unsigned long) (0x14*i)); 17593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=1; j <= MagickMin(string_info->length-i,0x14); j++) 17603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1761b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"%02lx",(unsigned long) (*(p+j)) & 0xff); 17623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 17633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 17643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; j <= 0x14; j++) 17663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 17683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 17693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 17703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 17713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(' ',file); 17733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=1; j <= MagickMin(string_info->length-i,0x14); j++) 17743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isprint((int) ((unsigned char) *p)) != 0) 17763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc(*p,file); 17773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 17783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('-',file); 17793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 17803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fputc('\n',file); 17823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R e s e t S t r i n g I n f o % 17913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ResetStringInfo() reset the string to all null bytes. 17973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ResetStringInfo method is: 17993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void ResetStringInfo(StringInfo *string_info) 18013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 18053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18073ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void ResetStringInfo(StringInfo *string_info) 18083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 18103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 18113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 18123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info->datum,0,string_info->length); 18133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o % 18213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfo() copies the source string to the destination string. 18273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfo method is: 18293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfo(StringInfo *string_info,const StringInfo *source) 18313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 18353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 18373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18393ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfo(StringInfo *string_info, 18403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const StringInfo *source) 18413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 18433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 18443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 18453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source != (StringInfo *) NULL); 18463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(source->signature == MagickSignature); 18473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length == 0) 18483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 18493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(string_info->datum,0,string_info->length); 185054aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum,source->datum,MagickMin(string_info->length, 185154aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy source->length)); 18523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o D a t u m % 18603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoDatum() copies bytes from the source string for the length of 18663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the destination string. 18673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoDatum method is: 18693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoDatum(StringInfo *string_info, 18713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const unsigned char *source) 18723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 18763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o source: the source string. 18783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18803ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoDatum(StringInfo *string_info, 18813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const unsigned char *source) 18823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 18843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 18853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 18863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->length != 0) 188754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string_info->datum,source,string_info->length); 18883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o L e n g t h % 18963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoLength() set the string length to the specified value. 19023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoLength method is: 19043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoLength(StringInfo *string_info,const size_t length) 19063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 19083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 19103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o length: the string length. 19123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 19143ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoLength(StringInfo *string_info, 19153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t length) 19163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 19173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 19183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 19193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 19203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (~length < MaxTextExtent) 19213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 19223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length=length; 19233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 19243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) AcquireQuantumMemory(length+ 19253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent,sizeof(*string_info->datum)); 19263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 19273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->datum=(unsigned char *) ResizeQuantumMemory(string_info->datum, 19283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length+MaxTextExtent,sizeof(*string_info->datum)); 19293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (string_info->datum == (unsigned char *) NULL) 19303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 19313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 19323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 19343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t S t r i n g I n f o D a t u m % 19393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetStringInfoPath() sets the path associated with the string. 19453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetStringInfoPath method is: 19473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void SetStringInfoPath(StringInfo *string_info,const char *path) 19493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 19513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 19533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o path: the path. 19553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 19573ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetStringInfoPath(StringInfo *string_info,const char *path) 19583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 19593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 19603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 19613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 19623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(path != (const char *) NULL); 19633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(string_info->path,path,MaxTextExtent); 19643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 19653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 19673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S p l i t S t r i n g I n f o % 19723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SplitStringInfo() splits a string into two and returns it. 19783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SplitStringInfo method is: 19803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *SplitStringInfo(StringInfo *string_info,const size_t offset) 19823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 19843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string info. 19863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 19883ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *SplitStringInfo(StringInfo *string_info, 19893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const size_t offset) 19903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 19913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 19923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *split_info; 19933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 19953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info != (StringInfo *) NULL); 19963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string_info->signature == MagickSignature); 19973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (offset > string_info->length) 19983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((StringInfo *) NULL); 19993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy split_info=AcquireStringInfo(offset); 20003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfo(split_info,string_info); 20011bd862cf6e1ac2d4d43eac8fb35eeb96a24f1cbacristy (void) memmove(string_info->datum,string_info->datum+offset, 20023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string_info->length-offset+MaxTextExtent); 20033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoLength(string_info,string_info->length-offset); 20043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(split_info); 20053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 20063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 20083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g I n f o T o S t r i n g % 20133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfoToString() converts a string info string to a C string. 20193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringInfoToString method is: 20213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *StringInfoToString(const StringInfo *string_info) 20233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 20253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string_info: the string. 20273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 20293ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *StringInfoToString(const StringInfo *string_info) 20303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 20313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 20323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string; 20333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 20353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 20363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) NULL; 20383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=string_info->length; 203937e0b38220ae42c2f0aba086d2252b7cbebcd434cristy if (~length >= (MaxTextExtent-1)) 20403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string=(char *) AcquireQuantumMemory(length+MaxTextExtent,sizeof(*string)); 2041208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy if (string == (char *) NULL) 2042208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy return((char *) NULL); 204354aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(string,(char *) string_info->datum,length*sizeof(*string)); 2044208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy string[length]='\0'; 20453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string); 20463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 20473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 20493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2053b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% S t r i n g I n f o T o H e x S t r i n g % 2054b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 2055b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 2056b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 2057b1d483a6a6a5678173db9d60bec52dd5a37826beanthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2058b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2059b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% StringInfoToHexString() converts a string info string to a C string. 2060b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2061b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% The format of the StringInfoToHexString method is: 2062b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2063b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% char *StringInfoToHexString(const StringInfo *string_info) 2064b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2065b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% A description of each parameter follows: 2066b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2067b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% o string_info: the string. 2068b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2069b1d483a6a6a5678173db9d60bec52dd5a37826beanthony*/ 2070b1d483a6a6a5678173db9d60bec52dd5a37826beanthonyMagickExport char *StringInfoToHexString(const StringInfo *string_info) 2071b1d483a6a6a5678173db9d60bec52dd5a37826beanthony{ 2072b1d483a6a6a5678173db9d60bec52dd5a37826beanthony char 2073b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *string; 2074b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2075b1d483a6a6a5678173db9d60bec52dd5a37826beanthony register const unsigned char 2076b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *p; 2077b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2078b1d483a6a6a5678173db9d60bec52dd5a37826beanthony register ssize_t 2079b1d483a6a6a5678173db9d60bec52dd5a37826beanthony i; 2080b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2081b1d483a6a6a5678173db9d60bec52dd5a37826beanthony register unsigned char 2082b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q; 2083b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2084b1d483a6a6a5678173db9d60bec52dd5a37826beanthony size_t 2085b1d483a6a6a5678173db9d60bec52dd5a37826beanthony length; 2086b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2087b1d483a6a6a5678173db9d60bec52dd5a37826beanthony unsigned char 2088b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[16]; 2089b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2090b1d483a6a6a5678173db9d60bec52dd5a37826beanthony length=string_info->length; 2091b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (~length < MaxTextExtent) 2092b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 2093b1d483a6a6a5678173db9d60bec52dd5a37826beanthony string=(char *) AcquireQuantumMemory(length+MaxTextExtent,2*sizeof(*string)); 2094b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (string == (char *) NULL) 2095b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 2096b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[0]='0'; 2097b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[1]='1'; 2098b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[2]='2'; 2099b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[3]='3'; 2100b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[4]='4'; 2101b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[5]='5'; 2102b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[6]='6'; 2103b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[7]='7'; 2104b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[8]='8'; 2105b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[9]='9'; 2106b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[10]='a'; 2107b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[11]='b'; 2108b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[12]='c'; 2109b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[13]='d'; 2110b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[14]='e'; 2111b1d483a6a6a5678173db9d60bec52dd5a37826beanthony hex_digits[15]='f'; 2112b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p=string_info->datum; 2113b1d483a6a6a5678173db9d60bec52dd5a37826beanthony q=(unsigned char *) string; 2114b1d483a6a6a5678173db9d60bec52dd5a37826beanthony for (i=0; i < (ssize_t) string_info->length; i++) 2115b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 2116b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q++=hex_digits[(*p >> 4) & 0x0f]; 2117b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q++=hex_digits[*p & 0x0f]; 2118b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p++; 2119b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 2120b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q='\0'; 2121b1d483a6a6a5678173db9d60bec52dd5a37826beanthony return(string); 2122b1d483a6a6a5678173db9d60bec52dd5a37826beanthony} 2123b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2124b1d483a6a6a5678173db9d60bec52dd5a37826beanthony/* 2125b1d483a6a6a5678173db9d60bec52dd5a37826beanthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2126b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 2127b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 2128b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% % 21293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o A r g v % 21303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringToArgv() converts a text string into command line arguments. 213631f1bf7bb6ee2698a2afab42ee0329b11663636canthony% The 'argv' array of arguments, is returned while the number of arguments 213731f1bf7bb6ee2698a2afab42ee0329b11663636canthony% is returned via the provided integer variable pointer. 213831f1bf7bb6ee2698a2afab42ee0329b11663636canthony% 213931f1bf7bb6ee2698a2afab42ee0329b11663636canthony% Simple 'word' tokenizer, which allows for each word to be optionally 214031f1bf7bb6ee2698a2afab42ee0329b11663636canthony% quoted. However it will not allow use of partial quotes, or escape 214131f1bf7bb6ee2698a2afab42ee0329b11663636canthony% characters. 21423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToArgv method is: 21443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **StringToArgv(const char *text,int *argc) 21463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 21483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o argv: Method StringToArgv returns the string list unless an error 21503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% occurs, otherwise NULL. 21513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text: Specifies the string to segment into a list. 21533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o argc: This integer pointer returns the number of arguments in the 21553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% list. 21563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 21583ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **StringToArgv(const char *text,int *argc) 21593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 21603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 21613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **argv; 21623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 21643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 21653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 21663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2167bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 21683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 21693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *argc=0; 21713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 21723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 21733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine the number of arguments. 21753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; ) 21773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 21793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 2180a20c904a6f3e3a11939d5260485be72d5c849c63cristy if (*p == '\0') 218174895d33fcb55c51dd9205984fadb102e20bae16cristy break; 21823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*argc)++; 21833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '"') 21843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p++; (*p != '"') && (*p != '\0'); p++) ; 21853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\'') 21863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p++; (*p != '\'') && (*p != '\0'); p++) ; 21873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *p)) == 0) && (*p != '\0')) 21883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 21893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*argc)++; 21911b26e1f30a41ec15901231d6baba7345e2d3cd50cristy argv=(char **) AcquireQuantumMemory((size_t) (*argc+1UL),sizeof(*argv)); 21923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (argv == (char **) NULL) 21933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertStringToARGV"); 21943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to an ASCII list. 21963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[0]=AcquireString("magick"); 21983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 2199bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=1; i < (ssize_t) *argc; i++) 22003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 22023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 22033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=p; 22043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '"') 22053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 22073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q++; (*q != '"') && (*q != '\0'); q++) ; 22083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\'') 22113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 221206b15f4383540e74d93dbe58488e193619b09df7cristy p++; 22133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q++; (*q != '\'') && (*q != '\0'); q++) ; 22143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *q)) == 0) && (*q != '\0')) 22173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 22183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+MaxTextExtent, 22193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(**argv)); 22203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (argv[i] == (char *) NULL) 22213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i--; i >= 0; i--) 22233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]=DestroyString(argv[i]); 22243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv=(char **) RelinquishMagickMemory(argv); 22253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError, 22263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToConvertStringToARGV"); 22273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 222854aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(argv[i],p,(size_t) (q-p)); 2229208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy argv[i][q-p]='\0'; 22303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=q; 22313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *p)) == 0) && (*p != '\0')) 22323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 22333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]=(char *) NULL; 22353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(argv); 22363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 22373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 22393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2243b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% S t r i n g T o A r r a y O f D o u b l e s % 22443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2249b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% StringToArrayOfDoubles() converts a string of space or comma seperated 2250b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% numbers into array of floating point numbers (doubles). Any number that 2251b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% failes to parse properly will produce a syntax error. As will two commas 2252b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% without a number between them. However a final comma at the end will 2253b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% not be regarded as an error so as to simplify automatic list generation. 22543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2255b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% A NULL value is returned on syntax or memory errors. 22563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2257b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% Use RelinquishMagickMemory() to free returned array when finished. 2258b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2259b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% The format of the StringToArrayOfDoubles method is: 2260b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2261b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% double *StringToArrayOfDoubles(const char *string, 2262b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% size_t *count, ExceptionInfo *exception) 22633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 22653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2266b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% o string: the string containing the comma/space seperated values. 2267b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2268b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% o count: returns number of arguments in returned array 2269b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2270b86be3d014b8b982fe182d839327924565bd8070cristy% o exception: return 'memory failure' exceptions 22713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2273b1d483a6a6a5678173db9d60bec52dd5a37826beanthonyMagickExport double *StringToArrayOfDoubles(const char *string, 2274b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ssize_t *count, ExceptionInfo *exception) 22753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2276b1d483a6a6a5678173db9d60bec52dd5a37826beanthony const char 2277b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *p; 2278b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 22793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 2280b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *q; 22813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2282b1d483a6a6a5678173db9d60bec52dd5a37826beanthony double 2283b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *array; 22843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2285bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 22863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 22873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2288b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* Determine count of values, and check syntax */ 2289b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *count=0; 2290b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p=string; 2291b1d483a6a6a5678173db9d60bec52dd5a37826beanthony i=0; 2292b1d483a6a6a5678173db9d60bec52dd5a37826beanthony while( *p != '\0' ) 2293b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 2294b1d483a6a6a5678173db9d60bec52dd5a37826beanthony (void) StringToDouble(p, &q); /* get value - ignores leading space */ 2295b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (p == q) return((double *)NULL); /* no value found */ 2296b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p=q; i++; /* inc value count */ 2297b1d483a6a6a5678173db9d60bec52dd5a37826beanthony while ( isspace((int)*p) ) p++; /* skip spaces */ 2298b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if ( *p == ',' ) p++; /* skip comma */ 2299b1d483a6a6a5678173db9d60bec52dd5a37826beanthony while ( isspace((int)*p) ) p++; /* and more spaces */ 2300b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 23013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2302b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* Allocate floating point argument list */ 2303b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *count=i; 2304b1d483a6a6a5678173db9d60bec52dd5a37826beanthony array=(double *) AcquireQuantumMemory(i,sizeof(*array)); 2305b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (array == (double *) NULL) { 2306b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 2307b1d483a6a6a5678173db9d60bec52dd5a37826beanthony (void) ThrowMagickException(exception,GetMagickModule(), 2308b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ResourceLimitFatalError,"MemoryAllocationFailed"," "); 2309b1d483a6a6a5678173db9d60bec52dd5a37826beanthony return((double *)NULL); 2310b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 23113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2312b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* Fill in the floating point values */ 2313b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p=string; 2314b1d483a6a6a5678173db9d60bec52dd5a37826beanthony i=0; 2315b1d483a6a6a5678173db9d60bec52dd5a37826beanthony while( *p != '\0' && i < *count ) { 2316b1d483a6a6a5678173db9d60bec52dd5a37826beanthony array[i++]=StringToDouble(p,&q); 2317b1d483a6a6a5678173db9d60bec52dd5a37826beanthony p=q; 2318b1d483a6a6a5678173db9d60bec52dd5a37826beanthony while ( isspace((int)*p) || *p == ',' ) p++; 23193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2320b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2321b1d483a6a6a5678173db9d60bec52dd5a37826beanthony return(array); 23223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 23233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 23263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2329b1d483a6a6a5678173db9d60bec52dd5a37826beanthony+ S t r i n g T o k e n % 23303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 23333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 23343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2335b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% StringToken() Looks for any one of given delimiters and splits the string 2336b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% into two separate strings by replacing the delimiter character found with a 2337b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% nul character. 2338b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2339b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% The given string pointer is changed to point to the string following the 2340b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% delimiter character found, or NULL. A pointer to the start of the 2341b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% string is returned, representing the token before the delimiter. 2342b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% 2343b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% In may ways this is equivent to the strtok() C library function, but with 2344b1d483a6a6a5678173db9d60bec52dd5a37826beanthony% multiple delimiter characters rather than a delimiter string. 23453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToken method is: 23473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *StringToken(const char *delimiters,char **string) 23493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 23513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o delimiters: one or more delimiters. 23533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: return the first token in the string. If none is found, return 23553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% NULL. 23563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 23583ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *StringToken(const char *delimiters,char **string) 23593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 23603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 23613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 23623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 23643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 23653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 23673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *r; 23683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 23703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c, 23713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d; 23723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(*string); 23743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (char *) NULL) 23753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) NULL); 2376b1d483a6a6a5678173db9d60bec52dd5a37826beanthony q=p; 2377b1d483a6a6a5678173db9d60bec52dd5a37826beanthony for ( ; ; ) 23783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c=(*p++); 23803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy r=delimiters; 23813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 23823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d=(*r++); 23843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (c == d) 23853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (c == '\0') 23873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) NULL; 23883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 23893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p[-1]='\0'; 23903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string=p; 23913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(q); 23923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while (d != '\0'); 23943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 23963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 23993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o L i s t % 24033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 24063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 24073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringToList() converts a text string into a list by segmenting the text 24093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string at each carriage return discovered. The list is converted to HEX 24103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% characters if any control characters are discovered within the text string. 24113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToList method is: 24133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char **StringToList(const char *text) 24153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 24173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text: Specifies the string to segment into a list. 24193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 24203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 24213ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char **StringToList(const char *text) 24223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 24233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 24243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **textlist; 24253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 24273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 24283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2429bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 24303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 24313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2432bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 24333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines; 24343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 24363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 24373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; p++) 24383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (((int) ((unsigned char) *p) < 32) && 24393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (isspace((int) ((unsigned char) *p)) == 0)) 24403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\0') 24423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 24443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 24453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to an ASCII list. 24483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 24493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines=1; 24503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=text; *p != '\0'; p++) 24513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\n') 24523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines++; 24533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist=(char **) AcquireQuantumMemory((size_t) lines+1UL, 24543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*textlist)); 24553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist == (char **) NULL) 24563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 24573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 2458bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) lines; i++) 24593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=p; *q != '\0'; q++) 24613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*q == '\r') || (*q == '\n')) 24623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+MaxTextExtent, 24642e25ee6694d278f85b4b3b9169fe0017aac8ab8ecristy sizeof(**textlist)); 24653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist[i] == (char *) NULL) 24663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 246754aad5e0c2d9aa1deb353db842fc6ca6194f197ecristy (void) memcpy(textlist[i],p,(size_t) (q-p)); 2468208cacfadcc4d4773ae390e41289fe8a8a9dabcecristy textlist[i][q-p]='\0'; 24693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*q == '\r') 24703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 24713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=q+1; 24723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 24753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 24773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hex_string[MaxTextExtent]; 24783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 24803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 24813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2482bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 24833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 24843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to a HEX list. 24873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2488bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy lines=(size_t) (strlen(text)/0x14)+1; 24893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist=(char **) AcquireQuantumMemory((size_t) lines+1UL, 24903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*textlist)); 24913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist == (char **) NULL) 24923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 24933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 2494bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) lines; i++) 24953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist[i]=(char *) AcquireQuantumMemory(2UL*MaxTextExtent, 24972e25ee6694d278f85b4b3b9169fe0017aac8ab8ecristy sizeof(**textlist)); 24983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist[i] == (char *) NULL) 24993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText"); 2500b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(textlist[i],MaxTextExtent,"0x%08lx: ", 2501f1d91246f9ab47d524abc076c6ead91e5cc27d03cristy (long) (0x14*i)); 25023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=textlist[i]+strlen(textlist[i]); 2503bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=1; j <= (ssize_t) MagickMin(strlen(p),0x14); j++) 25043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2505b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(hex_string,MaxTextExtent,"%02x",*(p+j)); 25063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(q,hex_string,MaxTextExtent); 25073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=2; 25083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 25093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 25103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; j <= 0x14; j++) 25123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 25143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 25153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((j % 0x04) == 0) 25163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 25173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=' '; 2519bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=1; j <= (ssize_t) MagickMin(strlen(p),0x14); j++) 25203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isprint((int) ((unsigned char) *p)) != 0) 25223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 25233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 25243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='-'; 25253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 25263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 25283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist[i]=(char *) NULL; 25313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(textlist); 25323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 25333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 25353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i n g T o S t r i n g I n f o % 25403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2545bca58f3e54324602dbfe91102715646f23a2ad99cristy% StringToStringInfo() converts a string to a StringInfo type. 25463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StringToStringInfo method is: 25483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StringInfo *StringToStringInfo(const char *string) 25503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 25523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o string: The string. 25543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 25563ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport StringInfo *StringToStringInfo(const char *string) 25573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 25583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StringInfo 25593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *string_info; 25603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 25623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(string != (const char *) NULL); 2563bca58f3e54324602dbfe91102715646f23a2ad99cristy string_info=AcquireStringInfo(strlen(string)); 25643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetStringInfoDatum(string_info,(const unsigned char *) string); 25653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(string_info); 25663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 25673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 25693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S t r i p S t r i n g % 25743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 25773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% StripString() strips any whitespace or quotes from the beginning and end of 25803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% a string of characters. 25813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the StripString method is: 25833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void StripString(char *message) 25853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 25873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o message: Specifies an array of characters. 25893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 25903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 25913ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void StripString(char *message) 25923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 25933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 25943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 25953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 25963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 25983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 25993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(message != (char *) NULL); 26013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*message == '\0') 26023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 26033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(message); 26043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=message; 26053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (isspace((int) ((unsigned char) *p)) != 0) 26063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 26073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\'') || (*p == '"')) 26083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 26093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=message+length-1; 26103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((isspace((int) ((unsigned char) *q)) != 0) && (q > p)) 26113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q--; 26123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q > p) 26133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*q == '\'') || (*q == '"')) 26143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q--; 2615a63c1ba89fd24334d128308e74acbcaee52f4ba3cristy (void) memmove(message,p,(size_t) (q-p+1)); 26163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy message[q-p+1]='\0'; 26173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=message; *p != '\0'; p++) 26183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '\n') 26193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p=' '; 26203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 26213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 26233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 26243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S u b s t i t u t e S t r i n g % 26283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 26323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2633f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% SubstituteString() performs string substitution on a string, replacing the 2634f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% string with the substituted version. Buffer must be allocated from the heap. 2635bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% If the string is matched and status, MagickTrue is returned otherwise 2636bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% MagickFalse. 26373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SubstituteString method is: 26393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2640f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% MagickBooleanType SubstituteString(char **string,const char *search, 26413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *replace) 26423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 26443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2645f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy% o string: the string to perform replacements on; replaced with new 26463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% allocation if a replacement is made. 26473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2648bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% o search: search for this string. 26493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2650bc3392ad730a0886c1fabc9ae546b4de30a98526cristy% o replace: replace any matches with this string. 26513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2653f1b72c1946e0ea84ad884f358cbcc595ab162b10cristyMagickExport MagickBooleanType SubstituteString(char **string, 26543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *search,const char *replace) 26553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2656bc3392ad730a0886c1fabc9ae546b4de30a98526cristy MagickBooleanType 2657bc3392ad730a0886c1fabc9ae546b4de30a98526cristy status; 26583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2659bc3392ad730a0886c1fabc9ae546b4de30a98526cristy register char 2660bc3392ad730a0886c1fabc9ae546b4de30a98526cristy *p; 26613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 2663bc3392ad730a0886c1fabc9ae546b4de30a98526cristy extent, 2664bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent, 2665bc3392ad730a0886c1fabc9ae546b4de30a98526cristy search_extent; 2666bc3392ad730a0886c1fabc9ae546b4de30a98526cristy 2667f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy ssize_t 2668f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy offset; 2669f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy 2670bc3392ad730a0886c1fabc9ae546b4de30a98526cristy status=MagickFalse; 2671bc3392ad730a0886c1fabc9ae546b4de30a98526cristy search_extent=0, 2672bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent=0; 2673f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy for (p=strchr(*string,*search); p != (char *) NULL; p=strchr(p+1,*search)) 26743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2675f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (search_extent == 0) 2676f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy search_extent=strlen(search); 2677f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (strncmp(p,search,search_extent) != 0) 2678bc3392ad730a0886c1fabc9ae546b4de30a98526cristy continue; 26793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2680bc3392ad730a0886c1fabc9ae546b4de30a98526cristy We found a match. 26813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2682f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy status=MagickTrue; 2683bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (replace_extent == 0) 2684bc3392ad730a0886c1fabc9ae546b4de30a98526cristy replace_extent=strlen(replace); 2685bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (replace_extent > search_extent) 26863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2687bc3392ad730a0886c1fabc9ae546b4de30a98526cristy /* 2688bc3392ad730a0886c1fabc9ae546b4de30a98526cristy Make room for the replacement string. 2689bc3392ad730a0886c1fabc9ae546b4de30a98526cristy */ 2690de58b416b4e5170fd208f357abd6f06c8b6672e8cristy offset=(ssize_t) (p-(*string)); 2691e08c3b83ee93ae67d66b8a8163b2165bc389b7d7cristy extent=strlen(*string)+replace_extent-search_extent+1; 2692f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy *string=(char *) ResizeQuantumMemory(*string,extent+MaxTextExtent, 2693f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy sizeof(*p)); 2694f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy if (*string == (char *) NULL) 26953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString"); 2696f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy p=(*string)+offset; 26973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2699bc3392ad730a0886c1fabc9ae546b4de30a98526cristy Replace string. 27003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2701bc3392ad730a0886c1fabc9ae546b4de30a98526cristy if (search_extent != replace_extent) 27020a9b3721bfaf93092820843450387092e7c30b0bcristy (void) CopyMagickMemory(p+replace_extent,p+search_extent, 27030a9b3721bfaf93092820843450387092e7c30b0bcristy strlen(p+search_extent)+1); 27040a9b3721bfaf93092820843450387092e7c30b0bcristy (void) CopyMagickMemory(p,replace,replace_extent); 2705f1b72c1946e0ea84ad884f358cbcc595ab162b10cristy p+=replace_extent-1; 27063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2707bc3392ad730a0886c1fabc9ae546b4de30a98526cristy return(status); 27083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2709