Back to index

lightning-sunbird  0.9+nobinonly
xpclog.cpp
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
00002  *
00003  * ***** BEGIN LICENSE BLOCK *****
00004  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00005  *
00006  * The contents of this file are subject to the Mozilla Public License Version
00007  * 1.1 (the "License"); you may not use this file except in compliance with
00008  * the License. You may obtain a copy of the License at
00009  * http://www.mozilla.org/MPL/
00010  *
00011  * Software distributed under the License is distributed on an "AS IS" basis,
00012  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00013  * for the specific language governing rights and limitations under the
00014  * License.
00015  *
00016  * The Original Code is Mozilla Communicator client code, released
00017  * March 31, 1998.
00018  *
00019  * The Initial Developer of the Original Code is
00020  * Netscape Communications Corporation.
00021  * Portions created by the Initial Developer are Copyright (C) 1998
00022  * the Initial Developer. All Rights Reserved.
00023  *
00024  * Contributor(s):
00025  *   John Bandhauer <jband@netscape.com> (original author)
00026  *
00027  * Alternatively, the contents of this file may be used under the terms of
00028  * either of the GNU General Public License Version 2 or later (the "GPL"),
00029  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00030  * in which case the provisions of the GPL or the LGPL are applicable instead
00031  * of those above. If you wish to allow use of your version of this file only
00032  * under the terms of either the GPL or the LGPL, and not to allow others to
00033  * use your version of this file under the terms of the MPL, indicate your
00034  * decision by deleting the provisions above and replace them with the notice
00035  * and other provisions required by the GPL or the LGPL. If you do not delete
00036  * the provisions above, a recipient may use your version of this file under
00037  * the terms of any one of the MPL, the GPL or the LGPL.
00038  *
00039  * ***** END LICENSE BLOCK ***** */
00040 
00041 /* Debug Logging support. */
00042 
00043 #include "xpcprivate.h"
00044 
00045 // this all only works for DEBUG...
00046 #ifdef DEBUG
00047 
00048 #define SPACE_COUNT     200
00049 #define LINE_LEN        200
00050 #define INDENT_FACTOR   2
00051 
00052 #define CAN_RUN (g_InitState == 1 || (g_InitState == 0 && Init()))
00053 
00054 static char*    g_Spaces;
00055 static int      g_InitState = 0;
00056 static int      g_Indent = 0;
00057 static PRLogModuleInfo* g_LogMod = nsnull;
00058 
00059 static PRBool Init()
00060 {
00061     g_LogMod = PR_NewLogModule("xpclog");
00062     g_Spaces = new char[SPACE_COUNT+1];
00063     if(!g_LogMod || !g_Spaces || !PR_LOG_TEST(g_LogMod,1))
00064     {
00065         g_InitState = 1;
00066         XPC_Log_Finish();
00067         return PR_FALSE;
00068     }
00069     memset(g_Spaces, ' ', SPACE_COUNT);
00070     g_Spaces[SPACE_COUNT] = 0;
00071     g_InitState = 1;
00072     return PR_TRUE;
00073 }
00074 
00075 void
00076 XPC_Log_Finish()
00077 {
00078     if(g_InitState == 1)
00079     {
00080         delete g_Spaces;
00081         // we'd like to properly cleanup the LogModule, but nspr owns that
00082         g_LogMod = nsnull;
00083     }
00084     g_InitState = -1;
00085 }
00086 
00087 void
00088 XPC_Log_print(const char *fmt, ...)
00089 {
00090     va_list ap;
00091     char line[LINE_LEN];
00092 
00093     va_start(ap, fmt);
00094     PR_vsnprintf(line, sizeof(line)-1, fmt, ap);
00095     va_end(ap);
00096     if(g_Indent)
00097         PR_LogPrint("%s%s",g_Spaces+SPACE_COUNT-(INDENT_FACTOR*g_Indent),line);
00098     else
00099         PR_LogPrint("%s",line);
00100 }
00101 
00102 PRBool
00103 XPC_Log_Check(int i)
00104 {
00105     return CAN_RUN && PR_LOG_TEST(g_LogMod,1);
00106 }
00107 
00108 void
00109 XPC_Log_Indent()
00110 {
00111     if(INDENT_FACTOR*(++g_Indent) > SPACE_COUNT)
00112         g_Indent-- ;
00113 }
00114 
00115 void
00116 XPC_Log_Outdent()
00117 {
00118     if(--g_Indent < 0)
00119         g_Indent++;
00120 }
00121 
00122 void
00123 XPC_Log_Clear_Indent()
00124 {
00125     g_Indent = 0;
00126 }
00127 
00128 #endif