13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L OOO GGGG % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L O O G % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L O O G GG % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L O O G G % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LLLLL OOO GGG % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickCore Log Events % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 16de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy% Cristy % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% September 2002 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 207ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/client.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/configure.h" 469639ba36e05b3e2fe85c8d9097b9ad8aa2c0e5eecristy#include "MagickCore/configure-private.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 49abed7e293f2e8a83e8036df7f2a3e1d9859e5fb2dirk#include "MagickCore/linked-list.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/log.h" 515ff4eaf57b3cd47d0371f204f865cbba614674a0cristy#include "MagickCore/log-private.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 531e37e8f8f760d955432ae54298cb460098a4c21ecristy#include "MagickCore/nt-base-private.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/option.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/semaphore.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/timer.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string-private.h" 594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/token.h" 604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/thread_.h" 614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/thread-private.h" 624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 63d1dd6e4fefa0810b9893e6ac9418f79c97c1b39acristy#include "MagickCore/utility-private.h" 644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/version.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/xml-tree.h" 663291f51a77fdd817efb58d652c78c407cbfdf7d1cristy#include "MagickCore/xml-tree-private.h" 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define declarations. 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define LogFilename "log.xml" 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Typedef declarations. 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristytypedef enum 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy UndefinedHandler = 0x0000, 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy NoHandler = 0x0000, 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ConsoleHandler = 0x0001, 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StdoutHandler = 0x0002, 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StderrHandler = 0x0004, 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy FileHandler = 0x0008, 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DebugHandler = 0x0010, 85834a57918ebe6c5e12fb5f97465a9107f805aae5dirk EventHandler = 0x0020, 86834a57918ebe6c5e12fb5f97465a9107f805aae5dirk MethodHandler = 0x0040 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} LogHandlerType; 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristytypedef struct _EventInfo 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *name; 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogEventType 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} EventInfo; 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristytypedef struct _HandlerInfo 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *name; 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogHandlerType 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy handler; 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} HandlerInfo; 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristystruct _LogInfo 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogEventType 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event_mask; 1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogHandlerType 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy handler_mask; 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *path, 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *name, 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *filename, 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *format; 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 121bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy generations, 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy limit; 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy FILE 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *file; 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 128bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy generation; 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy append, 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy stealth; 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy TimerInfo 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timer; 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 138bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy signature; 140834a57918ebe6c5e12fb5f97465a9107f805aae5dirk 141834a57918ebe6c5e12fb5f97465a9107f805aae5dirk MagickLogMethod 142834a57918ebe6c5e12fb5f97465a9107f805aae5dirk method; 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}; 14485340296861752b741edbf9b2bf9afed393fe141cristy 14585340296861752b741edbf9b2bf9afed393fe141cristytypedef struct _LogMapInfo 14685340296861752b741edbf9b2bf9afed393fe141cristy{ 14785340296861752b741edbf9b2bf9afed393fe141cristy const LogEventType 14885340296861752b741edbf9b2bf9afed393fe141cristy event_mask; 14985340296861752b741edbf9b2bf9afed393fe141cristy 15085340296861752b741edbf9b2bf9afed393fe141cristy const LogHandlerType 15185340296861752b741edbf9b2bf9afed393fe141cristy handler_mask; 15285340296861752b741edbf9b2bf9afed393fe141cristy 15385340296861752b741edbf9b2bf9afed393fe141cristy const char 15485340296861752b741edbf9b2bf9afed393fe141cristy *filename, 15585340296861752b741edbf9b2bf9afed393fe141cristy *format; 15685340296861752b741edbf9b2bf9afed393fe141cristy} LogMapInfo; 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 15985340296861752b741edbf9b2bf9afed393fe141cristy Static declarations. 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic const HandlerInfo 162722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy LogHandlers[32] = 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 164398fd02612ac738cc5c950c0e5df20a6db3db001cristy { "Console", ConsoleHandler }, 165398fd02612ac738cc5c950c0e5df20a6db3db001cristy { "Debug", DebugHandler }, 166398fd02612ac738cc5c950c0e5df20a6db3db001cristy { "Event", EventHandler }, 167398fd02612ac738cc5c950c0e5df20a6db3db001cristy { "File", FileHandler }, 168398fd02612ac738cc5c950c0e5df20a6db3db001cristy { "None", NoHandler }, 169398fd02612ac738cc5c950c0e5df20a6db3db001cristy { "Stderr", StderrHandler }, 170398fd02612ac738cc5c950c0e5df20a6db3db001cristy { "Stdout", StdoutHandler }, 171722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 172722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 173722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 174722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 175722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 176722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 177722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 178722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 179722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 180722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 181722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 182722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 183722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 184722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 185722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 186722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 187722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 188722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 189722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 190722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 191722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 192722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 193722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 194722ffc48569b7391b1f5e0af695b1ef3b60f282fcristy { (char *) NULL, UndefinedHandler }, 1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { (char *) NULL, UndefinedHandler } 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19885340296861752b741edbf9b2bf9afed393fe141cristystatic const LogMapInfo 19985340296861752b741edbf9b2bf9afed393fe141cristy LogMap[] = 20085340296861752b741edbf9b2bf9afed393fe141cristy { 201398fd02612ac738cc5c950c0e5df20a6db3db001cristy { NoEvents, ConsoleHandler, "Magick-%g.log", 202398fd02612ac738cc5c950c0e5df20a6db3db001cristy "%t %r %u %v %d %c[%p]: %m/%f/%l/%d\\n %e" } 20385340296861752b741edbf9b2bf9afed393fe141cristy }; 20485340296861752b741edbf9b2bf9afed393fe141cristy 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic char 206151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy log_name[MagickPathExtent] = "Magick"; 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic LinkedListInfo 20986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy *log_cache = (LinkedListInfo *) NULL; 2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic SemaphoreInfo 21249d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy *event_semaphore = (SemaphoreInfo *) NULL, 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *log_semaphore = (SemaphoreInfo *) NULL; 2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Forward declarations. 2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic LogHandlerType 2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ParseLogHandlers(const char *); 2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic LogInfo 2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *GetLogInfo(const char *,ExceptionInfo *); 2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2243ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType 22586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy IsLogCacheInstantiated(ExceptionInfo *), 226cd2cd1803dda951bcfff101c44032ae17e52655fcristy LoadLogCache(LinkedListInfo *,const char *,const char *,const size_t, 227cd2cd1803dda951bcfff101c44032ae17e52655fcristy ExceptionInfo *); 22886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 22986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy/* 23086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 23186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 23286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 23386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 23486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% A c q u i r e L o g C a c h e % 23586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 23686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 23786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% % 23886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 23986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 24086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% AcquireLogCache() caches one or more log configurations which provides a 24186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% mapping between log attributes and log name. 24286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 24386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% The format of the AcquireLogCache method is: 24486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 24586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% LinkedListInfo *AcquireLogCache(const char *filename, 24686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% ExceptionInfo *exception) 24786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 24886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% A description of each parameter follows: 24986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 25086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% o filename: the log configuration filename. 25186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 25286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% o exception: return any errors or warnings in this structure. 25386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% 25486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy*/ 25586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristystatic LinkedListInfo *AcquireLogCache(const char *filename, 25686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ExceptionInfo *exception) 25786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy{ 25886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy LinkedListInfo 259b18d864b3f06e9272582b7736230d934d715d542dirk *cache; 26086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 26186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy MagickStatusType 26286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy status; 26386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 26486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy register ssize_t 26586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy i; 26686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 26786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy /* 26886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy Load external log map. 26986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy */ 270b18d864b3f06e9272582b7736230d934d715d542dirk cache=NewLinkedList(0); 271b18d864b3f06e9272582b7736230d934d715d542dirk if (cache == (LinkedListInfo *) NULL) 27286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 27386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy status=MagickTrue; 274b18d864b3f06e9272582b7736230d934d715d542dirk#if !defined(MAGICKCORE_ZERO_CONFIGURATION_SUPPORT) 27586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy { 276b18d864b3f06e9272582b7736230d934d715d542dirk const StringInfo 277b18d864b3f06e9272582b7736230d934d715d542dirk *option; 278b18d864b3f06e9272582b7736230d934d715d542dirk 279b18d864b3f06e9272582b7736230d934d715d542dirk LinkedListInfo 280b18d864b3f06e9272582b7736230d934d715d542dirk *options; 281b18d864b3f06e9272582b7736230d934d715d542dirk 282b18d864b3f06e9272582b7736230d934d715d542dirk options=GetConfigureOptions(filename,exception); 28386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy option=(const StringInfo *) GetNextValueInLinkedList(options); 284b18d864b3f06e9272582b7736230d934d715d542dirk while (option != (const StringInfo *) NULL) 285b18d864b3f06e9272582b7736230d934d715d542dirk { 286b18d864b3f06e9272582b7736230d934d715d542dirk status&=LoadLogCache(cache,(const char *) GetStringInfoDatum(option), 287b18d864b3f06e9272582b7736230d934d715d542dirk GetStringInfoPath(option),0,exception); 288b18d864b3f06e9272582b7736230d934d715d542dirk option=(const StringInfo *) GetNextValueInLinkedList(options); 289b18d864b3f06e9272582b7736230d934d715d542dirk } 290b18d864b3f06e9272582b7736230d934d715d542dirk options=DestroyConfigureOptions(options); 29186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy } 292b18d864b3f06e9272582b7736230d934d715d542dirk#endif 29386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy /* 29486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy Load built-in log map. 29586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy */ 29686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy for (i=0; i < (ssize_t) (sizeof(LogMap)/sizeof(*LogMap)); i++) 29786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy { 29886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy LogInfo 29986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy *log_info; 30086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 30186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy register const LogMapInfo 30286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy *p; 30386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy 30486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=LogMap+i; 30586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_info=(LogInfo *) AcquireMagickMemory(sizeof(*log_info)); 30686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (log_info == (LogInfo *) NULL) 30786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy { 30886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (void) ThrowMagickException(exception,GetMagickModule(), 30986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResourceLimitError,"MemoryAllocationFailed","`%s'",p->filename); 31086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy continue; 31186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy } 31286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (void) ResetMagickMemory(log_info,0,sizeof(*log_info)); 31386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_info->path=ConstantString("[built-in]"); 31486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy GetTimerInfo((TimerInfo *) &log_info->timer); 31586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_info->event_mask=p->event_mask; 31686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_info->handler_mask=p->handler_mask; 31786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_info->filename=ConstantString(p->filename); 31886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_info->format=ConstantString(p->format); 319e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy log_info->signature=MagickCoreSignature; 320b18d864b3f06e9272582b7736230d934d715d542dirk status&=AppendValueToLinkedList(cache,log_info); 32186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (status == MagickFalse) 32286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (void) ThrowMagickException(exception,GetMagickModule(), 32386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResourceLimitError,"MemoryAllocationFailed","`%s'",log_info->name); 32486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy } 325b18d864b3f06e9272582b7736230d934d715d542dirk return(cache); 32686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy} 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% C l o s e M a g i c k L o g % 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CloseMagickLog() closes the Magick log. 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the CloseMagickLog method is: 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% CloseMagickLog(void) 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void CloseMagickLog(void) 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogInfo 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *log_info; 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging() == MagickFalse) 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=GetLogInfo("*",exception); 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); 359f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(log_semaphore); 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->file != (FILE *) NULL) 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 362398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(log_info->file,"</log>\n"); 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fclose(log_info->file); 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->file=(FILE *) NULL; 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 366f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(log_semaphore); 3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ G e t L o g I n f o % 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetLogInfo() searches the log list for the specified name and if found 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returns attributes for that log. 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetLogInfo method is: 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LogInfo *GetLogInfo(const char *name,ExceptionInfo *exception) 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: the log name. 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic LogInfo *GetLogInfo(const char *name,ExceptionInfo *exception) 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register LogInfo 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 40086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (IsLogCacheInstantiated(exception) == MagickFalse) 401904e591bcf6bce4c0086cc200d0efe7fdd3834aecristy return((LogInfo *) NULL); 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Search for log tag. 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 405f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(log_semaphore); 40686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResetLinkedListIterator(log_cache); 40786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(LogInfo *) GetNextValueInLinkedList(log_cache); 40849d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy if ((name == (const char *) NULL) || (LocaleCompare(name,"*") == 0)) 40949d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy { 41049d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy UnlockSemaphoreInfo(log_semaphore); 41149d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy return(p); 41249d4d2247a71eab1c5c56bae91a5f9d0fcc4475ccristy } 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (p != (LogInfo *) NULL) 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(name,p->name) == 0) 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 41786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(LogInfo *) GetNextValueInLinkedList(log_cache); 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p != (LogInfo *) NULL) 42086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (void) InsertValueInLinkedList(log_cache,0, 42186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy RemoveElementByValueFromLinkedList(log_cache,p)); 422f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(log_semaphore); 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(p); 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t L o g I n f o L i s t % 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetLogInfoList() returns any logs that match the specified pattern. 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetLogInfoList function is: 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const LogInfo **GetLogInfoList(const char *pattern, 442bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *number_preferences,ExceptionInfo *exception) 4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pattern: Specifies a pointer to a text string containing a pattern. 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o number_preferences: This integer returns the number of logs in the list. 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic int LogInfoCompare(const void *x,const void *y) 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const LogInfo 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **p, 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **q; 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(const LogInfo **) x, 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(const LogInfo **) y; 4653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((*p)->path,(*q)->path) == 0) 4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(LocaleCompare((*p)->name,(*q)->name)); 4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(LocaleCompare((*p)->path,(*q)->path)); 4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport const LogInfo **GetLogInfoList(const char *pattern, 475bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *number_preferences,ExceptionInfo *exception) 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const LogInfo 4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **preferences; 4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const LogInfo 4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 483bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate log list. 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pattern != (char *) NULL); 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",pattern); 491bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy assert(number_preferences != (size_t *) NULL); 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *number_preferences=0; 4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=GetLogInfo("*",exception); 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (const LogInfo *) NULL) 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((const LogInfo **) NULL); 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences=(const LogInfo **) AcquireQuantumMemory((size_t) 49786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy GetNumberOfElementsInLinkedList(log_cache)+1UL,sizeof(*preferences)); 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (preferences == (const LogInfo **) NULL) 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((const LogInfo **) NULL); 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Generate log list. 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 503f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(log_semaphore); 50486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResetLinkedListIterator(log_cache); 50586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const LogInfo *) GetNextValueInLinkedList(log_cache); 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; p != (const LogInfo *) NULL; ) 5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((p->stealth == MagickFalse) && 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse)) 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences[i++]=p; 51186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const LogInfo *) GetNextValueInLinkedList(log_cache); 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 513f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(log_semaphore); 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy qsort((void *) preferences,(size_t) i,sizeof(*preferences),LogInfoCompare); 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences[i]=(LogInfo *) NULL; 516bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy *number_preferences=(size_t) i; 5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(preferences); 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t L o g L i s t % 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetLogList() returns any logs that match the specified pattern. 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetLogList function is: 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 535bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% char **GetLogList(const char *pattern,size_t *number_preferences, 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 5393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pattern: Specifies a pointer to a text string containing a pattern. 5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o number_preferences: This integer returns the number of logs in the list. 5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic int LogCompare(const void *x,const void *y) 5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **p, 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **q; 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(const char **) x; 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(const char **) y; 5603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(LocaleCompare(*p,*q)); 5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 5663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5672e091d4031e4ccf5be2ef0c55872cd5afe9f7d8dcristyMagickExport char **GetLogList(const char *pattern,size_t *number_preferences, 5682e091d4031e4ccf5be2ef0c55872cd5afe9f7d8dcristy ExceptionInfo *exception) 5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **preferences; 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const LogInfo 5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 576bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate log list. 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pattern != (char *) NULL); 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",pattern); 584bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy assert(number_preferences != (size_t *) NULL); 5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *number_preferences=0; 5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=GetLogInfo("*",exception); 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (const LogInfo *) NULL) 5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences=(char **) AcquireQuantumMemory((size_t) 59086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy GetNumberOfElementsInLinkedList(log_cache)+1UL,sizeof(*preferences)); 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (preferences == (char **) NULL) 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Generate log list. 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 596f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(log_semaphore); 59786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ResetLinkedListIterator(log_cache); 59886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const LogInfo *) GetNextValueInLinkedList(log_cache); 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; p != (const LogInfo *) NULL; ) 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((p->stealth == MagickFalse) && 6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse)) 6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences[i++]=ConstantString(p->name); 60486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy p=(const LogInfo *) GetNextValueInLinkedList(log_cache); 6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 606f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(log_semaphore); 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy qsort((void *) preferences,(size_t) i,sizeof(*preferences),LogCompare); 6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences[i]=(char *) NULL; 609bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy *number_preferences=(size_t) i; 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(preferences); 6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% G e t L o g N a m e % 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GetLogName() returns the current log name. 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the GetLogName method is: 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *GetLogName(void) 6293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport const char *GetLogName(void) 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(log_name); 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 64186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy+ I s L o g C a c h e I n s t a n t i a t e d % 6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 647cd2cd1803dda951bcfff101c44032ae17e52655fcristy% IsLogCacheInstantiated() determines if the log list is instantiated. If 648cd2cd1803dda951bcfff101c44032ae17e52655fcristy% not, it instantiates the list and returns it. 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 650904e591bcf6bce4c0086cc200d0efe7fdd3834aecristy% The format of the IsLogInstantiated method is: 6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 65286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% MagickBooleanType IsLogCacheInstantiated(ExceptionInfo *exception) 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 65986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristystatic MagickBooleanType IsLogCacheInstantiated(ExceptionInfo *exception) 6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 66186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (log_cache == (LinkedListInfo *) NULL) 66286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy { 66386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (log_semaphore == (SemaphoreInfo *) NULL) 66486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy ActivateSemaphoreInfo(&log_semaphore); 66586e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy LockSemaphoreInfo(log_semaphore); 66686e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (log_cache == (LinkedListInfo *) NULL) 66786e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_cache=AcquireLogCache(LogFilename,exception); 66886e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy UnlockSemaphoreInfo(log_semaphore); 66986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy } 67086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy return(log_cache != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse); 6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% I s E v e n t L o g g i n g % 6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% IsEventLogging() returns MagickTrue if debug of events is enabled otherwise 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickFalse. 6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the IsEventLogging method is: 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType IsEventLogging(void) 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport MagickBooleanType IsEventLogging(void) 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const LogInfo 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *log_info; 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 70086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if ((log_cache == (LinkedListInfo *) NULL) || 70186e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy (IsLinkedListEmpty(log_cache) != MagickFalse)) 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=GetLogInfo("*",exception); 7053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); 7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(log_info->event_mask != NoEvents ? MagickTrue : MagickFalse); 7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L i s t L o g I n f o % 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ListLogInfo() lists the log info to a file. 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ListLogInfo method is: 7223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType ListLogInfo(FILE *file,ExceptionInfo *exception) 7243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o file: An pointer to a FILE. 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport MagickBooleanType ListLogInfo(FILE *file,ExceptionInfo *exception) 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define MegabytesToBytes(value) ((MagickSizeType) (value)*1024*1024) 7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *path; 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const LogInfo 7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **log_info; 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 742bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 745bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_aliases; 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7489d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 7499d314ff2c17a77996c05413c2013880387e50f0ecristy j; 7509d314ff2c17a77996c05413c2013880387e50f0ecristy 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (file == (const FILE *) NULL) 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=stdout; 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=GetLogInfoList("*",&number_aliases,exception); 7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info == (const LogInfo **) NULL) 7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j=0; 7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy path=(const char *) NULL; 758bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) number_aliases; i++) 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info[i]->stealth != MagickFalse) 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((path == (const char *) NULL) || 7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(path,log_info[i]->path) != 0)) 7643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 765398fd02612ac738cc5c950c0e5df20a6db3db001cristy size_t 766398fd02612ac738cc5c950c0e5df20a6db3db001cristy length; 767398fd02612ac738cc5c950c0e5df20a6db3db001cristy 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info[i]->path != (char *) NULL) 769b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"\nPath: %s\n\n",log_info[i]->path); 770398fd02612ac738cc5c950c0e5df20a6db3db001cristy length=0; 771398fd02612ac738cc5c950c0e5df20a6db3db001cristy for (j=0; j < (ssize_t) (8*sizeof(LogHandlerType)); j++) 772398fd02612ac738cc5c950c0e5df20a6db3db001cristy { 773398fd02612ac738cc5c950c0e5df20a6db3db001cristy size_t 774398fd02612ac738cc5c950c0e5df20a6db3db001cristy mask; 775398fd02612ac738cc5c950c0e5df20a6db3db001cristy 776e3216eb99bc9e5c5d003554881083db6463ae109cristy if (LogHandlers[j].name == (const char *) NULL) 777e3216eb99bc9e5c5d003554881083db6463ae109cristy break; 778fb8f6e1032696c1912fe3f05ad0eef74e8e2dbdecristy mask=1; 779fb8f6e1032696c1912fe3f05ad0eef74e8e2dbdecristy mask<<=j; 780398fd02612ac738cc5c950c0e5df20a6db3db001cristy if ((log_info[i]->handler_mask & mask) != 0) 781398fd02612ac738cc5c950c0e5df20a6db3db001cristy { 782398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(file,"%s ",LogHandlers[j].name); 783398fd02612ac738cc5c950c0e5df20a6db3db001cristy length+=strlen(LogHandlers[j].name); 784398fd02612ac738cc5c950c0e5df20a6db3db001cristy } 785398fd02612ac738cc5c950c0e5df20a6db3db001cristy } 786398fd02612ac738cc5c950c0e5df20a6db3db001cristy for (j=(ssize_t) length; j <= 12; j++) 787398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(file," "); 788398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(file," Generations Limit Format\n"); 789398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(file,"-----------------------------------------" 790398fd02612ac738cc5c950c0e5df20a6db3db001cristy "--------------------------------------\n"); 7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy path=log_info[i]->path; 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info[i]->filename != (char *) NULL) 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 795b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"%s",log_info[i]->filename); 796bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=(ssize_t) strlen(log_info[i]->filename); j <= 16; j++) 797b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," "); 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 799b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"%9g ",(double) log_info[i]->generations); 800398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(file,"%8g ",(double) log_info[i]->limit); 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info[i]->format != (char *) NULL) 802b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"%s",log_info[i]->format); 803b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"\n"); 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fflush(file); 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=(const LogInfo **) RelinquishMagickMemory((void *) log_info); 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 815f34a145c545cb86152ad42a787f6d5fffea6b77ccristy+ L o g C o m p o n e n t G e n e s i s % 816f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 817f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 818f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 819f34a145c545cb86152ad42a787f6d5fffea6b77ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 820f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 821f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% LogComponentGenesis() instantiates the log component. 822f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 823f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% The format of the LogComponentGenesis method is: 824f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 825f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% MagickBooleanType LogComponentGenesis(void) 826f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 827f34a145c545cb86152ad42a787f6d5fffea6b77ccristy*/ 8285ff4eaf57b3cd47d0371f204f865cbba614674a0cristyMagickPrivate MagickBooleanType LogComponentGenesis(void) 829f34a145c545cb86152ad42a787f6d5fffea6b77ccristy{ 83085dfbbbbf40e62b47b13e5842a700e15a216fabacristy ExceptionInfo 83185dfbbbbf40e62b47b13e5842a700e15a216fabacristy *exception; 83285dfbbbbf40e62b47b13e5842a700e15a216fabacristy 8337c9770650f31145e0fe8811d10b2e0ecd47697c8cristy if (log_semaphore == (SemaphoreInfo *) NULL) 8347c9770650f31145e0fe8811d10b2e0ecd47697c8cristy log_semaphore=AcquireSemaphoreInfo(); 83585dfbbbbf40e62b47b13e5842a700e15a216fabacristy exception=AcquireExceptionInfo(); 83685dfbbbbf40e62b47b13e5842a700e15a216fabacristy (void) GetLogInfo("*",exception); 83785dfbbbbf40e62b47b13e5842a700e15a216fabacristy exception=DestroyExceptionInfo(exception); 8383d308f4863a430314cac534baafdb7a72638fe7ecristy event_semaphore=AcquireSemaphoreInfo(); 839f34a145c545cb86152ad42a787f6d5fffea6b77ccristy return(MagickTrue); 840f34a145c545cb86152ad42a787f6d5fffea6b77ccristy} 841f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 842f34a145c545cb86152ad42a787f6d5fffea6b77ccristy/* 843f34a145c545cb86152ad42a787f6d5fffea6b77ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 844f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 845f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 846f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 847f34a145c545cb86152ad42a787f6d5fffea6b77ccristy+ L o g C o m p o n e n t T e r m i n u s % 848f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 849f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 850f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 851f34a145c545cb86152ad42a787f6d5fffea6b77ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 852f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 853f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% LogComponentTerminus() destroys the logging component. 854f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 855f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% The format of the LogComponentTerminus method is: 856f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 857f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% LogComponentTerminus(void) 858f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 859f34a145c545cb86152ad42a787f6d5fffea6b77ccristy*/ 860f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 861f34a145c545cb86152ad42a787f6d5fffea6b77ccristystatic void *DestroyLogElement(void *log_info) 862f34a145c545cb86152ad42a787f6d5fffea6b77ccristy{ 863f34a145c545cb86152ad42a787f6d5fffea6b77ccristy register LogInfo 864f34a145c545cb86152ad42a787f6d5fffea6b77ccristy *p; 865f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 866f34a145c545cb86152ad42a787f6d5fffea6b77ccristy p=(LogInfo *) log_info; 867f34a145c545cb86152ad42a787f6d5fffea6b77ccristy if (p->file != (FILE *) NULL) 868f34a145c545cb86152ad42a787f6d5fffea6b77ccristy { 869398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(p->file,"</log>\n"); 870f34a145c545cb86152ad42a787f6d5fffea6b77ccristy (void) fclose(p->file); 871f34a145c545cb86152ad42a787f6d5fffea6b77ccristy p->file=(FILE *) NULL; 872f34a145c545cb86152ad42a787f6d5fffea6b77ccristy } 8735965b4960fada91283e62d9a33348db18339aa38cristy if (p->format != (char *) NULL) 8745965b4960fada91283e62d9a33348db18339aa38cristy p->format=DestroyString(p->format); 8755965b4960fada91283e62d9a33348db18339aa38cristy if (p->path != (char *) NULL) 8765965b4960fada91283e62d9a33348db18339aa38cristy p->path=DestroyString(p->path); 8775965b4960fada91283e62d9a33348db18339aa38cristy if (p->filename != (char *) NULL) 8785965b4960fada91283e62d9a33348db18339aa38cristy p->filename=DestroyString(p->filename); 879f34a145c545cb86152ad42a787f6d5fffea6b77ccristy p=(LogInfo *) RelinquishMagickMemory(p); 880f34a145c545cb86152ad42a787f6d5fffea6b77ccristy return((void *) NULL); 881f34a145c545cb86152ad42a787f6d5fffea6b77ccristy} 882f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 8835ff4eaf57b3cd47d0371f204f865cbba614674a0cristyMagickPrivate void LogComponentTerminus(void) 884f34a145c545cb86152ad42a787f6d5fffea6b77ccristy{ 8853d308f4863a430314cac534baafdb7a72638fe7ecristy if (event_semaphore == (SemaphoreInfo *) NULL) 8863d308f4863a430314cac534baafdb7a72638fe7ecristy ActivateSemaphoreInfo(&event_semaphore); 8873d308f4863a430314cac534baafdb7a72638fe7ecristy LockSemaphoreInfo(event_semaphore); 8883d308f4863a430314cac534baafdb7a72638fe7ecristy UnlockSemaphoreInfo(event_semaphore); 8893d308f4863a430314cac534baafdb7a72638fe7ecristy RelinquishSemaphoreInfo(&event_semaphore); 89018b17443128598500357da7bff2f01683cf32890cristy if (log_semaphore == (SemaphoreInfo *) NULL) 89104b11db5504ecdf205114ae7e9e68774a1ff0b9bcristy ActivateSemaphoreInfo(&log_semaphore); 892f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(log_semaphore); 89386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy if (log_cache != (LinkedListInfo *) NULL) 89486e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_cache=DestroyLinkedList(log_cache,DestroyLogElement); 895f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(log_semaphore); 8963d162a93f537cb7cbb6d9fa3b8e73e8f992a527acristy RelinquishSemaphoreInfo(&log_semaphore); 897f34a145c545cb86152ad42a787f6d5fffea6b77ccristy} 898f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 899f34a145c545cb86152ad42a787f6d5fffea6b77ccristy/* 900f34a145c545cb86152ad42a787f6d5fffea6b77ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 901f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 902f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 903f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% L o g M a g i c k E v e n t % 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LogMagickEvent() logs an event as determined by the log configuration file. 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% If an error occurs, MagickFalse is returned otherwise MagickTrue. 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LogMagickEvent method is: 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType LogMagickEvent(const LogEventType type, 916bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% const char *module,const char *function,const size_t line, 9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *format,...) 9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o type: the event type. 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the source module filename. 9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o function: the function name. 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o line: the line number of the source module. 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o format: the output format. 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 932d2a7a2d4a46c82a8679688ae763ef9d7bb53ccd7dirkstatic char *TranslateEvent(const char *module,const char *function, 933d2a7a2d4a46c82a8679688ae763ef9d7bb53ccd7dirk const size_t line,const char *domain,const char *event) 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text; 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy elapsed_time, 9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy user_time; 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogInfo 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *log_info; 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy extent; 9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy time_t 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy seconds; 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=(LogInfo *) GetLogInfo("*",exception); 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy seconds=time((time_t *) NULL); 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy elapsed_time=GetElapsedTime(&log_info->timer); 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy user_time=GetUserTime(&log_info->timer); 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text=AcquireString(event); 9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->format == (char *) NULL) 9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(text); 969151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy extent=strlen(event)+MagickPathExtent; 9703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(log_info->format,"xml") == 0) 9713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 973151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy timestamp[MagickPathExtent]; 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Translate event in "XML" format. 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickTime(seconds,extent,timestamp); 979b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(text,extent, 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "<entry>\n" 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <timestamp>%s</timestamp>\n" 98291f905af3b85704a2cf16a85ef1a90f0fcfda50dcristy " <elapsed-time>%lu:%02lu.%03lu</elapsed-time>\n" 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <user-time>%0.3f</user-time>\n" 984e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy " <process-id>%.20g</process-id>\n" 985e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy " <thread-id>%.20g</thread-id>\n" 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <module>%s</module>\n" 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <function>%s</function>\n" 988e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy " <line>%.20g</line>\n" 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <domain>%s</domain>\n" 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <event>%s</event>\n" 99191f905af3b85704a2cf16a85ef1a90f0fcfda50dcristy "</entry>",timestamp,(unsigned long) (elapsed_time/60.0), 99291f905af3b85704a2cf16a85ef1a90f0fcfda50dcristy (unsigned long) floor(fmod(elapsed_time,60.0)),(unsigned long) 99391f905af3b85704a2cf16a85ef1a90f0fcfda50dcristy (1000.0*(elapsed_time-floor(elapsed_time))+0.5),user_time, 99491f905af3b85704a2cf16a85ef1a90f0fcfda50dcristy (double) getpid(),(double) GetMagickThreadSignature(),module,function, 99591f905af3b85704a2cf16a85ef1a90f0fcfda50dcristy (double) line,domain,event); 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(text); 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Translate event in "human readable" format. 10003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=text; 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=log_info->format; *p != '\0'; p++) 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 1005151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if ((size_t) (q-text+MagickPathExtent) >= extent) 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1007151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy extent+=MagickPathExtent; 1008151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy text=(char *) ResizeQuantumMemory(text,extent+MagickPathExtent, 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*text)); 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) NULL); 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=text+strlen(text); 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy The format of the log is defined by embedding special format characters: 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %c client name 10183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %d domain 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %e event 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %f function 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %g generation 10223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %l line 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %m module 10243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %n log name 10253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %p process id 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %r real CPU time 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %t wall clock time 10283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %u user CPU time 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %v version 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %% percent sign 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy \n newline 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy \r carriage return 10333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\\') && (*(p+1) == 'r')) 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='\r'; 10373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 10393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == '\\') && (*(p+1) == 'n')) 10413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='\n'; 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 10453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p != '%') 10473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 10523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (*p) 10533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'c': 10553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,GetClientName(),extent); 10573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'd': 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,domain,extent); 10623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'e': 10653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,event,extent); 10673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'f': 10703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,function,extent); 10723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'g': 10753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->generations == 0) 10773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(q,"0",extent); 10793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 10803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1082b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy q+=FormatLocaleString(q,extent,"%.20g",(double) (log_info->generation % 1083e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy log_info->generations)); 10843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'l': 10873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1088b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy q+=FormatLocaleString(q,extent,"%.20g",(double) line); 10893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'm': 10923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 10953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=module+strlen(module)-1; p > module; p--) 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == *DirectorySeparator) 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 11003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,p,extent); 11033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'n': 11063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,GetLogName(),extent); 11083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'p': 11113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1112b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy q+=FormatLocaleString(q,extent,"%.20g",(double) getpid()); 11133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'r': 11163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1117b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy q+=FormatLocaleString(q,extent,"%lu:%02lu.%03lu",(unsigned long) 111891f905af3b85704a2cf16a85ef1a90f0fcfda50dcristy (elapsed_time/60.0),(unsigned long) floor(fmod(elapsed_time,60.0)), 111991f905af3b85704a2cf16a85ef1a90f0fcfda50dcristy (unsigned long) (1000.0*(elapsed_time-floor(elapsed_time))+0.5)); 11203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 't': 11233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=FormatMagickTime(seconds,extent,q); 11253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'u': 11283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1129b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy q+=FormatLocaleString(q,extent,"%0.3fu",user_time); 11303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'v': 11333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,MagickLibVersionText,extent); 11353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case '%': 11383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 11403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 11433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='%'; 11453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 11463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 11513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(text); 11523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11543ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic char *TranslateFilename(const LogInfo *log_info) 11553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 11563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 11573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *filename; 11583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 11603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 11613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 11633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 11643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 11663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy extent; 11673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 11693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Translate event in "human readable" format. 11703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 11713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(log_info != (LogInfo *) NULL); 11723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(log_info->filename != (char *) NULL); 11733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filename=AcquireString((char *) NULL); 1174151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy extent=MagickPathExtent; 11753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=filename; 11763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=log_info->filename; *p != '\0'; p++) 11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 1179151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if ((size_t) (q-filename+MagickPathExtent) >= extent) 11803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1181151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy extent+=MagickPathExtent; 1182151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy filename=(char *) ResizeQuantumMemory(filename,extent+MagickPathExtent, 11833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*filename)); 11843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (filename == (char *) NULL) 11853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) NULL); 11863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=filename+strlen(filename); 11873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 11893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy The format of the filename is defined by embedding special format 11903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy characters: 11913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %c client name 11933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %n log name 11943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %p process id 11953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %v version 11963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy %% percent sign 11973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 11983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p != '%') 11993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 12013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 12023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (*p) 12053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'c': 12073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,GetClientName(),extent); 12093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 12103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'g': 12123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->generations == 0) 12143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(q,"0",extent); 12163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 12173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 12183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1219b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy q+=FormatLocaleString(q,extent,"%.20g",(double) (log_info->generation % 1220e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy log_info->generations)); 12213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 12223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'n': 12243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,GetLogName(),extent); 12263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 12273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'p': 12293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1230b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy q+=FormatLocaleString(q,extent,"%.20g",(double) getpid()); 12313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 12323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'v': 12343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=CopyMagickString(q,MagickLibVersionText,extent); 12363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 12373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case '%': 12393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 12413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 12423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 12443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++='%'; 12463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 12473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 12483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q='\0'; 12523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(filename); 12533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12553ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickBooleanType LogMagickEventList(const LogEventType type,const char *module, 12562e091d4031e4ccf5be2ef0c55872cd5afe9f7d8dcristy const char *function,const size_t line,const char *format,va_list operands) 12573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1259151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy event[MagickPathExtent], 12603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text; 12613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 12633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *domain; 12643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 12663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 12673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 12693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy n; 12703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogInfo 12723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *log_info; 12733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging() == MagickFalse) 12753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 12773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=(LogInfo *) GetLogInfo("*",exception); 12783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); 12793d308f4863a430314cac534baafdb7a72638fe7ecristy if (event_semaphore == (SemaphoreInfo *) NULL) 12803d308f4863a430314cac534baafdb7a72638fe7ecristy ActivateSemaphoreInfo(&event_semaphore); 12813d308f4863a430314cac534baafdb7a72638fe7ecristy LockSemaphoreInfo(event_semaphore); 12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((log_info->event_mask & type) == 0) 12833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12843d308f4863a430314cac534baafdb7a72638fe7ecristy UnlockSemaphoreInfo(event_semaphore); 12853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 12863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1287042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy domain=CommandOptionToMnemonic(MagickLogEventOptions,type); 12883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_VSNPRINTF) 1289151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy n=vsnprintf(event,MagickPathExtent,format,operands); 12903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 12913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy n=vsprintf(event,format,operands); 12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (n < 0) 1294151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy event[MagickPathExtent-1]='\0'; 1295d2a7a2d4a46c82a8679688ae763ef9d7bb53ccd7dirk text=TranslateEvent(module,function,line,domain,event); 12963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 12973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ContinueTimer((TimerInfo *) &log_info->timer); 12993d308f4863a430314cac534baafdb7a72638fe7ecristy UnlockSemaphoreInfo(event_semaphore); 13003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 13013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((log_info->handler_mask & ConsoleHandler) != 0) 13033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1304b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(stderr,"%s\n",text); 13053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fflush(stderr); 13063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((log_info->handler_mask & DebugHandler) != 0) 13083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13090157aeadef2fce908277168097a160a8f15a6952cristy#if defined(MAGICKCORE_WINDOWS_SUPPORT) 13103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy OutputDebugString(text); 1311690a0eb8cbbcf8e5c69b3d33d1f562a8eea8889dcristy OutputDebugString("\n"); 13123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 13133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((log_info->handler_mask & EventHandler) != 0) 13153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13160157aeadef2fce908277168097a160a8f15a6952cristy#if defined(MAGICKCORE_WINDOWS_SUPPORT) 13173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) NTReportEvent(text,MagickFalse); 13183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 13193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((log_info->handler_mask & FileHandler) != 0) 13213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy struct stat 13233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file_info; 13243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file_info.st_size=0; 13263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->file != (FILE *) NULL) 13273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fstat(fileno(log_info->file),&file_info); 132894b11835effe9f2ded8638e50db5fb7acd92ea0bcristy if (file_info.st_size > (ssize_t) (1024*1024*log_info->limit)) 13293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1330b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(log_info->file,"</log>\n"); 13313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fclose(log_info->file); 13323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->file=(FILE *) NULL; 13333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->file == (FILE *) NULL) 13353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 13373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *filename; 13383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filename=TranslateFilename(log_info); 13403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (filename == (char *) NULL) 13413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ContinueTimer((TimerInfo *) &log_info->timer); 13433d308f4863a430314cac534baafdb7a72638fe7ecristy UnlockSemaphoreInfo(event_semaphore); 13443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 13453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->append=IsPathAccessible(filename); 134718c6c27bc513a8c73a5bc4a2c157afb19c3e24b9cristy log_info->file=fopen_utf8(filename,"ab"); 13483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filename=(char *) RelinquishMagickMemory(filename); 13493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->file == (FILE *) NULL) 13503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13513d308f4863a430314cac534baafdb7a72638fe7ecristy UnlockSemaphoreInfo(event_semaphore); 13523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 13533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->generation++; 13553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->append == MagickFalse) 1356398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(log_info->file,"<?xml version=\"1.0\" " 1357398fd02612ac738cc5c950c0e5df20a6db3db001cristy "encoding=\"UTF-8\" standalone=\"yes\"?>\n"); 1358398fd02612ac738cc5c950c0e5df20a6db3db001cristy (void) FormatLocaleFile(log_info->file,"<log>\n"); 13593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1360cd2cd1803dda951bcfff101c44032ae17e52655fcristy (void) FormatLocaleFile(log_info->file," <event>%s</event>\n",text); 13613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fflush(log_info->file); 13623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1363834a57918ebe6c5e12fb5f97465a9107f805aae5dirk if ((log_info->handler_mask & MethodHandler) != 0) 1364834a57918ebe6c5e12fb5f97465a9107f805aae5dirk { 1365834a57918ebe6c5e12fb5f97465a9107f805aae5dirk if (log_info->method != (MagickLogMethod) NULL) 1366834a57918ebe6c5e12fb5f97465a9107f805aae5dirk log_info->method(type,text); 1367834a57918ebe6c5e12fb5f97465a9107f805aae5dirk } 13683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((log_info->handler_mask & StdoutHandler) != 0) 13693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1370b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(stdout,"%s\n",text); 13713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fflush(stdout); 13723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((log_info->handler_mask & StderrHandler) != 0) 13743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1375b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(stderr,"%s\n",text); 13763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fflush(stderr); 13773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text=(char *) RelinquishMagickMemory(text); 13793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ContinueTimer((TimerInfo *) &log_info->timer); 13803d308f4863a430314cac534baafdb7a72638fe7ecristy UnlockSemaphoreInfo(event_semaphore); 13813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 13823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13843ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickBooleanType LogMagickEvent(const LogEventType type,const char *module, 1385bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy const char *function,const size_t line,const char *format,...) 13863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy va_list 13883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy operands; 13893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 13913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 13923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy va_start(operands,format); 13943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=LogMagickEventList(type,module,function,line,format,operands); 13953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy va_end(operands); 13963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 13973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 14003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1404fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk+ L o a d L o g C a c h e % 14053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 141086e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% LoadLogCache() loads the log configurations which provides a 14113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% mapping between log attributes and log name. 14123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 141386e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy% The format of the LoadLogCache method is: 14143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1415b18d864b3f06e9272582b7736230d934d715d542dirk% MagickBooleanType LoadLogCache(LinkedListInfo *cache,const char *xml, 1416cd2cd1803dda951bcfff101c44032ae17e52655fcristy% const char *filename,const size_t depth,ExceptionInfo *exception) 14173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 14193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o xml: The log list in XML format. 14213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: The log list filename. 14233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o depth: depth of <include /> statements. 14253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 14273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1429b18d864b3f06e9272582b7736230d934d715d542dirkstatic MagickBooleanType LoadLogCache(LinkedListInfo *cache,const char *xml, 1430cd2cd1803dda951bcfff101c44032ae17e52655fcristy const char *filename,const size_t depth,ExceptionInfo *exception) 14313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 14323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1433151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy keyword[MagickPathExtent], 14343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *token; 14353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 14373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 14383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogInfo 14403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *log_info = (LogInfo *) NULL; 14413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickStatusType 14433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 14443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1445fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk size_t 1446fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk extent; 1447fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk 14483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Load the log map file. 14503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (xml == (const char *) NULL) 14523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 14533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 1454fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk token=AcquireString(xml); 1455fc0f1249300d84ccb63b81a9dd87245d6ed34806dirk extent=strlen(token)+MagickPathExtent; 14563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=(const char *) xml; *q != '\0'; ) 14573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Interpret XML. 14603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14618bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 14623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*token == '\0') 14633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1464151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(keyword,token,MagickPathExtent); 14653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleNCompare(keyword,"<!DOCTYPE",9) == 0) 14663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Doctype element. 14693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((LocaleNCompare(q,"]>",2) != 0) && (*q != '\0')) 14718bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 14723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 14733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleNCompare(keyword,"<!--",4) == 0) 14753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Comment element. 14783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((LocaleNCompare(q,"->",2) != 0) && (*q != '\0')) 14808bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 14813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 14823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(keyword,"<include") == 0) 14843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include element. 14873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (((*token != '/') && (*(token+1) != '>')) && (*q != '\0')) 14893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1490151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(keyword,token,MagickPathExtent); 14918bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 14923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*token != '=') 14933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 14948bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 14953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(keyword,"file") == 0) 14963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (depth > 200) 14983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ThrowMagickException(exception,GetMagickModule(), 1499efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token); 15003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 15013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1503151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy path[MagickPathExtent], 1504b81f0abf7970b3c3e43ba0c95266a1c252806425dirk *file_xml; 15053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetPathComponent(filename,HeadPath,path); 15073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*path != '\0') 15083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(path,DirectorySeparator, 1509151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 15103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*token == *DirectorySeparator) 1511151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(path,token,MagickPathExtent); 15123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 1513151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(path,token,MagickPathExtent); 1514b81f0abf7970b3c3e43ba0c95266a1c252806425dirk file_xml=FileToXML(path,~0UL); 1515b81f0abf7970b3c3e43ba0c95266a1c252806425dirk if (file_xml != (char *) NULL) 15163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1517b18d864b3f06e9272582b7736230d934d715d542dirk status&=LoadLogCache(cache,file_xml,path,depth+1, 1518cd2cd1803dda951bcfff101c44032ae17e52655fcristy exception); 1519b81f0abf7970b3c3e43ba0c95266a1c252806425dirk file_xml=DestroyString(file_xml); 15203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 15253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(keyword,"<logmap>") == 0) 15273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 15293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate memory for the log list. 15303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 153173bd4a51b419e914565bdf204bf1540dc4c8ee26cristy log_info=(LogInfo *) AcquireMagickMemory(sizeof(*log_info)); 15323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info == (LogInfo *) NULL) 15333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 15343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(log_info,0,sizeof(*log_info)); 15353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->path=ConstantString(filename); 15363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetTimerInfo((TimerInfo *) &log_info->timer); 1537e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy log_info->signature=MagickCoreSignature; 15383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 15393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info == (LogInfo *) NULL) 15413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 15423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(keyword,"</logmap>") == 0) 15433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1544b18d864b3f06e9272582b7736230d934d715d542dirk status=AppendValueToLinkedList(cache,log_info); 15453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 15463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ThrowMagickException(exception,GetMagickModule(), 1547efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy ResourceLimitError,"MemoryAllocationFailed","`%s'",filename); 15483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=(LogInfo *) NULL; 1549d3e70a10bb3ed0cf41112b369f97b7fd2b422c58cristy continue; 15503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15518bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,(const char **) NULL,extent,token); 15523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*token != '=') 15533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 15548bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 15558bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(q,&q,extent,token); 15563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (*keyword) 15573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'E': 15593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'e': 15603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"events") == 0) 15623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->event_mask=(LogEventType) (log_info->event_mask | 1564042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy ParseCommandOption(MagickLogEventOptions,MagickTrue,token)); 15653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'F': 15703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'f': 15713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"filename") == 0) 15733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->filename != (char *) NULL) 15753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->filename=(char *) 15763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(log_info->filename); 15773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->filename=ConstantString(token); 15783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"format") == 0) 15813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->format != (char *) NULL) 15833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->format=(char *) 15843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(log_info->format); 15853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->format=ConstantString(token); 15863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'G': 15913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'g': 15923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"generations") == 0) 15943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(token,"unlimited") == 0) 15963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->generations=(~0UL); 15983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 15993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1600e27293e706ca05b6b121e9512a83b16f7ad887f2cristy log_info->generations=StringToUnsignedLong(token); 16013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'L': 16063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'l': 16073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"limit") == 0) 16093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(token,"unlimited") == 0) 16113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->limit=(~0UL); 16133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1615e27293e706ca05b6b121e9512a83b16f7ad887f2cristy log_info->limit=StringToUnsignedLong(token); 16163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'O': 16213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'o': 16223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) keyword,"output") == 0) 16243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->handler_mask=(LogHandlerType) 16263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (log_info->handler_mask | ParseLogHandlers(token)); 16273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 16323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy token=DestroyString(token); 1636b18d864b3f06e9272582b7736230d934d715d542dirk if (cache == (LinkedListInfo *) NULL) 16373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 16383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status != 0 ? MagickTrue : MagickFalse); 16393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ P a r s e L o g H a n d l e r s % 16473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ParseLogHandlers() parses a string defining which handlers takes a log 16533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% message and exports them. 16543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ParseLogHandlers method is: 16563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LogHandlerType ParseLogHandlers(const char *handlers) 16583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o handlers: one or more handlers separated by commas. 16623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 16643ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic LogHandlerType ParseLogHandlers(const char *handlers) 16653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 16663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogHandlerType 16673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy handler_mask; 16683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 16703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 16713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1672bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 16733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 16743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 16763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 16773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy handler_mask=NoHandler; 16793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=handlers; p != (char *) NULL; p=strchr(p,',')) 16803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((*p != '\0') && ((isspace((int) ((unsigned char) *p)) != 0) || 16823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*p == ','))) 16833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 16843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; LogHandlers[i].name != (char *) NULL; i++) 16853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(LogHandlers[i].name); 16873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleNCompare(p,LogHandlers[i].name,length) == 0) 16883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy handler_mask=(LogHandlerType) (handler_mask | LogHandlers[i].handler); 16903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 16913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LogHandlers[i].name == (char *) NULL) 16943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(UndefinedHandler); 16953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(handler_mask); 16973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t L o g E v e n t M a s k % 17053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetLogEventMask() accepts a list that determines which events to log. All 17113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% other events are ignored. By default, no debug is enabled. This method 17123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returns the previous log event mask. 17133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetLogEventMask method is: 17153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% LogEventType SetLogEventMask(const char *events) 17173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o events: log these events. 17213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17233ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport LogEventType SetLogEventMask(const char *events) 17243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 17263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 17273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogInfo 17293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *log_info; 17303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1731bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 17323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy option; 17333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 17353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=(LogInfo *) GetLogInfo("*",exception); 17363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); 1737042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy option=ParseCommandOption(MagickLogEventOptions,MagickTrue,events); 1738f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(log_semaphore); 173986e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_info=(LogInfo *) GetValueFromLinkedList(log_cache,0); 17403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->event_mask=(LogEventType) option; 17413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (option == -1) 17423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->event_mask=UndefinedEvents; 1743f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(log_semaphore); 17443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(log_info->event_mask); 17453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t L o g F o r m a t % 17533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetLogFormat() sets the format for the "human readable" log record. 17593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the LogMagickFormat method is: 17613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetLogFormat(const char *format) 17633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o format: the log record format. 17673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 17693ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void SetLogFormat(const char *format) 17703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LogInfo 17723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *log_info; 17733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 17753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 17763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 17783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info=(LogInfo *) GetLogInfo("*",exception); 17793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); 1780f84a193d5f435588cd78d521fff3f1f852e227f8cristy LockSemaphoreInfo(log_semaphore); 17813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (log_info->format != (char *) NULL) 17823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->format=DestroyString(log_info->format); 17833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy log_info->format=ConstantString(format); 1784f84a193d5f435588cd78d521fff3f1f852e227f8cristy UnlockSemaphoreInfo(log_semaphore); 17853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1786834a57918ebe6c5e12fb5f97465a9107f805aae5dirk 1787834a57918ebe6c5e12fb5f97465a9107f805aae5dirk/* 1788834a57918ebe6c5e12fb5f97465a9107f805aae5dirk%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1789834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% % 1790834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% % 1791834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% % 1792834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% S e t L o g M e t h o d % 1793834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% % 1794834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% % 1795834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% % 1796834a57918ebe6c5e12fb5f97465a9107f805aae5dirk%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1797834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% 1798834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% SetLogMethod() sets the method that will be called when an event is logged. 1799834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% 1800834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% The format of the SetLogMethod method is: 1801834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% 1802834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% void SetLogMethod(MagickLogMethod method) 1803834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% 1804834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% A description of each parameter follows: 1805834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% 1806834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% o method: pointer to a method that will be called when LogMagickEvent is 1807834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% being called. 1808834a57918ebe6c5e12fb5f97465a9107f805aae5dirk% 1809834a57918ebe6c5e12fb5f97465a9107f805aae5dirk*/ 1810834a57918ebe6c5e12fb5f97465a9107f805aae5dirkMagickExport void SetLogMethod(MagickLogMethod method) 1811834a57918ebe6c5e12fb5f97465a9107f805aae5dirk{ 1812834a57918ebe6c5e12fb5f97465a9107f805aae5dirk ExceptionInfo 1813834a57918ebe6c5e12fb5f97465a9107f805aae5dirk *exception; 1814834a57918ebe6c5e12fb5f97465a9107f805aae5dirk 1815834a57918ebe6c5e12fb5f97465a9107f805aae5dirk LogInfo 1816834a57918ebe6c5e12fb5f97465a9107f805aae5dirk *log_info; 1817834a57918ebe6c5e12fb5f97465a9107f805aae5dirk 1818834a57918ebe6c5e12fb5f97465a9107f805aae5dirk exception=AcquireExceptionInfo(); 1819834a57918ebe6c5e12fb5f97465a9107f805aae5dirk log_info=(LogInfo *) GetLogInfo("*",exception); 1820834a57918ebe6c5e12fb5f97465a9107f805aae5dirk exception=DestroyExceptionInfo(exception); 1821834a57918ebe6c5e12fb5f97465a9107f805aae5dirk LockSemaphoreInfo(log_semaphore); 182286e5ac9bd8a1d10f4fc55dae95585db303b6a1e7cristy log_info=(LogInfo *) GetValueFromLinkedList(log_cache,0); 1823834a57918ebe6c5e12fb5f97465a9107f805aae5dirk log_info->handler_mask=(LogHandlerType) (log_info->handler_mask | 1824834a57918ebe6c5e12fb5f97465a9107f805aae5dirk MethodHandler); 1825834a57918ebe6c5e12fb5f97465a9107f805aae5dirk log_info->method=method; 1826834a57918ebe6c5e12fb5f97465a9107f805aae5dirk UnlockSemaphoreInfo(log_semaphore); 1827834a57918ebe6c5e12fb5f97465a9107f805aae5dirk} 18283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% S e t L o g N a m e % 18353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% SetLogName() sets the log name and returns it. 18413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the SetLogName method is: 18433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *SetLogName(const char *name) 18453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o log_name: SetLogName() returns the current client name. 18493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: Specifies the new client name. 18513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18533ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport const char *SetLogName(const char *name) 18543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((name != (char *) NULL) && (*name != '\0')) 1856151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(log_name,name,MagickPathExtent); 18573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(log_name); 18583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1859